Skip to content

Commit f6fb019

Browse files
author
Daniel Jette
committed
Support locale wrapping
1 parent 9f7e890 commit f6fb019

2 files changed

Lines changed: 21 additions & 6 deletions

File tree

Ext/src/main/java/com/shopify/testify/ext/TestHarnessActivity.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
package com.shopify.testify.ext
2727

28+
import android.content.Context
2829
import android.graphics.Color
2930
import android.os.Bundle
3031
import android.view.View
@@ -34,6 +35,8 @@ import androidx.annotation.VisibleForTesting
3435
import androidx.appcompat.app.AppCompatActivity
3536
import androidx.test.rule.ActivityTestRule
3637
import com.shopify.testify.ScreenshotRule
38+
import com.shopify.testify.resources.TestifyResourcesOverride
39+
import java.util.Locale
3740

3841
/**
3942
* The TestHarnessActivity is used as scaffolding for testing arbitrary views.
@@ -42,7 +45,7 @@ import com.shopify.testify.ScreenshotRule
4245
* This empty activity can be used as a generic container for testing your custom [View] classes.
4346
*/
4447
@VisibleForTesting
45-
open class TestHarnessActivity : AppCompatActivity() {
48+
open class TestHarnessActivity : AppCompatActivity(), TestifyResourcesOverride {
4649

4750
override fun onCreate(savedInstanceState: Bundle?) {
4851
super.onCreate(savedInstanceState)
@@ -53,11 +56,23 @@ open class TestHarnessActivity : AppCompatActivity() {
5356
id = R.id.harness_root
5457
})
5558

56-
if (intent?.hasExtra(EXTRA_TESTIFY_HARNESS_ACTIVITY_TITLE) == true) {
57-
title = intent.getStringExtra(EXTRA_TESTIFY_HARNESS_ACTIVITY_TITLE)
59+
intent.getStringExtra(EXTRA_TESTIFY_HARNESS_ACTIVITY_TITLE)?.let {
60+
title = it
5861
}
5962
}
6063

64+
/**
65+
*
66+
* Starting in Android API Version 24 (Nougat), the proper way to dynamically alter an Activity's
67+
* resources and locale is to wrap the base [Context] in [AppCompatActivity.attachBaseContext]
68+
* with a Context that has been updated with a new [Locale]. Testify provides a helper interface,
69+
* [TestifyResourcesOverride] which provides a Context extension method, [TestifyResourcesOverride.wrap].
70+
*
71+
*/
72+
override fun attachBaseContext(newBase: Context?) {
73+
super.attachBaseContext(newBase?.wrap())
74+
}
75+
6176
companion object {
6277
const val EXTRA_TESTIFY_HARNESS_ACTIVITY_TITLE = "extra_title"
6378
}

Sample/src/androidTest/java/com/shopify/testify/sample/TestingResourcesCounterExampleTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424

2525
package com.shopify.testify.sample
2626

27+
import android.app.Activity
2728
import android.os.Build
2829
import androidx.test.filters.SdkSuppress
2930
import com.nhaarman.mockitokotlin2.doReturn
3031
import com.nhaarman.mockitokotlin2.mock
3132
import com.nhaarman.mockitokotlin2.whenever
3233
import com.shopify.testify.ScreenshotRule
33-
import com.shopify.testify.ext.TestHarnessActivity
3434
import com.shopify.testify.internal.exception.ActivityMustImplementResourceOverrideException
3535
import com.shopify.testify.internal.exception.TestMustLaunchActivityException
3636
import com.shopify.testify.internal.exception.TestMustWrapContextException
@@ -77,8 +77,8 @@ class TestingResourcesCounterExampleTest {
7777
@Test(expected = ActivityMustImplementResourceOverrideException::class)
7878
fun usingSetLocaleRequiresActivityToImplementResourceOverride() {
7979

80-
val activity = mock<TestHarnessActivity>().apply {
81-
doReturn("TestHarnessActivity").whenever(this).localClassName
80+
val activity = mock<Activity>().apply {
81+
doReturn("Activity").whenever(this).localClassName
8282
}
8383

8484
ResourceWrapper.addOverride(WrappedLocale(Locale.FRANCE))

0 commit comments

Comments
 (0)