Skip to content

Commit 62f76f8

Browse files
author
Ivan Dyatlov
committed
Merge remote-tracking branch 'origin/develop' into develop
2 parents 6f7ae27 + 7f70e0e commit 62f76f8

File tree

24 files changed

+33
-171
lines changed

24 files changed

+33
-171
lines changed

core/src/integrationTest/kotlin/com/malinskiy/marathon/scenario/CacheScenarios.kt

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.malinskiy.marathon.execution.TestStatus
1010
import com.malinskiy.marathon.test.StubDevice
1111
import com.malinskiy.marathon.test.Test
1212
import com.malinskiy.marathon.test.TestComponentInfo
13+
import com.malinskiy.marathon.test.runAsync
1314
import com.malinskiy.marathon.test.setupMarathon
1415
import kotlinx.coroutines.delay
1516
import kotlinx.coroutines.runBlocking

core/src/main/kotlin/com/malinskiy/marathon/Marathon.kt

-32
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@ import com.malinskiy.marathon.cache.test.TestCacheLoader
88
import com.malinskiy.marathon.cache.test.TestCacheSaver
99
import com.malinskiy.marathon.config.LogicalConfigurationValidator
1010
import com.malinskiy.marathon.device.DeviceProvider
11-
import com.malinskiy.marathon.exceptions.NoDevicesException
1211
import com.malinskiy.marathon.exceptions.ReportGenerationException
1312
import com.malinskiy.marathon.execution.ComponentInfo
14-
import com.malinskiy.marathon.execution.ComponentInfoExtractor
1513
import com.malinskiy.marathon.execution.Configuration
1614
import com.malinskiy.marathon.execution.Scheduler
1715
import com.malinskiy.marathon.execution.StrictRunChecker
@@ -35,7 +33,6 @@ private val log = MarathonLogging.logger {}
3533

3634
class Marathon(
3735
val configuration: Configuration,
38-
private val componentInfoExtractor: ComponentInfoExtractor,
3936
private val deviceProvider: DeviceProvider,
4037
private val tracker: TrackerInternal,
4138
private val analytics: Analytics,
@@ -66,35 +63,6 @@ class Marathon(
6663
logConfigurator.configure(vendorConfiguration)
6764
}
6865

69-
fun run() = runBlocking {
70-
try {
71-
val isSuccess = runAsync()
72-
when {
73-
configuration.ignoreFailures -> true
74-
else -> isSuccess
75-
}
76-
} catch (th: Throwable) {
77-
log.error(th.toString())
78-
79-
when (th) {
80-
is NoDevicesException -> {
81-
log.warn { "No devices found" }
82-
false
83-
}
84-
else -> false
85-
}
86-
}
87-
}
88-
89-
suspend fun runAsync(): Boolean {
90-
start()
91-
92-
val componentInfo = componentInfoExtractor.extract(configuration)
93-
scheduleTests(componentInfo)
94-
95-
return stopAndWaitForCompletion()
96-
}
97-
9866
override suspend fun start() {
9967
configureLogging(configuration.vendorConfiguration)
10068

core/src/main/kotlin/com/malinskiy/marathon/analytics/TrackerFactory.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ internal class TrackerFactory(
7676
RawJsonReporter(fileManager, gson),
7777
TestJsonReporter(fileManager, gson),
7878
AllureReporter(configuration, File(configuration.outputDir, "allure-results"), testResultDescriptionFactory),
79-
HtmlSummaryReporter(gson, configuration.outputDir, configuration, testResultDescriptionFactory),
79+
HtmlSummaryReporter(gson, configuration.outputDir, testResultDescriptionFactory),
8080
StdoutReporter(timer),
8181
configuration.listener?.let { ListenerReporter(it) }
8282
),

core/src/main/kotlin/com/malinskiy/marathon/di/Modules.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ fun coreModule(timer: Timer?) = module {
6868
single<Timer> { timer ?: SystemTimer(get()) }
6969
single<ProgressReporter> { ProgressReporter(get()) }
7070
single<StrictRunChecker> { ConfigurationStrictRunChecker(get()) }
71-
single<Marathon> { Marathon(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) }
71+
single<Marathon> { Marathon(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) }
7272
}
7373

7474
fun KoinApplication.marathonConfiguration(configuration: Configuration): KoinApplication {

core/src/main/kotlin/com/malinskiy/marathon/execution/ComponentInfoExtractor.kt

-5
This file was deleted.

core/src/main/kotlin/com/malinskiy/marathon/execution/Configuration.kt

-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ private const val DEFAULT_NO_DEVICES_TIMEOUT_MILLIS: Long = 300_000
2121
private const val DEFAULT_OUTPUT_TIMEOUT_MILLIS: Long = 60_000
2222

2323
data class Configuration constructor(
24-
val name: String,
2524
val outputDir: File,
2625

2726
val customAnalyticsTracker: Tracker?,
@@ -57,7 +56,6 @@ data class Configuration constructor(
5756
) {
5857

5958
constructor(
60-
name: String,
6159
outputDir: File,
6260

6361
customAnalyticsTracker: Tracker?,
@@ -93,7 +91,6 @@ data class Configuration constructor(
9391
) :
9492

9593
this(
96-
name = name,
9794
outputDir = outputDir,
9895
customAnalyticsTracker = customAnalyticsTracker,
9996
poolingStrategy = poolingStrategy ?: OmniPoolingStrategy(),
@@ -125,7 +122,6 @@ data class Configuration constructor(
125122

126123
fun toMap() =
127124
mapOf<String, String>(
128-
"name" to name,
129125
"outputDir" to outputDir.absolutePath,
130126
"pooling" to poolingStrategy.toString(),
131127
"sharding" to shardingStrategy.toString(),

core/src/main/kotlin/com/malinskiy/marathon/report/html/HtmlSummaryReporter.kt

-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.malinskiy.marathon.device.DeviceFeature
88
import com.malinskiy.marathon.device.DeviceInfo
99
import com.malinskiy.marathon.execution.Attachment
1010
import com.malinskiy.marathon.execution.AttachmentType
11-
import com.malinskiy.marathon.execution.Configuration
1211
import com.malinskiy.marathon.execution.TestResult
1312
import com.malinskiy.marathon.execution.TestStatus
1413
import com.malinskiy.marathon.extension.relativePathTo
@@ -34,7 +33,6 @@ import kotlin.math.roundToLong
3433
class HtmlSummaryReporter(
3534
private val gson: Gson,
3635
private val rootOutput: File,
37-
private val configuration: Configuration,
3836
private val testSummaryFormatter: TestSummaryFormatter
3937
) : Reporter {
4038

@@ -233,7 +231,6 @@ class HtmlSummaryReporter(
233231

234232

235233
private fun Summary.toHtmlIndex() = HtmlIndex(
236-
title = configuration.name,
237234
totalFailed = pools.sumOf { it.failed.size },
238235
totalIgnored = pools.sumOf { it.ignored.size },
239236
totalPassed = pools.sumOf { it.passed.size },

core/src/test/kotlin/com/malinskiy/marathon/scenario/DeviceFilteringScenario.kt

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.malinskiy.marathon.test.StubDevice
66
import com.malinskiy.marathon.test.Test
77
import com.malinskiy.marathon.test.TestComponentInfo
88
import com.malinskiy.marathon.test.assert.shouldBeEqualToAsJson
9+
import com.malinskiy.marathon.test.runAsync
910
import com.malinskiy.marathon.test.setupMarathon
1011
import kotlinx.coroutines.ExperimentalCoroutinesApi
1112
import kotlinx.coroutines.delay

core/src/test/kotlin/com/malinskiy/marathon/scenario/DisconnectingScenarios.kt

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.malinskiy.marathon.test.StubDevice
66
import com.malinskiy.marathon.test.Test
77
import com.malinskiy.marathon.test.TestComponentInfo
88
import com.malinskiy.marathon.test.assert.shouldBeEqualToAsJson
9+
import com.malinskiy.marathon.test.runAsync
910
import com.malinskiy.marathon.test.setupMarathon
1011
import com.malinskiy.marathon.time.Timer
1112
import kotlinx.coroutines.ExperimentalCoroutinesApi

core/src/test/kotlin/com/malinskiy/marathon/scenario/InvalidConfigScenarios.kt

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.malinskiy.marathon.execution.strategy.impl.sharding.CountShardingStra
88
import com.malinskiy.marathon.test.StubDevice
99
import com.malinskiy.marathon.test.Test
1010
import com.malinskiy.marathon.test.TestComponentInfo
11+
import com.malinskiy.marathon.test.runAsync
1112
import com.malinskiy.marathon.test.setupMarathon
1213
import kotlinx.coroutines.ExperimentalCoroutinesApi
1314
import kotlinx.coroutines.delay

core/src/test/kotlin/com/malinskiy/marathon/scenario/SuccessScenarios.kt

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.malinskiy.marathon.test.StubDevice
66
import com.malinskiy.marathon.test.Test
77
import com.malinskiy.marathon.test.TestComponentInfo
88
import com.malinskiy.marathon.test.assert.shouldBeEqualToAsJson
9+
import com.malinskiy.marathon.test.runAsync
910
import com.malinskiy.marathon.test.setupMarathon
1011
import kotlinx.coroutines.ExperimentalCoroutinesApi
1112
import kotlinx.coroutines.delay

core/src/test/kotlin/com/malinskiy/marathon/scenario/UncompletedScenarios.kt

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.malinskiy.marathon.test.StubDevice
77
import com.malinskiy.marathon.test.Test
88
import com.malinskiy.marathon.test.TestComponentInfo
99
import com.malinskiy.marathon.test.assert.shouldBeEqualToAsJson
10+
import com.malinskiy.marathon.test.runAsync
1011
import com.malinskiy.marathon.test.setupMarathon
1112
import com.malinskiy.marathon.time.Timer
1213
import kotlinx.coroutines.ExperimentalCoroutinesApi

marathon-gradle-plugin/src/main/kotlin/com/malinskiy/marathon/ConfigurationFactory.kt

+4-38
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,10 @@ import java.io.File
1414

1515
internal fun createCommonConfiguration(
1616
project: Project,
17-
marathonConfig: MarathonExtension,
18-
sdkDirectory: File
19-
): Configuration {
20-
val output = getOutputDirectory(project, marathonConfig)
21-
val fakeApk = File(".")
22-
val fakeName = "marathon-common"
23-
24-
return createConfiguration(
25-
extensionConfig = marathonConfig,
26-
applicationApk = null,
27-
instrumentationApk = fakeApk,
28-
sdkDirectory = sdkDirectory,
29-
name = fakeName,
30-
output = output
31-
)
32-
}
33-
34-
private fun createConfiguration(
3517
extensionConfig: MarathonExtension,
36-
applicationApk: File?,
37-
instrumentationApk: File,
38-
sdkDirectory: File,
39-
name: String,
40-
output: File
18+
sdkDirectory: File
4119
): Configuration = Configuration(
42-
name = name,
43-
outputDir = output,
20+
outputDir = project.layout.buildDirectory.dir("reports/marathon").get().asFile,
4421
customAnalyticsTracker = extensionConfig.customAnalyticsTracker,
4522
poolingStrategy = extensionConfig.poolingStrategy?.toStrategy(),
4623
shardingStrategy = extensionConfig.shardingStrategy?.toStrategy(),
@@ -66,19 +43,10 @@ private fun createConfiguration(
6643
testOutputTimeoutMillis = extensionConfig.testOutputTimeoutMillis,
6744
noDevicesTimeoutMillis = extensionConfig.noDevicesTimeoutMillis,
6845
debug = extensionConfig.debug,
69-
vendorConfiguration = createAndroidConfiguration(extensionConfig, applicationApk, instrumentationApk, sdkDirectory)
46+
vendorConfiguration = createAndroidConfiguration(extension = extensionConfig, sdkDirectory = sdkDirectory)
7047
)
7148

72-
private fun getOutputDirectory(project: Project, extensionConfig: MarathonExtension): File =
73-
extensionConfig.baseOutputDir?.let { File(it) }
74-
?: project.layout.buildDirectory.dir("reports/marathon").get().asFile
75-
76-
private fun createAndroidConfiguration(
77-
extension: MarathonExtension,
78-
applicationApk: File?,
79-
instrumentationApk: File,
80-
sdkDirectory: File
81-
): AndroidConfiguration {
49+
private fun createAndroidConfiguration(extension: MarathonExtension, sdkDirectory: File): AndroidConfiguration {
8250
val autoGrantPermission = extension.autoGrantPermission ?: DEFAULT_AUTO_GRANT_PERMISSION
8351
val instrumentationArgs = extension.instrumentationArgs
8452
val applicationPmClear = extension.applicationPmClear ?: DEFAULT_APPLICATION_PM_CLEAR
@@ -101,8 +69,6 @@ private fun createAndroidConfiguration(
10169

10270
return AndroidConfiguration(
10371
sdkDirectory,
104-
applicationApk,
105-
instrumentationApk,
10672
listOf(ddmlibModule),
10773
autoGrantPermission,
10874
instrumentationArgs,

marathon-gradle-plugin/src/main/kotlin/com/malinskiy/marathon/MarathonExtension.kt

-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ open class MarathonExtension {
1818
var strictRunFilterConfiguration: StrictRunFilterPluginConfiguration? = null
1919
var listener: MarathonListener? = null
2020

21-
var baseOutputDir: String? = null
22-
2321
var cache: CachePluginConfiguration? = null
2422
var ignoreFailures: Boolean? = null
2523
var isCodeCoverageEnabled: Boolean? = null

report/html-report/src/main/kotlin/com/malinskiy/marathon/report/HtmlIndex.kt

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.malinskiy.marathon.report
33
import com.google.gson.annotations.SerializedName
44

55
data class HtmlIndex(
6-
@SerializedName("title") val title: String,
76
@SerializedName("total_failed") val totalFailed: Int,
87
@SerializedName("total_flaky") val totalFlaky: Int,
98
@SerializedName("total_ignored") val totalIgnored: Int,

vendor/vendor-android/base/src/main/kotlin/com/malinskiy/marathon/android/AndroidConfiguration.kt

-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ const val DEFAULT_USED_STORAGE_THRESHOLD_PERCENTS = 85
1717

1818
data class AndroidConfiguration(
1919
val androidSdk: File,
20-
val applicationOutput: File?,
21-
val testApplicationOutput: File,
2220
val implementationModules: List<Module>,
2321
val autoGrantPermission: Boolean = DEFAULT_AUTO_GRANT_PERMISSION,
2422
val instrumentationArgs: Map<String, String> = emptyMap(),

vendor/vendor-android/base/src/main/kotlin/com/malinskiy/marathon/android/di/Modules.kt

-3
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
package com.malinskiy.marathon.android.di
22

33
import com.malinskiy.marathon.android.AndroidComponentCacheKeyProvider
4-
import com.malinskiy.marathon.android.AndroidComponentInfoExtractor
54
import com.malinskiy.marathon.android.AndroidLogConfigurator
65
import com.malinskiy.marathon.android.AndroidTestParser
76
import com.malinskiy.marathon.android.executor.logcat.LogcatCollector
87
import com.malinskiy.marathon.android.executor.logcat.LogcatListener
98
import com.malinskiy.marathon.android.executor.logcat.parse.LogcatEventsAdapter
109
import com.malinskiy.marathon.android.executor.logcat.parse.LogcatEventsListener
1110
import com.malinskiy.marathon.cache.test.key.ComponentCacheKeyProvider
12-
import com.malinskiy.marathon.execution.ComponentInfoExtractor
1311
import com.malinskiy.marathon.execution.TestParser
1412
import com.malinskiy.marathon.log.MarathonLogConfigurator
1513
import com.malinskiy.marathon.report.logs.LogsProvider
1614
import org.koin.dsl.module
1715

1816
val androidModule = module {
1917
single<TestParser?> { AndroidTestParser() }
20-
single<ComponentInfoExtractor?> { AndroidComponentInfoExtractor() }
2118
single<ComponentCacheKeyProvider?> { AndroidComponentCacheKeyProvider(get()) }
2219
single<LogcatCollector?> { LogcatCollector() }
2320
single<LogcatEventsListener?> { get<LogcatCollector>() }

vendor/vendor-android/base/src/main/kotlin/com/malinskiy/marathon/android/executor/AndroidComponentInfoExtractor.kt

-20
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.malinskiy.marathon.android
22

3-
import com.malinskiy.marathon.execution.Configuration
43
import com.malinskiy.marathon.test.MetaProperty
54
import com.malinskiy.marathon.test.Test
65
import kotlinx.coroutines.runBlocking
@@ -17,42 +16,13 @@ class AndroidTestParserSpek : Spek(
1716

1817
group("android test apk") {
1918
val apkFile = File(javaClass.classLoader.getResource("android_test_1.apk").file)
20-
val configuration = Configuration(
19+
val componentInfo = AndroidComponentInfo(
2120
name = "",
22-
outputDir = File(""),
23-
customAnalyticsTracker = null,
24-
poolingStrategy = null,
25-
shardingStrategy = null,
26-
sortingStrategy = null,
27-
batchingStrategy = null,
28-
flakinessStrategy = null,
29-
retryStrategy = null,
30-
filteringConfiguration = null,
31-
strictRunFilterConfiguration = null,
32-
cache = null,
33-
ignoreFailures = null,
34-
isCodeCoverageEnabled = null,
35-
fallbackToScreenshots = null,
36-
strictMode = null,
37-
listener = null,
38-
uncompletedTestRetryQuota = null,
39-
testClassRegexes = null,
40-
includeSerialRegexes = null,
41-
excludeSerialRegexes = null,
42-
ignoreFailureRegexes = null,
43-
failFastFailureRegexes = null,
44-
testBatchTimeoutMillis = null,
45-
testOutputTimeoutMillis = null,
46-
noDevicesTimeoutMillis = null,
47-
debug = null,
48-
vendorConfiguration = AndroidConfiguration(
49-
implementationModules = emptyList(),
50-
androidSdk = File(""),
51-
applicationOutput = File(""),
52-
testApplicationOutput = apkFile
53-
)
21+
applicationId = null,
22+
testApplicationId = "com.example.test",
23+
applicationOutput = null,
24+
testApplicationOutput = apkFile
5425
)
55-
val componentInfo = AndroidComponentInfoExtractor().extract(configuration)
5626

5727
it("should return proper list of test methods") {
5828
val extractedTests = runBlocking { parser.extract(componentInfo) }
@@ -71,4 +41,3 @@ class AndroidTestParserSpek : Spek(
7141
}
7242
}
7343
})
74-

0 commit comments

Comments
 (0)