Merge release v1.8.0 code from branch 'main' into v1

This commit is contained in:
Jozef Izso 2024-01-28 18:09:20 +01:00
commit a923ed8851
30 changed files with 33788 additions and 10476 deletions

26
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,26 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'bug'
assignees: 'dorny,dharmendrasha,j-catania'
---
## Describe the bug
A clear and concise description of what the bug is.
## To Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
## Expected behavior
A clear and concise description of what you expected to happen.
## Screenshots
If applicable, add screenshots to help explain your problem.
## Additional context
Add any other context about the problem here.

13
.github/ISSUE_TEMPLATE/feature.md vendored Normal file
View file

@ -0,0 +1,13 @@
---
name: Feature Request
about: Suggest a feature
title: ''
labels: 'enhancement'
assignees: 'dorny,dharmendrasha,j-catania'
---
## Describe
## Proposed solution
## Alternatives considered

View file

@ -23,10 +23,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Set Node.js 16.x
uses: actions/setup-node@v3
- name: Set Node.js
uses: actions/setup-node@v4
with:
node-version: 16.x
node-version-file: '.nvmrc'
- name: Install dependencies
run: npm ci

View file

@ -14,7 +14,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: node --version
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
- run: npm ci
- run: npm run build
- run: npm run format-check

2
.nvmrc
View file

@ -1 +1 @@
v18.7.0
v18.19.0

View file

@ -1,5 +1,12 @@
# Changelog
## 1.8.0
* Add `SwiftXunitParser` class based on `JavaJunitParser` for `swift-xunit` reporter https://github.com/dorny/test-reporter/pull/317
* Use NodeJS 18 LTS as default runtime https://github.com/dorny/test-reporter/pull/332
* Escape `<>` characters in suite name https://github.com/dorny/test-reporter/pull/236
* Update actions runtime to Node20 https://github.com/dorny/test-reporter/pull/315
* Update check title and remove icon https://github.com/dorny/test-reporter/pull/144
## 1.7.0
* Fix #199: Use ✅ instead of ✔️ for better cross platform look by @petrdvorak in https://github.com/dorny/test-reporter/pull/200
* Verify content of dist/ folder matches build output by @dorny in https://github.com/dorny/test-reporter/pull/207

View file

@ -18,6 +18,7 @@ This [Github Action](https://github.com/features/actions) displays test results
- Flutter / [test](https://pub.dev/packages/test)
- Java / [JUnit](https://junit.org/)
- JavaScript / [JEST](https://jestjs.io/) / [Mocha](https://mochajs.org/)
- Swift / xUnit
For more information see [Supported formats](#supported-formats) section.
@ -317,6 +318,12 @@ Mocha, unfortunately, doesn't have the option to store `json` output directly to
There is a work in progress to fix it: [mocha#4607](https://github.com/mochajs/mocha/pull/4607)
</details>
<details>
<summary>swift-xunit (Experimental)</summary>
Support for Swift test results in xUnit format is experimental - should work but it was not extensively tested.
</details>
## GitHub limitations
Unfortunately, there are some known issues and limitations caused by GitHub API:

View file

@ -0,0 +1,10 @@
![Tests passed successfully](https://img.shields.io/badge/tests-1%20passed-success)
## ✅ <a id="user-content-r0" href="#r0">fixtures/external/jest/jest-react-component-test-results.xml</a>
**1** tests were completed in **1000ms** with **1** passed, **0** failed and **0** skipped.
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|[\<Component /\>](#r0s0)|1✅|||798ms|
### ✅ <a id="user-content-r0s0" href="#r0s0">\<Component /\></a>
```
<Component /> should render properly
```

View file

@ -0,0 +1,13 @@
![Tests failed](https://img.shields.io/badge/tests-2%20passed%2C%201%20failed-critical)
## ❌ <a id="user-content-r0" href="#r0">fixtures/swift-xunit.xml</a>
**3** tests were completed in **220ms** with **2** passed, **1** failed and **0** skipped.
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|[TestResults](#r0s0)|2✅|1❌||220ms|
### ❌ <a id="user-content-r0s0" href="#r0s0">TestResults</a>
```
AcmeLibTests.AcmeLibTests
✅ test_always_pass
✅ test_always_skip
❌ test_always_fail
```

View file

@ -3,12 +3,12 @@
exports[`dart-json tests matches report snapshot 1`] = `
TestRunResult {
"path": "fixtures/dart-json.json",
"suites": Array [
"suites": [
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "Test 1",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "Passing test",
@ -19,11 +19,11 @@ TestRunResult {
},
TestGroupResult {
"name": "Test 1 Test 1.1",
"tests": Array [
"tests": [
TestCaseResult {
"error": Object {
"error": {
"details": "package:test_api expect
test\\\\main_test.dart 13:9 main.<fn>.<fn>.<fn>
test\\main_test.dart 13:9 main.<fn>.<fn>.<fn>
",
"line": 13,
"message": "Expected: <2>
@ -36,9 +36,9 @@ test\\\\main_test.dart 13:9 main.<fn>.<fn>.<fn>
"time": 20,
},
TestCaseResult {
"error": Object {
"error": {
"details": "package:darttest/main.dart 2:3 throwError
test\\\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
test\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
",
"line": 17,
"message": "Exception: Some error",
@ -52,10 +52,10 @@ test\\\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
},
TestGroupResult {
"name": "Test 2",
"tests": Array [
"tests": [
TestCaseResult {
"error": Object {
"details": "test\\\\main_test.dart 24:7 main.<fn>.<fn>
"error": {
"details": "test\\main_test.dart 24:7 main.<fn>.<fn>
",
"line": 24,
"message": "Exception: Some error",
@ -72,12 +72,12 @@ test\\\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": null,
"tests": Array [
"tests": [
TestCaseResult {
"error": Object {
"error": {
"details": "dart:isolate _RawReceivePortImpl._handleMessage
",
"line": 5,
@ -108,12 +108,12 @@ test\\\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
exports[`dart-json tests report from rrousselGit/provider test results matches snapshot 1`] = `
TestRunResult {
"path": "fixtures/external/flutter/provider-test-results.json",
"suites": Array [
"suites": [
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "valueListenableProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "rebuilds when value change",
@ -139,7 +139,7 @@ TestRunResult {
"time": 22,
},
TestCaseResult {
"error": Object {
"error": {
"details": "══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure object was thrown running a test:
Expected: <2>
@ -178,10 +178,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "ListenableProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "works with MultiProvider",
@ -252,7 +252,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ListenableProvider value constructor",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "pass down key",
@ -269,7 +269,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ListenableProvider stateful constructor",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "called with context",
@ -295,10 +295,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "consumer",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "obtains value from Provider<T>",
@ -321,7 +321,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "consumer2",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "obtains value from Provider<T>",
@ -344,7 +344,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "consumer3",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "obtains value from Provider<T>",
@ -367,7 +367,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "consumer4",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "obtains value from Provider<T>",
@ -390,7 +390,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "consumer5",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "obtains value from Provider<T>",
@ -413,7 +413,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "consumer6",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "obtains value from Provider<T>",
@ -439,10 +439,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "Use builder property, not child",
@ -453,7 +453,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ChangeNotifierProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "value",
@ -515,10 +515,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "ChangeNotifierProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "default",
@ -535,7 +535,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ListenableProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "default",
@ -552,7 +552,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "Provider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "default",
@ -569,7 +569,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ProxyProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "0",
@ -616,7 +616,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "MultiProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "with 1 ChangeNotifierProvider default",
@ -690,10 +690,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "MultiProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "throw if providers is null",
@ -719,10 +719,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "works with MultiProvider",
@ -763,7 +763,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "StreamProvider()",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "create and dispose stream with builder",
@ -783,10 +783,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "watch in layoutbuilder",
@ -827,7 +827,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "BuildContext",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "internal selected value is updated",
@ -985,10 +985,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "ReassembleHandler",
@ -1014,10 +1014,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "works with MultiProvider",
@ -1076,7 +1076,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "FutureProvider()",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "crashes if builder is null",
@ -1090,10 +1090,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "works with MultiProvider",
@ -1104,7 +1104,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "Provider.of",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "throws if T is dynamic",
@ -1139,7 +1139,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "Provider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "throws if the provided value is a Listenable/Stream",
@ -1177,10 +1177,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "regression test #377",
@ -1371,7 +1371,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "diagnostics",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "InheritedProvider.value",
@ -1406,7 +1406,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "InheritedProvider.value()",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "markNeedsNotifyDependents during startListening is noop",
@ -1459,7 +1459,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "InheritedProvider()",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "hasValue",
@ -1614,7 +1614,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "DeferredInheritedProvider.value()",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "hasValue",
@ -1667,7 +1667,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "DeferredInheritedProvider()",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "create can't call inherited widgets",
@ -1699,10 +1699,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "ListenableProxyProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "throws if update is missing",
@ -1743,7 +1743,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ListenableProxyProvider variants",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "ListenableProxyProvider",
@ -1787,10 +1787,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "asserts that builder/selector are not null",
@ -1900,10 +1900,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "asserts",
@ -1935,10 +1935,10 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"groups": Array [
"groups": [
TestGroupResult {
"name": "ProxyProvider",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "throws if the provided value is a Listenable/Stream",
@ -2009,7 +2009,7 @@ Unexpected number of calls
},
TestGroupResult {
"name": "ProxyProvider variants",
"tests": Array [
"tests": [
TestCaseResult {
"error": undefined,
"name": "ProxyProvider2",

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,44 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`swift-xunit tests report from swift test results matches snapshot 1`] = `
TestRunResult {
"path": "fixtures/swift-xunit.xml",
"suites": [
TestSuiteResult {
"groups": [
TestGroupResult {
"name": "AcmeLibTests.AcmeLibTests",
"tests": [
TestCaseResult {
"error": undefined,
"name": "test_always_pass",
"result": "success",
"time": 36.386333,
},
TestCaseResult {
"error": undefined,
"name": "test_always_skip",
"result": "success",
"time": 92.039167,
},
TestCaseResult {
"error": {
"details": undefined,
"line": undefined,
"message": undefined,
"path": undefined,
},
"name": "test_always_fail",
"result": "failed",
"time": 92.05175,
},
],
},
],
"name": "TestResults",
"totalTime": 220.47725000000003,
},
],
"totalTime": undefined,
}
`;

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="React components test" tests="1" failures="0" errors="0" time="1.0">
<testsuite name="&lt;Component /&gt;" errors="0" failures="0" skipped="0" timestamp="2021-01-24T19:21:45" time="0.798" tests="1">
<testcase classname="" name="&lt;Component /&gt; should render properly" time="0.704">
</testcase>
</testsuite>
</testsuites>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="TestResults" errors="0" tests="3" failures="1" time="0.22047725">
<testcase classname="AcmeLibTests.AcmeLibTests" name="test_always_pass" time="0.036386333">
</testcase>
<testcase classname="AcmeLibTests.AcmeLibTests" name="test_always_skip" time="0.092039167">
</testcase>
<testcase classname="AcmeLibTests.AcmeLibTests" name="test_always_fail" time="0.09205175">
<failure message="failed"></failure>
</testcase>
</testsuite>
</testsuites>

View file

@ -82,4 +82,27 @@ describe('jest-junit tests', () => {
fs.mkdirSync(path.dirname(outputPath), {recursive: true})
fs.writeFileSync(outputPath, report)
})
it('report from #235 testing react components named <ComponentName />', async () => {
const fixturePath = path.join(__dirname, 'fixtures', 'external', 'jest', 'jest-react-component-test-results.xml')
const trackedFilesPath = path.join(__dirname, 'fixtures', 'external', 'jest', 'files.txt')
const outputPath = path.join(__dirname, '__outputs__', 'jest-react-component-test-results.md')
const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
const trackedFiles = fs.readFileSync(trackedFilesPath, {encoding: 'utf8'}).split(/\n\r?/g)
const opts: ParseOptions = {
parseErrors: true,
trackedFiles
//workDir: '/home/dorny/dorny/jest/'
}
const parser = new JestJunitParser(opts)
const result = await parser.parse(filePath, fileContent)
expect(result).toMatchSnapshot()
const report = getReport([result])
fs.mkdirSync(path.dirname(outputPath), {recursive: true})
fs.writeFileSync(outputPath, report)
})
})

View file

@ -0,0 +1,30 @@
import * as fs from 'fs'
import * as path from 'path'
import {SwiftXunitParser} from '../src/parsers/swift-xunit/swift-xunit-parser'
import {ParseOptions} from '../src/test-parser'
import {getReport} from '../src/report/get-report'
import {normalizeFilePath} from '../src/utils/path-utils'
describe('swift-xunit tests', () => {
it('report from swift test results matches snapshot', async () => {
const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml')
const outputPath = path.join(__dirname, '__outputs__', 'swift-xunit.md')
const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
const trackedFiles = ['Package.swift', 'Sources/AcmeLib/AcmeLib.swift', 'Tests/AcmeLibTests/AcmeLibTests.swift']
const opts: ParseOptions = {
parseErrors: true,
trackedFiles
}
const parser = new SwiftXunitParser(opts)
const result = await parser.parse(filePath, fileContent)
expect(result).toMatchSnapshot()
const report = getReport([result])
fs.mkdirSync(path.dirname(outputPath), {recursive: true})
fs.writeFileSync(outputPath, report)
})
})

View file

@ -31,6 +31,7 @@ inputs:
- java-junit
- jest-junit
- mocha-json
- swift-xunit
required: true
list-suites:
description: |
@ -94,7 +95,7 @@ outputs:
url_html:
description: Check run URL HTML
runs:
using: 'node16'
using: 'node20'
main: 'dist/index.js'
branding:
color: blue

34826
dist/index.js generated vendored

File diff suppressed because one or more lines are too long

1
dist/index.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

142
dist/licenses.txt generated vendored
View file

@ -71,6 +71,28 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@fastify/busboy
MIT
Copyright Brian White. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
@nodelib/fs.scandir
MIT
The MIT License (MIT)
@ -1002,31 +1024,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
is-plain-object
MIT
The MIT License (MIT)
Copyright (c) 2014-2017, Jon Schlinkert.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
json-buffer
MIT
Copyright (c) 2013 Dominic Tarr
@ -1132,32 +1129,6 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
node-fetch
MIT
The MIT License (MIT)
Copyright (c) 2016 David Frank
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
normalize-url
MIT
MIT License
@ -1458,9 +1429,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
tr46
MIT
tunnel
MIT
The MIT License (MIT)
@ -1486,6 +1454,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
undici
MIT
MIT License
Copyright (c) Matteo Collina and Undici contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
universal-user-agent
ISC
# [ISC License](https://spdx.org/licenses/ISC)
@ -1510,47 +1503,6 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
webidl-conversions
BSD-2-Clause
# The BSD 2-Clause License
Copyright (c) 2014, Domenic Denicola
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
whatwg-url
MIT
The MIT License (MIT)
Copyright (c) 20152016 Sebastian Mayr
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
wrappy
ISC
The ISC License

2953
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{
"name": "test-check",
"version": "1.7.0",
"version": "1.8.0",
"private": true,
"description": "Presents test results from popular testing frameworks as Github check run",
"main": "lib/main.js",
@ -12,6 +12,7 @@
"package": "ncc build --license licenses.txt && eolConverter lf 'dist/*'",
"version": "npm run build && npm run package && git add dist/*",
"test": "jest --ci --reporters=default --reporters=jest-junit",
"jest:updatesnapshot": "jest --updateSnapshot",
"all": "npm run build && npm run format && npm run lint && npm run package && npm test",
"dart-fixture": "cd \"reports/dart\" && dart test --file-reporter=\"json:../../__tests__/fixtures/dart-json.json\"",
"dotnet-fixture": "dotnet test reports/dotnet/DotnetTests.XUnitTests --logger \"trx;LogFileName=../../../../__tests__/fixtures/dotnet-trx.trx\"",
@ -31,42 +32,42 @@
"author": "Michal Dorner <dorner.michal@gmail.com>",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.10.0",
"@actions/core": "^1.10.1",
"@actions/exec": "^1.1.1",
"@actions/github": "^5.0.3",
"adm-zip": "^0.5.3",
"fast-glob": "^3.2.5",
"@actions/github": "^6.0.0",
"adm-zip": "^0.5.10",
"fast-glob": "^3.3.2",
"got": "^11.8.2",
"picomatch": "^2.2.2",
"xml2js": "^0.5.0"
"picomatch": "^3.0.1",
"xml2js": "^0.6.2"
},
"devDependencies": {
"@octokit/types": "^7.1.0",
"@octokit/webhooks": "^10.1.5",
"@octokit/webhooks-types": "^6.3.6",
"@types/adm-zip": "^0.5.0",
"@octokit/types": "^12.4.0",
"@octokit/webhooks": "^12.0.11",
"@octokit/webhooks-types": "^7.3.1",
"@types/adm-zip": "^0.5.5",
"@types/github-slugger": "^1.3.0",
"@types/jest": "^28.1.7",
"@types/node": "^18.7.7",
"@types/picomatch": "^2.2.1",
"@types/xml2js": "^0.4.8",
"@typescript-eslint/eslint-plugin": "^5.33.1",
"@typescript-eslint/parser": "^5.33.1",
"@vercel/ncc": "^0.34.0",
"@types/jest": "^29.5.11",
"@types/node": "^20.11.9",
"@types/picomatch": "^2.3.3",
"@types/xml2js": "^0.4.14",
"@typescript-eslint/eslint-plugin": "^6.19.1",
"@typescript-eslint/parser": "^6.19.1",
"@vercel/ncc": "^0.38.1",
"eol-converter-cli": "^1.0.8",
"eslint": "^8.22.0",
"eslint-import-resolver-typescript": "^3.4.2",
"eslint-plugin-github": "^4.1.2",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jest": "^26.8.3",
"eslint-plugin-prettier": "^5.0.0",
"jest": "^28.1.3",
"jest-circus": "^28.1.3",
"jest-junit": "^14.0.0",
"eslint": "^8.56.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-github": "^4.10.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^27.6.3",
"eslint-plugin-prettier": "^5.1.3",
"jest": "^29.7.0",
"jest-circus": "^29.7.0",
"jest-junit": "^16.0.0",
"js-yaml": "^4.1.0",
"prettier": "^3.0.0",
"ts-jest": "^28.0.8",
"typescript": "^4.7.4"
"prettier": "^3.2.4",
"ts-jest": "^29.1.2",
"typescript": "^5.3.3"
},
"jest-junit": {
"suiteName": "jest tests",

View file

@ -64,24 +64,38 @@
}
}
},
"@babel/helper-function-name": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
"integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.10.4",
"@babel/template": "^7.10.4",
"@babel/types": "^7.10.4"
}
"@babel/helper-environment-visitor": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true
},
"@babel/helper-get-function-arity": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
"integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
"@babel/helper-hoist-variables": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"requires": {
"@babel/types": "^7.10.4"
"@babel/types": "^7.22.5"
},
"dependencies": {
"@babel/helper-validator-identifier": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/types": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dev": true,
"requires": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-member-expression-to-functions": {
@ -164,6 +178,12 @@
"@babel/types": "^7.11.0"
}
},
"@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true
},
"@babel/helper-validator-identifier": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
@ -361,20 +381,159 @@
}
},
"@babel/traverse": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz",
"integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==",
"version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
"integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.12.1",
"@babel/helper-function-name": "^7.10.4",
"@babel/helper-split-export-declaration": "^7.11.0",
"@babel/parser": "^7.12.1",
"@babel/types": "^7.12.1",
"@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.0",
"@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
"globals": "^11.1.0"
},
"dependencies": {
"@babel/code-frame": {
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"requires": {
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
}
},
"@babel/generator": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dev": true,
"requires": {
"@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
}
},
"@babel/helper-function-name": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"requires": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
}
},
"@babel/helper-split-export-declaration": {
"version": "7.22.6",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"requires": {
"@babel/types": "^7.22.5"
}
},
"@babel/helper-validator-identifier": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/highlight": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"dev": true
},
"@babel/template": {
"version": "7.22.15",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.15",
"@babel/types": "^7.22.15"
}
},
"@babel/types": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dev": true,
"requires": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"@babel/types": {
@ -615,6 +774,45 @@
"chalk": "^4.0.0"
}
},
"@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
},
"@jridgewell/trace-mapping": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"@sinonjs/commons": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",

View file

@ -15,10 +15,10 @@ import {DotnetTrxParser} from './parsers/dotnet-trx/dotnet-trx-parser'
import {JavaJunitParser} from './parsers/java-junit/java-junit-parser'
import {JestJunitParser} from './parsers/jest-junit/jest-junit-parser'
import {MochaJsonParser} from './parsers/mocha-json/mocha-json-parser'
import {SwiftXunitParser} from './parsers/swift-xunit/swift-xunit-parser'
import {normalizeDirPath, normalizeFilePath} from './utils/path-utils'
import {getCheckRunContext} from './utils/github-utils'
import {Icon} from './utils/markdown-utils'
async function main(): Promise<void> {
try {
@ -182,7 +182,11 @@ class TestReporter {
const isFailed = this.failOnError && results.some(tr => tr.result === 'failed')
const conclusion = isFailed ? 'failure' : 'success'
const icon = isFailed ? Icon.fail : Icon.success
const passed = results.reduce((sum, tr) => sum + tr.passed, 0)
const failed = results.reduce((sum, tr) => sum + tr.failed, 0)
const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0)
const shortSummary = `${passed} passed, ${failed} failed and ${skipped} skipped `
core.info(`Updating check run conclusion (${conclusion}) and output`)
const resp = await this.octokit.rest.checks.update({
@ -190,7 +194,7 @@ class TestReporter {
conclusion,
status: 'completed',
output: {
title: `${name} ${icon}`,
title: shortSummary,
summary,
annotations
},
@ -219,6 +223,8 @@ class TestReporter {
return new JestJunitParser(options)
case 'mocha-json':
return new MochaJsonParser(options)
case 'swift-xunit':
return new SwiftXunitParser(options)
default:
throw new Error(`Input variable 'reporter' is set to invalid value '${reporter}'`)
}

View file

@ -29,7 +29,12 @@ import {
} from '../../test-results'
class TestRun {
constructor(readonly path: string, readonly suites: TestSuite[], readonly success: boolean, readonly time: number) {}
constructor(
readonly path: string,
readonly suites: TestSuite[],
readonly success: boolean,
readonly time: number
) {}
}
class TestSuite {
@ -74,7 +79,10 @@ class TestCase {
export class DartJsonParser implements TestParser {
assumedWorkDir: string | undefined
constructor(readonly options: ParseOptions, readonly sdk: 'dart' | 'flutter') {}
constructor(
readonly options: ParseOptions,
readonly sdk: 'dart' | 'flutter'
) {}
async parse(path: string, content: string): Promise<TestRunResult> {
const tr = this.getTestRun(path, content)

View file

@ -37,7 +37,7 @@ export class JestJunitParser implements TestParser {
junit.testsuites.testsuite === undefined
? []
: junit.testsuites.testsuite.map(ts => {
const name = ts.$.name.trim()
const name = this.escapeCharacters(ts.$.name.trim())
const time = parseFloat(ts.$.time) * 1000
const sr = new TestSuiteResult(name, this.getGroups(ts), time)
return sr
@ -118,4 +118,8 @@ export class JestJunitParser implements TestParser {
(this.assumedWorkDir = getBasePath(path, this.options.trackedFiles))
)
}
private escapeCharacters(s: string): string {
return s.replace(/([<>])/g, '\\$1')
}
}

View file

@ -0,0 +1,8 @@
import {ParseOptions} from '../../test-parser'
import {JavaJunitParser} from '../java-junit/java-junit-parser'
export class SwiftXunitParser extends JavaJunitParser {
constructor(readonly options: ParseOptions) {
super(options)
}
}