From 6c2a62dea6471e8ef0f795dbd673ccaa4e73b16b Mon Sep 17 00:00:00 2001 From: Anton Malinskiy Date: Thu, 28 Dec 2023 20:47:10 +1000 Subject: [PATCH 1/2] fix(ios): support flutter via patrol's only-testing option requires augmenting test parser and xcodebuild's result parser --- .../marathon/ios/AppleDeviceTestRunner.kt | 2 ++ .../marathon/ios/AppleSimulatorDevice.kt | 3 +-- .../malinskiy/marathon/ios/XCTestParser.kt | 5 +++- .../ios/logparser/XctestEventProducer.kt | 8 +++--- .../formatter/NoopPackageNameFormatter.kt | 5 ---- .../formatter/PackageNameFormatter.kt | 5 ---- .../formatter/TestLogPackageNameFormatter.kt | 14 ----------- .../logparser/parser/TestRunProgressParser.kt | 25 +++++++++++++------ .../marathon/ios/test/TestRequest.kt | 1 + 9 files changed, 30 insertions(+), 38 deletions(-) delete mode 100644 vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/NoopPackageNameFormatter.kt delete mode 100644 vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/PackageNameFormatter.kt delete mode 100644 vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/TestLogPackageNameFormatter.kt diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleDeviceTestRunner.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleDeviceTestRunner.kt index e2fe955f9..f7ee17561 100644 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleDeviceTestRunner.kt +++ b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleDeviceTestRunner.kt @@ -3,6 +3,7 @@ package com.malinskiy.marathon.ios import com.malinskiy.marathon.config.Configuration import com.malinskiy.marathon.config.vendor.VendorConfiguration import com.malinskiy.marathon.ios.executor.listener.AppleTestRunListener +import com.malinskiy.marathon.ios.extensions.testBundle import com.malinskiy.marathon.ios.test.TestEvent import com.malinskiy.marathon.ios.test.TestPassed import com.malinskiy.marathon.ios.test.TestFailed @@ -40,6 +41,7 @@ class AppleDeviceTestRunner(private val device: AppleSimulatorDevice, private va tests = rawTestBatch.tests, xcresult = remoteXcresultPath, coverage = configuration.isCodeCoverageEnabled, + testTargetName = vendorConfiguration.testBundle().testBundleId, ) var channel: ReceiveChannel>? = null try { diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleSimulatorDevice.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleSimulatorDevice.kt index 4b09fb293..254c95630 100644 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleSimulatorDevice.kt +++ b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/AppleSimulatorDevice.kt @@ -35,7 +35,6 @@ import com.malinskiy.marathon.ios.executor.listener.TestResultsListener import com.malinskiy.marathon.ios.executor.listener.TestRunListenerAdapter import com.malinskiy.marathon.ios.executor.listener.screenshot.ScreenCapturerTestRunListener import com.malinskiy.marathon.ios.logparser.XctestEventProducer -import com.malinskiy.marathon.ios.logparser.formatter.NoopPackageNameFormatter import com.malinskiy.marathon.ios.logparser.parser.DebugLogPrinter import com.malinskiy.marathon.ios.logparser.parser.DeviceFailureException import com.malinskiy.marathon.ios.logparser.parser.DiagnosticLogsPathFinder @@ -349,7 +348,7 @@ class AppleSimulatorDevice( withContext(Dispatchers.IO) { val deferredStdout = supervisorScope { async { - val testEventProducer = XctestEventProducer(NoopPackageNameFormatter, timer) + val testEventProducer = XctestEventProducer(request.testTargetName ?: "", timer) for (line in session.stdout) { testEventProducer.process(line)?.let { send(it) diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/XCTestParser.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/XCTestParser.kt index 2473569f4..3f5d8e629 100644 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/XCTestParser.kt +++ b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/XCTestParser.kt @@ -7,6 +7,7 @@ import com.malinskiy.marathon.device.Device import com.malinskiy.marathon.exceptions.TestParsingException import com.malinskiy.marathon.execution.RemoteTestParser import com.malinskiy.marathon.execution.withRetry +import com.malinskiy.marathon.ios.extensions.testBundle import com.malinskiy.marathon.ios.model.AppleTestBundle import com.malinskiy.marathon.ios.test.TestEvent import com.malinskiy.marathon.ios.test.TestRequest @@ -77,7 +78,9 @@ class XCTestParser( for (event in events) { when (event) { is TestStarted -> { - tests.add(event.id) + //Target name is never printed via xcodebuild. We create it using the bundle id in com.malinskiy.marathon.ios.xctestrun.TestRootFactory + val testWithTargetName = event.id.copy(pkg = vendorConfiguration.testBundle().testBundleId) + tests.add(testWithTargetName) } else -> Unit } diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/XctestEventProducer.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/XctestEventProducer.kt index b68c8fde1..db57f5144 100644 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/XctestEventProducer.kt +++ b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/XctestEventProducer.kt @@ -1,6 +1,5 @@ package com.malinskiy.marathon.ios.logparser -import com.malinskiy.marathon.ios.logparser.formatter.PackageNameFormatter import com.malinskiy.marathon.ios.logparser.parser.DeviceFailureParser import com.malinskiy.marathon.ios.logparser.parser.TestRunProgressParser import com.malinskiy.marathon.ios.test.TestEvent @@ -8,10 +7,13 @@ import com.malinskiy.marathon.time.Timer /** * Currently doesn't provide any guarantee on the methods that should be called even once + * + * @param targetName target name (or blueprint name) is not printed by xcodebuild output, we have to augment the results to still have + * 'target/class_name/test_name' structure mapped properly to marathon's package.class.method */ -class XctestEventProducer(packageNameFormatter: PackageNameFormatter, timer: Timer) : TestEventProducer { +class XctestEventProducer(targetName: String, timer: Timer) : TestEventProducer { private val failureParser = DeviceFailureParser() - private val testRunListener = TestRunProgressParser(timer, packageNameFormatter) + private val testRunListener = TestRunProgressParser(timer, targetName) override fun process(line: String): List? { return failureParser.process(line) ?: testRunListener.process(line) diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/NoopPackageNameFormatter.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/NoopPackageNameFormatter.kt deleted file mode 100644 index 6739a34ec..000000000 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/NoopPackageNameFormatter.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.malinskiy.marathon.ios.logparser.formatter - -object NoopPackageNameFormatter : PackageNameFormatter { - override fun format(name: String?) = name -} diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/PackageNameFormatter.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/PackageNameFormatter.kt deleted file mode 100644 index 918134d0c..000000000 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/PackageNameFormatter.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.malinskiy.marathon.ios.logparser.formatter - -interface PackageNameFormatter { - fun format(name: String?): String? -} diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/TestLogPackageNameFormatter.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/TestLogPackageNameFormatter.kt deleted file mode 100644 index 24582d3c9..000000000 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/formatter/TestLogPackageNameFormatter.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.malinskiy.marathon.ios.logparser.formatter - -/** - * When applied, replaces module name reported in xcodebuild log with testing target name in order - * to unify test representation. - */ -class TestLogPackageNameFormatter( - private val productModuleName: String, - private val targetName: String -) : PackageNameFormatter { - override fun format(name: String?): String? { - return name?.replace(productModuleName, targetName) - } -} diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParser.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParser.kt index d532de90c..2eca10842 100644 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParser.kt +++ b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParser.kt @@ -1,7 +1,6 @@ package com.malinskiy.marathon.ios.logparser.parser import com.malinskiy.marathon.ios.logparser.TestEventProducer -import com.malinskiy.marathon.ios.logparser.formatter.PackageNameFormatter import com.malinskiy.marathon.ios.test.TestEvent import com.malinskiy.marathon.ios.test.TestFailed import com.malinskiy.marathon.ios.test.TestIgnored @@ -14,14 +13,14 @@ import kotlin.math.roundToInt class TestRunProgressParser( private val timer: Timer, - private val packageNameFormatter: PackageNameFormatter, + private val targetName: String, ) : TestEventProducer { val logger = MarathonLogging.logger(TestRunProgressParser::class.java.simpleName) - val TEST_CASE_STARTED = """Test Case '-\[([a-zA-Z0-9_.]+) ([a-zA-Z0-9_]+)]' started\.""".toRegex() + val TEST_CASE_STARTED = """Test Case '-\[([a-zA-Z0-9_.]+) ([a-zA-Z0-9_ ]+)]' started\.""".toRegex() val TEST_CASE_FINISHED = - """Test Case '-\[([a-zA-Z0-9_.]+) ([a-zA-Z0-9_]+)]' (passed|failed|skipped) \(([\d\.]+) seconds\)\.""".toRegex() + """Test Case '-\[([a-zA-Z0-9_.]+) ([a-zA-Z0-9_ ]+)]' (passed|failed|skipped) \(([\d\.]+) seconds\)\.""".toRegex() /** * $1 = file @@ -65,8 +64,13 @@ class TestRunProgressParser( var pkg: String? = null var clazz: String? = null if (pkgWithClass != null) { - pkg = packageNameFormatter.format(pkgWithClass.substringBeforeLast('.', missingDelimiterValue = "")) - clazz = pkgWithClass.substringAfter('.', missingDelimiterValue = pkgWithClass) + if (pkgWithClass.contains('.')) { + pkg = pkgWithClass.substringBeforeLast('.', missingDelimiterValue = "") + clazz = pkgWithClass.substringAfter('.', missingDelimiterValue = pkgWithClass) + } else { + pkg = targetName + clazz = pkgWithClass + } } val method = matchResult?.groups?.get(2)?.value @@ -111,8 +115,13 @@ class TestRunProgressParser( var pkg: String? = null var clazz: String? = null if (pkgWithClass != null) { - pkg = packageNameFormatter.format(pkgWithClass.substringBeforeLast('.', missingDelimiterValue = "")) - clazz = pkgWithClass.substringAfter('.', missingDelimiterValue = pkgWithClass) + if (pkgWithClass.contains('.')) { + pkg = pkgWithClass.substringBeforeLast('.', missingDelimiterValue = "") + clazz = pkgWithClass.substringAfter('.', missingDelimiterValue = pkgWithClass) + } else { + pkg = targetName + clazz = pkgWithClass + } } val method = matchResult?.groups?.get(2)?.value diff --git a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/test/TestRequest.kt b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/test/TestRequest.kt index 1144347c1..04c472975 100644 --- a/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/test/TestRequest.kt +++ b/vendor/vendor-ios/src/main/kotlin/com/malinskiy/marathon/ios/test/TestRequest.kt @@ -9,6 +9,7 @@ data class TestRequest( val coverage: Boolean, val tests: List? = null, val xcresult: String? = null, + val testTargetName: String? = null, ) { fun toXcodebuildTestFilter(): Array { return tests?.map { "'-only-testing:${it.toTestName(packageSeparator = '/', methodSeparator = '/')}'" }?.toTypedArray() ?: emptyArray() From 17a835d3afa908feab7b02a8ea9312135435ca19 Mon Sep 17 00:00:00 2001 From: Anton Malinskiy Date: Wed, 10 Jan 2024 13:18:09 +1000 Subject: [PATCH 2/2] fix(ios): fix tests --- .../parser/TestRunProgressParserTest.kt | 26 ++++- .../fixtures/test_output/patrol.expected | 104 +++++++++--------- 2 files changed, 73 insertions(+), 57 deletions(-) diff --git a/vendor/vendor-ios/src/test/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParserTest.kt b/vendor/vendor-ios/src/test/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParserTest.kt index faafe132b..1b308418c 100644 --- a/vendor/vendor-ios/src/test/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParserTest.kt +++ b/vendor/vendor-ios/src/test/kotlin/com/malinskiy/marathon/ios/logparser/parser/TestRunProgressParserTest.kt @@ -2,7 +2,6 @@ package com.malinskiy.marathon.ios.logparser.parser import assertk.assertThat import assertk.assertions.isEqualTo -import com.malinskiy.marathon.ios.logparser.formatter.NoopPackageNameFormatter import com.malinskiy.marathon.ios.test.TestEvent import com.malinskiy.marathon.time.Timer import org.mockito.kotlin.mock @@ -23,7 +22,7 @@ class TestRunProgressParserTest { @Test fun testSample1() { - val parser = TestRunProgressParser(mockTimer, NoopPackageNameFormatter) + val parser = TestRunProgressParser(mockTimer, "") val events = mutableListOf() javaClass.getResourceAsStream("/fixtures/test_output/success_0.log").bufferedReader().use { @@ -40,7 +39,7 @@ class TestRunProgressParserTest { @Test fun testSample2() { - val parser = TestRunProgressParser(mockTimer, NoopPackageNameFormatter) + val parser = TestRunProgressParser(mockTimer, "testTarget") val events = mutableListOf() javaClass.getResourceAsStream("/fixtures/test_output/patrol.log").bufferedReader().use { @@ -57,7 +56,24 @@ class TestRunProgressParserTest { @Test fun testSample3() { - val parser = TestRunProgressParser(mockTimer, NoopPackageNameFormatter) + val parser = TestRunProgressParser(mockTimer, "") + + val events = mutableListOf() + javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.log").bufferedReader().use { + it.lines().forEach { line -> + parser.process(line)?.let { + events.addAll(it) + } + } + } + + assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s }) + .isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.expected").reader().readText().trimEnd()) + } + + @Test + fun testSample3WithTargetOverride() { + val parser = TestRunProgressParser(mockTimer, "testTarget") val events = mutableListOf() javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.log").bufferedReader().use { @@ -74,7 +90,7 @@ class TestRunProgressParserTest { @Test fun testX() { - val parser = TestRunProgressParser(mockTimer, NoopPackageNameFormatter) + val parser = TestRunProgressParser(mockTimer, "") // """Test Case '-[sample_appUITests.MoreTests testPresentModal]' started.""" parser.process("""Test Case '-[RunnerUITests androidAppTest___tapsAround]' started.""") diff --git a/vendor/vendor-ios/src/test/resources/fixtures/test_output/patrol.expected b/vendor/vendor-ios/src/test/resources/fixtures/test_output/patrol.expected index edf319fb3..f101b96d0 100644 --- a/vendor/vendor-ios/src/test/resources/fixtures/test_output/patrol.expected +++ b/vendor/vendor-ios/src/test/resources/fixtures/test_output/patrol.expected @@ -1,52 +1,52 @@ -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=androidAppTest___tapsAround, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=androidAppTest___tapsAround, metaProperties=[]), startTime=1537187695796, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=exampleTest___counterStateIsTheSameAfterGoingToHomeAndSwitchingApps, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=exampleTest___counterStateIsTheSameAfterGoingToHomeAndSwitchingApps, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___atTheBeginning, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___atTheBeginning, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaFirst, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaFirst, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaSecond, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaSecond, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileInTheMiddle, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileInTheMiddle, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoFirst, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoFirst, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoSecond, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoSecond, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_longNameTest___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_longNameTest___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_longNameTest___alphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaa, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_longNameTest___alphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaa, metaProperties=[]), startTime=1537187695999, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=internal_longNameTest___kocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykk, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=internal_longNameTest___kocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykk, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=openAppTest___openMaps, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=openAppTest___openMaps, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=openAppTest___openBrowser, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=openAppTest___openBrowser, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=openQuickSettingsTest___opensQuickSettings, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=openQuickSettingsTest___opensQuickSettings, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=permissions_notificationsTest___tapsOnNotification, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=permissions_notificationsTest___tapsOnNotification, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=permissions_permissionsLocationTest___acceptsLocationPermission, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=permissions_permissionsLocationTest___acceptsLocationPermission, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=permissions_permissionsManyTest___grantsVariousPermissions, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=permissions_permissionsManyTest___grantsVariousPermissions, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=serviceAirplaneModeTest___disablesAndEnablesAirplaneModeTwice, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=serviceAirplaneModeTest___disablesAndEnablesAirplaneModeTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=serviceBluetoothTest___disablesAndEnablesBluetoothTwice, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=serviceBluetoothTest___disablesAndEnablesBluetoothTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=serviceCellularTest___disablesAndEnablesCellularTwice, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=serviceCellularTest___disablesAndEnablesCellularTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=serviceDarkModeTest___disablesAndEnablesDarkModeTwice, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=serviceDarkModeTest___disablesAndEnablesDarkModeTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=serviceWifiTest___disablesAndEnablesWifiTwice, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=serviceWifiTest___disablesAndEnablesWifiTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=swipeTest___scrollsTheSettingsApp, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=swipeTest___scrollsTheSettingsApp, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=webviewHackernewsTest___interactsWithTheOrangeWebsiteInAWebview, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=webviewHackernewsTest___interactsWithTheOrangeWebsiteInAWebview, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=webviewLeancodeTest___interactsWithTheLeanCodeWebsiteInAWebview, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=webviewLeancodeTest___interactsWithTheLeanCodeWebsiteInAWebview, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) -TestStarted(id=Test(pkg=, clazz=RunnerUITests, method=webviewStackoverflowTest___interactsWithTheStackOverflowWebsiteInAWebview, metaProperties=[])) -TestPassed(id=Test(pkg=, clazz=RunnerUITests, method=webviewStackoverflowTest___interactsWithTheStackOverflowWebsiteInAWebview, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=androidAppTest___tapsAround, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=androidAppTest___tapsAround, metaProperties=[]), startTime=1537187695796, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=exampleTest___counterStateIsTheSameAfterGoingToHomeAndSwitchingApps, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=exampleTest___counterStateIsTheSameAfterGoingToHomeAndSwitchingApps, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___atTheBeginning, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___atTheBeginning, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaFirst, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaFirst, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaSecond, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileAlphaSecond, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileInTheMiddle, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileInTheMiddle, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoFirst, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoFirst, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoSecond, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_groupTest___topLevelGroupInFileBravoSecond, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_longNameTest___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_longNameTest___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_longNameTest___alphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaa, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_longNameTest___alphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaalphaa, metaProperties=[]), startTime=1537187695999, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_longNameTest___kocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykk, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=internal_longNameTest___kocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykkocykk, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=openAppTest___openMaps, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=openAppTest___openMaps, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=openAppTest___openBrowser, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=openAppTest___openBrowser, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=openQuickSettingsTest___opensQuickSettings, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=openQuickSettingsTest___opensQuickSettings, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=permissions_notificationsTest___tapsOnNotification, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=permissions_notificationsTest___tapsOnNotification, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=permissions_permissionsLocationTest___acceptsLocationPermission, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=permissions_permissionsLocationTest___acceptsLocationPermission, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=permissions_permissionsManyTest___grantsVariousPermissions, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=permissions_permissionsManyTest___grantsVariousPermissions, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceAirplaneModeTest___disablesAndEnablesAirplaneModeTwice, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceAirplaneModeTest___disablesAndEnablesAirplaneModeTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceBluetoothTest___disablesAndEnablesBluetoothTwice, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceBluetoothTest___disablesAndEnablesBluetoothTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceCellularTest___disablesAndEnablesCellularTwice, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceCellularTest___disablesAndEnablesCellularTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceDarkModeTest___disablesAndEnablesDarkModeTwice, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceDarkModeTest___disablesAndEnablesDarkModeTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceWifiTest___disablesAndEnablesWifiTwice, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=serviceWifiTest___disablesAndEnablesWifiTwice, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=swipeTest___scrollsTheSettingsApp, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=swipeTest___scrollsTheSettingsApp, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=webviewHackernewsTest___interactsWithTheOrangeWebsiteInAWebview, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=webviewHackernewsTest___interactsWithTheOrangeWebsiteInAWebview, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=webviewLeancodeTest___interactsWithTheLeanCodeWebsiteInAWebview, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=webviewLeancodeTest___interactsWithTheLeanCodeWebsiteInAWebview, metaProperties=[]), startTime=1537187696000, endTime=1537187696000) +TestStarted(id=Test(pkg=testTarget, clazz=RunnerUITests, method=webviewStackoverflowTest___interactsWithTheStackOverflowWebsiteInAWebview, metaProperties=[])) +TestPassed(id=Test(pkg=testTarget, clazz=RunnerUITests, method=webviewStackoverflowTest___interactsWithTheStackOverflowWebsiteInAWebview, metaProperties=[]), startTime=1537187696000, endTime=1537187696000)