Skip to content

Commit deab03e

Browse files
authored
Merge branch 'main' into SimonMarquis-patch-1
2 parents 1e75be2 + 553f55f commit deab03e

File tree

4 files changed

+52
-49
lines changed

4 files changed

+52
-49
lines changed

.github/workflows/AndroidCIWithGmd.yaml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ jobs:
1010

1111
android-ci:
1212
runs-on: macos-12
13-
strategy:
14-
matrix:
15-
device-config: [ "pixel4api30aospatd", "pixelcapi30aospatd" ]
1613

1714
steps:
1815
- name: Checkout
@@ -36,15 +33,17 @@ jobs:
3633
- name: Setup Android SDK
3734
uses: android-actions/setup-android@v2
3835

36+
- name: Build AndroidTest apps
37+
run: ./gradlew packageDemoDebug packageDemoDebugAndroidTest
38+
3939
- name: Run instrumented tests with GMD
4040
run: ./gradlew cleanManagedDevices --unused-only &&
41-
./gradlew ${{ matrix.device-config }}DemoDebugAndroidTest -Dorg.gradle.workers.max=1
41+
./gradlew ciDemoDebugAndroidTest -Dorg.gradle.workers.max=1
4242
-Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true
4343

4444
- name: Upload test reports
4545
if: success() || failure()
4646
uses: actions/upload-artifact@v3
4747
with:
4848
name: test-reports
49-
path: |
50-
'**/*/build/reports/androidTests/'
49+
path: '**/build/reports/androidTests'

.github/workflows/Build.yaml

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,22 @@ jobs:
4848
- name: Upload build outputs (APKs)
4949
uses: actions/upload-artifact@v3
5050
with:
51-
name: build-outputs
52-
path: app/build/outputs
51+
name: APKs
52+
path: '**/build/outputs/apk/**/*.apk'
5353

54-
- name: Upload build reports
54+
- name: Upload lint reports (HTML)
5555
if: always()
5656
uses: actions/upload-artifact@v3
5757
with:
58-
name: build-reports
59-
path: app/build/reports
58+
name: lint-reports
59+
path: '**/build/reports/lint-results-*.html'
60+
61+
- name: Upload test results (XML)
62+
if: always()
63+
uses: actions/upload-artifact@v3
64+
with:
65+
name: test-results
66+
path: '**/build/test-results/test*UnitTest/**.xml'
6067

6168
androidTest:
6269
needs: build
@@ -82,6 +89,9 @@ jobs:
8289
- name: Setup Gradle
8390
uses: gradle/gradle-build-action@v2
8491

92+
- name: Build AndroidTest apps
93+
run: ./gradlew packageDemoDebug packageDemoDebugAndroidTest --daemon
94+
8595
- name: Run instrumentation tests
8696
uses: reactivecircus/android-emulator-runner@v2
8797
with:
@@ -90,11 +100,11 @@ jobs:
90100
disable-animations: true
91101
disk-size: 6000M
92102
heap-size: 600M
93-
script: ./gradlew connectedDemoDebugAndroidTest -x :benchmark:connectedDemoBenchmarkAndroidTest
103+
script: ./gradlew connectedDemoDebugAndroidTest -x :benchmark:connectedDemoBenchmarkAndroidTest --daemon
94104

95105
- name: Upload test reports
96106
if: always()
97107
uses: actions/upload-artifact@v3
98108
with:
99109
name: test-reports-${{ matrix.api-level }}
100-
path: '*/build/reports/androidTests'
110+
path: '**/build/reports/androidTests'

app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
package com.google.samples.apps.nowinandroid.ui
1818

19+
import androidx.annotation.StringRes
1920
import androidx.compose.ui.test.assertCountEquals
2021
import androidx.compose.ui.test.assertIsOn
2122
import androidx.compose.ui.test.assertIsSelected
2223
import androidx.compose.ui.test.hasAnyAncestor
2324
import androidx.compose.ui.test.hasTestTag
2425
import androidx.compose.ui.test.hasText
26+
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
2527
import androidx.compose.ui.test.junit4.createAndroidComposeRule
2628
import androidx.compose.ui.test.onAllNodesWithText
2729
import androidx.compose.ui.test.onNodeWithContentDescription
@@ -34,10 +36,10 @@ import com.google.samples.apps.nowinandroid.R
3436
import dagger.hilt.android.testing.BindValue
3537
import dagger.hilt.android.testing.HiltAndroidRule
3638
import dagger.hilt.android.testing.HiltAndroidTest
37-
import org.junit.Before
3839
import org.junit.Rule
3940
import org.junit.Test
4041
import org.junit.rules.TemporaryFolder
42+
import kotlin.properties.ReadOnlyProperty
4143
import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR
4244
import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR
4345
import com.google.samples.apps.nowinandroid.feature.interests.R as FeatureInterestsR
@@ -69,35 +71,19 @@ class NavigationTest {
6971
@get:Rule(order = 2)
7072
val composeTestRule = createAndroidComposeRule<MainActivity>()
7173

72-
// The strings used for matching in these tests
73-
private lateinit var done: String
74-
private lateinit var navigateUp: String
75-
private lateinit var forYouLoading: String
76-
private lateinit var forYou: String
77-
private lateinit var interests: String
78-
private lateinit var sampleTopic: String
79-
private lateinit var appName: String
80-
private lateinit var saved: String
81-
private lateinit var settings: String
82-
private lateinit var brand: String
83-
private lateinit var ok: String
74+
private fun AndroidComposeTestRule<*, *>.stringResource(@StringRes resId: Int) =
75+
ReadOnlyProperty<Any?, String> { _, _ -> activity.getString(resId) }
8476

85-
@Before
86-
fun setup() {
87-
composeTestRule.activity.apply {
88-
done = getString(FeatureForyouR.string.done)
89-
navigateUp = getString(FeatureForyouR.string.navigate_up)
90-
forYouLoading = getString(FeatureForyouR.string.for_you_loading)
91-
forYou = getString(FeatureForyouR.string.for_you)
92-
interests = getString(FeatureInterestsR.string.interests)
93-
sampleTopic = "Headlines"
94-
appName = getString(R.string.app_name)
95-
saved = getString(BookmarksR.string.saved)
96-
settings = getString(SettingsR.string.top_app_bar_action_icon_description)
97-
brand = getString(SettingsR.string.brand_android)
98-
ok = getString(SettingsR.string.dismiss_dialog_button_text)
99-
}
100-
}
77+
// The strings used for matching in these tests
78+
private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.navigate_up)
79+
private val forYou by composeTestRule.stringResource(FeatureForyouR.string.for_you)
80+
private val interests by composeTestRule.stringResource(FeatureInterestsR.string.interests)
81+
private val sampleTopic = "Headlines"
82+
private val appName by composeTestRule.stringResource(R.string.app_name)
83+
private val saved by composeTestRule.stringResource(BookmarksR.string.saved)
84+
private val settings by composeTestRule.stringResource(SettingsR.string.top_app_bar_action_icon_description)
85+
private val brand by composeTestRule.stringResource(SettingsR.string.brand_android)
86+
private val ok by composeTestRule.stringResource(SettingsR.string.dismiss_dialog_button_text)
10187

10288
@Test
10389
fun firstScreen_isForYou() {

build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ package com.google.samples.apps.nowinandroid
1818

1919
import com.android.build.api.dsl.CommonExtension
2020
import com.android.build.api.dsl.ManagedVirtualDevice
21-
import org.gradle.api.Project
21+
import org.gradle.kotlin.dsl.get
2222
import org.gradle.kotlin.dsl.invoke
2323

2424
/**
@@ -27,23 +27,31 @@ import org.gradle.kotlin.dsl.invoke
2727
internal fun configureGradleManagedDevices(
2828
commonExtension: CommonExtension<*, *, *, *>,
2929
) {
30-
val deviceConfigs = listOf(
31-
DeviceConfig("Pixel 4", 30, "aosp-atd"),
32-
DeviceConfig("Pixel 6", 31, "aosp"),
33-
DeviceConfig("Pixel C", 30, "aosp-atd"),
34-
)
30+
val pixel4 = DeviceConfig("Pixel 4", 30, "aosp-atd")
31+
val pixel6 = DeviceConfig("Pixel 6", 31, "aosp")
32+
val pixelC = DeviceConfig("Pixel C", 30, "aosp-atd")
33+
34+
val allDevices = listOf(pixel4, pixel6, pixelC)
35+
val ciDevices = listOf(pixel4, pixelC)
3536

3637
commonExtension.testOptions {
3738
managedDevices {
3839
devices {
39-
deviceConfigs.forEach { deviceConfig ->
40+
allDevices.forEach { deviceConfig ->
4041
maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply {
4142
device = deviceConfig.device
4243
apiLevel = deviceConfig.apiLevel
4344
systemImageSource = deviceConfig.systemImageSource
4445
}
4546
}
4647
}
48+
groups {
49+
maybeCreate("ci").apply {
50+
ciDevices.forEach { deviceConfig ->
51+
targetDevices.add(devices[deviceConfig.taskName])
52+
}
53+
}
54+
}
4755
}
4856
}
4957
}

0 commit comments

Comments
 (0)