package android.support.design.widget; import org.junit.Before; import org.junit.experimental.theories.Theory; import org.wikipedia.test.theories.TestedOnBool; import org.wikipedia.test.view.FontScale; import org.wikipedia.test.view.LayoutDirection; import org.wikipedia.test.view.ViewTest; import org.wikipedia.theme.Theme; import static android.support.design.widget.PasswordTextInput.OnShowPasswordClickListener; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.wikipedia.test.TestUtil.runOnMainSync; public class PasswordTextInputTest extends ViewTest { private PasswordTextInput subject; @Before public void setUp() { setUp(WIDTH_DP_S, LayoutDirection.LOCALE, FontScale.DEFAULT, Theme.LIGHT); subject = new PasswordTextInput(ctx()); subject.setPasswordVisibilityToggleEnabled(true); } @Theory public void testIsPasswordVisible(@TestedOnBool boolean visible) { if (visible) { toggleVisibility(); } assertThat(subject.isPasswordVisible(), is(visible)); } @Theory public void testSetOnShowPasswordListener(@TestedOnBool boolean nul, @TestedOnBool boolean visible) { OnShowPasswordClickListener listener = nul ? null : mock(OnShowPasswordClickListener.class); if (visible) { toggleVisibility(); } subject.setOnShowPasswordListener(listener); toggleVisibility(); if (listener != null) { verify(listener).onShowPasswordClick(eq(!visible)); } } private void toggleVisibility() { runOnMainSync(new Runnable() { @Override public void run() { subject.passwordVisibilityToggleRequested(); } }); } }