Compare commits

...

62 Commits

Author SHA1 Message Date
Jozef Izso
31a54ee7eb Merge pull request #443 from dorny/release/v1.9.1 2024-05-08 13:27:39 +02:00
Jozef Izso
2c14ff72a2 test-reporter release v1.9.1 2024-05-08 13:21:43 +02:00
Jozef Izso
ed4d3e60ee Merge pull request #442 from dorny/feature/update_packages
Update development dependencies
2024-05-08 13:17:50 +02:00
Jozef Izso
ed2a32e11c Merge pull request #438 from JojOatXGME/fix-artifact-download-alternative
Fix problematic retransmission of authentication token (alternative solution) #438
2024-05-08 12:06:22 +02:00
Jozef Izso
32faf3e060 Update typescript-eslint dependencies 2024-05-08 11:56:54 +02:00
Jozef Izso
6e78727599 Update Typescript and NodeJS dependencies 2024-05-08 11:54:03 +02:00
Jozef Izso
477942de89 Merge pull request #426 from dominicmh/main
fix: reporting wrong number of tests in Dart #426
2024-05-08 11:39:33 +02:00
Johannes Spangenberg
f763877804 Fix problematic retransmission of authentication token
The retransmission of the authentication token to the server providing
the artifact caused the following errors when using Artifacts v4:

  HTTPError: Response code 400 (Authentication information is not given
  in the correct format. Check the value of Authorization header.)

It looks like the service serving the artifacts does not expect the
authentication header, and therefore complaines about inproper use of
the authentication header. Delegating the redirect-handling to the `got`
library fixes the issue according to my tsts.
2024-05-04 13:43:51 +02:00
dominicmh
9d4bb43029 build & package 2024-04-12 21:32:40 +02:00
dominicmh
cacdfc564b exclude hidden "tests" from test result 2024-04-12 21:31:54 +02:00
dominicmh
a26c5eaf39 make test fail by adding setUpAll and tearDownAll 2024-04-12 21:25:30 +02:00
Jozef Izso
c40d89d5e9 Merge pull request #416 from dorny/release/v1.9.0 2024-04-05 09:44:34 -07:00
Jozef Izso
9a5ccba454 test-reporter release v1.9.0 2024-04-05 13:44:42 +02:00
Jozef Izso
82b258b19e Merge pull request #405 from dorny/feature/update_packages 2024-04-03 00:58:49 -07:00
Jozef Izso
80874c1df3 Build the distribution file 2024-04-02 22:16:33 +02:00
Jozef Izso
99e65e60b1 Update development packages 2024-04-02 22:14:28 +02:00
Jozef Izso
0863296b14 Update production dependencies 2024-04-02 21:18:20 +02:00
Jozef Izso
1212842c04 Use correct @types/node package for the Node 18 runtime 2024-04-02 20:50:53 +02:00
Jozef Izso
4cd9c62896 Merge pull request #398 from oscarmampel/main 2024-04-02 10:50:05 -07:00
oscar mampel
1a3cfe6b48 Add support for rspec 2024-03-14 00:40:50 +01:00
Jozef Izso
7e5f292040 Merge pull request #385 from dorny/fix/package_repository_url 2024-03-07 18:26:04 +01:00
Jozef Izso
ccc63b813f Update repository address to current URL 2024-02-25 19:12:14 +01:00
Jozef Izso
eaa763f6ff Merge pull request #370 from dorny/release/v1.8.0 2024-01-28 18:07:10 +01:00
Jozef Izso
214929bdc3 test-reporter release v1.8.0 2024-01-28 18:00:18 +01:00
Jozef Izso
5c9213582c Update all packages 2024-01-28 18:00:18 +01:00
Jozef Izso
5edc9e96e2 Merge pull request #369 from dorny/release/v1.7.0 2024-01-28 18:00:03 +01:00
Julien Catania
86a2010147 Merge pull request #144 from ldaneliukas/check_status
Update check title and remove icon
2024-01-12 10:01:59 +01:00
Julien Catania
aa82f530a5 update dist/index.js 2024-01-12 10:00:41 +01:00
Julien Catania
24b216b6b8 Merge remote-tracking branch 'origin/check_status' into check_status
# Conflicts:
#	dist/index.js
#	dist/index.js.map
2024-01-12 09:56:03 +01:00
Linas Daneliukas
996dd3b9b1 shortSummary const 2024-01-12 09:53:39 +01:00
Linas Daneliukas
4bb68fffaa Update check title and remove icon 2024-01-12 09:53:33 +01:00
Julien Catania
08c81a1fd6 Merge pull request #341 from dorny/feat/issue-tmpl
Adding feature and bug template
2024-01-02 21:13:49 +01:00
Jozef Izso
d9ef69ec3d Merge pull request #236 from wingyplus/fix-iss-235 2023-12-18 14:02:55 +01:00
Jozef Izso
7aa575a237 Add tests for results with React component names 2023-12-18 13:59:17 +01:00
Thanabodee Charoenpiriyakij
c1926959e2 Escape <> characters in suite name
Fixes: #235
2023-12-18 13:59:03 +01:00
Jozef Izso
9e2e57e817 Remove jozefizso and DominikPalo from assignees to keep notifications low 2023-12-18 12:00:55 +01:00
Julien Catania
ddfa15d232 adding jozefizso,DominikPalo,dharmendrasha as assignees 2023-12-18 08:47:57 +01:00
Julien Catania
b1ecc16057 adding feature and bug template 2023-12-17 21:46:58 +01:00
Jozef Izso
57cb2734c7 Merge pull request #333 from jozefizso/dev/update_dependencies 2023-12-15 01:47:09 -08:00
Jozef Izso
feda17a8d8 Compile distribution code 2023-12-13 22:41:59 +01:00
Jozef Izso
dd41adfb19 Update all development packages
Updates snapshot files for the jest 29
2023-12-13 15:44:36 +01:00
Jozef Izso
35f0c29818 Update all production packages 2023-12-13 15:40:54 +01:00
Jozef Izso
71f6751394 Update GitHub Actions packages 2023-12-13 15:17:18 +01:00
Julien Catania
84909f338e Merge pull request #332 from jozefizso/dev/node18_runtime
Use NodeJS 18 LTS as default runtime
2023-12-13 11:53:56 +01:00
Jozef Izso
e091fade5c Use NodeJS 18 LTS as default runtime 2023-12-13 10:47:42 +01:00
Michal Dorner
601ab2b789 Merge pull request #331 from dorny/fix-build
Fix build error
2023-12-09 21:22:00 +01:00
Michal Dorner
62b89ea98d Apply code style fix 2023-12-09 21:17:07 +01:00
Michal Dorner
be0e2e90e1 Merge pull request #315 from dorny/feature/node20
Update to Node20
2023-12-09 21:08:05 +01:00
Michal Dorner
ed05640994 Merge pull request #317 from jozefizso/feature/swift-xunit
Add `SwiftXunitParser` class based on `JavaJunitParser` for `swift-xunit` reporter
2023-12-09 21:05:32 +01:00
Jozef Izso
1c044b4aef Add SwiftXunitParser class based on JavaJunitParser for swift-xunit reporter 2023-11-08 16:27:24 +01:00
Julien Catania
6d7a9adaba Update action.yml 2023-11-07 09:07:08 +01:00
Julien Catania
6a1c2425d8 Merge pull request #304 from dorny/dependabot/npm_and_yarn/babel/traverse-7.23.2
Bump @babel/traverse from 7.22.20 to 7.23.2
2023-11-02 14:08:04 +01:00
dependabot[bot]
08340ff7ea Bump @babel/traverse from 7.22.20 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.20 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-17 07:01:03 +00:00
Julien Catania
87b594606a Merge pull request #303 from dorny/dependabot/npm_and_yarn/reports/jest/babel/traverse-7.23.2
Bump @babel/traverse from 7.12.1 to 7.23.2 in /reports/jest
2023-10-17 09:00:32 +02:00
dependabot[bot]
817da85e61 Bump @babel/traverse from 7.12.1 to 7.23.2 in /reports/jest
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.12.1 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 21:28:33 +00:00
Julien Catania
214173a332 Merge pull request #297 from dorny/release/v1.7.0
CHANGELOG.md
2023-10-09 19:44:37 +02:00
Julien Catania
62af3652ec CHANGELOG.md 2023-10-09 19:43:53 +02:00
Julien Catania
ededcdb047 Merge pull request #296 from dorny/release/v1.7.0
Release/v1.7.0
2023-10-09 19:40:58 +02:00
Julien Catania
9b29e4187a 1.7.0 2023-10-09 19:39:59 +02:00
Julien Catania
4b7b789017 add version npm script 2023-10-09 19:37:56 +02:00
Linas Daneliukas
74d8fd673e shortSummary const 2021-11-30 10:56:33 +02:00
Linas Daneliukas
d1e7a9281a Update check title and remove icon 2021-10-11 15:35:03 +03:00
41 changed files with 34506 additions and 10725 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: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set Node.js 16.x - name: Set Node.js
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: 16.x node-version-file: '.nvmrc'
- name: Install dependencies - name: Install dependencies
run: npm ci run: npm ci

View File

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

2
.nvmrc
View File

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

View File

@@ -1,5 +1,42 @@
# Changelog # 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
* Gracefully handle empty nested testsuite elements for JUnit. by @rvdlaarschot in https://github.com/dorny/test-reporter/pull/193
* Gracefully handle empty failure tags by @haudren-woven in https://github.com/dorny/test-reporter/pull/213
* Fix #208 - java-junit: show annotations on PR changed files by @atsu85 in https://github.com/dorny/test-reporter/pull/209
* Only report failure if fail-on-error is set by @trond-snekvik in https://github.com/dorny/test-reporter/pull/214
* Improve clarity on configuring for forkable repos by @abelbraaksma in https://github.com/dorny/test-reporter/pull/211
* Suppress "Processing test results from" log by @vasanthdharmaraj in https://github.com/dorny/test-reporter/pull/179
* Skip listing of files if error parsing is disabled by @dorny in https://github.com/dorny/test-reporter/pull/216
* Correct typo in docs by @tangowithfoxtrot in https://github.com/dorny/test-reporter/pull/254
* update dependencies by @j-catania in https://github.com/dorny/test-reporter/pull/269
* Add permissions to example yml files by @TurnrDev in https://github.com/dorny/test-reporter/pull/263
* add feature fail-on-empty by @gdams in https://github.com/dorny/test-reporter/pull/243
* Add dependabot configuration by @yeikel in https://github.com/dorny/test-reporter/pull/228
* Bump ws from 7.3.1 to 7.5.9 in /reports/jest by @dependabot in https://github.com/dorny/test-reporter/pull/265
* Bump actions/checkout from 2 to 4 by @dependabot in https://github.com/dorny/test-reporter/pull/279
* Add new output for url url html by @luisito666 in https://github.com/dorny/test-reporter/pull/242
* Update README.md by @IanMoroney in https://github.com/dorny/test-reporter/pull/158
* Update jest-Junit part of Readme by @ryancasburn-KAI in https://github.com/dorny/test-reporter/pull/176
* fix: default-valued fields are not mandatory by @TomerFi in https://github.com/dorny/test-reporter/pull/172
* Bump ansi-regex from 4.1.0 to 4.1.1 in /reports/jest by @dependabot in https://github.com/dorny/test-reporter/pull/278
* Bump decode-uri-component from 0.2.0 to 0.2.2 in /reports/jest by @dependabot in https://github.com/dorny/test-reporter/pull/276
* Bump minimist from 1.2.5 to 1.2.8 in /reports/jest by @dependabot in https://github.com/dorny/test-reporter/pull/275
* Bump qs from 6.5.2 to 6.5.3 in /reports/jest by @dependabot in https://github.com/dorny/test-reporter/pull/272
* Bump json5 from 2.1.3 to 2.2.3 in /reports/jest by @dependabot in https://github.com/dorny/test-reporter/pull/271
* Bump ansi-regex from 3.0.0 to 3.0.1 in /reports/mocha by @dependabot in https://github.com/dorny/test-reporter/pull/270
* declare 'url' and 'url_html' as action outputs by @micha-one in https://github.com/dorny/test-reporter/pull/287
* Avoid split on undefined by @cazou in https://github.com/dorny/test-reporter/pull/258
## v1.6.0 ## v1.6.0
- [Update to node16 + recent versions of core and exec packages](https://github.com/dorny/test-reporter/pull/203) - [Update to node16 + recent versions of core and exec packages](https://github.com/dorny/test-reporter/pull/203)
- [Update all dependencies to latest versions](https://github.com/dorny/test-reporter/pull/186) - [Update all dependencies to latest versions](https://github.com/dorny/test-reporter/pull/186)

View File

@@ -18,6 +18,7 @@ This [Github Action](https://github.com/features/actions) displays test results
- Flutter / [test](https://pub.dev/packages/test) - Flutter / [test](https://pub.dev/packages/test)
- Java / [JUnit](https://junit.org/) - Java / [JUnit](https://junit.org/)
- JavaScript / [JEST](https://jestjs.io/) / [Mocha](https://mochajs.org/) - JavaScript / [JEST](https://jestjs.io/) / [Mocha](https://mochajs.org/)
- Swift / xUnit
For more information see [Supported formats](#supported-formats) section. For more information see [Supported formats](#supported-formats) section.
@@ -141,6 +142,7 @@ jobs:
# java-junit # java-junit
# jest-junit # jest-junit
# mocha-json # mocha-json
# rspec-json
reporter: '' reporter: ''
# Allows you to generate only the summary. # Allows you to generate only the summary.
@@ -317,6 +319,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) There is a work in progress to fix it: [mocha#4607](https://github.com/mochajs/mocha/pull/4607)
</details> </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 ## GitHub limitations
Unfortunately, there are some known issues and limitations caused by GitHub API: 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,16 @@
![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20failed%2C%201%20skipped-critical)
## ❌ <a id="user-content-r0" href="#r0">fixtures/rspec-json.json</a>
**3** tests were completed in **0ms** with **1** passed, **1** failed and **1** skipped.
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|[./spec/config/check_env_vars_spec.rb](#r0s0)|1✅|1❌|1⚪|0ms|
### ❌ <a id="user-content-r0s0" href="#r0s0">./spec/config/check_env_vars_spec.rb</a>
```
CheckEnvVars#call when all env vars are defined behaves like success load
❌ CheckEnvVars#call when all env vars are defined behaves like success load fails in assertion
(#ActiveSupport::BroadcastLogger:0x00007f1007fedf58).debug("All config env vars exist")
expected: 0 times with arguments: ("All config env vars exist")
received: 1 time with arguments: ("All config env vars exist")
✅ CheckEnvVars#call when all env vars are defined behaves like success load logs success message
⚪ CheckEnvVars#call when all env vars are defined behaves like success load skips the test
```

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`] = ` exports[`dart-json tests matches report snapshot 1`] = `
TestRunResult { TestRunResult {
"path": "fixtures/dart-json.json", "path": "fixtures/dart-json.json",
"suites": Array [ "suites": [
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "Test 1", "name": "Test 1",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "Passing test", "name": "Passing test",
@@ -19,11 +19,11 @@ TestRunResult {
}, },
TestGroupResult { TestGroupResult {
"name": "Test 1 Test 1.1", "name": "Test 1 Test 1.1",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": Object { "error": {
"details": "package:test_api expect "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, "line": 13,
"message": "Expected: <2> "message": "Expected: <2>
@@ -36,9 +36,9 @@ test\\\\main_test.dart 13:9 main.<fn>.<fn>.<fn>
"time": 20, "time": 20,
}, },
TestCaseResult { TestCaseResult {
"error": Object { "error": {
"details": "package:darttest/main.dart 2:3 throwError "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, "line": 17,
"message": "Exception: Some error", "message": "Exception: Some error",
@@ -52,10 +52,10 @@ test\\\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
}, },
TestGroupResult { TestGroupResult {
"name": "Test 2", "name": "Test 2",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": Object { "error": {
"details": "test\\\\main_test.dart 24:7 main.<fn>.<fn> "details": "test\\main_test.dart 24:7 main.<fn>.<fn>
", ",
"line": 24, "line": 24,
"message": "Exception: Some error", "message": "Exception: Some error",
@@ -72,12 +72,12 @@ test\\\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": null, "name": null,
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": Object { "error": {
"details": "dart:isolate _RawReceivePortImpl._handleMessage "details": "dart:isolate _RawReceivePortImpl._handleMessage
", ",
"line": 5, "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`] = ` exports[`dart-json tests report from rrousselGit/provider test results matches snapshot 1`] = `
TestRunResult { TestRunResult {
"path": "fixtures/external/flutter/provider-test-results.json", "path": "fixtures/external/flutter/provider-test-results.json",
"suites": Array [ "suites": [
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "valueListenableProvider", "name": "valueListenableProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "rebuilds when value change", "name": "rebuilds when value change",
@@ -139,7 +139,7 @@ TestRunResult {
"time": 22, "time": 22,
}, },
TestCaseResult { TestCaseResult {
"error": Object { "error": {
"details": "══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════ "details": "══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure object was thrown running a test: The following TestFailure object was thrown running a test:
Expected: <2> Expected: <2>
@@ -178,10 +178,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "ListenableProvider", "name": "ListenableProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "works with MultiProvider", "name": "works with MultiProvider",
@@ -252,7 +252,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ListenableProvider value constructor", "name": "ListenableProvider value constructor",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "pass down key", "name": "pass down key",
@@ -269,7 +269,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ListenableProvider stateful constructor", "name": "ListenableProvider stateful constructor",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "called with context", "name": "called with context",
@@ -295,10 +295,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "consumer", "name": "consumer",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "obtains value from Provider<T>", "name": "obtains value from Provider<T>",
@@ -321,7 +321,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "consumer2", "name": "consumer2",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "obtains value from Provider<T>", "name": "obtains value from Provider<T>",
@@ -344,7 +344,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "consumer3", "name": "consumer3",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "obtains value from Provider<T>", "name": "obtains value from Provider<T>",
@@ -367,7 +367,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "consumer4", "name": "consumer4",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "obtains value from Provider<T>", "name": "obtains value from Provider<T>",
@@ -390,7 +390,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "consumer5", "name": "consumer5",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "obtains value from Provider<T>", "name": "obtains value from Provider<T>",
@@ -413,7 +413,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "consumer6", "name": "consumer6",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "obtains value from Provider<T>", "name": "obtains value from Provider<T>",
@@ -439,10 +439,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "Use builder property, not child", "name": "Use builder property, not child",
@@ -453,7 +453,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ChangeNotifierProvider", "name": "ChangeNotifierProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "value", "name": "value",
@@ -515,10 +515,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "ChangeNotifierProvider", "name": "ChangeNotifierProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "default", "name": "default",
@@ -535,7 +535,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ListenableProvider", "name": "ListenableProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "default", "name": "default",
@@ -552,7 +552,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "Provider", "name": "Provider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "default", "name": "default",
@@ -569,7 +569,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ProxyProvider", "name": "ProxyProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "0", "name": "0",
@@ -616,7 +616,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "MultiProvider", "name": "MultiProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "with 1 ChangeNotifierProvider default", "name": "with 1 ChangeNotifierProvider default",
@@ -690,10 +690,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "MultiProvider", "name": "MultiProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "throw if providers is null", "name": "throw if providers is null",
@@ -719,10 +719,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "works with MultiProvider", "name": "works with MultiProvider",
@@ -763,7 +763,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "StreamProvider()", "name": "StreamProvider()",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "create and dispose stream with builder", "name": "create and dispose stream with builder",
@@ -783,10 +783,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "watch in layoutbuilder", "name": "watch in layoutbuilder",
@@ -827,7 +827,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "BuildContext", "name": "BuildContext",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "internal selected value is updated", "name": "internal selected value is updated",
@@ -985,10 +985,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "ReassembleHandler", "name": "ReassembleHandler",
@@ -1014,10 +1014,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "works with MultiProvider", "name": "works with MultiProvider",
@@ -1076,7 +1076,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "FutureProvider()", "name": "FutureProvider()",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "crashes if builder is null", "name": "crashes if builder is null",
@@ -1090,10 +1090,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "works with MultiProvider", "name": "works with MultiProvider",
@@ -1104,7 +1104,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "Provider.of", "name": "Provider.of",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "throws if T is dynamic", "name": "throws if T is dynamic",
@@ -1139,7 +1139,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "Provider", "name": "Provider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "throws if the provided value is a Listenable/Stream", "name": "throws if the provided value is a Listenable/Stream",
@@ -1177,10 +1177,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "regression test #377", "name": "regression test #377",
@@ -1371,7 +1371,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "diagnostics", "name": "diagnostics",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "InheritedProvider.value", "name": "InheritedProvider.value",
@@ -1406,7 +1406,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "InheritedProvider.value()", "name": "InheritedProvider.value()",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "markNeedsNotifyDependents during startListening is noop", "name": "markNeedsNotifyDependents during startListening is noop",
@@ -1459,7 +1459,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "InheritedProvider()", "name": "InheritedProvider()",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "hasValue", "name": "hasValue",
@@ -1614,7 +1614,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "DeferredInheritedProvider.value()", "name": "DeferredInheritedProvider.value()",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "hasValue", "name": "hasValue",
@@ -1667,7 +1667,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "DeferredInheritedProvider()", "name": "DeferredInheritedProvider()",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "create can't call inherited widgets", "name": "create can't call inherited widgets",
@@ -1699,10 +1699,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "ListenableProxyProvider", "name": "ListenableProxyProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "throws if update is missing", "name": "throws if update is missing",
@@ -1743,7 +1743,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ListenableProxyProvider variants", "name": "ListenableProxyProvider variants",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "ListenableProxyProvider", "name": "ListenableProxyProvider",
@@ -1787,10 +1787,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "asserts that builder/selector are not null", "name": "asserts that builder/selector are not null",
@@ -1900,10 +1900,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "", "name": "",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "asserts", "name": "asserts",
@@ -1935,10 +1935,10 @@ Unexpected number of calls
"totalTime": undefined, "totalTime": undefined,
}, },
TestSuiteResult { TestSuiteResult {
"groups": Array [ "groups": [
TestGroupResult { TestGroupResult {
"name": "ProxyProvider", "name": "ProxyProvider",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "throws if the provided value is a Listenable/Stream", "name": "throws if the provided value is a Listenable/Stream",
@@ -2009,7 +2009,7 @@ Unexpected number of calls
}, },
TestGroupResult { TestGroupResult {
"name": "ProxyProvider variants", "name": "ProxyProvider variants",
"tests": Array [ "tests": [
TestCaseResult { TestCaseResult {
"error": undefined, "error": undefined,
"name": "ProxyProvider2", "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,49 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`rspec-json tests report from ./reports/rspec-json test results matches snapshot 1`] = `
TestRunResult {
"path": "fixtures/rspec-json.json",
"suites": [
TestSuiteResult {
"groups": [
TestGroupResult {
"name": "CheckEnvVars#call when all env vars are defined behaves like success load",
"tests": [
TestCaseResult {
"error": {
"details": "/usr/local/bundle/ruby/3.3.0/gems/net-http-0.4.1/lib/net/http.rb:1603:in \`initialize'
./config/check_env_vars.rb:11:in \`call'
./spec/config/check_env_vars_spec.rb:7:in \`block (3 levels) in <top (required)>'
./spec/config/check_env_vars_spec.rb:19:in \`block (4 levels) in <top (required)>'",
"line": 11,
"message": "(#ActiveSupport::BroadcastLogger:0x00007f1007fedf58).debug("All config env vars exist")
expected: 0 times with arguments: ("All config env vars exist")
received: 1 time with arguments: ("All config env vars exist")",
"path": "./config/check_env_vars.rb",
},
"name": "CheckEnvVars#call when all env vars are defined behaves like success load fails in assertion",
"result": "failed",
"time": 0.004411051,
},
TestCaseResult {
"error": undefined,
"name": "CheckEnvVars#call when all env vars are defined behaves like success load logs success message",
"result": "success",
"time": 0.079159625,
},
TestCaseResult {
"error": undefined,
"name": "CheckEnvVars#call when all env vars are defined behaves like success load skips the test",
"result": "skipped",
"time": 0.000023007,
},
],
},
],
"name": "./spec/config/check_env_vars_spec.rb",
"totalTime": undefined,
},
],
"totalTime": 0.19118387,
}
`;

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

@@ -1,9 +1,15 @@
{"protocolVersion":"0.1.1","runnerVersion":"1.15.4","pid":21320,"type":"start","time":0} {"protocolVersion":"0.1.1","runnerVersion":"1.25.3","pid":7103,"type":"start","time":0}
{"suite":{"id":0,"platform":"vm","path":"test\\main_test.dart"},"type":"suite","time":0} {"suite":{"id":0,"platform":"vm","path":"test/second_test.dart"},"type":"suite","time":0}
{"test":{"id":1,"name":"loading test\\main_test.dart","suiteID":0,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":1} {"test":{"id":1,"name":"loading test/second_test.dart","suiteID":0,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":0}
{"suite":{"id":2,"platform":"vm","path":"test\\second_test.dart"},"type":"suite","time":11} {"suite":{"id":2,"platform":"vm","path":"test/main_test.dart"},"type":"suite","time":4}
{"test":{"id":3,"name":"loading test\\second_test.dart","suiteID":2,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":11} {"test":{"id":3,"name":"loading test/main_test.dart","suiteID":2,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":4}
{"count":2,"type":"allSuites","time":11} {"count":2,"time":5,"type":"allSuites"}
{"testID":1,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":4018} {"testID":1,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":294}
{"testID":3,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":4025} {"testID":3,"messageType":"print","message":"Hello from the test","type":"print","time":297}
{"success":true,"type":"done","time":4029} {"testID":3,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":321}
{"group":{"id":4,"suiteID":2,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":0,"line":null,"column":null,"url":null},"type":"group","time":322}
{"test":{"id":5,"name":"(setUpAll)","suiteID":2,"groupIDs":[4],"metadata":{"skip":false,"skipReason":null},"line":6,"column":3,"url":"file:///Users/domu/Downloads/test-reporter/reports/dart/test/main_test.dart"},"type":"testStart","time":322}
{"testID":5,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":330}
{"test":{"id":6,"name":"(tearDownAll)","suiteID":2,"groupIDs":[4],"metadata":{"skip":false,"skipReason":null},"line":7,"column":3,"url":"file:///Users/domu/Downloads/test-reporter/reports/dart/test/main_test.dart"},"type":"testStart","time":330}
{"testID":6,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":331}
{"success":true,"type":"done","time":333}

View File

@@ -0,0 +1,17 @@
{
"version": "3.13.0",
"messages": [
"No examples found."
],
"examples": [
],
"summary": {
"duration": 0.002514266,
"example_count": 0,
"failure_count": 0,
"pending_count": 0,
"errors_outside_of_examples_count": 0
},
"summary_line": "0 examples, 0 failures"
}

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,53 @@
{
"version": "3.13.0",
"examples": [
{
"id": "./spec/config/check_env_vars_spec.rb[1:1:1:1:1]",
"description": "logs success message",
"full_description": "CheckEnvVars#call when all env vars are defined behaves like success load logs success message",
"status": "passed",
"file_path": "./spec/config/check_env_vars_spec.rb",
"line_number": 12,
"run_time": 0.079159625,
"pending_message": null
},
{
"id": "./spec/config/check_env_vars_spec.rb[1:1:1:1:2]",
"description": "fails in assertion",
"full_description": "CheckEnvVars#call when all env vars are defined behaves like success load fails in assertion",
"status": "failed",
"file_path": "./spec/config/check_env_vars_spec.rb",
"line_number": 17,
"run_time": 0.004411051,
"pending_message": null,
"exception": {
"class": "RSpec::Mocks::MockExpectationError",
"message": "(#ActiveSupport::BroadcastLogger:0x00007f1007fedf58).debug(\"All config env vars exist\")\n expected: 0 times with arguments: (\"All config env vars exist\")\n received: 1 time with arguments: (\"All config env vars exist\")",
"backtrace": [
"/usr/local/bundle/ruby/3.3.0/gems/net-http-0.4.1/lib/net/http.rb:1603:in `initialize'",
"./config/check_env_vars.rb:11:in `call'",
"./spec/config/check_env_vars_spec.rb:7:in `block (3 levels) in \u003ctop (required)\u003e'",
"./spec/config/check_env_vars_spec.rb:19:in `block (4 levels) in \u003ctop (required)\u003e'"
]
}
},
{
"id": "./spec/config/check_env_vars_spec.rb[1:1:1:1:4]",
"description": "skips the test",
"full_description": "CheckEnvVars#call when all env vars are defined behaves like success load skips the test",
"status": "pending",
"file_path": "./spec/config/check_env_vars_spec.rb",
"line_number": 27,
"run_time": 2.3007e-05,
"pending_message": "Temporarily skipped with xit"
}
],
"summary": {
"duration": 0.19118387,
"example_count": 3,
"failure_count": 1,
"pending_count": 1,
"errors_outside_of_examples_count": 0
},
"summary_line": "3 examples, 1 failures, 1 pending"
}

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.mkdirSync(path.dirname(outputPath), {recursive: true})
fs.writeFileSync(outputPath, report) 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,45 @@
import * as fs from 'fs'
import * as path from 'path'
import {RspecJsonParser} from '../src/parsers/rspec-json/rspec-json-parser'
import {ParseOptions} from '../src/test-parser'
import {getReport} from '../src/report/get-report'
import {normalizeFilePath} from '../src/utils/path-utils'
describe('rspec-json tests', () => {
it('produces empty test run result when there are no test cases', async () => {
const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'rspec-json.json')
const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
const opts: ParseOptions = {
parseErrors: true,
trackedFiles: []
}
const parser = new RspecJsonParser(opts)
const result = await parser.parse(filePath, fileContent)
expect(result.tests).toBe(0)
expect(result.result).toBe('success')
})
it('report from ./reports/rspec-json test results matches snapshot', async () => {
const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json')
const outputPath = path.join(__dirname, '__outputs__', 'rspec-json.md')
const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
const opts: ParseOptions = {
parseErrors: true,
trackedFiles: ['test/main.test.js', 'test/second.test.js', 'lib/main.js']
}
const parser = new RspecJsonParser(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,8 @@ inputs:
- java-junit - java-junit
- jest-junit - jest-junit
- mocha-json - mocha-json
- rspec-json
- swift-xunit
required: true required: true
list-suites: list-suites:
description: | description: |
@@ -94,7 +96,7 @@ outputs:
url_html: url_html:
description: Check run URL HTML description: Check run URL HTML
runs: runs:
using: 'node16' using: 'node20'
main: 'dist/index.js' main: 'dist/index.js'
branding: branding:
color: blue color: blue

35083
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. 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 @nodelib/fs.scandir
MIT MIT
The MIT License (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. 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 json-buffer
MIT MIT
Copyright (c) 2013 Dominic Tarr 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. 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 normalize-url
MIT MIT
MIT License MIT License
@@ -1458,9 +1429,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
tr46
MIT
tunnel tunnel
MIT MIT
The MIT License (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. 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 universal-user-agent
ISC ISC
# [ISC License](https://spdx.org/licenses/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. 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 wrappy
ISC ISC
The ISC License The ISC License

3044
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "test-check", "name": "test-reporter",
"version": "1.7.0", "version": "1.9.1",
"private": true, "private": true,
"description": "Presents test results from popular testing frameworks as Github check run", "description": "Presents test results from popular testing frameworks as Github check run",
"main": "lib/main.js", "main": "lib/main.js",
@@ -12,6 +12,7 @@
"package": "ncc build --license licenses.txt && eolConverter lf 'dist/*'", "package": "ncc build --license licenses.txt && eolConverter lf 'dist/*'",
"version": "npm run build && npm run package && git add dist/*", "version": "npm run build && npm run package && git add dist/*",
"test": "jest --ci --reporters=default --reporters=jest-junit", "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", "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\"", "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\"", "dotnet-fixture": "dotnet test reports/dotnet/DotnetTests.XUnitTests --logger \"trx;LogFileName=../../../../__tests__/fixtures/dotnet-trx.trx\"",
@@ -20,7 +21,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/dorny/test-check.git" "url": "git+https://github.com/dorny/test-reporter.git"
}, },
"keywords": [ "keywords": [
"actions", "actions",
@@ -31,42 +32,42 @@
"author": "Michal Dorner <dorner.michal@gmail.com>", "author": "Michal Dorner <dorner.michal@gmail.com>",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.0", "@actions/core": "^1.10.1",
"@actions/exec": "^1.1.1", "@actions/exec": "^1.1.1",
"@actions/github": "^5.0.3", "@actions/github": "^6.0.0",
"adm-zip": "^0.5.3", "adm-zip": "^0.5.12",
"fast-glob": "^3.2.5", "fast-glob": "^3.3.2",
"got": "^11.8.2", "got": "^11.8.6",
"picomatch": "^2.2.2", "picomatch": "^4.0.2",
"xml2js": "^0.5.0" "xml2js": "^0.6.2"
}, },
"devDependencies": { "devDependencies": {
"@octokit/types": "^7.1.0", "@octokit/types": "^12.4.0",
"@octokit/webhooks": "^10.1.5", "@octokit/webhooks": "^12.0.11",
"@octokit/webhooks-types": "^6.3.6", "@octokit/webhooks-types": "^7.3.1",
"@types/adm-zip": "^0.5.0", "@types/adm-zip": "^0.5.5",
"@types/github-slugger": "^1.3.0", "@types/github-slugger": "^1.3.0",
"@types/jest": "^28.1.7", "@types/jest": "^29.5.12",
"@types/node": "^18.7.7", "@types/node": "^18.19.32",
"@types/picomatch": "^2.2.1", "@types/picomatch": "^2.3.3",
"@types/xml2js": "^0.4.8", "@types/xml2js": "^0.4.14",
"@typescript-eslint/eslint-plugin": "^5.33.1", "@typescript-eslint/eslint-plugin": "^7.8.0",
"@typescript-eslint/parser": "^5.33.1", "@typescript-eslint/parser": "^7.8.0",
"@vercel/ncc": "^0.34.0", "@vercel/ncc": "^0.38.1",
"eol-converter-cli": "^1.0.8", "eol-converter-cli": "^1.0.8",
"eslint": "^8.22.0", "eslint": "^8.57.0",
"eslint-import-resolver-typescript": "^3.4.2", "eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-github": "^4.1.2", "eslint-plugin-github": "^4.10.2",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^26.8.3", "eslint-plugin-jest": "^27.9.0",
"eslint-plugin-prettier": "^5.0.0", "eslint-plugin-prettier": "^5.1.3",
"jest": "^28.1.3", "jest": "^29.7.0",
"jest-circus": "^28.1.3", "jest-circus": "^29.7.0",
"jest-junit": "^14.0.0", "jest-junit": "^16.0.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"prettier": "^3.0.0", "prettier": "^3.2.5",
"ts-jest": "^28.0.8", "ts-jest": "^29.1.2",
"typescript": "^4.7.4" "typescript": "^5.4.5"
}, },
"jest-junit": { "jest-junit": {
"suiteName": "jest tests", "suiteName": "jest tests",

View File

@@ -5,344 +5,377 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
url: "https://pub.dartlang.org" sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.dev"
source: hosted source: hosted
version: "11.0.0" version: "67.0.0"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
url: "https://pub.dartlang.org" sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.40.4" version: "6.4.1"
args: args:
dependency: transitive dependency: transitive
description: description:
name: args name: args
url: "https://pub.dartlang.org" sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.6.0" version: "2.5.0"
async: async:
dependency: transitive dependency: transitive
description: description:
name: async name: async
url: "https://pub.dartlang.org" sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.11.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
url: "https://pub.dartlang.org" sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "2.1.1"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.3"
cli_util:
dependency: transitive
description:
name: cli_util
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.dartlang.org" sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted source: hosted
version: "1.14.13" version: "1.18.0"
convert: convert:
dependency: transitive dependency: transitive
description: description:
name: convert name: convert
url: "https://pub.dartlang.org" sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "3.1.1"
coverage: coverage:
dependency: transitive dependency: transitive
description: description:
name: coverage name: coverage
url: "https://pub.dartlang.org" sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.14.1" version: "1.7.2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
name: crypto name: crypto
url: "https://pub.dartlang.org" sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "3.0.3"
file:
dependency: transitive
description:
name: file
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
frontend_server_client:
dependency: transitive
description:
name: frontend_server_client
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
url: "https://pub.dev"
source: hosted
version: "4.0.0"
glob: glob:
dependency: transitive dependency: transitive
description: description:
name: glob name: glob
url: "https://pub.dartlang.org" sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "2.1.2"
http:
dependency: transitive
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.2"
http_multi_server: http_multi_server:
dependency: transitive dependency: transitive
description: description:
name: http_multi_server name: http_multi_server
url: "https://pub.dartlang.org" sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "3.2.1"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
name: http_parser name: http_parser
url: "https://pub.dartlang.org" sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.4" version: "4.0.2"
io: io:
dependency: transitive dependency: transitive
description: description:
name: io name: io
url: "https://pub.dartlang.org" sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.4" version: "1.0.4"
js: js:
dependency: transitive dependency: transitive
description: description:
name: js name: js
url: "https://pub.dartlang.org" sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.2" version: "0.7.1"
logging: logging:
dependency: transitive dependency: transitive
description: description:
name: logging name: logging
url: "https://pub.dartlang.org" sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.4" version: "1.2.0"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
url: "https://pub.dartlang.org" sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.9" version: "0.12.16+1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.dartlang.org" sha256: "25dfcaf170a0190f47ca6355bdd4552cb8924b430512ff0cafb8db9bd41fe33b"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.3" version: "1.14.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
name: mime name: mime
url: "https://pub.dartlang.org" sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.7" version: "1.0.5"
node_interop:
dependency: transitive
description:
name: node_interop
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
node_io:
dependency: transitive
description:
name: node_io
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
node_preamble: node_preamble:
dependency: transitive dependency: transitive
description: description:
name: node_preamble name: node_preamble
url: "https://pub.dartlang.org" sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.12" version: "2.0.2"
package_config: package_config:
dependency: transitive dependency: transitive
description: description:
name: package_config name: package_config
url: "https://pub.dartlang.org" sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.3" version: "2.1.0"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
url: "https://pub.dartlang.org" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.0" version: "1.9.0"
pedantic: pedantic:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: pedantic name: pedantic
url: "https://pub.dartlang.org" sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.2" version: "1.11.1"
pool: pool:
dependency: transitive dependency: transitive
description: description:
name: pool name: pool
url: "https://pub.dartlang.org" sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.5.1"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
name: pub_semver name: pub_semver
url: "https://pub.dartlang.org" sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.4" version: "2.1.4"
shelf: shelf:
dependency: transitive dependency: transitive
description: description:
name: shelf name: shelf
url: "https://pub.dartlang.org" sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.9" version: "1.4.1"
shelf_packages_handler: shelf_packages_handler:
dependency: transitive dependency: transitive
description: description:
name: shelf_packages_handler name: shelf_packages_handler
url: "https://pub.dartlang.org" sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "3.0.2"
shelf_static: shelf_static:
dependency: transitive dependency: transitive
description: description:
name: shelf_static name: shelf_static
url: "https://pub.dartlang.org" sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e
url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.8" version: "1.1.2"
shelf_web_socket: shelf_web_socket:
dependency: transitive dependency: transitive
description: description:
name: shelf_web_socket name: shelf_web_socket
url: "https://pub.dartlang.org" sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.3" version: "1.0.4"
source_map_stack_trace: source_map_stack_trace:
dependency: transitive dependency: transitive
description: description:
name: source_map_stack_trace name: source_map_stack_trace
url: "https://pub.dartlang.org" sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "2.1.1"
source_maps: source_maps:
dependency: transitive dependency: transitive
description: description:
name: source_maps name: source_maps
url: "https://pub.dartlang.org" sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.10.9" version: "0.10.12"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
url: "https://pub.dartlang.org" sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.0" version: "1.10.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.5" version: "1.11.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.dartlang.org" sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "2.1.2"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
url: "https://pub.dartlang.org" sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.5" version: "1.2.0"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
url: "https://pub.dartlang.org" sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.2.1"
test: test:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: test name: test
url: "https://pub.dartlang.org" sha256: d87214d19fb311997d8128ec501a980f77cb240ac4e7e219accf452813ff473c
url: "https://pub.dev"
source: hosted source: hosted
version: "1.15.4" version: "1.25.3"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.dartlang.org" sha256: "2419f20b0c8677b2d67c8ac4d1ac7372d862dc6c460cdbb052b40155408cd794"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.18" version: "0.7.1"
test_core: test_core:
dependency: transitive dependency: transitive
description: description:
name: test_core name: test_core
url: "https://pub.dartlang.org" sha256: "2236f70be1e5ab405c675e88c36935a87dad9e05a506b57dd5c0f617f5aebcb2"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.11+1" version: "0.6.1"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.3.2"
vm_service: vm_service:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
url: "https://pub.dartlang.org" sha256: a75f83f14ad81d5fe4b3319710b90dec37da0e22612326b696c9e1b8f34bbf48
url: "https://pub.dev"
source: hosted source: hosted
version: "4.2.0" version: "14.2.0"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:
name: watcher name: watcher
url: "https://pub.dartlang.org" sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.7+15" version: "1.1.0"
web:
dependency: transitive
description:
name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
name: web_socket_channel name: web_socket_channel
url: "https://pub.dartlang.org" sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "2.4.5"
webkit_inspection_protocol: webkit_inspection_protocol:
dependency: transitive dependency: transitive
description: description:
name: webkit_inspection_protocol name: webkit_inspection_protocol
url: "https://pub.dartlang.org" sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.3" version: "1.2.1"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
name: yaml name: yaml
url: "https://pub.dartlang.org" sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "3.1.2"
sdks: sdks:
dart: ">=2.8.1 <3.0.0" dart: ">=3.3.0 <4.0.0"

View File

@@ -2,7 +2,7 @@ name: darttest
description: A simple command-line application. description: A simple command-line application.
environment: environment:
sdk: '>=2.8.1 <3.0.0' sdk: '>=2.12.0 <3.0.0'
dev_dependencies: dev_dependencies:
pedantic: ^1.9.0 pedantic: ^1.9.0

View File

@@ -64,24 +64,38 @@
} }
} }
}, },
"@babel/helper-function-name": { "@babel/helper-environment-visitor": {
"version": "7.10.4", "version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true, "dev": true
"requires": {
"@babel/helper-get-function-arity": "^7.10.4",
"@babel/template": "^7.10.4",
"@babel/types": "^7.10.4"
}
}, },
"@babel/helper-get-function-arity": { "@babel/helper-hoist-variables": {
"version": "7.10.4", "version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true, "dev": true,
"requires": { "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": { "@babel/helper-member-expression-to-functions": {
@@ -164,6 +178,12 @@
"@babel/types": "^7.11.0" "@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": { "@babel/helper-validator-identifier": {
"version": "7.10.4", "version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
@@ -361,20 +381,159 @@
} }
}, },
"@babel/traverse": { "@babel/traverse": {
"version": "7.12.1", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
"integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.10.4", "@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.12.1", "@babel/generator": "^7.23.0",
"@babel/helper-function-name": "^7.10.4", "@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-split-export-declaration": "^7.11.0", "@babel/helper-function-name": "^7.23.0",
"@babel/parser": "^7.12.1", "@babel/helper-hoist-variables": "^7.22.5",
"@babel/types": "^7.12.1", "@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.0",
"@babel/types": "^7.23.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0", "globals": "^11.1.0"
"lodash": "^4.17.19" },
"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": { "@babel/types": {
@@ -615,6 +774,45 @@
"chalk": "^4.0.0" "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": { "@sinonjs/commons": {
"version": "1.8.1", "version": "1.8.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",

View File

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

View File

@@ -29,7 +29,12 @@ import {
} from '../../test-results' } from '../../test-results'
class TestRun { 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 { class TestSuite {
@@ -74,7 +79,10 @@ class TestCase {
export class DartJsonParser implements TestParser { export class DartJsonParser implements TestParser {
assumedWorkDir: string | undefined 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> { async parse(path: string, content: string): Promise<TestRunResult> {
const tr = this.getTestRun(path, content) const tr = this.getTestRun(path, content)
@@ -115,7 +123,7 @@ export class DartJsonParser implements TestParser {
const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]] const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]]
group.tests.push(test) group.tests.push(test)
tests[evt.test.id] = test tests[evt.test.id] = test
} else if (isTestDoneEvent(evt) && !evt.hidden && tests[evt.testID]) { } else if (isTestDoneEvent(evt) && tests[evt.testID]) {
tests[evt.testID].testDone = evt tests[evt.testID].testDone = evt
} else if (isErrorEvent(evt) && tests[evt.testID]) { } else if (isErrorEvent(evt) && tests[evt.testID]) {
tests[evt.testID].error = evt tests[evt.testID].error = evt
@@ -144,14 +152,16 @@ export class DartJsonParser implements TestParser {
return groups.map(group => { return groups.map(group => {
group.tests.sort((a, b) => (a.testStart.test.line ?? 0) - (b.testStart.test.line ?? 0)) group.tests.sort((a, b) => (a.testStart.test.line ?? 0) - (b.testStart.test.line ?? 0))
const tests = group.tests.map(tc => { const tests = group.tests
const error = this.getError(suite, tc) .filter(tc => !tc.testDone?.hidden)
const testName = .map(tc => {
group.group.name !== undefined && tc.testStart.test.name.startsWith(group.group.name) const error = this.getError(suite, tc)
? tc.testStart.test.name.slice(group.group.name.length).trim() const testName =
: tc.testStart.test.name.trim() group.group.name !== undefined && tc.testStart.test.name.startsWith(group.group.name)
return new TestCaseResult(testName, tc.result, tc.time, error) ? tc.testStart.test.name.slice(group.group.name.length).trim()
}) : tc.testStart.test.name.trim()
return new TestCaseResult(testName, tc.result, tc.time, error)
})
return new TestGroupResult(group.group.name, tests) return new TestGroupResult(group.group.name, tests)
}) })
} }

View File

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

View File

@@ -0,0 +1,113 @@
import { Console } from 'console'
import {ParseOptions, TestParser} from '../../test-parser'
import {
TestCaseError,
TestCaseResult,
TestExecutionResult,
TestGroupResult,
TestRunResult,
TestSuiteResult
} from '../../test-results'
import {RspecJson, RspecExample} from './rspec-json-types'
export class RspecJsonParser implements TestParser {
assumedWorkDir: string | undefined
constructor(readonly options: ParseOptions) {}
async parse(path: string, content: string): Promise<TestRunResult> {
const mocha = this.getRspecJson(path, content)
const result = this.getTestRunResult(path, mocha)
result.sort(true)
return Promise.resolve(result)
}
private getRspecJson(path: string, content: string): RspecJson {
try {
return JSON.parse(content)
} catch (e) {
throw new Error(`Invalid JSON at ${path}\n\n${e}`)
}
}
private getTestRunResult(resultsPath: string, rspec: RspecJson): TestRunResult {
const suitesMap: {[path: string]: TestSuiteResult} = {}
const getSuite = (test: RspecExample): TestSuiteResult => {
const path = test.file_path
return suitesMap[path] ?? (suitesMap[path] = new TestSuiteResult(path, []))
}
for (const test of rspec.examples) {
const suite = getSuite(test)
if (test.status === 'failed') {
this.processTest(suite, test, 'failed')
} else if (test.status === 'passed') {
this.processTest(suite, test, 'success')
} else if (test.status === 'pending') {
this.processTest(suite, test, 'skipped')
}
}
const suites = Object.values(suitesMap)
return new TestRunResult(resultsPath, suites, rspec.summary.duration)
}
private processTest(suite: TestSuiteResult, test: RspecExample, result: TestExecutionResult): void {
const groupName =
test.full_description !== test.description
? test.full_description.substr(0, test.full_description.length - test.description.length).trimEnd()
: null
let group = suite.groups.find(grp => grp.name === groupName)
if (group === undefined) {
group = new TestGroupResult(groupName, [])
suite.groups.push(group)
}
const error = this.getTestCaseError(test)
const testCase = new TestCaseResult(test.full_description, result, test.run_time ?? 0, error)
group.tests.push(testCase)
}
private getTestCaseError(test: RspecExample): TestCaseError | undefined {
const backtrace = test.exception?.backtrace
const message = test.exception?.message
if (backtrace === undefined) {
return undefined
}
let path
let line
const details = backtrace.join('\n')
const src = this.getExceptionSource(backtrace)
if (src) {
path = src.path
line = src.line
}
return {
path,
line,
message,
details
}
}
private getExceptionSource(backtrace: string[]): {path: string; line: number} | undefined {
const re = /^(.*?):(\d+):/
for (const str of backtrace) {
const match = str.match(re)
if (match !== null) {
const [_, path, lineStr] = match
if (path.startsWith('./')) {
const line = parseInt(lineStr)
return {path, line}
}
}
}
return undefined
}
}

View File

@@ -0,0 +1,34 @@
export interface RspecJson {
version: number
examples: RspecExample[]
summary: RspecSummary
summary_line: string
}
export interface RspecExample {
id: string
description: string
full_description: string
status: TestStatus
file_path: string
line_number: number
run_time: number
pending_message: string | null
exception?: RspecException
}
type TestStatus = 'passed' | 'failed' | 'pending';
export interface RspecException {
class: string
message: string
backtrace: string[]
}
export interface RspecSummary {
duration: number
example_count: number
failure_count: number
pending_count: number
errors_outside_of_examples_count: number
}

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)
}
}

View File

@@ -50,33 +50,17 @@ export async function downloadArtifact(
const headers = { const headers = {
Authorization: `Bearer ${token}` Authorization: `Bearer ${token}`
} }
const resp = await got(req.url, {
headers,
followRedirect: false
})
core.info(`Fetch artifact URL: ${resp.statusCode} ${resp.statusMessage}`) const downloadStream = got.stream(req.url, {headers})
if (resp.statusCode !== 302) {
throw new Error('Fetch artifact URL failed: received unexpected status code')
}
const url = resp.headers.location
if (url === undefined) {
const receivedHeaders = Object.keys(resp.headers)
core.info(`Received headers: ${receivedHeaders.join(', ')}`)
throw new Error('Location header was not found in API response')
}
if (typeof url !== 'string') {
throw new Error(`Location header has unexpected value: ${url}`)
}
const downloadStream = got.stream(url, {headers})
const fileWriterStream = createWriteStream(fileName) const fileWriterStream = createWriteStream(fileName)
core.info(`Downloading ${url}`) downloadStream.on('redirect', response => {
core.info(`Downloading ${response.headers.location}`)
})
downloadStream.on('downloadProgress', ({transferred}) => { downloadStream.on('downloadProgress', ({transferred}) => {
core.info(`Progress: ${transferred} B`) core.info(`Progress: ${transferred} B`)
}) })
await asyncStream(downloadStream, fileWriterStream) await asyncStream(downloadStream, fileWriterStream)
} finally { } finally {
core.endGroup() core.endGroup()