Skip to content

Commit 1546dd6

Browse files
committed
tests updated.
1 parent 38d9b16 commit 1546dd6

File tree

7 files changed

+156
-33
lines changed

7 files changed

+156
-33
lines changed

.run/TestColorPicker.run.xml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="TestColorPicker" type="AndroidTestRunConfigurationType" factoryName="Android Instrumented Tests" singleton="true">
3+
<module name="ColorPicker.mobile.androidTest" />
4+
<option name="TESTING_TYPE" value="2" />
5+
<option name="METHOD_NAME" value="colorPickerTest" />
6+
<option name="CLASS_NAME" value="io.syslogic.demo.colorpicker.TestColorPicker" />
7+
<option name="PACKAGE_NAME" value="" />
8+
<option name="TEST_NAME_REGEX" value="" />
9+
<option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
10+
<option name="EXTRA_OPTIONS" value="" />
11+
<option name="RETENTION_ENABLED" value="No" />
12+
<option name="RETENTION_MAX_SNAPSHOTS" value="2" />
13+
<option name="RETENTION_COMPRESS_SNAPSHOTS" value="false" />
14+
<option name="CLEAR_LOGCAT" value="false" />
15+
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
16+
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
17+
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
18+
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="2147483645" />
19+
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="api-6565312227085587375-256155" />
20+
<option name="DEBUGGER_TYPE" value="Auto" />
21+
<Auto>
22+
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
23+
<option name="SHOW_STATIC_VARS" value="true" />
24+
<option name="WORKING_DIR" value="" />
25+
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
26+
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
27+
</Auto>
28+
<Hybrid>
29+
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
30+
<option name="SHOW_STATIC_VARS" value="true" />
31+
<option name="WORKING_DIR" value="" />
32+
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
33+
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
34+
</Hybrid>
35+
<Java />
36+
<Native>
37+
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
38+
<option name="SHOW_STATIC_VARS" value="true" />
39+
<option name="WORKING_DIR" value="" />
40+
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
41+
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
42+
</Native>
43+
<Profilers>
44+
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
45+
<option name="STARTUP_PROFILING_ENABLED" value="false" />
46+
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
47+
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
48+
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
49+
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
50+
</Profilers>
51+
<method v="2">
52+
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
53+
</method>
54+
</configuration>
55+
</component>

.run/TestComposeActivity.run.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="TestComposeActivity" type="AndroidTestRunConfigurationType" factoryName="Android Instrumented Tests" singleton="true">
3-
<module name="ColorPicker.mobile" />
3+
<module name="ColorPicker.mobile.androidTest" />
44
<option name="TESTING_TYPE" value="2" />
55
<option name="METHOD_NAME" value="colorPickerTest" />
66
<option name="CLASS_NAME" value="io.syslogic.demo.colorpicker.TestComposeActivity" />
77
<option name="PACKAGE_NAME" value="" />
8+
<option name="TEST_NAME_REGEX" value="" />
89
<option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
910
<option name="EXTRA_OPTIONS" value="" />
10-
<option name="INCLUDE_GRADLE_EXTRA_OPTIONS" value="true" />
1111
<option name="RETENTION_ENABLED" value="No" />
1212
<option name="RETENTION_MAX_SNAPSHOTS" value="2" />
1313
<option name="RETENTION_COMPRESS_SNAPSHOTS" value="false" />
@@ -16,7 +16,7 @@
1616
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
1717
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
1818
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="2147483645" />
19-
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="android-cuesplitter" />
19+
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="api-6565312227085587375-256155" />
2020
<option name="DEBUGGER_TYPE" value="Auto" />
2121
<Auto>
2222
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />

.run/TestSuite.run.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="TestSuite" type="AndroidTestRunConfigurationType" factoryName="Android Instrumented Tests" singleton="true" nameIsGenerated="true">
3-
<module name="ColorPicker.mobile" />
3+
<module name="ColorPicker.mobile.androidTest" />
44
<option name="TESTING_TYPE" value="2" />
55
<option name="METHOD_NAME" value="" />
66
<option name="CLASS_NAME" value="io.syslogic.demo.colorpicker.TestSuite" />
77
<option name="PACKAGE_NAME" value="" />
8+
<option name="TEST_NAME_REGEX" value="" />
89
<option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
910
<option name="EXTRA_OPTIONS" value="" />
10-
<option name="INCLUDE_GRADLE_EXTRA_OPTIONS" value="true" />
1111
<option name="RETENTION_ENABLED" value="No" />
1212
<option name="RETENTION_MAX_SNAPSHOTS" value="2" />
1313
<option name="RETENTION_COMPRESS_SNAPSHOTS" value="false" />
@@ -16,7 +16,7 @@
1616
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
1717
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
1818
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="2147483645" />
19-
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="android-cuesplitter" />
19+
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="api-6565312227085587375-256155" />
2020
<option name="DEBUGGER_TYPE" value="Auto" />
2121
<Auto>
2222
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />

mobile/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ android {
4545
minifyEnabled false
4646
}
4747
release {
48-
minifyEnabled false
48+
minifyEnabled true
4949
}
5050
}
5151

@@ -117,6 +117,7 @@ dependencies {
117117

118118
// Test rules and transitive dependencies:
119119
androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
120+
120121
// Needed for createComposeRule, but not createAndroidComposeRule:
121122
// debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")
122123
}

mobile/src/androidTest/java/io/syslogic/demo/colorpicker/TestColorPicker.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import org.junit.Test;
1010
import org.junit.runner.RunWith;
1111

12-
import java.util.List;
13-
1412
/**
1513
* Color-Picker Test Case
1614
*
@@ -21,7 +19,7 @@ public class TestColorPicker extends TestSuite {
2119

2220
@Before
2321
public void startActivityFromHomeScreen() {
24-
this.startMainActivity();
22+
this.startActivity();
2523
}
2624

2725
@Test
Lines changed: 86 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,161 @@
11
package io.syslogic.demo.colorpicker
22

3+
import androidx.compose.ui.geometry.Offset
4+
import androidx.compose.ui.test.ExperimentalTestApi
5+
import androidx.compose.ui.test.SemanticsNodeInteraction
36
import androidx.compose.ui.test.assertIsDisplayed
7+
import androidx.compose.ui.test.click
8+
import androidx.compose.ui.test.getBoundsInRoot
9+
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
410
import androidx.compose.ui.test.junit4.createAndroidComposeRule
511
import androidx.compose.ui.test.onNodeWithTag
612
import androidx.compose.ui.test.onRoot
13+
import androidx.compose.ui.test.performMouseInput
714
import androidx.compose.ui.test.printToLog
15+
import androidx.test.ext.junit.rules.ActivityScenarioRule
16+
import androidx.test.ext.junit.runners.AndroidJUnit4
817

918
import io.syslogic.demo.colorpicker.activity.ComposeActivity
1019

1120
import org.junit.Rule
1221
import org.junit.Test
22+
import org.junit.runner.RunWith
23+
import java.util.Random
1324

1425
/**
15-
* Color-Picker Test Case
26+
* Compose Activity Test Case
1627
*
1728
* @author Martin Zeitler
1829
*/
19-
class TestComposeActivity {
30+
@RunWith(AndroidJUnit4::class)
31+
class TestComposeActivity : TestSuite() {
2032

2133
@get:Rule
22-
val composeTestRule = createAndroidComposeRule(ComposeActivity::class.java)
34+
val composeTestRule: AndroidComposeTestRule<ActivityScenarioRule<ComposeActivity>, ComposeActivity> =
35+
createAndroidComposeRule(ComposeActivity::class.java)
36+
37+
lateinit var interaction: SemanticsNodeInteraction
2338

2439
@Test
2540
fun logTest() {
26-
composeTestRule.onRoot().printToLog("TAG")
41+
interaction = composeTestRule.onRoot()
42+
interaction.printToLog("TAG")
2743
}
2844

2945
@Test
46+
@OptIn(ExperimentalTestApi::class)
3047
fun huePanelTest() {
31-
composeTestRule.onNodeWithTag(testTag = "hue").assertIsDisplayed()
48+
49+
interaction = composeTestRule.onNodeWithTag(testTag = "hue")
50+
interaction.assertExists().assertIsDisplayed()
51+
52+
/* Randomly tapping the huePanel for 5 seconds. */
53+
for (i in 0..99) {
54+
randomlyClick(interaction)
55+
Thread.sleep(50)
56+
}
3257
}
3358

3459
@Test
35-
fun satPanelTest() {
36-
composeTestRule.onNodeWithTag(testTag = "sat_val").assertIsDisplayed()
60+
@OptIn(ExperimentalTestApi::class)
61+
fun satValPanelTest() {
62+
63+
interaction = composeTestRule.onNodeWithTag(testTag = "sat_val")
64+
interaction.assertExists().assertIsDisplayed()
65+
66+
/* Randomly tapping the satValPanel for 5 seconds. */
67+
for (i in 0..99) {
68+
randomlyClick(interaction)
69+
Thread.sleep(50)
70+
}
3771
}
3872

3973
@Test
74+
@OptIn(ExperimentalTestApi::class)
4075
fun alphaPanelTest() {
41-
composeTestRule.onNodeWithTag(testTag = "alpha").assertIsDisplayed()
76+
77+
interaction = composeTestRule.onNodeWithTag(testTag = "alpha")
78+
interaction.assertExists().assertIsDisplayed()
79+
80+
/* Randomly tapping the alphaPanel for 5 seconds. */
81+
for (i in 0..99) {
82+
randomlyClick(interaction)
83+
Thread.sleep(50)
84+
}
4285
}
4386

4487
@Test
4588
fun hexColorTest() {
46-
composeTestRule.onNodeWithTag(testTag = "hex").assertIsDisplayed()
89+
interaction = composeTestRule.onNodeWithTag(testTag = "hex")
90+
interaction.assertExists().assertIsDisplayed()
4791
}
4892

4993
@Test
5094
fun oldColorTest() {
51-
composeTestRule.onNodeWithTag(testTag = "old_color").assertIsDisplayed()
95+
interaction = composeTestRule.onNodeWithTag(testTag = "old_color")
96+
interaction.assertExists().assertIsDisplayed()
5297
}
5398

5499
@Test
55100
fun newColorTest() {
56-
composeTestRule.onNodeWithTag(testTag = "new_color").assertIsDisplayed()
101+
interaction = composeTestRule.onNodeWithTag(testTag = "new_color")
102+
interaction.assertExists().assertIsDisplayed()
57103
}
58104

59105
@Test
60106
fun valueHueTest() {
61-
composeTestRule.onNodeWithTag(testTag = "value_hue").assertIsDisplayed()
107+
interaction = composeTestRule.onNodeWithTag(testTag = "value_hue")
108+
interaction.assertExists().assertIsDisplayed()
62109
}
63110

64111
@Test
65112
fun valueSatTest() {
66-
composeTestRule.onNodeWithTag(testTag = "value_sat").assertIsDisplayed()
113+
interaction = composeTestRule.onNodeWithTag(testTag = "value_sat")
114+
interaction.assertExists().assertIsDisplayed()
67115
}
68116

69117
@Test
70118
fun valueValTest() {
71-
composeTestRule.onNodeWithTag(testTag = "value_val").assertIsDisplayed()
119+
interaction = composeTestRule.onNodeWithTag(testTag = "value_val")
120+
interaction.assertExists().assertIsDisplayed()
72121
}
73122

74123
@Test
75124
fun valueAlphaTest() {
76-
composeTestRule.onNodeWithTag(testTag = "value_alpha").assertIsDisplayed()
125+
interaction = composeTestRule.onNodeWithTag(testTag = "value_alpha")
126+
interaction.assertExists().assertIsDisplayed()
77127
}
78128

79129
@Test
80130
fun valueBlueTest() {
81-
composeTestRule.onNodeWithTag(testTag = "value_blue").assertIsDisplayed()
131+
interaction = composeTestRule.onNodeWithTag(testTag = "value_blue")
132+
interaction.assertExists().assertIsDisplayed()
82133
}
83134

84135
@Test
85136
fun valueRedTest() {
86-
composeTestRule.onNodeWithTag(testTag = "value_red").assertIsDisplayed()
137+
interaction = composeTestRule.onNodeWithTag(testTag = "value_red")
138+
interaction.assertExists().assertIsDisplayed()
87139
}
88140

89141
@Test
90142
fun valueGreenTest() {
91-
composeTestRule.onNodeWithTag(testTag = "value_green").assertIsDisplayed()
143+
interaction = composeTestRule.onNodeWithTag(testTag = "value_green")
144+
interaction.assertExists().assertIsDisplayed()
145+
}
146+
147+
@Override
148+
@ExperimentalTestApi
149+
fun randomlyClick(interaction: SemanticsNodeInteraction) {
150+
val rect = interaction.getBoundsInRoot()
151+
val rnd = Random()
152+
val coordinate = longArrayOf(
153+
((rect.left.value + rnd.nextInt((rect.right.value - rect.left.value + 1).toInt())).toLong()),
154+
((rect.top.value + rnd.nextInt((rect.bottom.value - rect.top.value + 1).toInt())).toLong())
155+
)
156+
val position = Offset(coordinate[0].toFloat(), coordinate[1].toFloat())
157+
interaction.performMouseInput {
158+
click(position)
159+
}
92160
}
93161
}

mobile/src/androidTest/java/io/syslogic/demo/colorpicker/TestSuite.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.syslogic.demo.colorpicker;
22

3-
import static org.hamcrest.core.IsNull.notNullValue;
4-
53
import android.content.ComponentName;
64
import android.content.Context;
75
import android.content.Intent;
@@ -29,7 +27,10 @@
2927
* @author Martin Zeitler
3028
*/
3129
@RunWith(org.junit.runners.Suite.class)
32-
@SuiteClasses({TestColorPicker.class})
30+
@SuiteClasses({
31+
TestColorPicker.class,
32+
TestComposeActivity.class
33+
})
3334
public class TestSuite {
3435

3536
private static final int LAUNCH_TIMEOUT = 5000;
@@ -62,7 +63,7 @@ private String getLauncherPackageName() {
6263
}
6364

6465
/** launches the blueprint application */
65-
void startMainActivity() {
66+
void startActivity() {
6667

6768
/* initialize UiDevice */
6869
this.mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
@@ -83,7 +84,7 @@ void startMainActivity() {
8384
this.packageName = context.getPackageName().replace(".test", "");
8485
Intent intent = context.getPackageManager().getLaunchIntentForPackage(this.packageName);
8586

86-
if(intent != null) {
87+
if (intent != null) {
8788

8889
intent.setComponent(new ComponentName(this.packageName, this.packageName + ".activity.MainActivity"));
8990
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

0 commit comments

Comments
 (0)