Skip to content

Commit 23a2a56

Browse files
authored
(iOS) Fix empty failure tag on JUnit XML report when unknown class (#1000)
* Modify failing test regex and add test cases for failures * Refactor test
1 parent 0b79875 commit 23a2a56

File tree

6 files changed

+61
-107
lines changed

6 files changed

+61
-107
lines changed

vendor/vendor-apple/base/src/main/kotlin/com/malinskiy/marathon/apple/logparser/parser/TestRunProgressParser.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class TestRunProgressParser(
3333
* $3 = test_case
3434
* $4 = reason
3535
*/
36-
val FAILING_TEST_MATCHER = "(/.+:\\d+):\\serror:\\s[\\+\\-]\\[(.*)\\s(.*)\\]\\s:(\\s.*)".toRegex()
36+
val FAILING_TEST_MATCHER = "(/.+|<unknown>:\\d+):\\serror:\\s[\\+\\-]\\[(.*)\\s(.*)\\]\\s:(\\s.*)".toRegex()
3737

3838
/**
3939
* Timeout case from https://developer.apple.com/documentation/xctest/xctestcase/3526064-executiontimeallowance

vendor/vendor-apple/base/src/test/kotlin/com/malinskiy/marathon/apple/logparser/parser/TestRunProgressParserTest.kt

Lines changed: 31 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,22 @@ import assertk.assertThat
44
import assertk.assertions.isEqualTo
55
import com.malinskiy.marathon.apple.test.TestEvent
66
import com.malinskiy.marathon.time.Timer
7-
import org.amshove.kluent.internal.assertEquals
87
import org.junit.jupiter.api.BeforeEach
9-
import org.junit.jupiter.api.Test
8+
import org.junit.jupiter.api.extension.ExtensionContext
9+
import org.junit.jupiter.params.ParameterizedTest
10+
import org.junit.jupiter.params.provider.Arguments
11+
import org.junit.jupiter.params.provider.ArgumentsProvider
12+
import org.junit.jupiter.params.provider.ArgumentsSource
13+
import org.junit.runner.RunWith
14+
import org.junit.runners.Parameterized
1015
import org.mockito.Mockito.reset
1116
import org.mockito.kotlin.mock
1217
import org.mockito.kotlin.whenever
18+
import java.util.stream.Stream
1319

20+
@RunWith(Parameterized::class)
1421
class TestRunProgressParserTest {
22+
1523
private val mockTimer = mock<Timer>()
1624
private val mockedTimeMillis = 1537187696000L
1725

@@ -21,114 +29,31 @@ class TestRunProgressParserTest {
2129
whenever(mockTimer.currentTimeMillis()).thenReturn(mockedTimeMillis)
2230
}
2331

24-
@Test
25-
fun testSample1() {
26-
val parser = TestRunProgressParser(mockTimer, "")
27-
28-
val events = mutableListOf<TestEvent>()
29-
javaClass.getResourceAsStream("/fixtures/test_output/success_0.log.input").bufferedReader().use {
30-
it.lines().forEach { line ->
31-
parser.process(line)?.let {
32-
events.addAll(it)
33-
}
34-
}
35-
}
36-
37-
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
38-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/success_0.expected").reader().readText().trimEnd())
39-
}
40-
41-
@Test
42-
fun testSample2() {
43-
val parser = TestRunProgressParser(mockTimer, "testTarget")
44-
45-
val events = mutableListOf<TestEvent>()
46-
javaClass.getResourceAsStream("/fixtures/test_output/patrol_0.log.input").bufferedReader().use {
47-
it.lines().forEach { line ->
48-
parser.process(line)?.let {
49-
events.addAll(it)
50-
}
51-
}
52-
}
53-
54-
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
55-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/patrol_0.expected").reader().readText().trimEnd())
56-
}
57-
58-
@Test
59-
fun testSample3() {
60-
val parser = TestRunProgressParser(mockTimer, "")
61-
62-
val events = mutableListOf<TestEvent>()
63-
javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.log.input").bufferedReader().use {
64-
it.lines().forEach { line ->
65-
parser.process(line)?.let {
66-
events.addAll(it)
67-
}
68-
}
69-
}
70-
71-
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
72-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.expected").reader().readText().trimEnd())
73-
}
74-
75-
@Test
76-
fun testSample3WithTargetOverride() {
77-
val parser = TestRunProgressParser(mockTimer, "testTarget")
78-
79-
val events = mutableListOf<TestEvent>()
80-
javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.log.input").bufferedReader().use {
81-
it.lines().forEach { line ->
82-
parser.process(line)?.let {
83-
events.addAll(it)
84-
}
85-
}
32+
data class TestData(val caseName: String, val targetName: String)
33+
34+
class TestDataProvider : ArgumentsProvider {
35+
override fun provideArguments(context: ExtensionContext?): Stream<out Arguments?>? {
36+
return Stream.of(
37+
Arguments.of(TestData(caseName = "success_0", targetName = "")),
38+
Arguments.of(TestData(caseName = "patrol_0", targetName = "testTarget")),
39+
Arguments.of(TestData(caseName = "success_multiple_0", targetName = "")),
40+
Arguments.of(TestData(caseName = "success_multiple_0", targetName = "testTarget")),
41+
Arguments.of(TestData(caseName = "patrol_1", targetName = "testTarget")),
42+
Arguments.of(TestData(caseName = "timeout_0", targetName = "")),
43+
Arguments.of(TestData(caseName = "timeout_1", targetName = "")),
44+
Arguments.of(TestData(caseName = "failure_0", targetName = "")),
45+
Arguments.of(TestData(caseName = "failure_1", targetName = "")),
46+
)
8647
}
87-
88-
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
89-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/success_multiple_0.expected").reader().readText().trimEnd())
90-
}
91-
92-
@Test
93-
fun testSample4() {
94-
val parser = TestRunProgressParser(mockTimer, "testTarget")
95-
96-
val events = mutableListOf<TestEvent>()
97-
javaClass.getResourceAsStream("/fixtures/test_output/patrol_1.log.input").bufferedReader().use {
98-
it.lines().forEach { line ->
99-
parser.process(line)?.let {
100-
events.addAll(it)
101-
}
102-
}
103-
}
104-
105-
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
106-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/patrol_1.expected").reader().readText().trimEnd())
107-
}
108-
109-
@Test
110-
fun testSample5() {
111-
val parser = TestRunProgressParser(mockTimer, "")
112-
113-
val events = mutableListOf<TestEvent>()
114-
javaClass.getResourceAsStream("/fixtures/test_output/timeout_0.log.input").bufferedReader().use {
115-
it.lines().forEach { line ->
116-
parser.process(line)?.let {
117-
events.addAll(it)
118-
}
119-
}
120-
}
121-
122-
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
123-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/timeout_0.expected").reader().readText().trimEnd())
12448
}
12549

126-
@Test
127-
fun testSample6() {
128-
val parser = TestRunProgressParser(mockTimer, "")
50+
@ParameterizedTest(name = "{0}")
51+
@ArgumentsSource(TestDataProvider::class)
52+
fun test(testData: TestData) {
53+
val parser = TestRunProgressParser(mockTimer, testData.targetName)
12954

13055
val events = mutableListOf<TestEvent>()
131-
javaClass.getResourceAsStream("/fixtures/test_output/timeout_1.log.input").bufferedReader().use {
56+
javaClass.getResourceAsStream("/fixtures/test_output/${testData.caseName}.log.input").bufferedReader().use {
13257
it.lines().forEach { line ->
13358
parser.process(line)?.let {
13459
events.addAll(it)
@@ -137,6 +62,6 @@ class TestRunProgressParserTest {
13762
}
13863

13964
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
140-
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/timeout_1.expected").reader().readText().trimEnd())
65+
.isEqualTo(javaClass.getResourceAsStream("/fixtures/test_output/${testData.caseName}.expected").reader().readText().trimEnd())
14166
}
14267
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
TestStarted(id=Test(pkg=sample_appUITests, clazz=MoreTests, method=testPresentModal, metaProperties=[]))
2+
TestFailed(id=Test(pkg=sample_appUITests, clazz=MoreTests, method=testPresentModal, metaProperties=[]), startTime=1537187691756, endTime=1537187696000, trace=/Users/vagrant/git/apps/sample_appUITests/Target/TestCases/MoreTests.swift:33:XCTAssertTrue failed - This test failed.)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Test Case '-[sample_appUITests.MoreTests testPresentModal]' started.
2+
t = 0.00s Start Test at 2018-09-15 01:08:51.148
3+
t = 0.03s Set Up
4+
t = 0.03s Open com.agoda.sample-app
5+
t = 0.06s Launch com.agoda.sample-app
6+
t = 2.61s Wait for com.agoda.sample-app to idle
7+
t = 3.85s Waiting 30.0s for Button to exist
8+
/Users/vagrant/git/apps/sample_appUITests/Target/TestCases/MoreTests.swift:33: error: -[sample_appUITests.MoreTests testPresentModal] : XCTAssertTrue failed - This test failed.
9+
t = 4.20s Tear Down
10+
11+
Test sample_appUITests.MoreTests.testPresentModal finished with result <failed> after 4.244 seconds
12+
Test Case '-[sample_appUITests.MoreTests testPresentModal]' failed (4.244 seconds).
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
TestStarted(id=Test(pkg=sample_appUITests, clazz=MoreTests, method=testPresentModal, metaProperties=[]))
2+
TestFailed(id=Test(pkg=sample_appUITests, clazz=MoreTests, method=testPresentModal, metaProperties=[]), startTime=1537187691756, endTime=1537187696000, trace=<unknown>:0:XCTAssertTrue failed - This test also failed with more details {()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Test Case '-[sample_appUITests.MoreTests testPresentModal]' started.
2+
t = 0.00s Start Test at 2018-09-15 01:08:51.148
3+
t = 0.03s Set Up
4+
t = 0.03s Open com.agoda.sample-app
5+
t = 0.06s Launch com.agoda.sample-app
6+
t = 2.61s Wait for com.agoda.sample-app to idle
7+
<unknown>:0: error: -[sample_appUITests.MoreTests testPresentModal] : XCTAssertTrue failed - This test also failed with more details {(
8+
Button, identifier: 'Button 1', label: 'Save', Selected,
9+
Button, identifier: 'Button 2', label: 'Cancel'
10+
)}
11+
t = 4.20s Tear Down
12+
Test sample_appUITests.MoreTests.testPresentModal finished with result <failed> after 4.244 seconds
13+
Test Case '-[sample_appUITests.MoreTests testPresentModal]' failed (4.244 seconds).

0 commit comments

Comments
 (0)