From 24d2b99f1fd401064ca77b7679e93002774c1eec Mon Sep 17 00:00:00 2001 From: Grzegorz Orczykowski Date: Fri, 12 Apr 2024 11:48:03 +0200 Subject: [PATCH 1/3] Do not allow to mix 'thousands-sep' with 'masked' --- .../java/org/odk/collect/android/utilities/Appearances.kt | 2 +- .../org/odk/collect/android/utilities/AppearancesTest.kt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/utilities/Appearances.kt b/collect_app/src/main/java/org/odk/collect/android/utilities/Appearances.kt index dcdcb38fa51..5ae33fb4666 100644 --- a/collect_app/src/main/java/org/odk/collect/android/utilities/Appearances.kt +++ b/collect_app/src/main/java/org/odk/collect/android/utilities/Appearances.kt @@ -170,7 +170,7 @@ object Appearances { @JvmStatic fun useThousandSeparator(prompt: FormEntryPrompt): Boolean { - return getSanitizedAppearanceHint(prompt).contains(THOUSANDS_SEP) + return getSanitizedAppearanceHint(prompt).contains(THOUSANDS_SEP) && !isMasked(prompt) } @JvmStatic diff --git a/collect_app/src/test/java/org/odk/collect/android/utilities/AppearancesTest.kt b/collect_app/src/test/java/org/odk/collect/android/utilities/AppearancesTest.kt index b00f298c16c..e389e0090fb 100644 --- a/collect_app/src/test/java/org/odk/collect/android/utilities/AppearancesTest.kt +++ b/collect_app/src/test/java/org/odk/collect/android/utilities/AppearancesTest.kt @@ -232,6 +232,12 @@ class AppearancesTest { assertFalse(Appearances.useThousandSeparator(formEntryPrompt)) } + @Test + fun `useThousandSeparator returns false when 'thousands-sep' appearance is found but mixed with 'masked'`() { + whenever(formEntryPrompt.appearanceHint).thenReturn("thousands-sep masked") + assertFalse(Appearances.useThousandSeparator(formEntryPrompt)) + } + @Test fun `useThousandSeparator returns true when 'thousands-sep' appearance is found`() { whenever(formEntryPrompt.appearanceHint).thenReturn("THOUSANDS-SEP") From 3879a10eb618d463d08d4bb3a5422cc1be3143a8 Mon Sep 17 00:00:00 2001 From: Grzegorz Orczykowski Date: Fri, 12 Apr 2024 14:25:23 +0200 Subject: [PATCH 2/3] Fixed hiding characters in masked questions --- .../collect/android/views/WidgetAnswerText.kt | 24 +++---------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/views/WidgetAnswerText.kt b/collect_app/src/main/java/org/odk/collect/android/views/WidgetAnswerText.kt index 14aa1a3bb10..0412b9452ca 100644 --- a/collect_app/src/main/java/org/odk/collect/android/views/WidgetAnswerText.kt +++ b/collect_app/src/main/java/org/odk/collect/android/views/WidgetAnswerText.kt @@ -33,8 +33,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con val binding = WidgetAnswerTextBinding.inflate(LayoutInflater.from(context), this, true) - private var isMasked: Boolean = false - fun init(fontSize: Float, readOnly: Boolean, numberOfRows: Int?, isMasked: Boolean, afterTextChanged: Runnable) { binding.editText.id = generateViewId() binding.textView.id = generateViewId() @@ -61,9 +59,11 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con } }) if (isMasked) { - this.isMasked = isMasked + binding.editText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD binding.editText.transformationMethod = PasswordTransformationMethod.getInstance() binding.textView.transformationMethod = PasswordTransformationMethod.getInstance() + } else { + binding.editText.inputType = InputType.TYPE_CLASS_TEXT } } @@ -83,7 +83,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con binding.editText.addTextChangedListener(ThousandsSeparatorTextWatcher(binding.editText)) } - binding.editText.inputType = InputType.TYPE_NUMBER_FLAG_SIGNED binding.editText.keyListener = DigitsKeyListener(true, false) // only allows numbers and no periods // ints can only hold 2,147,483,648. we allow 999,999,999 @@ -98,11 +97,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con if (answer != null) { setAnswer(String.format(Locale.US, "%d", answer)) } - - if (isMasked) { - binding.editText.transformationMethod = PasswordTransformationMethod.getInstance() - binding.textView.transformationMethod = PasswordTransformationMethod.getInstance() - } } fun setStringNumberType(useThousandSeparator: Boolean, answer: String?) { @@ -110,7 +104,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con binding.editText.addTextChangedListener(ThousandsSeparatorTextWatcher(binding.editText)) } - binding.editText.inputType = InputType.TYPE_NUMBER_FLAG_SIGNED binding.editText.keyListener = object : DigitsKeyListener() { override fun getAcceptedChars(): CharArray { return charArrayOf( @@ -122,11 +115,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con if (answer != null) { setAnswer(answer) } - - if (isMasked) { - binding.editText.transformationMethod = PasswordTransformationMethod.getInstance() - binding.textView.transformationMethod = PasswordTransformationMethod.getInstance() - } } fun setDecimalType(useThousandSeparator: Boolean, answer: Double?) { @@ -134,7 +122,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con binding.editText.addTextChangedListener(ThousandsSeparatorTextWatcher(binding.editText)) } - binding.editText.inputType = InputType.TYPE_NUMBER_FLAG_DECIMAL binding.editText.keyListener = DigitsKeyListener(true, true) // only numbers are allowed // only 15 characters allowed @@ -154,11 +141,6 @@ class WidgetAnswerText(context: Context, attrs: AttributeSet?) : FrameLayout(con val formattedValue: String = nf.format(answer) setAnswer(formattedValue) } - - if (isMasked) { - binding.editText.transformationMethod = PasswordTransformationMethod.getInstance() - binding.textView.transformationMethod = PasswordTransformationMethod.getInstance() - } } fun getAnswer(): String { From bfad220516d5a164d6e6e2e481e050e08f2c5d67 Mon Sep 17 00:00:00 2001 From: Grzegorz Orczykowski Date: Thu, 18 Apr 2024 12:41:47 +0200 Subject: [PATCH 3/3] Added tests --- .../android/widgets/DecimalWidgetTest.java | 22 +++++++++++++++ .../android/widgets/ExDecimalWidgetTest.java | 24 ++++++++++++++++ .../android/widgets/ExIntegerWidgetTest.java | 26 +++++++++++++++++ .../android/widgets/ExStringWidgetTest.java | 27 ++++++++++++++++++ .../android/widgets/IntegerWidgetTest.java | 24 ++++++++++++++++ .../widgets/StringNumberWidgetTest.java | 24 ++++++++++++++++ .../android/widgets/StringWidgetTest.java | 28 +++++++++++++++++++ .../base/GeneralExStringWidgetTest.java | 6 ++++ .../widgets/base/GeneralStringWidgetTest.java | 6 ++++ 9 files changed, 187 insertions(+) diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/DecimalWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/DecimalWidgetTest.java index c74437ff005..cd1293f7596 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/DecimalWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/DecimalWidgetTest.java @@ -20,8 +20,13 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; import static org.odk.collect.android.utilities.Appearances.THOUSANDS_SEP; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; + public class DecimalWidgetTest extends GeneralStringWidgetTest { private final Random random = new Random(); @@ -205,4 +210,21 @@ public void separatorsShouldBeAddedWhenEnabled() { assertEquals("123,456,789.54", getWidget().widgetAnswerText.getBinding().editText.getText().toString()); assertEquals("123,456,789.54", getWidget().widgetAnswerText.getBinding().textView.getText().toString()); } + + @Override + @Test + public void verifyInputType() { + DecimalWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + DecimalWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/ExDecimalWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/ExDecimalWidgetTest.java index cb150a8e92a..f43b8350def 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/ExDecimalWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/ExDecimalWidgetTest.java @@ -20,8 +20,13 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; import static org.odk.collect.android.utilities.Appearances.THOUSANDS_SEP; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; + /** * @author James Knight */ @@ -88,4 +93,23 @@ public void separatorsShouldBeAddedWhenEnabled() { assertEquals("123,456,789.54", getWidget().binding.widgetAnswerText.getBinding().editText.getText().toString()); assertEquals("123,456,789.54", getWidget().binding.widgetAnswerText.getBinding().textView.getText().toString()); } + + @Override + @Test + public void verifyInputType() { + ExDecimalWidget widget = getWidget(); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL)); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + assertThat(widget.binding.widgetAnswerText.getBinding().textView.getTransformationMethod(), equalTo(null)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + ExDecimalWidget widget = getWidget(); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL)); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + assertThat(widget.binding.widgetAnswerText.getBinding().textView.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/ExIntegerWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/ExIntegerWidgetTest.java index 9d012508ca2..78ee7883628 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/ExIntegerWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/ExIntegerWidgetTest.java @@ -11,9 +11,16 @@ import org.odk.collect.android.widgets.utilities.StringRequester; import static junit.framework.TestCase.assertEquals; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; import static org.odk.collect.android.utilities.Appearances.THOUSANDS_SEP; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; + /** * @author James Knight */ @@ -60,4 +67,23 @@ public void separatorsShouldBeAddedWhenEnabled() { assertEquals("123,456,789", getWidget().binding.widgetAnswerText.getBinding().editText.getText().toString()); assertEquals("123,456,789", getWidget().binding.widgetAnswerText.getBinding().textView.getText().toString()); } + + @Override + @Test + public void verifyInputType() { + ExIntegerWidget widget = getWidget(); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED)); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + assertThat(widget.binding.widgetAnswerText.getBinding().textView.getTransformationMethod(), equalTo(null)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + ExIntegerWidget widget = getWidget(); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED)); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + assertThat(widget.binding.widgetAnswerText.getBinding().textView.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/ExStringWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/ExStringWidgetTest.java index e022cd9c3c2..0b5059990e6 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/ExStringWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/ExStringWidgetTest.java @@ -5,13 +5,21 @@ import net.bytebuddy.utility.RandomString; import org.javarosa.core.model.data.StringData; +import org.junit.Test; import org.mockito.Mock; import org.odk.collect.android.formentry.questions.QuestionDetails; import org.odk.collect.android.widgets.base.GeneralExStringWidgetTest; import org.odk.collect.android.widgets.support.FakeWaitingForDataRegistry; import org.odk.collect.android.widgets.utilities.StringRequester; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; + +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; /** * @author James Knight @@ -39,4 +47,23 @@ public void setUp() throws Exception { super.setUp(); when(formEntryPrompt.getAppearanceHint()).thenReturn(""); } + + @Override + @Test + public void verifyInputType() { + ExStringWidget widget = getWidget(); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_TEXT)); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + assertThat(widget.binding.widgetAnswerText.getBinding().textView.getTransformationMethod(), equalTo(null)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + ExStringWidget widget = getWidget(); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)); + assertThat(widget.binding.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + assertThat(widget.binding.widgetAnswerText.getBinding().textView.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/IntegerWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/IntegerWidgetTest.java index 2cb61e7ecf5..1b019474016 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/IntegerWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/IntegerWidgetTest.java @@ -8,9 +8,16 @@ import org.odk.collect.android.widgets.base.GeneralStringWidgetTest; import static junit.framework.TestCase.assertEquals; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; import static org.odk.collect.android.utilities.Appearances.THOUSANDS_SEP; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; + /** * @author James Knight */ @@ -47,4 +54,21 @@ public void separatorsShouldBeAddedWhenEnabled() { assertEquals("123,456,789", getWidget().widgetAnswerText.getBinding().editText.getText().toString()); assertEquals("123,456,789", getWidget().widgetAnswerText.getBinding().textView.getText().toString()); } + + @Override + @Test + public void verifyInputType() { + IntegerWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + IntegerWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/StringNumberWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/StringNumberWidgetTest.java index 6228d255e05..31b189cafb1 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/StringNumberWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/StringNumberWidgetTest.java @@ -10,9 +10,16 @@ import org.odk.collect.android.widgets.base.GeneralStringWidgetTest; import static junit.framework.TestCase.assertEquals; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; import static org.odk.collect.android.utilities.Appearances.THOUSANDS_SEP; +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; + /** * @author James Knight */ @@ -45,4 +52,21 @@ public void separatorsShouldBeAddedWhenEnabled() { assertEquals("123,456,789,123,456,789,123,456,789,123,456,789", getWidget().widgetAnswerText.getBinding().editText.getText().toString()); assertEquals("123,456,789,123,456,789,123,456,789,123,456,789", getWidget().widgetAnswerText.getBinding().textView.getText().toString()); } + + @Override + @Test + public void verifyInputType() { + StringNumberWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + StringNumberWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_NUMBER)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/StringWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/StringWidgetTest.java index 82c3f988049..c7e4b7988e0 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/StringWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/StringWidgetTest.java @@ -1,10 +1,20 @@ package org.odk.collect.android.widgets; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.Mockito.when; +import static org.odk.collect.android.utilities.Appearances.MASKED; + +import android.text.InputType; +import android.text.method.PasswordTransformationMethod; +import android.text.method.SingleLineTransformationMethod; + import androidx.annotation.NonNull; import net.bytebuddy.utility.RandomString; import org.javarosa.core.model.data.StringData; +import org.junit.Test; import org.odk.collect.android.formentry.questions.QuestionDetails; import org.odk.collect.android.widgets.base.GeneralStringWidgetTest; @@ -24,4 +34,22 @@ public StringWidget createWidget() { public StringData getNextAnswer() { return new StringData(RandomString.make()); } + + @Override + @Test + public void verifyInputType() { + StringWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_TEXT)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(SingleLineTransformationMethod.class)); + assertThat(widget.widgetAnswerText.getBinding().textView.getTransformationMethod(), equalTo(null)); + } + + @Override + @Test + public void verifyInputTypeWithMaskedAppearance() { + when(formEntryPrompt.getAppearanceHint()).thenReturn(MASKED); + StringWidget widget = getWidget(); + assertThat(widget.widgetAnswerText.getBinding().editText.getInputType(), equalTo(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)); + assertThat(widget.widgetAnswerText.getBinding().editText.getTransformationMethod().getClass(), equalTo(PasswordTransformationMethod.class)); + } } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralExStringWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralExStringWidgetTest.java index 8010dd2949c..2e39352a067 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralExStringWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralExStringWidgetTest.java @@ -81,4 +81,10 @@ public void answersShouldBeMaskedIfMaskedAppearanceIsUsed() { assertThat(getSpyWidget().binding.widgetAnswerText.getBinding().editText.getTransformationMethod(), is(instanceOf(PasswordTransformationMethod.class))); assertThat(getSpyWidget().binding.widgetAnswerText.getBinding().textView.getTransformationMethod(), is(instanceOf(PasswordTransformationMethod.class))); } + + @Test + public abstract void verifyInputType(); + + @Test + public abstract void verifyInputTypeWithMaskedAppearance(); } diff --git a/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralStringWidgetTest.java b/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralStringWidgetTest.java index ead5c8ac67a..536125a3f66 100644 --- a/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralStringWidgetTest.java +++ b/collect_app/src/test/java/org/odk/collect/android/widgets/base/GeneralStringWidgetTest.java @@ -120,4 +120,10 @@ public void answersShouldBeMaskedIfMaskedAppearanceIsUsed() { assertThat(getSpyWidget().widgetAnswerText.getBinding().editText.getTransformationMethod(), is(instanceOf(PasswordTransformationMethod.class))); assertThat(getSpyWidget().widgetAnswerText.getBinding().textView.getTransformationMethod(), is(instanceOf(PasswordTransformationMethod.class))); } + + @Test + public abstract void verifyInputType(); + + @Test + public abstract void verifyInputTypeWithMaskedAppearance(); } \ No newline at end of file