chromium/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithIconRenderTest.java

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.components.browser_ui.widget;

import android.app.Activity;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;

import androidx.test.filters.SmallTest;

import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.chromium.base.ThreadUtils;
import org.chromium.base.test.params.BaseJUnit4RunnerDelegate;
import org.chromium.base.test.params.ParameterAnnotations.ClassParameter;
import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
import org.chromium.base.test.params.ParameterSet;
import org.chromium.base.test.params.ParameterizedRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.Feature;
import org.chromium.components.browser_ui.widget.test.R;
import org.chromium.ui.test.util.BlankUiTestActivityTestCase;
import org.chromium.ui.test.util.NightModeTestUtils;
import org.chromium.ui.test.util.RenderTestRule;

import java.util.List;

/** Render test for {@link RadioButtonWithDescription} with the icon. */
@RunWith(ParameterizedRunner.class)
@UseRunnerDelegate(BaseJUnit4RunnerDelegate.class)
@Batch(Batch.UNIT_TESTS)
public class RadioButtonWithIconRenderTest extends BlankUiTestActivityTestCase {
    @ClassParameter
    private static List<ParameterSet> sClassParams =
            new NightModeTestUtils.NightModeParams().getParameters();

    private static final int REVISION = 3;
    private static final String REVISION_DESCRIPTION =
            "Test rendering of the icon in a disabled state.";

    @Rule
    public RenderTestRule mRenderTestRule =
            RenderTestRule.Builder.withPublicCorpus()
                    .setRevision(REVISION)
                    .setDescription(REVISION_DESCRIPTION)
                    .setBugComponent(RenderTestRule.Component.UI_BROWSER_MOBILE)
                    .build();

    private RadioButtonWithDescriptionLayout mLayout;

    private RadioButtonWithDescription mRadioButtonWithIcon1;
    private RadioButtonWithDescription mRadioButtonWithIcon2;
    private RadioButtonWithDescription mRadioButtonWithIcon3;
    private RadioButtonWithDescription mRadioButtonWithIcon4;

    private final int mFakeBgColor;

    public RadioButtonWithIconRenderTest(boolean nightModeEnabled) {
        mFakeBgColor = nightModeEnabled ? Color.BLACK : Color.WHITE;
        NightModeTestUtils.setUpNightModeForBlankUiTestActivity(nightModeEnabled);
        mRenderTestRule.setNightModeEnabled(nightModeEnabled);
    }

    @Override
    public void setUpTest() throws Exception {
        super.setUpTest();
        Activity activity = getActivity();
        ThreadUtils.runOnUiThreadBlocking(
                () -> {
                    View content =
                            LayoutInflater.from(activity)
                                    .inflate(
                                            R.layout.radio_button_with_icon_render_test,
                                            null,
                                            false);
                    activity.setContentView(content);

                    mLayout = content.findViewById(R.id.test_radio_button_layout);
                    mLayout.setBackgroundColor(mFakeBgColor);

                    mRadioButtonWithIcon1 = content.findViewById(R.id.icon_primary_only);
                    mRadioButtonWithIcon2 = content.findViewById(R.id.icon_primary_description);
                    mRadioButtonWithIcon3 = content.findViewById(R.id.icon_bg_override);
                    mRadioButtonWithIcon4 = content.findViewById(R.id.icon_disabled);
                });

        Assert.assertNotNull(mLayout);
        Assert.assertNotNull(mRadioButtonWithIcon1);
        Assert.assertNotNull(mRadioButtonWithIcon2);
        Assert.assertNotNull(mRadioButtonWithIcon3);
        Assert.assertNotNull(mRadioButtonWithIcon4);
    }

    @Test
    @SmallTest
    @Feature({"RenderTest", "RadioButton"})
    public void testRadioButtonWithIcon() throws Exception {
        mRenderTestRule.render(mRadioButtonWithIcon1, "icon_primary_only");
        mRenderTestRule.render(mRadioButtonWithIcon2, "icon_primary_description");
        mRenderTestRule.render(mRadioButtonWithIcon3, "icon_bg_override");
        mRenderTestRule.render(mRadioButtonWithIcon4, "icon_disabled");
    }
}