Skip to content

Commit 8cad72a

Browse files
committed
feat: use ascii control char US to separate the class name and test name when parsing junit
1 parent 5fc0212 commit 8cad72a

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

src/junit.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use pyo3::prelude::*;
33
use quick_xml::events::attributes::Attributes;
44
use quick_xml::events::Event;
55
use quick_xml::reader::Reader;
6+
use std::ascii;
67
use std::collections::HashMap;
78

89
use crate::helpers::ParserError;
@@ -24,10 +25,11 @@ fn attributes_map(attributes: Attributes) -> Result<HashMap<String, String>, pyo
2425

2526
fn populate(attr_hm: &HashMap<String, String>, testsuite: String) -> Result<Testrun, pyo3::PyErr> {
2627
let name = format!(
27-
"{}::{}",
28+
"{}{}{}",
2829
attr_hm
2930
.get("classname")
3031
.ok_or(ParserError::new_err("No classname found"))?,
32+
'\x1f',
3133
attr_hm
3234
.get("name")
3335
.ok_or(ParserError::new_err("No name found"))?

tests/test_junit.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import pytest
2-
from test_results_parser import parse_junit_xml, Testrun, Outcome
2+
from test_results_parser import Outcome, Testrun, parse_junit_xml
33

44

55
class TestParsers:
@@ -10,7 +10,7 @@ class TestParsers:
1010
"./tests/junit.xml",
1111
[
1212
Testrun(
13-
"tests.test_parsers.TestParsers::test_junit[junit.xml--True]",
13+
"tests.test_parsers.TestParsers\x1ftest_junit[junit.xml--True]",
1414
0.001,
1515
Outcome.Failure,
1616
"pytest",
@@ -32,7 +32,7 @@ def test_junit(self, filename, expected, check):
3232
tests/test_parsers.py:16: AssertionError""",
3333
),
3434
Testrun(
35-
"tests.test_parsers.TestParsers::test_junit[jest-junit.xml--False]",
35+
"tests.test_parsers.TestParsers\x1ftest_junit[jest-junit.xml--False]",
3636
0.064,
3737
Outcome.Pass,
3838
"pytest",
@@ -44,28 +44,28 @@ def test_junit(self, filename, expected, check):
4444
"./tests/jest-junit.xml",
4545
[
4646
Testrun(
47-
"Title when rendered renders pull title::Title when rendered renders pull title",
47+
"Title when rendered renders pull title\x1fTitle when rendered renders pull title",
4848
0.036,
4949
Outcome.Pass,
5050
"Title",
5151
None,
5252
),
5353
Testrun(
54-
"Title when rendered renders pull author::Title when rendered renders pull author",
54+
"Title when rendered renders pull author\x1fTitle when rendered renders pull author",
5555
0.005,
5656
Outcome.Pass,
5757
"Title",
5858
None,
5959
),
6060
Testrun(
61-
"Title when rendered renders pull updatestamp::Title when rendered renders pull updatestamp",
61+
"Title when rendered renders pull updatestamp\x1fTitle when rendered renders pull updatestamp",
6262
0.002,
6363
Outcome.Pass,
6464
"Title",
6565
None,
6666
),
6767
Testrun(
68-
"Title when rendered for first pull request renders pull title::Title when rendered for first pull request renders pull title",
68+
"Title when rendered for first pull request renders pull title\x1fTitle when rendered for first pull request renders pull title",
6969
0.006,
7070
Outcome.Pass,
7171
"Title",
@@ -77,15 +77,15 @@ def test_junit(self, filename, expected, check):
7777
"./tests/vitest-junit.xml",
7878
[
7979
Testrun(
80-
"__tests__/test-file-1.test.ts::first test file &gt; 2 + 2 should equal 4",
80+
"__tests__/test-file-1.test.ts\x1ffirst test file &gt; 2 + 2 should equal 4",
8181
0.01,
8282
Outcome.Failure,
8383
"__tests__/test-file-1.test.ts",
8484
"""AssertionError: expected 5 to be 4 // Object.is equality
8585
❯ __tests__/test-file-1.test.ts:20:28""",
8686
),
8787
Testrun(
88-
"__tests__/test-file-1.test.ts::first test file &gt; 4 - 2 should equal 2",
88+
"__tests__/test-file-1.test.ts\x1ffirst test file &gt; 4 - 2 should equal 2",
8989
0,
9090
Outcome.Pass,
9191
"__tests__/test-file-1.test.ts",
@@ -97,20 +97,20 @@ def test_junit(self, filename, expected, check):
9797
"./tests/empty_failure.junit.xml",
9898
[
9999
Testrun(
100-
"test.test::test.test works",
100+
"test.test\x1ftest.test works",
101101
0.234,
102102
Outcome.Pass,
103103
"test",
104-
None
104+
None,
105105
),
106-
Testrun(
107-
"test.test::test.test fails",
106+
Testrun(
107+
"test.test\x1ftest.test fails",
108108
1,
109109
Outcome.Failure,
110110
"test",
111-
"TestError"
111+
"TestError",
112112
),
113-
]
113+
],
114114
),
115115
],
116116
)
@@ -120,4 +120,3 @@ def test_junit(self, filename, expected):
120120
assert len(res) == len(expected)
121121
for restest, extest in zip(res, expected):
122122
assert restest == extest
123-

0 commit comments

Comments
 (0)