From 6590b3e780d9c16c41ad71ada975eb52b4794f3e Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Fri, 11 Mar 2022 00:31:59 +0530 Subject: [PATCH 01/10] added FractionInputInteractionViewTest.kt --- .../InputInteractionViewTestActivityTest.kt | 359 ------------ .../FractionInputInteractionViewTest.kt | 544 ++++++++++++++++++ 2 files changed, 544 insertions(+), 359 deletions(-) create mode 100644 app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt index e78de8a5c30..58362c2b7d7 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt @@ -127,156 +127,6 @@ class InputInteractionViewTestActivityTest { ApplicationProvider.getApplicationContext().inject(this) } - @Test - fun testFractionInput_withNoInput_hasCorrectPendingAnswerType() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(0) - assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(0) - assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(0) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withNegativeNumber_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform(editTextInputAction.appendText("-9")) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( - InteractionObject.ObjectTypeCase.FRACTION - ) - assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) - assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withWholeNumber_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform(editTextInputAction.appendText("9")) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( - InteractionObject.ObjectTypeCase.FRACTION - ) - assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) - assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withFraction_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "9/10" - ) - ) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( - InteractionObject.ObjectTypeCase.FRACTION - ) - assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) - assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) - assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withNegativeFraction_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "-9/10" - ) - ) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( - InteractionObject.ObjectTypeCase.FRACTION - ) - assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) - assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) - assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withMixedNumber_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "5 9/10" - ) - ) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( - InteractionObject.ObjectTypeCase.FRACTION - ) - assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) - assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(5) - assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) - assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withNegativeMixedNumber_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "-55 59/9" - ) - ) - activityScenario.onActivity { activity -> - val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( - InteractionObject.ObjectTypeCase.FRACTION - ) - assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) - assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(55) - assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(59) - assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(9) - } - } - @Test @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported. fun testFractionInput_withFraction_configChange_hasCorrectPendingAnswer() { @@ -296,215 +146,6 @@ class InputInteractionViewTestActivityTest { .check(matches(withText("9/5"))) } - @Test - @DisableAccessibilityChecks - fun testFractionInput_withNegativeSignOtherThanAt0_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "55-" - ) - ) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_invalid_format - ) - ) - ) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withNegativeSignAt0MoreThan1_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "--55" - ) - ) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_invalid_format - ) - ) - ) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withDividerMoreThanOnce_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "5/5/" - ) - ) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_invalid_format - ) - ) - ) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withDividerAtStart_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "/5" - ) - ) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_invalid_format - ) - ) - ) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withPartialMixedNumber_numberFormatErrorIsNotDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "5 5/" - ) - ) - onView(withId(R.id.fraction_input_error)).check(matches(withText(""))) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withPartialMixedNumberSubmit_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "5 5/" - ) - ) - closeSoftKeyboard() - onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click()) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_invalid_format - ) - ) - ) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withMixedNumber_submit_noErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "3 1/2" - ) - ) - closeSoftKeyboard() - onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click()) - onView(withId(R.id.fraction_input_error)).check(matches(withText(""))) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withDivideByZero_errorIsNotDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "1/0" - ) - ) - onView(withId(R.id.fraction_input_error)).check(matches(withText(""))) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withDivideByZero_submit_divideByZeroErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "1/0" - ) - ) - closeSoftKeyboard() - onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click()) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_divide_by_zero - ) - ) - ) - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withInvalidCharacter_invalidCharacterErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use { - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "." - ) - ) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_invalid_chars - ) - ) - ) - } - } - - @Test - @DisableAccessibilityChecks - fun testFractionInput_withLong_submit_numberTooLongErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use { - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "12345678" - ) - ) - closeSoftKeyboard() - onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click()) - onView(withId(R.id.fraction_input_error)) - .check( - matches( - withText( - R.string.fraction_error_larger_than_seven_digits - ) - ) - ) - } - } - @Test fun testNumericInput_withNoInput_hasCorrectPendingAnswerType() { val activityScenario = ActivityScenario.launch( diff --git a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt new file mode 100644 index 00000000000..0cceb11408e --- /dev/null +++ b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt @@ -0,0 +1,544 @@ +package org.oppia.android.app.customview.interaction + +import android.app.Application +import android.content.Context +import androidx.appcompat.app.AppCompatActivity +import androidx.test.core.app.ActivityScenario +import androidx.test.core.app.ApplicationProvider +import androidx.test.espresso.Espresso +import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.assertion.ViewAssertions +import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth +import dagger.Component +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.R +import org.oppia.android.app.activity.ActivityComponent +import org.oppia.android.app.activity.ActivityComponentFactory +import org.oppia.android.app.application.ApplicationComponent +import org.oppia.android.app.application.ApplicationInjector +import org.oppia.android.app.application.ApplicationInjectorProvider +import org.oppia.android.app.application.ApplicationModule +import org.oppia.android.app.application.ApplicationStartupListenerModule +import org.oppia.android.app.devoptions.DeveloperOptionsModule +import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule +import org.oppia.android.app.model.InteractionObject +import org.oppia.android.app.player.state.StateFragmentTest +import org.oppia.android.app.shim.ViewBindingShimModule +import org.oppia.android.app.testing.InputInteractionViewTestActivity +import org.oppia.android.app.topic.PracticeTabModule +import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule +import org.oppia.android.data.backends.gae.NetworkConfigProdModule +import org.oppia.android.data.backends.gae.NetworkModule +import org.oppia.android.domain.classify.InteractionsModule +import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule +import org.oppia.android.domain.classify.rules.dragAndDropSortInput.DragDropSortInputModule +import org.oppia.android.domain.classify.rules.fractioninput.FractionInputModule +import org.oppia.android.domain.classify.rules.imageClickInput.ImageClickInputModule +import org.oppia.android.domain.classify.rules.itemselectioninput.ItemSelectionInputModule +import org.oppia.android.domain.classify.rules.multiplechoiceinput.MultipleChoiceInputModule +import org.oppia.android.domain.classify.rules.numberwithunits.NumberWithUnitsRuleModule +import org.oppia.android.domain.classify.rules.numericinput.NumericInputRuleModule +import org.oppia.android.domain.classify.rules.ratioinput.RatioInputModule +import org.oppia.android.domain.classify.rules.textinput.TextInputRuleModule +import org.oppia.android.domain.exploration.lightweightcheckpointing.ExplorationStorageModule +import org.oppia.android.domain.hintsandsolution.HintsAndSolutionConfigFastShowTestModule +import org.oppia.android.domain.hintsandsolution.HintsAndSolutionProdModule +import org.oppia.android.domain.onboarding.ExpirationMetaDataRetrieverModule +import org.oppia.android.domain.oppialogger.LogStorageModule +import org.oppia.android.domain.oppialogger.loguploader.LogUploadWorkerModule +import org.oppia.android.domain.platformparameter.PlatformParameterModule +import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule +import org.oppia.android.domain.question.QuestionModule +import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule +import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.DisableAccessibilityChecks +import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestLogReportingModule +import org.oppia.android.testing.espresso.EditTextInputAction +import org.oppia.android.testing.junit.InitializeDefaultLocaleRule +import org.oppia.android.testing.profile.ProfileTestHelper +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestCoroutineDispatchers +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.accessibility.AccessibilityTestModule +import org.oppia.android.util.caching.AssetModule +import org.oppia.android.util.gcsresource.GcsResourceModule +import org.oppia.android.util.locale.LocaleProdModule +import org.oppia.android.util.logging.LoggerModule +import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule +import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule +import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule +import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule +import org.oppia.android.util.parser.image.GlideImageLoaderModule +import org.oppia.android.util.parser.image.ImageParsingModule +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [FractionInputInteractionView]. */ +@RunWith(AndroidJUnit4::class) +@Config( + application = FractionInputInteractionViewTest.TestApplication::class, + qualifiers = "port-xxhdpi" +) +@LooperMode(LooperMode.Mode.PAUSED) + +class FractionInputInteractionViewTest { + + @get:Rule + val initializeDefaultLocaleRule = InitializeDefaultLocaleRule() + + @get:Rule + val oppiaTestRule = OppiaTestRule() + + @Inject + lateinit var testCoroutineDispatchers: TestCoroutineDispatchers + + @Inject + lateinit var profileTestHelper: ProfileTestHelper + + @Inject + lateinit var context: Context + + @Inject + lateinit var editTextInputAction: EditTextInputAction + + @Before + fun setUp() { + setUpTestApplicationComponent() + testCoroutineDispatchers.registerIdlingResource() + } + + @After + fun tearDown() { + testCoroutineDispatchers.unregisterIdlingResource() + } + + private fun setUpTestApplicationComponent() { + ApplicationProvider.getApplicationContext().inject(this) + } + + @Test + fun testFractionInput_withNoInput_hasCorrectPendingAnswerType() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(0) + Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(0) + Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(0) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withNegativeNumber_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform(editTextInputAction.appendText("-9")) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + InteractionObject.ObjectTypeCase.FRACTION + ) + Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) + Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withWholeNumber_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform(editTextInputAction.appendText("9")) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + InteractionObject.ObjectTypeCase.FRACTION + ) + Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) + Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withFraction_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "9/10" + ) + ) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + InteractionObject.ObjectTypeCase.FRACTION + ) + Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) + Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) + Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withNegativeFraction_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "-9/10" + ) + ) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + InteractionObject.ObjectTypeCase.FRACTION + ) + Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) + Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) + Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withMixedNumber_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "5 9/10" + ) + ) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + InteractionObject.ObjectTypeCase.FRACTION + ) + Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) + Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(5) + Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) + Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withNegativeMixedNumber_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + InputInteractionViewTestActivity::class.java + ) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "-55 59/9" + ) + ) + activityScenario.onActivity { activity -> + val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() + Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + InteractionObject.ObjectTypeCase.FRACTION + ) + Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) + Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(55) + Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(59) + Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(9) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withNegativeSignOtherThanAt0_numberFormatErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "55-" + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_invalid_format + ) + ) + ) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withNegativeSignAt0MoreThan1_numberFormatErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "--55" + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_invalid_format + ) + ) + ) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withDividerMoreThanOnce_numberFormatErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "5/5/" + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_invalid_format + ) + ) + ) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withDividerAtStart_numberFormatErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "/5" + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_invalid_format + ) + ) + ) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withPartialMixedNumber_numberFormatErrorIsNotDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "5 5/" + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check(ViewAssertions.matches(ViewMatchers.withText(""))) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withPartialMixedNumberSubmit_numberFormatErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "5 5/" + ) + ) + Espresso.closeSoftKeyboard() + Espresso.onView(ViewMatchers.withId(R.id.submit_button)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_invalid_format + ) + ) + ) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withMixedNumber_submit_noErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "3 1/2" + ) + ) + Espresso.closeSoftKeyboard() + Espresso.onView(ViewMatchers.withId(R.id.submit_button)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check(ViewAssertions.matches(ViewMatchers.withText(""))) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withDivideByZero_errorIsNotDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "1/0" + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check(ViewAssertions.matches(ViewMatchers.withText(""))) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withDivideByZero_submit_divideByZeroErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java) + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "1/0" + ) + ) + Espresso.closeSoftKeyboard() + Espresso.onView(ViewMatchers.withId(R.id.submit_button)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_divide_by_zero + ) + ) + ) + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withInvalidCharacter_invalidCharacterErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use { + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "." + ) + ) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_invalid_chars + ) + ) + ) + } + } + + @Test + @DisableAccessibilityChecks + fun testFractionInput_withLong_submit_numberTooLongErrorIsDisplayed() { + ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use { + Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "12345678" + ) + ) + Espresso.closeSoftKeyboard() + Espresso.onView(ViewMatchers.withId(R.id.submit_button)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + .check( + ViewAssertions.matches( + ViewMatchers.withText( + R.string.fraction_error_larger_than_seven_digits + ) + ) + ) + } + } + + @Singleton + @Component( + modules = [ + StateFragmentTest.TestModule::class, RobolectricModule::class, PlatformParameterModule::class, + TestDispatcherModule::class, ApplicationModule::class, LoggerModule::class, + ContinueModule::class, FractionInputModule::class, ItemSelectionInputModule::class, + MultipleChoiceInputModule::class, NumberWithUnitsRuleModule::class, + NumericInputRuleModule::class, TextInputRuleModule::class, DragDropSortInputModule::class, + ImageClickInputModule::class, InteractionsModule::class, GcsResourceModule::class, + GlideImageLoaderModule::class, ImageParsingModule::class, HtmlParserEntityTypeModule::class, + QuestionModule::class, TestLogReportingModule::class, AccessibilityTestModule::class, + LogStorageModule::class, PrimeTopicAssetsControllerModule::class, + ExpirationMetaDataRetrieverModule::class, ViewBindingShimModule::class, + RatioInputModule::class, ApplicationStartupListenerModule::class, + HintsAndSolutionConfigFastShowTestModule::class, HintsAndSolutionProdModule::class, + WorkManagerConfigurationModule::class, LogUploadWorkerModule::class, + FirebaseLogUploaderModule::class, FakeOppiaClockModule::class, PracticeTabModule::class, + DeveloperOptionsStarterModule::class, DeveloperOptionsModule::class, + ExplorationStorageModule::class, NetworkConnectionUtilDebugModule::class, + NetworkConnectionDebugUtilModule::class, NetworkModule::class, NetworkConfigProdModule::class, + AssetModule::class, LocaleProdModule::class, ActivityRecreatorTestModule::class, + PlatformParameterSingletonModule::class + ] + ) + + interface TestApplicationComponent : ApplicationComponent { + @Component.Builder + interface Builder : ApplicationComponent.Builder + + fun inject(fractionInputInteractionViewTest: FractionInputInteractionViewTest) + } + + class TestApplication : Application(), ActivityComponentFactory, ApplicationInjectorProvider { + private val component: TestApplicationComponent by lazy { + DaggerFractionInputInteractionViewTest_TestApplicationComponent.builder() + .setApplication(this) + .build() as TestApplicationComponent + } + + fun inject(fractionInputInteractionViewTest: FractionInputInteractionViewTest) { + component.inject(fractionInputInteractionViewTest) + } + + override fun createActivityComponent(activity: AppCompatActivity): ActivityComponent { + return component.getActivityComponentBuilderProvider().get().setActivity(activity).build() + } + + override fun getApplicationInjector(): ApplicationInjector = component + } +} From bc34b379a8e776d865f0700bba37cf435d15a1ec Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Fri, 11 Mar 2022 08:11:51 +0530 Subject: [PATCH 02/10] nit changes --- .../android/app/testing/InputInteractionViewTestActivityTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt index a4a81798b8e..3bbd1e008d5 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt @@ -127,7 +127,6 @@ class InputInteractionViewTestActivityTest { ApplicationProvider.getApplicationContext().inject(this) } - @Test @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported. fun testFractionInput_withFraction_configChange_hasCorrectPendingAnswer() { From 2666f9df18db91e756c2b1ddcb7fbf2e13e948b6 Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sat, 19 Mar 2022 22:41:35 +0530 Subject: [PATCH 03/10] added FrationInputInteractionViewTestActivity --- app/src/main/AndroidManifest.xml | 3 + .../app/activity/ActivityComponentImpl.kt | 3 + ...ractionInputInteractionViewTestActivity.kt | 46 +++ ...ractionInputInteractionTestActivityTest.kt | 4 + .../InputInteractionViewTestActivityTest.kt | 19 -- .../FractionInputInteractionViewTest.kt | 262 ++++++++++-------- 6 files changed, 199 insertions(+), 138 deletions(-) create mode 100644 app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt create mode 100644 app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7f2f0f6ef14..876d958bd6b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -271,6 +271,9 @@ + ().inject(this) } - @Test - @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported. - fun testFractionInput_withFraction_configChange_hasCorrectPendingAnswer() { - val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java - ) - onView(withId(R.id.test_fraction_input_interaction_view)) - .perform( - editTextInputAction.appendText( - "9/5" - ) - ) - activityScenario.onActivity { activity -> - activity.requestedOrientation = Configuration.ORIENTATION_LANDSCAPE - } - onView(withId(R.id.test_fraction_input_interaction_view)).check(matches(isDisplayed())) - .check(matches(withText("9/5"))) - } - @Test fun testNumericInput_withNoInput_hasCorrectPendingAnswerType() { val activityScenario = ActivityScenario.launch( diff --git a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt index 0cceb11408e..26f3a18b285 100644 --- a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt +++ b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt @@ -2,22 +2,25 @@ package org.oppia.android.app.customview.interaction import android.app.Application import android.content.Context +import android.content.res.Configuration import androidx.appcompat.app.AppCompatActivity import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider -import androidx.test.espresso.Espresso -import androidx.test.espresso.action.ViewActions -import androidx.test.espresso.assertion.ViewAssertions -import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.Espresso.closeSoftKeyboard +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.google.common.truth.Truth +import com.google.common.truth.Truth.assertThat import dagger.Component import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import org.oppia.android.R import org.oppia.android.app.activity.ActivityComponent import org.oppia.android.app.activity.ActivityComponentFactory import org.oppia.android.app.application.ApplicationComponent @@ -30,7 +33,6 @@ import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule import org.oppia.android.app.model.InteractionObject import org.oppia.android.app.player.state.StateFragmentTest import org.oppia.android.app.shim.ViewBindingShimModule -import org.oppia.android.app.testing.InputInteractionViewTestActivity import org.oppia.android.app.topic.PracticeTabModule import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule @@ -57,7 +59,6 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule -import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction @@ -80,6 +81,10 @@ import org.oppia.android.util.parser.image.GlideImageLoaderModule import org.oppia.android.util.parser.image.ImageParsingModule import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode +import org.junit.Ignore +import org.oppia.android.R +import org.oppia.android.app.testing.FractionInputInteractionViewTestActivity +import org.oppia.android.testing.DisableAccessibilityChecks import javax.inject.Inject import javax.inject.Singleton @@ -129,14 +134,14 @@ class FractionInputInteractionViewTest { @Test fun testFractionInput_withNoInput_hasCorrectPendingAnswerType() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(0) - Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(0) - Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(0) + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(0) + assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(0) + assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(0) } } @@ -144,18 +149,18 @@ class FractionInputInteractionViewTest { @DisableAccessibilityChecks fun testFractionInput_withNegativeNumber_hasCorrectPendingAnswer() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform(editTextInputAction.appendText("-9")) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( InteractionObject.ObjectTypeCase.FRACTION ) - Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) - Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) + assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) + assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) } } @@ -163,18 +168,18 @@ class FractionInputInteractionViewTest { @DisableAccessibilityChecks fun testFractionInput_withWholeNumber_hasCorrectPendingAnswer() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform(editTextInputAction.appendText("9")) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( InteractionObject.ObjectTypeCase.FRACTION ) - Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) - Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) + assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) + assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9) } } @@ -182,9 +187,9 @@ class FractionInputInteractionViewTest { @DisableAccessibilityChecks fun testFractionInput_withFraction_hasCorrectPendingAnswer() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "9/10" @@ -192,13 +197,13 @@ class FractionInputInteractionViewTest { ) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( InteractionObject.ObjectTypeCase.FRACTION ) - Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) - Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) - Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) + assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) + assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) + assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) } } @@ -206,9 +211,9 @@ class FractionInputInteractionViewTest { @DisableAccessibilityChecks fun testFractionInput_withNegativeFraction_hasCorrectPendingAnswer() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "-9/10" @@ -216,13 +221,13 @@ class FractionInputInteractionViewTest { ) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( InteractionObject.ObjectTypeCase.FRACTION ) - Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) - Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) - Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) + assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) + assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) + assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) } } @@ -230,9 +235,9 @@ class FractionInputInteractionViewTest { @DisableAccessibilityChecks fun testFractionInput_withMixedNumber_hasCorrectPendingAnswer() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "5 9/10" @@ -240,14 +245,14 @@ class FractionInputInteractionViewTest { ) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( InteractionObject.ObjectTypeCase.FRACTION ) - Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) - Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(5) - Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) - Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) + assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false) + assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(5) + assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9) + assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10) } } @@ -255,9 +260,9 @@ class FractionInputInteractionViewTest { @DisableAccessibilityChecks fun testFractionInput_withNegativeMixedNumber_hasCorrectPendingAnswer() { val activityScenario = ActivityScenario.launch( - InputInteractionViewTestActivity::class.java + FractionInputInteractionViewTestActivity::class.java ) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "-55 59/9" @@ -265,31 +270,31 @@ class FractionInputInteractionViewTest { ) activityScenario.onActivity { activity -> val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer() - Truth.assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) - Truth.assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( + assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java) + assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo( InteractionObject.ObjectTypeCase.FRACTION ) - Truth.assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) - Truth.assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(55) - Truth.assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(59) - Truth.assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(9) + assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true) + assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(55) + assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(59) + assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(9) } } @Test @DisableAccessibilityChecks fun testFractionInput_withNegativeSignOtherThanAt0_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "55-" ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_invalid_format ) ) @@ -299,17 +304,17 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withNegativeSignAt0MoreThan1_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "--55" ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_invalid_format ) ) @@ -319,17 +324,17 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withDividerMoreThanOnce_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "5/5/" ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_invalid_format ) ) @@ -339,17 +344,17 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withDividerAtStart_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "/5" ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_invalid_format ) ) @@ -359,34 +364,34 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withPartialMixedNumber_numberFormatErrorIsNotDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "5 5/" ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) - .check(ViewAssertions.matches(ViewMatchers.withText(""))) + onView(withId(R.id.fraction_input_error)) + .check(matches(withText(""))) } @Test @DisableAccessibilityChecks fun testFractionInput_withPartialMixedNumberSubmit_numberFormatErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "5 5/" ) ) - Espresso.closeSoftKeyboard() - Espresso.onView(ViewMatchers.withId(R.id.submit_button)) - .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + closeSoftKeyboard() + onView(withId(R.id.submit_button)) + .check(matches(isDisplayed())).perform(click()) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_invalid_format ) ) @@ -396,51 +401,51 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withMixedNumber_submit_noErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "3 1/2" ) ) - Espresso.closeSoftKeyboard() - Espresso.onView(ViewMatchers.withId(R.id.submit_button)) - .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) - .check(ViewAssertions.matches(ViewMatchers.withText(""))) + closeSoftKeyboard() + onView(withId(R.id.submit_button)) + .check(matches(isDisplayed())).perform(click()) + onView(withId(R.id.fraction_input_error)) + .check(matches(withText(""))) } @Test @DisableAccessibilityChecks fun testFractionInput_withDivideByZero_errorIsNotDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "1/0" ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) - .check(ViewAssertions.matches(ViewMatchers.withText(""))) + onView(withId(R.id.fraction_input_error)) + .check(matches(withText(""))) } @Test @DisableAccessibilityChecks fun testFractionInput_withDivideByZero_submit_divideByZeroErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java) - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java) + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "1/0" ) ) - Espresso.closeSoftKeyboard() - Espresso.onView(ViewMatchers.withId(R.id.submit_button)) - .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + closeSoftKeyboard() + onView(withId(R.id.submit_button)) + .check(matches(isDisplayed())).perform(click()) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_divide_by_zero ) ) @@ -450,17 +455,17 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withInvalidCharacter_invalidCharacterErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use { - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java).use { + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "." ) ) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_invalid_chars ) ) @@ -471,25 +476,44 @@ class FractionInputInteractionViewTest { @Test @DisableAccessibilityChecks fun testFractionInput_withLong_submit_numberTooLongErrorIsDisplayed() { - ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use { - Espresso.onView(ViewMatchers.withId(R.id.test_fraction_input_interaction_view)) + ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java).use { + onView(withId(R.id.test_fraction_input_interaction_view)) .perform( editTextInputAction.appendText( "12345678" ) ) - Espresso.closeSoftKeyboard() - Espresso.onView(ViewMatchers.withId(R.id.submit_button)) - .check(ViewAssertions.matches(ViewMatchers.isDisplayed())).perform(ViewActions.click()) - Espresso.onView(ViewMatchers.withId(R.id.fraction_input_error)) + closeSoftKeyboard() + onView(withId(R.id.submit_button)) + .check(matches(isDisplayed())).perform(click()) + onView(withId(R.id.fraction_input_error)) .check( - ViewAssertions.matches( - ViewMatchers.withText( + matches( + withText( R.string.fraction_error_larger_than_seven_digits ) ) ) } + + @Test + @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported. + fun testFractionInput_withFraction_configChange_hasCorrectPendingAnswer() { + val activityScenario = ActivityScenario.launch( + FractionInputInteractionViewTestActivity::class.java + ) + onView(withId(R.id.test_fraction_input_interaction_view)) + .perform( + editTextInputAction.appendText( + "9/5" + ) + ) + activityScenario.onActivity { activity -> + activity.requestedOrientation = Configuration.ORIENTATION_LANDSCAPE + } + onView(withId(R.id.test_fraction_input_interaction_view)).check(matches(isDisplayed())) + .check(matches(withText("9/5"))) + } } @Singleton From 5c0330e0c7d833c5fe91273f22c99d23a1635182 Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sat, 19 Mar 2022 22:52:12 +0530 Subject: [PATCH 04/10] nit changes --- .../oppia/android/app/activity/ActivityComponentImpl.kt | 1 - .../testing/FractionInputInteractionViewTestActivity.kt | 6 +++--- .../testing/FractionInputInteractionTestActivityTest.kt | 3 ++- .../interaction/FractionInputInteractionViewTest.kt | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt b/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt index 3045b21e020..1d7c7809e86 100644 --- a/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt +++ b/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt @@ -6,7 +6,6 @@ import dagger.Subcomponent import org.oppia.android.app.administratorcontrols.AdministratorControlsActivity import org.oppia.android.app.administratorcontrols.appversion.AppVersionActivity import org.oppia.android.app.completedstorylist.CompletedStoryListActivity -import org.oppia.android.app.customview.interaction.FractionInputInteractionView import org.oppia.android.app.devoptions.DeveloperOptionsActivity import org.oppia.android.app.devoptions.forcenetworktype.ForceNetworkTypeActivity import org.oppia.android.app.devoptions.forcenetworktype.testing.ForceNetworkTypeTestActivity diff --git a/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt index 59fda8ec44e..eeae443f5f6 100644 --- a/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt +++ b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt @@ -1,7 +1,6 @@ package org.oppia.android.app.testing import android.view.View -import javax.inject.Inject import org.oppia.android.app.activity.InjectableAppCompatActivity import org.oppia.android.databinding.ActivityFractionInputInteractionViewTestBinding import org.oppia.android.app.model.Interaction @@ -12,6 +11,7 @@ import org.oppia.android.app.player.state.itemviewmodel.FractionInteractionViewM import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener import org.oppia.android.app.translation.AppLanguageResourceHandler import org.oppia.android.domain.translation.TranslationController +import javax.inject.Inject class FractionInputInteractionViewTestActivity : InjectableAppCompatActivity(), @@ -26,7 +26,7 @@ class FractionInputInteractionViewTestActivity : lateinit var translationController: TranslationController val fractionInteractionViewModel by lazy { - FractionInteractionViewModel( + FractionInteractionViewModel( interaction = Interaction.getDefaultInstance(), hasConversationView = false, isSplitView = false, @@ -43,4 +43,4 @@ class FractionInputInteractionViewTestActivity : override fun onEditorAction(actionCode: Int) { } -} \ No newline at end of file +} diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt index d8c27321bc4..5ab0964c40b 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt @@ -1,4 +1,5 @@ package org.oppia.android.app.testing class FractionInputInteractionTestActivityTest { -} \ No newline at end of file + +} diff --git a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt index 26f3a18b285..6510a86c3e1 100644 --- a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt +++ b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt @@ -18,9 +18,11 @@ import com.google.common.truth.Truth.assertThat import dagger.Component import org.junit.After import org.junit.Before +import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.oppia.android.R import org.oppia.android.app.activity.ActivityComponent import org.oppia.android.app.activity.ActivityComponentFactory import org.oppia.android.app.application.ApplicationComponent @@ -33,6 +35,7 @@ import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule import org.oppia.android.app.model.InteractionObject import org.oppia.android.app.player.state.StateFragmentTest import org.oppia.android.app.shim.ViewBindingShimModule +import org.oppia.android.app.testing.FractionInputInteractionViewTestActivity import org.oppia.android.app.topic.PracticeTabModule import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule @@ -59,6 +62,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction @@ -81,10 +85,6 @@ import org.oppia.android.util.parser.image.GlideImageLoaderModule import org.oppia.android.util.parser.image.ImageParsingModule import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.junit.Ignore -import org.oppia.android.R -import org.oppia.android.app.testing.FractionInputInteractionViewTestActivity -import org.oppia.android.testing.DisableAccessibilityChecks import javax.inject.Inject import javax.inject.Singleton From 8ca0bc3ac6fbe7b591d175e93fe3c7ef6135478c Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sat, 19 Mar 2022 22:58:18 +0530 Subject: [PATCH 05/10] nit changes --- .../app/testing/FractionInputInteractionTestActivityTest.kt | 5 ----- .../interaction/FractionInputInteractionViewTest.kt | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt deleted file mode 100644 index 5ab0964c40b..00000000000 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionTestActivityTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.oppia.android.app.testing - -class FractionInputInteractionTestActivityTest { - -} diff --git a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt index 6510a86c3e1..59a72d3b7f7 100644 --- a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt +++ b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt @@ -6,10 +6,10 @@ import android.content.res.Configuration import androidx.appcompat.app.AppCompatActivity import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.Espresso.closeSoftKeyboard import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.Espresso.closeSoftKeyboard +import androidx.test.espresso.Espresso.onView import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText From 4fa2e290cabb06dd140ac3b33b33d6a5a2ab5318 Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sat, 19 Mar 2022 23:05:55 +0530 Subject: [PATCH 06/10] nit changes --- .../app/testing/FractionInputInteractionViewTestActivity.kt | 2 +- .../interaction/FractionInputInteractionViewTest.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt index eeae443f5f6..342fc192218 100644 --- a/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt +++ b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt @@ -2,7 +2,6 @@ package org.oppia.android.app.testing import android.view.View import org.oppia.android.app.activity.InjectableAppCompatActivity -import org.oppia.android.databinding.ActivityFractionInputInteractionViewTestBinding import org.oppia.android.app.model.Interaction import org.oppia.android.app.model.WrittenTranslationContext import org.oppia.android.app.player.state.answerhandling.AnswerErrorCategory @@ -10,6 +9,7 @@ import org.oppia.android.app.player.state.answerhandling.InteractionAnswerErrorO import org.oppia.android.app.player.state.itemviewmodel.FractionInteractionViewModel import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener import org.oppia.android.app.translation.AppLanguageResourceHandler +import org.oppia.android.databinding.ActivityFractionInputInteractionViewTestBinding import org.oppia.android.domain.translation.TranslationController import javax.inject.Inject diff --git a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt index 59a72d3b7f7..7a6c32b427b 100644 --- a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt +++ b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt @@ -63,12 +63,12 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks -import org.oppia.android.testing.OppiaTestRule -import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule +import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.profile.ProfileTestHelper import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.threading.TestCoroutineDispatchers import org.oppia.android.testing.threading.TestDispatcherModule import org.oppia.android.testing.time.FakeOppiaClockModule @@ -76,8 +76,8 @@ import org.oppia.android.util.accessibility.AccessibilityTestModule import org.oppia.android.util.caching.AssetModule import org.oppia.android.util.gcsresource.GcsResourceModule import org.oppia.android.util.locale.LocaleProdModule -import org.oppia.android.util.logging.LoggerModule import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule +import org.oppia.android.util.logging.LoggerModule import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule From 6091caace1d44e2d5176ff4470d3274c63897cc2 Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sun, 20 Mar 2022 08:02:23 +0530 Subject: [PATCH 07/10] optimised file --- .../app/testing/FractionInputInteractionViewTestActivity.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt index 342fc192218..2afae554cee 100644 --- a/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt +++ b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt @@ -9,7 +9,6 @@ import org.oppia.android.app.player.state.answerhandling.InteractionAnswerErrorO import org.oppia.android.app.player.state.itemviewmodel.FractionInteractionViewModel import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener import org.oppia.android.app.translation.AppLanguageResourceHandler -import org.oppia.android.databinding.ActivityFractionInputInteractionViewTestBinding import org.oppia.android.domain.translation.TranslationController import javax.inject.Inject @@ -17,7 +16,6 @@ class FractionInputInteractionViewTestActivity : InjectableAppCompatActivity(), StateKeyboardButtonListener, InteractionAnswerErrorOrAvailabilityCheckReceiver { - private lateinit var binding: ActivityFractionInputInteractionViewTestBinding @Inject lateinit var resourceHandler: AppLanguageResourceHandler From 8a44cc1c6d313e4a5b6cfdfe26a337ea8e3016b9 Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sun, 20 Mar 2022 19:49:18 +0530 Subject: [PATCH 08/10] klint issues --- .../interaction/FractionInputInteractionViewTest.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt index 7a6c32b427b..1660794fc0b 100644 --- a/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt +++ b/app/src/test/java/org/oppia/android/app/customview/interaction/FractionInputInteractionViewTest.kt @@ -6,10 +6,10 @@ import android.content.res.Configuration import androidx.appcompat.app.AppCompatActivity import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider -import androidx.test.espresso.action.ViewActions.click -import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.Espresso.closeSoftKeyboard import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText @@ -63,12 +63,12 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks +import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule -import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.profile.ProfileTestHelper import org.oppia.android.testing.robolectric.RobolectricModule -import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.threading.TestCoroutineDispatchers import org.oppia.android.testing.threading.TestDispatcherModule import org.oppia.android.testing.time.FakeOppiaClockModule @@ -76,8 +76,8 @@ import org.oppia.android.util.accessibility.AccessibilityTestModule import org.oppia.android.util.caching.AssetModule import org.oppia.android.util.gcsresource.GcsResourceModule import org.oppia.android.util.locale.LocaleProdModule -import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule import org.oppia.android.util.logging.LoggerModule +import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule From 7222d31f411cdf360ab7d1d16588f6b470dad0ba Mon Sep 17 00:00:00 2001 From: bhaktideshmukh Date: Sat, 26 Mar 2022 22:04:40 +0530 Subject: [PATCH 09/10] added new xml file --- app/src/main/AndroidManifest.xml | 4 +- ...ractionInputInteractionViewTestActivity.kt | 19 ++++- ...y_fraction_input_interaction_view_test.xml | 71 +++++++++++++++++++ .../FractionInputInteractionViewTest.kt | 6 +- 4 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/activity_fraction_input_interaction_view_test.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 876d958bd6b..f7145482fcf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -184,6 +184,7 @@ + @@ -271,9 +272,6 @@ - ( + this,R.layout.activity_fraction_input_interaction_view_test + ) + fractionInteractionViewModel = FractionInteractionViewModel( interaction = Interaction.getDefaultInstance(), hasConversationView = false, isSplitView = false, @@ -33,6 +47,7 @@ class FractionInputInteractionViewTestActivity : resourceHandler = resourceHandler, translationController = translationController ) + binding.fractionInteractionViewModel = fractionInteractionViewModel } fun getPendingAnswerErrorOnSubmitClick(v: View) { diff --git a/app/src/main/res/layout/activity_fraction_input_interaction_view_test.xml b/app/src/main/res/layout/activity_fraction_input_interaction_view_test.xml new file mode 100644 index 00000000000..62357ffd4db --- /dev/null +++ b/app/src/main/res/layout/activity_fraction_input_interaction_view_test.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + +