diff --git a/README.md b/README.md
index 57904469..795cec45 100644
--- a/README.md
+++ b/README.md
@@ -49,9 +49,9 @@ jobs:
# Name of the Check Run which will be created
name: ''
- # Path to test report
+ # Coma separated list of paths to test reports
# Supports wildcards via [fast-glob](https://github.com/mrmlnc/fast-glob)
- # Path may match multiple result files of same format
+ # All matched result files must be of same format
path: ''
# Format of test report. Supported options:
@@ -61,8 +61,20 @@ jobs:
# jest-junit
reporter: ''
- # Enables code annotations with error message and stack trace captured during test execution
- annotations: 'true'
+ # Limits which test suites are listed:
+ # all
+ # failed
+ list-suites: 'all'
+
+ # Limits which test cases are listed:
+ # all
+ # failed
+ # none
+ list-tests: 'all'
+
+ # Limits number of created annotations with error message and stack trace captured during test execution.
+ # Must be less or equal to 50.
+ max-annotations: '10'
# Set action as failed if test report contain any failed test
fail-on-error: 'true'
@@ -109,7 +121,7 @@ Or you can configure TRX test output in `*.csproj` or `Directory.Build.props`:
```xml
trx%3bLogFileName=$(MSBuildProjectName).trx
- $(MSBuildThisFileDirectory)/reports
+ $(MSBuildThisFileDirectory)/TestResults/$(TargetFramework)
```
diff --git a/__tests__/__outputs__/dart-json.md b/__tests__/__outputs__/dart-json.md
index ee54e1de..7efe01c4 100644
--- a/__tests__/__outputs__/dart-json.md
+++ b/__tests__/__outputs__/dart-json.md
@@ -1,40 +1,32 @@
-![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20skipped%2C%204%20failed-critical)
-
-### fixtures/dart-json.json
-
-**6** tests were completed in **3.760s** with **1** passed, **1** skipped and **4** failed.
-
-| Result | Suite | Tests | Time | Passed ✔️ | Skipped ✖️ | Failed ❌ |
-| :---: | :--- | ---: | ---: | ---: | ---: | ---: |
-| ❌ | [test\main_test.dart](#ts-0-test-maintest-dart) | 4 | 74ms | 1 | 0 | 3 |
-| ❌ | [test\second_test.dart](#ts-1-test-secondtest-dart) | 2 | 51ms | 0 | 1 | 1 |
-
-# Test Suites
-
-## test\main_test.dart ❌
-
-### Test 1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ✔️ | Test 1 Passing test | 36ms |
-
-### Test 1 Test 1.1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Test 1 Test 1.1 Failing test | 20ms |
-| ❌ | Test 1 Test 1.1 Exception in target unit | 6ms |
-
-### Test 2
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Test 2 Exception in test | 12ms |
-
-## test\second_test.dart ❌
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Timeout test | 37ms |
-| ✖️ | Skipped test | 14ms |
+![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical)
+## fixtures/dart-json.json ❌
+**6** tests were completed in **3.760s** with **1** passed, **4** failed and **1** skipped.
+|Test suite|Passed|Failed|Skipped|Time|
+|:---|---:|---:|---:|---:|
+|[test\main_test.dart](#r0s0)|1✔️|3❌||74ms|
+|[test\second_test.dart](#r0s1)||1❌|1✖️|51ms|
+### test\main_test.dart ❌
+**4** tests were completed in **74ms** with **1** passed, **3** failed and **0** skipped.
+
+**Test 1**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|Test 1 Passing test|36ms|
+
+**Test 1 Test 1.1**
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Test 1 Test 1.1 Failing test|20ms|
+|❌|Test 1 Test 1.1 Exception in target unit|6ms|
+
+**Test 2**
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Test 2 Exception in test|12ms|
+### test\second_test.dart ❌
+**2** tests were completed in **51ms** with **0** passed, **1** failed and **1** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Timeout test|37ms|
+|✖️|Skipped test|14ms|
\ No newline at end of file
diff --git a/__tests__/__outputs__/dotnet-trx.md b/__tests__/__outputs__/dotnet-trx.md
index f89a0079..60920684 100644
--- a/__tests__/__outputs__/dotnet-trx.md
+++ b/__tests__/__outputs__/dotnet-trx.md
@@ -1,23 +1,18 @@
-![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%201%20skipped%2C%203%20failed-critical)
+![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%203%20failed%2C%201%20skipped-critical)
+## fixtures/dotnet-trx.trx ❌
+**7** tests were completed in **1.061s** with **3** passed, **3** failed and **1** skipped.
+|Test suite|Passed|Failed|Skipped|Time|
+|:---|---:|---:|---:|---:|
+|[DotnetTests.XUnitTests.CalculatorTests](#r0s0)|3✔️|3❌|1✖️|110ms|
+### DotnetTests.XUnitTests.CalculatorTests ❌
+**7** tests were completed in **110ms** with **3** passed, **3** failed and **1** skipped.
-### fixtures/dotnet-trx.trx
-
-**7** tests were completed in **1.061s** with **3** passed, **1** skipped and **3** failed.
-
-| Result | Suite | Tests | Time | Passed ✔️ | Skipped ✖️ | Failed ❌ |
-| :---: | :--- | ---: | ---: | ---: | ---: | ---: |
-| ❌ | [DotnetTests.XUnitTests.CalculatorTests](#ts-0-DotnetTests-XUnitTests-CalculatorTests) | 7 | 109.5761ms | 3 | 1 | 3 |
-
-# Test Suites
-
-## DotnetTests.XUnitTests.CalculatorTests ❌
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Exception_In_TargetTest | 0.4975ms |
-| ❌ | Exception_In_Test | 2.2728ms |
-| ❌ | Failing_Test | 3.2953ms |
-| ✔️ | Passing_Test | 0.1254ms |
-| ✔️ | Passing_Test_With_Name | 0.103ms |
-| ✖️ | Skipped_Test | 1ms |
-| ✔️ | Timeout_Test | 102.2821ms |
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Exception_In_TargetTest|0ms|
+|❌|Exception_In_Test|2ms|
+|❌|Failing_Test|3ms|
+|✔️|Passing_Test|0ms|
+|✔️|Passing_Test_With_Name|0ms|
+|✖️|Skipped_Test|1ms|
+|✔️|Timeout_Test|102ms|
\ No newline at end of file
diff --git a/__tests__/__outputs__/fluent-validation-test-results.md b/__tests__/__outputs__/fluent-validation-test-results.md
new file mode 100644
index 00000000..565f5147
--- /dev/null
+++ b/__tests__/__outputs__/fluent-validation-test-results.md
@@ -0,0 +1,67 @@
+![Tests passed successfully](https://img.shields.io/badge/tests-803%20passed%2C%201%20skipped-success)
+## fixtures/external/FluentValidation.Tests.trx ✔️
+**804** tests were completed in **4.480s** with **803** passed, **0** failed and **1** skipped.
+|Test suite|Passed|Failed|Skipped|Time|
+|:---|---:|---:|---:|---:|
+|FluentValidation.Tests.AbstractValidatorTester|35✔️|||12ms|
+|FluentValidation.Tests.AccessorCacheTests|4✔️||1✖️|4ms|
+|FluentValidation.Tests.AssemblyScannerTester|2✔️|||2ms|
+|FluentValidation.Tests.CascadingFailuresTester|38✔️|||23ms|
+|FluentValidation.Tests.ChainedValidationTester|13✔️|||6ms|
+|FluentValidation.Tests.ChainingValidatorsTester|3✔️|||1ms|
+|FluentValidation.Tests.ChildRulesTests|2✔️|||7ms|
+|FluentValidation.Tests.CollectionValidatorWithParentTests|16✔️|||13ms|
+|FluentValidation.Tests.ComplexValidationTester|17✔️|||26ms|
+|FluentValidation.Tests.ConditionTests|18✔️|||9ms|
+|FluentValidation.Tests.CreditCardValidatorTests|2✔️|||2ms|
+|FluentValidation.Tests.CustomFailureActionTester|3✔️|||1ms|
+|FluentValidation.Tests.CustomMessageFormatTester|6✔️|||3ms|
+|FluentValidation.Tests.CustomValidatorTester|10✔️|||6ms|
+|FluentValidation.Tests.DefaultValidatorExtensionTester|30✔️|||38ms|
+|FluentValidation.Tests.EmailValidatorTests|36✔️|||18ms|
+|FluentValidation.Tests.EmptyTester|9✔️|||5ms|
+|FluentValidation.Tests.EnumValidatorTests|12✔️|||24ms|
+|FluentValidation.Tests.EqualValidatorTests|10✔️|||3ms|
+|FluentValidation.Tests.ExactLengthValidatorTester|6✔️|||2ms|
+|FluentValidation.Tests.ExclusiveBetweenValidatorTests|19✔️|||6ms|
+|FluentValidation.Tests.ExtensionTester|4✔️|||1ms|
+|FluentValidation.Tests.ForEachRuleTests|34✔️|||47ms|
+|FluentValidation.Tests.GreaterThanOrEqualToValidatorTester|14✔️|||5ms|
+|FluentValidation.Tests.GreaterThanValidatorTester|13✔️|||4ms|
+|FluentValidation.Tests.InclusiveBetweenValidatorTests|18✔️|||4ms|
+|FluentValidation.Tests.InheritanceValidatorTest|11✔️|||18ms|
+|FluentValidation.Tests.InlineValidatorTester|1✔️|||2ms|
+|FluentValidation.Tests.LanguageManagerTests|21✔️|||28ms|
+|FluentValidation.Tests.LengthValidatorTests|16✔️|||17ms|
+|FluentValidation.Tests.LessThanOrEqualToValidatorTester|13✔️|||4ms|
+|FluentValidation.Tests.LessThanValidatorTester|16✔️|||6ms|
+|FluentValidation.Tests.LocalisedMessagesTester|6✔️|||3ms|
+|FluentValidation.Tests.LocalisedNameTester|2✔️|||1ms|
+|FluentValidation.Tests.MemberAccessorTests|9✔️|||5ms|
+|FluentValidation.Tests.MessageFormatterTests|10✔️|||2ms|
+|FluentValidation.Tests.ModelLevelValidatorTests|2✔️|||1ms|
+|FluentValidation.Tests.NameResolutionPluggabilityTester|3✔️|||2ms|
+|FluentValidation.Tests.NotEmptyTester|10✔️|||7ms|
+|FluentValidation.Tests.NotEqualValidatorTests|11✔️|||7ms|
+|FluentValidation.Tests.NotNullTester|5✔️|||1ms|
+|FluentValidation.Tests.NullTester|5✔️|||2ms|
+|FluentValidation.Tests.OnFailureTests|10✔️|||8ms|
+|FluentValidation.Tests.PredicateValidatorTester|5✔️|||2ms|
+|FluentValidation.Tests.PropertyChainTests|7✔️|||1ms|
+|FluentValidation.Tests.RegularExpressionValidatorTests|15✔️|||6ms|
+|FluentValidation.Tests.RuleBuilderTests|29✔️|||96ms|
+|FluentValidation.Tests.RuleDependencyTests|14✔️|||2.511s|
+|FluentValidation.Tests.RulesetTests|21✔️|||14ms|
+|FluentValidation.Tests.ScalePrecisionValidatorTests|6✔️|||4ms|
+|FluentValidation.Tests.SharedConditionTests|42✔️|||42ms|
+|FluentValidation.Tests.StandalonePropertyValidationTester|1✔️|||0ms|
+|FluentValidation.Tests.StringEnumValidatorTests|10✔️|||5ms|
+|FluentValidation.Tests.TrackingCollectionTests|3✔️|||2ms|
+|FluentValidation.Tests.TransformTests|4✔️|||3ms|
+|FluentValidation.Tests.UserSeverityTester|7✔️|||3ms|
+|FluentValidation.Tests.UserStateTester|4✔️|||3ms|
+|FluentValidation.Tests.ValidateAndThrowTester|14✔️|||25ms|
+|FluentValidation.Tests.ValidationResultTests|8✔️|||8ms|
+|FluentValidation.Tests.ValidatorDescriptorTester|5✔️|||1ms|
+|FluentValidation.Tests.ValidatorSelectorTests|10✔️|||9ms|
+|FluentValidation.Tests.ValidatorTesterTester|73✔️|||74ms|
\ No newline at end of file
diff --git a/__tests__/__outputs__/jest-junit.md b/__tests__/__outputs__/jest-junit.md
index 97ca5c11..5ddef13e 100644
--- a/__tests__/__outputs__/jest-junit.md
+++ b/__tests__/__outputs__/jest-junit.md
@@ -1,40 +1,32 @@
-![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20skipped%2C%204%20failed-critical)
-
-### fixtures/jest-junit.xml
-
-**6** tests were completed in **1.360s** with **1** passed, **1** skipped and **4** failed.
-
-| Result | Suite | Tests | Time | Passed ✔️ | Skipped ✖️ | Failed ❌ |
-| :---: | :--- | ---: | ---: | ---: | ---: | ---: |
-| ❌ | [__tests__\main.test.js](#ts-0-tests-main-test-js) | 4 | 486ms | 1 | 0 | 3 |
-| ❌ | [__tests__\second.test.js](#ts-1-tests-second-test-js) | 2 | 82ms | 0 | 1 | 1 |
-
-# Test Suites
-
-## __tests__\main.test.js ❌
-
-### Test 1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ✔️ | Passing test | 1ms |
-
-### Test 1 › Test 1.1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Failing test | 2ms |
-| ❌ | Exception in target unit | 0ms |
-
-### Test 2
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Exception in test | 0ms |
-
-## __tests__\second.test.js ❌
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Timeout test | 4ms |
-| ✖️ | Skipped test | 0ms |
+![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical)
+## fixtures/jest-junit.xml ❌
+**6** tests were completed in **1.360s** with **1** passed, **4** failed and **1** skipped.
+|Test suite|Passed|Failed|Skipped|Time|
+|:---|---:|---:|---:|---:|
+|[__tests__\main.test.js](#r0s0)|1✔️|3❌||486ms|
+|[__tests__\second.test.js](#r0s1)||1❌|1✖️|82ms|
+### __tests__\main.test.js ❌
+**4** tests were completed in **486ms** with **1** passed, **3** failed and **0** skipped.
+
+**Test 1**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|Passing test|1ms|
+
+**Test 1 › Test 1.1**
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Failing test|2ms|
+|❌|Exception in target unit|0ms|
+
+**Test 2**
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Exception in test|0ms|
+### __tests__\second.test.js ❌
+**2** tests were completed in **82ms** with **0** passed, **1** failed and **1** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|❌|Timeout test|4ms|
+|✖️|Skipped test|0ms|
\ No newline at end of file
diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md
new file mode 100644
index 00000000..454c2f46
--- /dev/null
+++ b/__tests__/__outputs__/jest-test-results.md
@@ -0,0 +1,434 @@
+![Tests failed](https://img.shields.io/badge/tests-4207%20passed%2C%202%20failed%2C%2030%20skipped-critical)
+## fixtures/external/jest/jest-test-results.xml ❌
+**4239** tests were completed in **165.872s** with **4207** passed, **2** failed and **30** skipped.
+|Test suite|Passed|Failed|Skipped|Time|
+|:---|---:|---:|---:|---:|
+|e2e/__tests__/asyncAndCallback.test.ts|1✔️|||746ms|
+|e2e/__tests__/asyncRegenerator.test.ts|1✔️|||4.127s|
+|e2e/__tests__/autoClearMocks.test.ts|2✔️|||1.681s|
+|e2e/__tests__/autoResetMocks.test.ts|2✔️|||1.666s|
+|e2e/__tests__/autoRestoreMocks.test.ts|2✔️|||1.797s|
+|e2e/__tests__/babelPluginJestHoist.test.ts|1✔️|||6.249s|
+|e2e/__tests__/badSourceMap.test.ts|1✔️|||858ms|
+|e2e/__tests__/beforeAllFiltered.ts|1✔️|||958ms|
+|e2e/__tests__/beforeEachQueue.ts|1✔️||1✖️|55ms|
+|e2e/__tests__/callDoneTwice.test.ts|1✔️|||882ms|
+|e2e/__tests__/chaiAssertionLibrary.ts|1✔️|||1.902s|
+|e2e/__tests__/circularInequality.test.ts|1✔️|||1.451s|
+|e2e/__tests__/circusConcurrentEach.test.ts|2✔️|||1.591s|
+|e2e/__tests__/circusDeclarationErrors.test.ts|1✔️|||869ms|
+|e2e/__tests__/clearCache.test.ts|2✔️|||1.004s|
+|e2e/__tests__/cliHandlesExactFilenames.test.ts|2✔️|||1.230s|
+|e2e/__tests__/compareDomNodes.test.ts|1✔️|||1.407s|
+|e2e/__tests__/config.test.ts|6✔️|||3.945s|
+|e2e/__tests__/console.test.ts|7✔️|||8.072s|
+|e2e/__tests__/consoleAfterTeardown.test.ts|1✔️|||1.341s|
+|e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts|1✔️|||793ms|
+|e2e/__tests__/coverageHandlebars.test.ts|1✔️|||1.873s|
+|e2e/__tests__/coverageRemapping.test.ts|1✔️|||12.701s|
+|e2e/__tests__/coverageReport.test.ts|12✔️|||22.264s|
+|e2e/__tests__/coverageThreshold.test.ts|5✔️|||4.868s|
+|e2e/__tests__/coverageTransformInstrumented.test.ts|1✔️|||5.029s|
+|e2e/__tests__/coverageWithoutTransform.test.ts|1✔️|||1.075s|
+|e2e/__tests__/createProcessObject.test.ts|1✔️|||908ms|
+|e2e/__tests__/customInlineSnapshotMatchers.test.ts|1✔️|||2.206s|
+|e2e/__tests__/customMatcherStackTrace.test.ts|2✔️|||1.539s|
+|e2e/__tests__/customReporters.test.ts|9✔️|||6.553s|
+|e2e/__tests__/customResolver.test.ts|1✔️|||826ms|
+|e2e/__tests__/customTestSequencers.test.ts|3✔️|||2.757s|
+|e2e/__tests__/debug.test.ts|1✔️|||899ms|
+|e2e/__tests__/declarationErrors.test.ts|3✔️|||2.389s|
+|e2e/__tests__/dependencyClash.test.ts|1✔️|||833ms|
+|e2e/__tests__/detectOpenHandles.ts|8✔️|||7.528s|
+|e2e/__tests__/domDiffing.test.ts|1✔️|||1.361s|
+|e2e/__tests__/doneInHooks.test.ts|1✔️|||855ms|
+|e2e/__tests__/dynamicRequireDependencies.ts|1✔️|||847ms|
+|e2e/__tests__/each.test.ts|7✔️|||4.721s|
+|e2e/__tests__/emptyDescribeWithHooks.test.ts|4✔️|||2.886s|
+|e2e/__tests__/emptySuiteError.test.ts|1✔️|||885ms|
+|e2e/__tests__/env.test.ts|6✔️|||5.221s|
+|e2e/__tests__/environmentAfterTeardown.test.ts|1✔️|||892ms|
+|e2e/__tests__/errorOnDeprecated.test.ts|1✔️||24✖️|56ms|
+|e2e/__tests__/esmConfigFile.test.ts|3✔️|||526ms|
+|e2e/__tests__/executeTestsOnceInMpr.ts|1✔️|||976ms|
+|e2e/__tests__/existentRoots.test.ts|4✔️|||627ms|
+|e2e/__tests__/expectAsyncMatcher.test.ts|2✔️|||2.732s|
+|e2e/__tests__/expectInVm.test.ts|1✔️|||1.527s|
+|e2e/__tests__/extraGlobals.test.ts|1✔️|||1.011s|
+|e2e/__tests__/failureDetailsProperty.test.ts|1✔️|||907ms|
+|e2e/__tests__/failures.test.ts|7✔️|||10.353s|
+|e2e/__tests__/fakePromises.test.ts|2✔️|||1.716s|
+|e2e/__tests__/fatalWorkerError.test.ts|1✔️|||3.167s|
+|e2e/__tests__/filter.test.ts|7✔️|||5.422s|
+|e2e/__tests__/findRelatedFiles.test.ts|5✔️|||6.230s|
+|e2e/__tests__/focusedTests.test.ts|1✔️|||888ms|
+|e2e/__tests__/forceExit.test.ts|1✔️|||2.208s|
+|e2e/__tests__/generatorMock.test.ts|1✔️|||1.027s|
+|e2e/__tests__/global-mutation.test.ts|1✔️|||40ms|
+|e2e/__tests__/global.test.ts|1✔️|||31ms|
+|e2e/__tests__/globals.test.ts|10✔️|||7.505s|
+|e2e/__tests__/globalSetup.test.ts|10✔️|||13.926s|
+|e2e/__tests__/globalTeardown.test.ts|7✔️|||11.886s|
+|e2e/__tests__/hasteMapMockChanged.test.ts|1✔️|||379ms|
+|e2e/__tests__/hasteMapSha1.test.ts|1✔️|||298ms|
+|e2e/__tests__/hasteMapSize.test.ts|2✔️|||397ms|
+|e2e/__tests__/importedGlobals.test.ts|1✔️|||1.043s|
+|e2e/__tests__/injectGlobals.test.ts|2✔️|||1.860s|
+|e2e/__tests__/jasmineAsync.test.ts|15✔️|||28.291s|
+|e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts|1✔️||1✖️|72ms|
+|e2e/__tests__/jest.config.js.test.ts|3✔️|||2.134s|
+|e2e/__tests__/jest.config.ts.test.ts|5✔️|||14.322s|
+|[e2e/__tests__/jestChangedFiles.test.ts](#r0s75)|9✔️|1❌||9.045s|
+|e2e/__tests__/jestEnvironmentJsdom.test.ts|1✔️|||1.744s|
+|e2e/__tests__/jestRequireActual.test.ts|1✔️|||1.665s|
+|e2e/__tests__/jestRequireMock.test.ts|1✔️|||2.119s|
+|e2e/__tests__/json.test.ts|2✔️|||29ms|
+|e2e/__tests__/jsonReporter.test.ts|2✔️|||1.514s|
+|e2e/__tests__/lifecycles.ts|1✔️|||861ms|
+|e2e/__tests__/listTests.test.ts|2✔️|||945ms|
+|e2e/__tests__/locationInResults.test.ts|2✔️|||1.764s|
+|e2e/__tests__/logHeapUsage.test.ts|1✔️|||884ms|
+|e2e/__tests__/mockNames.test.ts|8✔️|||6.771s|
+|e2e/__tests__/modernFakeTimers.test.ts|2✔️|||1.680s|
+|e2e/__tests__/moduleNameMapper.test.ts|5✔️|||5.395s|
+|e2e/__tests__/moduleParentNullInTest.ts|1✔️|||886ms|
+|e2e/__tests__/multiProjectRunner.test.ts|14✔️|||16.360s|
+|e2e/__tests__/nativeAsyncMock.test.ts|1✔️|||55ms|
+|e2e/__tests__/nativeEsm.test.ts|2✔️||1✖️|905ms|
+|e2e/__tests__/nativeEsmTypescript.test.ts|1✔️|||956ms|
+|e2e/__tests__/nestedEventLoop.test.ts|1✔️|||1.422s|
+|e2e/__tests__/nestedTestDefinitions.test.ts|4✔️|||4.641s|
+|e2e/__tests__/nodePath.test.ts|1✔️|||866ms|
+|e2e/__tests__/noTestFound.test.ts|2✔️|||1.063s|
+|e2e/__tests__/noTestsFound.test.ts|5✔️|||2.739s|
+|[e2e/__tests__/onlyChanged.test.ts](#r0s98)|8✔️|1❌||22.281s|
+|e2e/__tests__/onlyFailuresNonWatch.test.ts|1✔️|||2.893s|
+|e2e/__tests__/overrideGlobals.test.ts|2✔️|||2.046s|
+|e2e/__tests__/pnp.test.ts|1✔️|||2.715s|
+|e2e/__tests__/presets.test.ts|2✔️|||1.966s|
+|e2e/__tests__/processExit.test.ts|1✔️|||1.070s|
+|e2e/__tests__/promiseReject.test.ts|1✔️|||967ms|
+|e2e/__tests__/regexCharInPath.test.ts|1✔️|||962ms|
+|e2e/__tests__/requireAfterTeardown.test.ts|1✔️|||921ms|
+|e2e/__tests__/requireMain.test.ts|1✔️|||1.137s|
+|e2e/__tests__/requireMainAfterCreateRequire.test.ts|1✔️|||966ms|
+|e2e/__tests__/requireMainIsolateModules.test.ts|1✔️|||976ms|
+|e2e/__tests__/requireMainResetModules.test.ts|2✔️|||1.961s|
+|e2e/__tests__/requireV8Module.test.ts|1✔️|||30ms|
+|e2e/__tests__/resetModules.test.ts|1✔️|||926ms|
+|e2e/__tests__/resolve.test.ts|1✔️|||1.863s|
+|e2e/__tests__/resolveGetPaths.test.ts|1✔️|||1.155s|
+|e2e/__tests__/resolveNodeModule.test.ts|1✔️|||943ms|
+|e2e/__tests__/resolveNoFileExtensions.test.ts|2✔️|||1.263s|
+|e2e/__tests__/resolveWithPaths.test.ts|1✔️|||1.170s|
+|e2e/__tests__/runProgrammatically.test.ts|2✔️|||575ms|
+|e2e/__tests__/runTestsByPath.test.ts|1✔️|||1.999s|
+|e2e/__tests__/runtimeInternalModuleRegistry.test.ts|1✔️|||1.202s|
+|e2e/__tests__/selectProjects.test.ts|18✔️|||5.236s|
+|e2e/__tests__/setImmediate.test.ts|1✔️|||904ms|
+|e2e/__tests__/setupFilesAfterEnvConfig.test.ts|2✔️|||1.967s|
+|e2e/__tests__/showConfig.test.ts|1✔️|||195ms|
+|e2e/__tests__/skipBeforeAfterAll.test.ts|1✔️|||1.061s|
+|e2e/__tests__/snapshot-unknown.test.ts|1✔️|||838ms|
+|e2e/__tests__/snapshot.test.ts|9✔️|||13.899s|
+|e2e/__tests__/snapshotMockFs.test.ts|1✔️|||883ms|
+|e2e/__tests__/snapshotResolver.test.ts|1✔️|||823ms|
+|e2e/__tests__/snapshotSerializers.test.ts|2✔️|||2.065s|
+|e2e/__tests__/stackTrace.test.ts|7✔️|||4.725s|
+|e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts|1✔️|||899ms|
+|e2e/__tests__/stackTraceSourceMaps.test.ts|1✔️|||2.185s|
+|e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts|1✔️|||2.444s|
+|e2e/__tests__/supportsDashedArgs.ts|2✔️|||968ms|
+|e2e/__tests__/symbol.test.ts|1✔️|||49ms|
+|e2e/__tests__/testEnvironment.test.ts|1✔️|||1.628s|
+|e2e/__tests__/testEnvironmentAsync.test.ts|1✔️|||1.493s|
+|e2e/__tests__/testEnvironmentCircus.test.ts|1✔️|||1.501s|
+|e2e/__tests__/testEnvironmentCircusAsync.test.ts|1✔️|||1.507s|
+|e2e/__tests__/testFailureExitCode.test.ts|2✔️|||4.476s|
+|e2e/__tests__/testInRoot.test.ts|1✔️|||1.009s|
+|e2e/__tests__/testNamePattern.test.ts|1✔️|||859ms|
+|e2e/__tests__/testNamePatternSkipped.test.ts|1✔️|||991ms|
+|e2e/__tests__/testPathPatternReporterMessage.test.ts|1✔️|||3.076s|
+|e2e/__tests__/testResultsProcessor.test.ts|1✔️|||910ms|
+|e2e/__tests__/testRetries.test.ts|4✔️|||3.277s|
+|e2e/__tests__/testTodo.test.ts|5✔️|||3.573s|
+|e2e/__tests__/timeouts.test.ts|4✔️|||4.029s|
+|e2e/__tests__/timeoutsLegacy.test.ts|1✔️||3✖️|71ms|
+|e2e/__tests__/timerResetMocks.test.ts|2✔️|||1.878s|
+|e2e/__tests__/timerUseRealTimers.test.ts|1✔️|||1.018s|
+|e2e/__tests__/toMatchInlineSnapshot.test.ts|12✔️|||23.917s|
+|e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts|3✔️|||4.670s|
+|e2e/__tests__/toMatchSnapshot.test.ts|9✔️|||17.025s|
+|e2e/__tests__/toMatchSnapshotWithRetries.test.ts|2✔️|||4.435s|
+|e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts|3✔️|||3.544s|
+|e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts|4✔️|||3.562s|
+|e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts|5✔️|||3.524s|
+|e2e/__tests__/transform.test.ts|16✔️|||26.740s|
+|e2e/__tests__/transformLinkedModules.test.ts|1✔️|||783ms|
+|e2e/__tests__/typescriptCoverage.test.ts|1✔️|||2.893s|
+|e2e/__tests__/unexpectedToken.test.ts|3✔️|||3.411s|
+|e2e/__tests__/useStderr.test.ts|1✔️|||1.352s|
+|e2e/__tests__/v8Coverage.test.ts|2✔️|||2.412s|
+|e2e/__tests__/verbose.test.ts|1✔️|||683ms|
+|e2e/__tests__/version.test.ts|1✔️|||138ms|
+|e2e/__tests__/watchModeNoAccess.test.ts|1✔️|||4.370s|
+|e2e/__tests__/watchModeOnlyFailed.test.ts|1✔️|||1.394s|
+|e2e/__tests__/watchModePatterns.test.ts|2✔️|||3.503s|
+|e2e/__tests__/watchModeUpdateSnapshot.test.ts|1✔️|||1.075s|
+|e2e/__tests__/workerForceExit.test.ts|2✔️|||4.751s|
+|e2e/__tests__/wrongEnv.test.ts|5✔️|||3.877s|
+|e2e/custom-test-sequencer/a.test.js|1✔️|||29ms|
+|e2e/custom-test-sequencer/b.test.js|1✔️|||21ms|
+|e2e/custom-test-sequencer/c.test.js|1✔️|||42ms|
+|e2e/custom-test-sequencer/d.test.js|1✔️|||21ms|
+|e2e/custom-test-sequencer/e.test.js|1✔️|||27ms|
+|e2e/test-in-root/spec.js|1✔️|||19ms|
+|e2e/test-in-root/test.js|1✔️|||37ms|
+|e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js|2✔️|||30ms|
+|e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js|1✔️|||34ms|
+|e2e/v8-coverage/empty-sourcemap/test.ts|1✔️|||31ms|
+|examples/angular/app.component.spec.ts|3✔️|||654ms|
+|examples/angular/shared/data.service.spec.ts|2✔️|||431ms|
+|examples/angular/shared/sub.service.spec.ts|1✔️|||109ms|
+|examples/async/__tests__/user.test.js|8✔️|||96ms|
+|examples/automatic-mocks/__tests__/automock.test.js|2✔️|||74ms|
+|examples/automatic-mocks/__tests__/createMockFromModule.test.js|2✔️|||115ms|
+|examples/automatic-mocks/__tests__/disableAutomocking.test.js|1✔️|||24ms|
+|examples/enzyme/__tests__/CheckboxWithLabel-test.js|1✔️|||434ms|
+|examples/getting-started/sum.test.js|1✔️|||78ms|
+|examples/jquery/__tests__/display_user.test.js|1✔️|||196ms|
+|examples/jquery/__tests__/fetch_current_user.test.js|2✔️|||196ms|
+|examples/manual-mocks/__tests__/file_summarizer.test.js|1✔️|||87ms|
+|examples/manual-mocks/__tests__/lodashMocking.test.js|1✔️|||109ms|
+|examples/manual-mocks/__tests__/user.test.js|1✔️|||41ms|
+|examples/manual-mocks/__tests__/userMocked.test.js|1✔️|||105ms|
+|examples/module-mock/__tests__/full_mock.js|1✔️|||60ms|
+|examples/module-mock/__tests__/mock_per_test.js|2✔️|||116ms|
+|examples/module-mock/__tests__/partial_mock.js|1✔️|||215ms|
+|examples/mongodb/__test__/db.test.js|1✔️|||236ms|
+|examples/react-native/__tests__/intro.test.js|4✔️|||8.559s|
+|examples/react-testing-library/__tests__/CheckboxWithLabel-test.js|1✔️|||469ms|
+|examples/react/__tests__/CheckboxWithLabel-test.js|1✔️|||256ms|
+|examples/snapshot/__tests__/clock.react.test.js|1✔️|||62ms|
+|examples/snapshot/__tests__/link.react.test.js|4✔️|||181ms|
+|examples/timer/__tests__/infinite_timer_game.test.js|1✔️|||94ms|
+|examples/timer/__tests__/timer_game.test.js|3✔️|||74ms|
+|examples/typescript/__tests__/calc.test.ts|6✔️|||276ms|
+|examples/typescript/__tests__/CheckboxWithLabel-test.tsx|1✔️|||227ms|
+|examples/typescript/__tests__/sub-test.ts|1✔️|||43ms|
+|examples/typescript/__tests__/sum-test.ts|2✔️|||69ms|
+|examples/typescript/__tests__/sum.test.js|2✔️|||100ms|
+|packages/babel-jest/src/__tests__/index.ts|6✔️|||371ms|
+|packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts|4✔️|||347ms|
+|packages/diff-sequences/src/__tests__/index.property.test.ts|7✔️|||357ms|
+|packages/diff-sequences/src/__tests__/index.test.ts|48✔️|||195ms|
+|packages/expect/src/__tests__/assertionCounts.test.ts|6✔️|||60ms|
+|packages/expect/src/__tests__/asymmetricMatchers.test.ts|38✔️|||207ms|
+|packages/expect/src/__tests__/extend.test.ts|10✔️|||99ms|
+|packages/expect/src/__tests__/isError.test.ts|4✔️|||43ms|
+|packages/expect/src/__tests__/matchers-toContain.property.test.ts|2✔️|||236ms|
+|packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts|2✔️|||287ms|
+|packages/expect/src/__tests__/matchers-toEqual.property.test.ts|2✔️|||1.062s|
+|packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts|3✔️|||394ms|
+|packages/expect/src/__tests__/matchers.test.js|592✔️|||862ms|
+|packages/expect/src/__tests__/spyMatchers.test.ts|248✔️|||395ms|
+|packages/expect/src/__tests__/stacktrace.test.ts|3✔️|||69ms|
+|packages/expect/src/__tests__/symbolInObjects.test.ts|3✔️|||33ms|
+|packages/expect/src/__tests__/toEqual-dom.test.ts|12✔️|||99ms|
+|packages/expect/src/__tests__/toThrowMatchers.test.ts|98✔️|||257ms|
+|packages/expect/src/__tests__/utils.test.ts|41✔️|||147ms|
+|packages/jest-circus/src/__tests__/afterAll.test.ts|6✔️|||5.755s|
+|packages/jest-circus/src/__tests__/baseTest.test.ts|2✔️|||2.902s|
+|packages/jest-circus/src/__tests__/circusItTestError.test.ts|8✔️|||300ms|
+|packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts|3✔️|||81ms|
+|packages/jest-circus/src/__tests__/hooks.test.ts|3✔️|||3.762s|
+|packages/jest-circus/src/__tests__/hooksError.test.ts|32✔️|||127ms|
+|packages/jest-cli/src/__tests__/cli/args.test.ts|17✔️|||345ms|
+|packages/jest-cli/src/init/__tests__/init.test.js|24✔️|||119ms|
+|packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts|4✔️|||30ms|
+|packages/jest-config/src/__tests__/Defaults.test.ts|1✔️|||672ms|
+|packages/jest-config/src/__tests__/getMaxWorkers.test.ts|7✔️|||67ms|
+|packages/jest-config/src/__tests__/normalize.test.js|118✔️|||798ms|
+|packages/jest-config/src/__tests__/readConfig.test.ts|1✔️|||76ms|
+|packages/jest-config/src/__tests__/readConfigs.test.ts|3✔️|||135ms|
+|packages/jest-config/src/__tests__/resolveConfigPath.test.ts|10✔️|||183ms|
+|packages/jest-config/src/__tests__/setFromArgv.test.ts|4✔️|||53ms|
+|packages/jest-config/src/__tests__/validatePattern.test.ts|4✔️|||52ms|
+|packages/jest-console/src/__tests__/bufferedConsole.test.ts|20✔️|||171ms|
+|packages/jest-console/src/__tests__/CustomConsole.test.ts|23✔️|||115ms|
+|packages/jest-console/src/__tests__/getConsoleOutput.test.ts|12✔️|||56ms|
+|packages/jest-core/src/__tests__/FailedTestsCache.test.js|1✔️|||25ms|
+|packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js|5✔️|||61ms|
+|packages/jest-core/src/__tests__/globals.test.ts|1✔️|||22ms|
+|packages/jest-core/src/__tests__/runJest.test.js|2✔️|||261ms|
+|packages/jest-core/src/__tests__/SearchSource.test.ts|27✔️|||2.596s|
+|packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js|13✔️|||89ms|
+|packages/jest-core/src/__tests__/TestScheduler.test.js|8✔️|||520ms|
+|packages/jest-core/src/__tests__/testSchedulerHelper.test.js|12✔️|||48ms|
+|packages/jest-core/src/__tests__/watch.test.js|80✔️|||6.755s|
+|packages/jest-core/src/__tests__/watchFileChanges.test.ts|1✔️|||1.514s|
+|packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js|2✔️|||165ms|
+|packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js|1✔️|||246ms|
+|packages/jest-core/src/lib/__tests__/isValidPath.test.ts|3✔️|||166ms|
+|packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts|3✔️|||48ms|
+|packages/jest-create-cache-key-function/src/__tests__/index.test.ts|1✔️|||75ms|
+|packages/jest-diff/src/__tests__/diff.test.ts|107✔️|||625ms|
+|packages/jest-diff/src/__tests__/diffStringsRaw.test.ts|2✔️|||55ms|
+|packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts|24✔️|||72ms|
+|packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts|6✔️|||44ms|
+|packages/jest-docblock/src/__tests__/index.test.ts|36✔️|||177ms|
+|packages/jest-each/src/__tests__/array.test.ts|159✔️|||192ms|
+|packages/jest-each/src/__tests__/index.test.ts|10✔️|||44ms|
+|packages/jest-each/src/__tests__/template.test.ts|242✔️|||483ms|
+|packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts|2✔️|||783ms|
+|packages/jest-environment-node/src/__tests__/node_environment.test.ts|6✔️|||184ms|
+|packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts|50✔️|||302ms|
+|packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts|40✔️|||317ms|
+|packages/jest-get-type/src/__tests__/getType.test.ts|14✔️|||45ms|
+|packages/jest-get-type/src/__tests__/isPrimitive.test.ts|18✔️|||36ms|
+|packages/jest-globals/src/__tests__/index.ts|1✔️|||533ms|
+|packages/jest-haste-map/src/__tests__/get_mock_name.test.js|1✔️|||22ms|
+|packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts|1✔️|||337ms|
+|packages/jest-haste-map/src/__tests__/index.test.js|44✔️|||1.145s|
+|packages/jest-haste-map/src/__tests__/worker.test.js|7✔️|||100ms|
+|packages/jest-haste-map/src/crawlers/__tests__/node.test.js|10✔️|||170ms|
+|packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js|8✔️|||153ms|
+|packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js|15✔️|||56ms|
+|packages/jest-haste-map/src/lib/__tests__/fast_path.test.js|5✔️|||29ms|
+|packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js|1✔️|||35ms|
+|packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js|2✔️|||31ms|
+|packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js|2✔️|||35ms|
+|packages/jest-jasmine2/src/__tests__/concurrent.test.ts|3✔️|||24ms|
+|packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts|7✔️|||70ms|
+|packages/jest-jasmine2/src/__tests__/hooksError.test.ts|32✔️|||51ms|
+|packages/jest-jasmine2/src/__tests__/iterators.test.ts|4✔️|||43ms|
+|packages/jest-jasmine2/src/__tests__/itTestError.test.ts|6✔️|||32ms|
+|packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts|1✔️|||23ms|
+|packages/jest-jasmine2/src/__tests__/pTimeout.test.ts|3✔️|||44ms|
+|packages/jest-jasmine2/src/__tests__/queueRunner.test.ts|6✔️|||93ms|
+|packages/jest-jasmine2/src/__tests__/reporter.test.ts|1✔️|||107ms|
+|packages/jest-jasmine2/src/__tests__/Suite.test.ts|1✔️|||84ms|
+|packages/jest-jasmine2/src/__tests__/todoError.test.ts|3✔️|||27ms|
+|packages/jest-leak-detector/src/__tests__/index.test.ts|6✔️|||986ms|
+|packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts|11✔️|||49ms|
+|packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts|2✔️|||48ms|
+|packages/jest-matcher-utils/src/__tests__/index.test.ts|48✔️|||391ms|
+|packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts|21✔️|||114ms|
+|packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts|17✔️|||111ms|
+|packages/jest-message-util/src/__tests__/messages.test.ts|11✔️|||205ms|
+|packages/jest-mock/src/__tests__/index.test.ts|84✔️|||509ms|
+|packages/jest-regex-util/src/__tests__/index.test.ts|8✔️|||56ms|
+|packages/jest-repl/src/__tests__/jest_repl.test.js|1✔️|||1.172s|
+|packages/jest-repl/src/__tests__/runtime_cli.test.js|4✔️|||4.094s|
+|packages/jest-reporters/src/__tests__/CoverageReporter.test.js|12✔️|||397ms|
+|packages/jest-reporters/src/__tests__/CoverageWorker.test.js|2✔️|||199ms|
+|packages/jest-reporters/src/__tests__/DefaultReporter.test.js|2✔️|||148ms|
+|packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js|3✔️|||1.129s|
+|packages/jest-reporters/src/__tests__/getResultHeader.test.js|4✔️|||30ms|
+|packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js|3✔️|||28ms|
+|packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js|4✔️|||49ms|
+|packages/jest-reporters/src/__tests__/getWatermarks.test.ts|2✔️|||37ms|
+|packages/jest-reporters/src/__tests__/NotifyReporter.test.ts|18✔️|||166ms|
+|packages/jest-reporters/src/__tests__/SummaryReporter.test.js|4✔️|||366ms|
+|packages/jest-reporters/src/__tests__/utils.test.ts|10✔️|||85ms|
+|packages/jest-reporters/src/__tests__/VerboseReporter.test.js|11✔️|||425ms|
+|packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts|11✔️|||666ms|
+|packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts|4✔️|||36ms|
+|packages/jest-resolve/src/__tests__/resolve.test.ts|16✔️|||1.308s|
+|packages/jest-runner/src/__tests__/testRunner.test.ts|2✔️|||905ms|
+|packages/jest-runtime/src/__tests__/instrumentation.test.ts|1✔️|||275ms|
+|packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js|3✔️|||606ms|
+|packages/jest-runtime/src/__tests__/runtime_environment.test.js|2✔️|||497ms|
+|packages/jest-runtime/src/__tests__/runtime_internal_module.test.js|4✔️|||727ms|
+|packages/jest-runtime/src/__tests__/runtime_jest_fn.js|4✔️|||479ms|
+|packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js|2✔️|||521ms|
+|packages/jest-runtime/src/__tests__/runtime_mock.test.js|4✔️|||743ms|
+|packages/jest-runtime/src/__tests__/runtime_module_directories.test.js|4✔️|||525ms|
+|packages/jest-runtime/src/__tests__/runtime_node_path.test.js|4✔️|||1.088s|
+|packages/jest-runtime/src/__tests__/runtime_require_actual.test.js|2✔️|||478ms|
+|packages/jest-runtime/src/__tests__/runtime_require_cache.test.js|2✔️|||454ms|
+|packages/jest-runtime/src/__tests__/runtime_require_mock.test.js|13✔️|||962ms|
+|packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js|1✔️|||261ms|
+|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js|6✔️|||2.366s|
+|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js|17✔️|||1.223s|
+|packages/jest-runtime/src/__tests__/runtime_require_module.test.js|27✔️|||2.439s|
+|packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts|5✔️|||707ms|
+|packages/jest-runtime/src/__tests__/runtime_wrap.js|2✔️|||263ms|
+|packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js|1✔️|||584ms|
+|packages/jest-runtime/src/__tests__/Runtime-statics.test.js|2✔️|||162ms|
+|packages/jest-serializer/src/__tests__/index.test.ts|17✔️|||158ms|
+|packages/jest-snapshot/src/__tests__/dedentLines.test.ts|17✔️|||94ms|
+|packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts|22✔️|||1.149s|
+|packages/jest-snapshot/src/__tests__/matcher.test.ts|1✔️|||131ms|
+|packages/jest-snapshot/src/__tests__/mockSerializer.test.ts|10✔️|||45ms|
+|packages/jest-snapshot/src/__tests__/printSnapshot.test.ts|71✔️|||1.188s|
+|packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts|10✔️|||98ms|
+|packages/jest-snapshot/src/__tests__/throwMatcher.test.ts|3✔️|||481ms|
+|packages/jest-snapshot/src/__tests__/utils.test.ts|26✔️|||214ms|
+|packages/jest-source-map/src/__tests__/getCallsite.test.ts|3✔️|||86ms|
+|packages/jest-test-result/src/__tests__/formatTestResults.test.ts|1✔️|||53ms|
+|packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js|8✔️|||251ms|
+|packages/jest-transform/src/__tests__/ScriptTransformer.test.ts|22✔️|||1.660s|
+|packages/jest-transform/src/__tests__/shouldInstrument.test.ts|25✔️|||155ms|
+|packages/jest-util/src/__tests__/createProcessObject.test.ts|4✔️|||81ms|
+|packages/jest-util/src/__tests__/deepCyclicCopy.test.ts|12✔️|||86ms|
+|packages/jest-util/src/__tests__/errorWithStack.test.ts|1✔️|||41ms|
+|packages/jest-util/src/__tests__/formatTime.test.ts|11✔️|||82ms|
+|packages/jest-util/src/__tests__/globsToMatcher.test.ts|4✔️|||56ms|
+|packages/jest-util/src/__tests__/installCommonGlobals.test.ts|2✔️|||68ms|
+|packages/jest-util/src/__tests__/isInteractive.test.ts|2✔️|||35ms|
+|packages/jest-util/src/__tests__/isPromise.test.ts|10✔️|||30ms|
+|packages/jest-validate/src/__tests__/validate.test.ts|23✔️|||283ms|
+|packages/jest-validate/src/__tests__/validateCLIOptions.test.js|6✔️|||83ms|
+|packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts|11✔️|||129ms|
+|packages/jest-watcher/src/lib/__tests__/prompt.test.ts|3✔️|||91ms|
+|packages/jest-watcher/src/lib/__tests__/scroll.test.ts|5✔️|||57ms|
+|packages/jest-worker/src/__tests__/Farm.test.js|10✔️|||158ms|
+|packages/jest-worker/src/__tests__/FifoQueue.test.js|3✔️|||48ms|
+|packages/jest-worker/src/__tests__/index.test.js|8✔️|||230ms|
+|packages/jest-worker/src/__tests__/PriorityQueue.test.js|5✔️|||63ms|
+|packages/jest-worker/src/__tests__/process-integration.test.js|5✔️|||62ms|
+|packages/jest-worker/src/__tests__/thread-integration.test.js|6✔️|||114ms|
+|packages/jest-worker/src/__tests__/WorkerPool.test.js|3✔️|||51ms|
+|packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js|11✔️|||653ms|
+|packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js|17✔️|||184ms|
+|packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js|15✔️|||258ms|
+|packages/jest-worker/src/workers/__tests__/processChild.test.js|10✔️|||135ms|
+|packages/jest-worker/src/workers/__tests__/threadChild.test.js|10✔️|||120ms|
+|packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts|38✔️|||137ms|
+|packages/pretty-format/src/__tests__/ConvertAnsi.test.ts|6✔️|||43ms|
+|packages/pretty-format/src/__tests__/DOMCollection.test.ts|10✔️|||64ms|
+|packages/pretty-format/src/__tests__/DOMElement.test.ts|28✔️|||148ms|
+|packages/pretty-format/src/__tests__/Immutable.test.ts|111✔️|||443ms|
+|packages/pretty-format/src/__tests__/prettyFormat.test.ts|86✔️|||219ms|
+|packages/pretty-format/src/__tests__/react.test.tsx|55✔️|||325ms|
+|packages/pretty-format/src/__tests__/ReactElement.test.ts|3✔️|||64ms|
+### e2e/__tests__/jestChangedFiles.test.ts ❌
+**10** tests were completed in **9.045s** with **9** passed, **1** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|gets hg SCM roots and dedupes them|559ms|
+|✔️|gets git SCM roots and dedupes them|416ms|
+|✔️|gets mixed git and hg SCM roots and dedupes them|467ms|
+|✔️|gets changed files for git|2.298s|
+|✔️|monitors only root paths for git|151ms|
+|✔️|does not find changes in files with no diff, for git|628ms|
+|✔️|handles a bad revision for "changedSince", for git|878ms|
+|❌|gets changed files for hg|2.219s|
+|✔️|monitors only root paths for hg|281ms|
+|✔️|handles a bad revision for "changedSince", for hg|949ms|
+### e2e/__tests__/onlyChanged.test.ts ❌
+**9** tests were completed in **22.281s** with **8** passed, **1** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|run for "onlyChanged" and "changedSince"|1.464s|
+|✔️|run only changed files|5.196s|
+|✔️|report test coverage for only changed files|1.889s|
+|✔️|report test coverage of source on test file change under only changed files|822ms|
+|✔️|do not pickup non-tested files when reporting coverage on only changed files|861ms|
+|✔️|collect test coverage when using onlyChanged|1.058s|
+|✔️|onlyChanged in config is overwritten by --all or testPathPattern|7.023s|
+|❌|gets changed files for hg|3.765s|
+|✔️|path on Windows is case-insensitive|0ms|
\ No newline at end of file
diff --git a/__tests__/__snapshots__/dart-json.test.ts.snap b/__tests__/__snapshots__/dart-json.test.ts.snap
index 8f8a78c8..082066ac 100644
--- a/__tests__/__snapshots__/dart-json.test.ts.snap
+++ b/__tests__/__snapshots__/dart-json.test.ts.snap
@@ -1,98 +1,106 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`dart-json tests matches report snapshot 1`] = `
-Object {
- "annotations": Array [
- Object {
- "annotation_level": "failure",
- "end_line": 13,
- "message": "Expected: <2>
+TestRunResult {
+ "path": "fixtures/dart-json.json",
+ "suites": Array [
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Test 1",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Test 1 Passing test",
+ "result": "success",
+ "time": 36,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Test 1 Test 1.1",
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 13,
+ "message": "Expected: <2>
Actual: <1>
-
-
-package:test_api expect
+",
+ "path": "test/main_test.dart",
+ "stackTrace": "package:test_api expect
test\\\\main_test.dart 13:9 main...
",
- "path": "test/main_test.dart",
- "start_line": 13,
- "title": "[test\\\\main_test.dart] Test 1 Test 1.1 Failing test",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 2,
- "message": "Exception: Some error
-
-package:darttest/main.dart 2:3 throwError
+ },
+ "name": "Test 1 Test 1.1 Failing test",
+ "result": "failed",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": Object {
+ "line": 2,
+ "message": "Exception: Some error",
+ "path": "lib/main.dart",
+ "stackTrace": "package:darttest/main.dart 2:3 throwError
test\\\\main_test.dart 17:9 main...
",
- "path": "lib/main.dart",
- "start_line": 2,
- "title": "[test\\\\main_test.dart] Test 1 Test 1.1 Exception in target unit",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 24,
- "message": "Exception: Some error
-
-test\\\\main_test.dart 24:7 main..
+ },
+ "name": "Test 1 Test 1.1 Exception in target unit",
+ "result": "failed",
+ "time": 6,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Test 2",
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 24,
+ "message": "Exception: Some error",
+ "path": "test/main_test.dart",
+ "stackTrace": "test\\\\main_test.dart 24:7 main..
",
- "path": "test/main_test.dart",
- "start_line": 24,
- "title": "[test\\\\main_test.dart] Test 2 Exception in test",
+ },
+ "name": "Test 2 Exception in test",
+ "result": "failed",
+ "time": 12,
+ },
+ ],
+ },
+ ],
+ "name": "test\\\\main_test.dart",
+ "totalTime": undefined,
},
- Object {
- "annotation_level": "failure",
- "end_line": 5,
- "message": "TimeoutException after 0:00:00.000001: Test timed out after 0 seconds.
-
-dart:isolate _RawReceivePortImpl._handleMessage
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 5,
+ "message": "TimeoutException after 0:00:00.000001: Test timed out after 0 seconds.",
+ "path": "test/second_test.dart",
+ "stackTrace": "dart:isolate _RawReceivePortImpl._handleMessage
",
- "path": "test/second_test.dart",
- "start_line": 5,
- "title": "[test\\\\second_test.dart] Timeout test",
+ },
+ "name": "Timeout test",
+ "result": "failed",
+ "time": 37,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Skipped test",
+ "result": "skipped",
+ "time": 14,
+ },
+ ],
+ },
+ ],
+ "name": "test\\\\second_test.dart",
+ "totalTime": undefined,
},
],
- "summary": "![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20skipped%2C%204%20failed-critical)
-
-### fixtures/dart-json.json
-
-**6** tests were completed in **3.760s** with **1** passed, **1** skipped and **4** failed.
-
-| Result | Suite | Tests | Time | Passed ✔️ | Skipped ✖️ | Failed ❌ |
-| :---: | :--- | ---: | ---: | ---: | ---: | ---: |
-| ❌ | [test\\\\main_test.dart](#ts-0-test-maintest-dart) | 4 | 74ms | 1 | 0 | 3 |
-| ❌ | [test\\\\second_test.dart](#ts-1-test-secondtest-dart) | 2 | 51ms | 0 | 1 | 1 |
-
-# Test Suites
-
-## test\\\\main_test.dart ❌
-
-### Test 1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ✔️ | Test 1 Passing test | 36ms |
-
-### Test 1 Test 1.1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Test 1 Test 1.1 Failing test | 20ms |
-| ❌ | Test 1 Test 1.1 Exception in target unit | 6ms |
-
-### Test 2
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Test 2 Exception in test | 12ms |
-
-## test\\\\second_test.dart ❌
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Timeout test | 37ms |
-| ✖️ | Skipped test | 14ms |
-",
- "title": "Dart tests ❌",
+ "totalTime": 3760,
}
`;
diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap
index c2da75ed..baf47dc0 100644
--- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap
+++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap
@@ -1,59 +1,5601 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`dotnet-trx tests matches report snapshot 1`] = `
-Object {
- "annotations": Array [
- Object {
- "annotation_level": "failure",
- "end_line": 9,
- "message": "System.DivideByZeroException : Attempted to divide by zero.",
- "path": "DotnetTests.Unit/Calculator.cs",
- "start_line": 9,
- "title": "[DotnetTests.XUnitTests.CalculatorTests] Exception_In_TargetTest",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 39,
- "message": "System.Exception : Test",
- "path": "DotnetTests.XUnitTests/CalculatorTests.cs",
- "start_line": 39,
- "title": "[DotnetTests.XUnitTests.CalculatorTests] Exception_In_Test",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 27,
- "message": "Assert.Equal() Failure
+TestRunResult {
+ "path": "fixtures/dotnet-trx.trx",
+ "suites": Array [
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 9,
+ "message": "System.DivideByZeroException : Attempted to divide by zero.",
+ "path": "DotnetTests.Unit/Calculator.cs",
+ "stackTrace": "System.DivideByZeroException : Attempted to divide by zero.
+ at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.Unit\\\\Calculator.cs:line 9
+ at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 33",
+ },
+ "name": "Exception_In_TargetTest",
+ "result": "failed",
+ "time": 0.4975,
+ },
+ TestCaseResult {
+ "error": Object {
+ "line": 39,
+ "message": "System.Exception : Test",
+ "path": "DotnetTests.XUnitTests/CalculatorTests.cs",
+ "stackTrace": "System.Exception : Test
+ at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 39",
+ },
+ "name": "Exception_In_Test",
+ "result": "failed",
+ "time": 2.2728,
+ },
+ TestCaseResult {
+ "error": Object {
+ "line": 27,
+ "message": "Assert.Equal() Failure
Expected: 3
Actual: 2",
- "path": "DotnetTests.XUnitTests/CalculatorTests.cs",
- "start_line": 27,
- "title": "[DotnetTests.XUnitTests.CalculatorTests] Failing_Test",
+ "path": "DotnetTests.XUnitTests/CalculatorTests.cs",
+ "stackTrace": "Assert.Equal() Failure
+Expected: 3
+Actual: 2
+ at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 27",
+ },
+ "name": "Failing_Test",
+ "result": "failed",
+ "time": 3.2953,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passing_Test",
+ "result": "success",
+ "time": 0.1254,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passing_Test_With_Name",
+ "result": "success",
+ "time": 0.103,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Skipped_Test",
+ "result": "skipped",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Timeout_Test",
+ "result": "success",
+ "time": 102.2821,
+ },
+ ],
+ },
+ ],
+ "name": "DotnetTests.XUnitTests.CalculatorTests",
+ "totalTime": undefined,
},
],
- "summary": "![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%201%20skipped%2C%203%20failed-critical)
-
-### fixtures/dotnet-trx.trx
-
-**7** tests were completed in **1.061s** with **3** passed, **1** skipped and **3** failed.
-
-| Result | Suite | Tests | Time | Passed ✔️ | Skipped ✖️ | Failed ❌ |
-| :---: | :--- | ---: | ---: | ---: | ---: | ---: |
-| ❌ | [DotnetTests.XUnitTests.CalculatorTests](#ts-0-DotnetTests-XUnitTests-CalculatorTests) | 7 | 109.5761ms | 3 | 1 | 3 |
-
-# Test Suites
-
-## DotnetTests.XUnitTests.CalculatorTests ❌
+ "totalTime": 1061,
+}
+`;
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Exception_In_TargetTest | 0.4975ms |
-| ❌ | Exception_In_Test | 2.2728ms |
-| ❌ | Failing_Test | 3.2953ms |
-| ✔️ | Passing_Test | 0.1254ms |
-| ✔️ | Passing_Test_With_Name | 0.103ms |
-| ✖️ | Skipped_Test | 1ms |
-| ✔️ | Timeout_Test | 102.2821ms |
-",
- "title": "Dotnet TRX tests ❌",
+exports[`dotnet-trx tests report from FluentValidation test results matches snapshot 1`] = `
+TestRunResult {
+ "path": "fixtures/external/FluentValidation.Tests.trx",
+ "suites": Array [
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_replace_default_errorcode_resolver",
+ "result": "success",
+ "time": 0.31579999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "CanValidateInstancesOfType_returns_false_when_comparing_against_some_other_type",
+ "result": "success",
+ "time": 0.0513,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "CanValidateInstancesOfType_returns_true_when_comparing_against_same_type",
+ "result": "success",
+ "time": 0.0665,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "CanValidateInstancesOfType_returns_true_when_comparing_against_subclass",
+ "result": "success",
+ "time": 0.0566,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Default_error_code_should_be_class_name",
+ "result": "success",
+ "time": 0.1555,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "OverridePropertyName_should_override_property_name",
+ "result": "success",
+ "time": 0.1676,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "OverridePropertyName_with_lambda_should_override_property_name",
+ "result": "success",
+ "time": 0.3832,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "PreValidate_bypasses_nullcheck_on_instance",
+ "result": "success",
+ "time": 0.2142,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "RuleForeach_with_null_instances",
+ "result": "success",
+ "time": 1.9478,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_be_valid_when_there_are_no_failures_for_single_property",
+ "result": "success",
+ "time": 0.1968,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_main_state",
+ "result": "success",
+ "time": 0.1976,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_for_non_member_expression_when_validating_single_property",
+ "result": "success",
+ "time": 0.2162,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_rule_is_null",
+ "result": "success",
+ "time": 0.1178,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_validate_public_Field",
+ "result": "success",
+ "time": 0.3435,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_validate_single_Field",
+ "result": "success",
+ "time": 0.24439999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_validate_single_property",
+ "result": "success",
+ "time": 0.27349999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_validate_single_property_where_invalid_property_as_string",
+ "result": "success",
+ "time": 0.216,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_validate_single_property_where_property_as_string",
+ "result": "success",
+ "time": 0.3409,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_named_parameters_to_validate_ruleset",
+ "result": "success",
+ "time": 0.36160000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_single_property_by_path",
+ "result": "success",
+ "time": 0.4851,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_type_when_using_non_generic_validate_overload",
+ "result": "success",
+ "time": 0.1769,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validators_fail_then_the_errors_Should_be_accessible_via_the_errors_property",
+ "result": "success",
+ "time": 0.17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validators_fail_then_validatorrunner_should_return_false",
+ "result": "success",
+ "time": 0.1522,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_Validators_pass_then_the_validatorRunner_should_return_true",
+ "result": "success",
+ "time": 0.1471,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_Validate",
+ "result": "success",
+ "time": 0.9423,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_Validate",
+ "result": "success",
+ "time": 0.0628,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_ValidateAsync",
+ "result": "success",
+ "time": 0.9155,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_ValidateAsync",
+ "result": "success",
+ "time": 0.057800000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenPreValidationReturnsTrue_ValidatorsGetHit_Validate",
+ "result": "success",
+ "time": 0.4371,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenPreValidationReturnsTrue_ValidatorsGetHit_ValidateAsync",
+ "result": "success",
+ "time": 1.5404,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WithErrorCode_should_override_error_code",
+ "result": "success",
+ "time": 0.1849,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WithMessage_and_WithErrorCode_should_override_error_message_and_error_code",
+ "result": "success",
+ "time": 0.1772,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WithMessage_should_override_error_message",
+ "result": "success",
+ "time": 0.159,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WithName_should_override_field_name",
+ "result": "success",
+ "time": 0.20320000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WithName_should_override_field_name_with_value_from_other_property",
+ "result": "success",
+ "time": 0.2316,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.AbstractValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Benchmark",
+ "result": "skipped",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Equality_comparison_check",
+ "result": "success",
+ "time": 2.1363,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_accessor",
+ "result": "success",
+ "time": 0.3872,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_member_for_nested_property",
+ "result": "success",
+ "time": 0.10840000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Identifies_if_memberexp_acts_on_model_instance",
+ "result": "success",
+ "time": 0.2977,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.AccessorCacheTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Finds_validators_for_types",
+ "result": "success",
+ "time": 0.23809999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ForEach_iterates_over_types",
+ "result": "success",
+ "time": 1.8574,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.AssemblyScannerTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Cascade_mode_can_be_set_after_validator_instantiated",
+ "result": "success",
+ "time": 0.1778,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Cascade_mode_can_be_set_after_validator_instantiated_async",
+ "result": "success",
+ "time": 0.8338,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Cascade_mode_can_be_set_after_validator_instantiated_async_legacy",
+ "result": "success",
+ "time": 1.3079,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Cascade_mode_can_be_set_after_validator_instantiated_legacy",
+ "result": "success",
+ "time": 0.2101,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure",
+ "result": "success",
+ "time": 0.1733,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_async",
+ "result": "success",
+ "time": 1.0423,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level",
+ "result": "success",
+ "time": 0.223,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level_async",
+ "result": "success",
+ "time": 1.1028,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level_async_legacy",
+ "result": "success",
+ "time": 1.4877,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_Stop_globally_and_overriden_at_rule_level_legacy",
+ "result": "success",
+ "time": 0.5266,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level",
+ "result": "success",
+ "time": 0.19369999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level_async",
+ "result": "success",
+ "time": 1.072,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level_async_legacy",
+ "result": "success",
+ "time": 1.0468000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_validator_level_and_overriden_at_rule_level_legacy",
+ "result": "success",
+ "time": 0.2332,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop",
+ "result": "success",
+ "time": 0.16670000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop_async",
+ "result": "success",
+ "time": 0.987,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop_async_legacy",
+ "result": "success",
+ "time": 1.1758,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_to_second_validator_when_first_validator_succeeds_and_cascade_set_to_stop_legacy",
+ "result": "success",
+ "time": 0.2155,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_when_set_to_Continue_at_validator_level",
+ "result": "success",
+ "time": 0.2021,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_continues_when_set_to_Continue_at_validator_level_async",
+ "result": "success",
+ "time": 1.0564,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level",
+ "result": "success",
+ "time": 0.2008,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level_async",
+ "result": "success",
+ "time": 0.8319,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level_async_legacy",
+ "result": "success",
+ "time": 0.8677,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rule_level_legacy",
+ "result": "success",
+ "time": 0.21660000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure",
+ "result": "success",
+ "time": 0.1706,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_async",
+ "result": "success",
+ "time": 0.7821,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_async_legacy",
+ "result": "success",
+ "time": 0.8751,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_legacy",
+ "result": "success",
+ "time": 0.1809,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level",
+ "result": "success",
+ "time": 0.188,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_and_async_validator_is_invoked_synchronously",
+ "result": "success",
+ "time": 0.4818,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_and_async_validator_is_invoked_synchronously_legacy",
+ "result": "success",
+ "time": 0.5077,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_async",
+ "result": "success",
+ "time": 0.8130000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_async_legacy",
+ "result": "success",
+ "time": 0.7979,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_overriden_at_rule_level_legacy",
+ "result": "success",
+ "time": 0.23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level",
+ "result": "success",
+ "time": 0.2738,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_async",
+ "result": "success",
+ "time": 0.909,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_async_legacy",
+ "result": "success",
+ "time": 0.8011,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_legacy",
+ "result": "success",
+ "time": 0.2253,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.CascadingFailuresTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_validate_using_validator_for_base_type",
+ "result": "success",
+ "time": 1.4496,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Chained_property_should_be_excluded",
+ "result": "success",
+ "time": 0.1883,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Chained_validator_descriptor",
+ "result": "success",
+ "time": 0.29710000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Chained_validator_should_not_be_invoked_on_null_property",
+ "result": "success",
+ "time": 0.121,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_should_work_with_chained_property",
+ "result": "success",
+ "time": 0.2054,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Explicitly_included_properties_should_be_propagated_to_nested_validators",
+ "result": "success",
+ "time": 0.2691,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Explicitly_included_properties_should_be_propagated_to_nested_validators_using_strings",
+ "result": "success",
+ "time": 0.1753,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Separate_validation_on_chained_property",
+ "result": "success",
+ "time": 1.368,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Separate_validation_on_chained_property_conditional",
+ "result": "success",
+ "time": 0.2104,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Separate_validation_on_chained_property_valid",
+ "result": "success",
+ "time": 0.20249999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_allow_normal_rules_and_chained_property_on_same_property",
+ "result": "success",
+ "time": 0.2278,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_explicit_ruleset",
+ "result": "success",
+ "time": 0.5128,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_chained_property",
+ "result": "success",
+ "time": 1.0483,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ChainedValidationTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Options_should_only_apply_to_current_validator",
+ "result": "success",
+ "time": 0.23479999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_create_multiple_validators",
+ "result": "success",
+ "time": 0.3311,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_execute_multiple_validators",
+ "result": "success",
+ "time": 0.17809999999999998,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ChainingValidatorsTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_define_nested_rules_for_collection",
+ "result": "success",
+ "time": 1.6096000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChildRules_works_with_RuleSet",
+ "result": "success",
+ "time": 5.8553,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ChildRulesTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_should_work_with_child_collection",
+ "result": "success",
+ "time": 0.7258,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_specify_condition_for_individual_collection_elements",
+ "result": "success",
+ "time": 0.9154,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_validate_collection_using_validator_for_base_type",
+ "result": "success",
+ "time": 1.0736999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Collection_should_be_excluded",
+ "result": "success",
+ "time": 0.525,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Collection_should_be_explicitly_included_with_expression",
+ "result": "success",
+ "time": 0.6578,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Collection_should_be_explicitly_included_with_string",
+ "result": "success",
+ "time": 0.5651999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_should_work_with_child_collection",
+ "result": "success",
+ "time": 0.7357,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Creates_validator_using_context_from_property_value",
+ "result": "success",
+ "time": 1.1184,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_override_property_name",
+ "result": "success",
+ "time": 0.47550000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_work_with_top_level_collection_validator",
+ "result": "success",
+ "time": 0.7123999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_work_with_top_level_collection_validator_and_overriden_name",
+ "result": "success",
+ "time": 0.3943,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Skips_null_items",
+ "result": "success",
+ "time": 0.5809,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection",
+ "result": "success",
+ "time": 1.0225,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection_asynchronously",
+ "result": "success",
+ "time": 1.4053,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection_several_levels_deep",
+ "result": "success",
+ "time": 1.1437000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection_several_levels_deep_async",
+ "result": "success",
+ "time": 1.0832000000000002,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.CollectionValidatorWithParentTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_should_work_with_complex_property",
+ "result": "success",
+ "time": 2.3119,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_should_work_with_complex_property_when_validator_invoked_synchronously",
+ "result": "success",
+ "time": 0.7052,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_directly_validate_multiple_fields_of_same_type",
+ "result": "success",
+ "time": 3.4497,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_validate_using_validator_for_base_type",
+ "result": "success",
+ "time": 1.2612,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Complex_property_should_be_excluded",
+ "result": "success",
+ "time": 0.3153,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Complex_validator_should_not_be_invoked_on_null_property",
+ "result": "success",
+ "time": 0.16770000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_should_work_with_complex_property",
+ "result": "success",
+ "time": 0.4359,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_should_work_with_complex_property_when_invoked_async",
+ "result": "success",
+ "time": 0.8233,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Explicitly_included_properties_should_be_propagated_to_nested_validators",
+ "result": "success",
+ "time": 2.3437,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Explicitly_included_properties_should_be_propagated_to_nested_validators_using_strings",
+ "result": "success",
+ "time": 0.8307,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Multiple_rules_in_chain_with_childvalidator_shouldnt_reuse_accessor",
+ "result": "success",
+ "time": 0.7222,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Multiple_rules_in_chain_with_childvalidator_shouldnt_reuse_accessor_async",
+ "result": "success",
+ "time": 5.7314,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_allow_normal_rules_and_complex_property_on_same_property",
+ "result": "success",
+ "time": 0.7508,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_override_propertyName",
+ "result": "success",
+ "time": 0.7523,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_child_validator_asynchronously",
+ "result": "success",
+ "time": 3.7361999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_child_validator_synchronously",
+ "result": "success",
+ "time": 0.4716,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_complex_property",
+ "result": "success",
+ "time": 0.9825999999999999,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ComplexValidationTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_executed_synchronosuly_with_asynchronous_collection_rule",
+ "result": "success",
+ "time": 0.3309,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_executed_synchronosuly_with_asynchronous_rule",
+ "result": "success",
+ "time": 0.2385,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_executed_synchronosuly_with_synchronous_collection_role",
+ "result": "success",
+ "time": 0.3216,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_executed_synchronosuly_with_synchronous_role",
+ "result": "success",
+ "time": 0.3076,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_is_applied_to_all_validators_in_the_chain",
+ "result": "success",
+ "time": 0.8143999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_is_applied_to_all_validators_in_the_chain_when_executed_synchronously",
+ "result": "success",
+ "time": 0.5363,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_is_applied_to_single_validator_in_the_chain_when_ApplyConditionTo_set_to_CurrentValidator",
+ "result": "success",
+ "time": 0.8180000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_is_applied_to_all_validators_in_the_chain",
+ "result": "success",
+ "time": 0.3098,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_is_applied_to_single_validator_in_the_chain_when_ApplyConditionTo_set_to_CurrentValidator",
+ "result": "success",
+ "time": 0.3365,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Sync_condition_is_applied_to_async_validators",
+ "result": "success",
+ "time": 0.6349,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_fail_when_async_condition_does_not_match",
+ "result": "success",
+ "time": 0.4177,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_fail_when_async_condition_matches",
+ "result": "success",
+ "time": 0.7917,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_fail_when_condition_does_not_match",
+ "result": "success",
+ "time": 0.0888,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_fail_when_condition_matches",
+ "result": "success",
+ "time": 0.07550000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_succeed_when_async_condition_does_not_match",
+ "result": "success",
+ "time": 0.355,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_succeed_when_async_condition_matches",
+ "result": "success",
+ "time": 1.5482,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_succeed_when_condition_does_not_match",
+ "result": "success",
+ "time": 0.2873,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validation_should_succeed_when_condition_matches",
+ "result": "success",
+ "time": 0.4142,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ConditionTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "IsValidTests",
+ "result": "success",
+ "time": 0.2171,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_the_default_error_should_be_set",
+ "result": "success",
+ "time": 1.7932,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.CreditCardValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_invoke_action_if_validation_success",
+ "result": "success",
+ "time": 0.2528,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Invokes_custom_action_on_failure",
+ "result": "success",
+ "time": 0.2284,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passes_object_being_validated_to_action",
+ "result": "success",
+ "time": 0.852,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.CustomFailureActionTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Replaces_propertyvalue_placeholder",
+ "result": "success",
+ "time": 0.9778,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Replaces_propertyvalue_with_empty_string_when_null",
+ "result": "success",
+ "time": 0.2456,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_format_custom_message",
+ "result": "success",
+ "time": 0.22440000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_custom_delegate_for_building_message",
+ "result": "success",
+ "time": 0.5952999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_custom_delegate_for_building_message_only_for_specific_validator",
+ "result": "success",
+ "time": 0.3785,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_property_value_in_message",
+ "result": "success",
+ "time": 0.8185,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.CustomMessageFormatTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_Custom_Returns_single_failure",
+ "result": "success",
+ "time": 0.335,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_Custom_Returns_single_failure_async",
+ "result": "success",
+ "time": 0.5860000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_custom_uses_empty_property_name_for_model_level_rule",
+ "result": "success",
+ "time": 0.2515,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_Custom_When_property_name_omitted_infers_property_name",
+ "result": "success",
+ "time": 0.23379999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_Custom_When_property_name_omitted_infers_property_name_nested",
+ "result": "success",
+ "time": 0.6317999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_Custom_within_ruleset",
+ "result": "success",
+ "time": 0.5423,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New_CustomAsync_within_ruleset",
+ "result": "success",
+ "time": 0.8872,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Perserves_property_chain_using_custom",
+ "result": "success",
+ "time": 0.8351,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs_async_rule_synchronously_when_validator_invoked_synchronously",
+ "result": "success",
+ "time": 0.6956,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs_sync_rule_asynchronously_when_validator_invoked_asynchronously",
+ "result": "success",
+ "time": 0.5199,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.CustomValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Empty_should_create_EmptyValidator",
+ "result": "success",
+ "time": 0.2993,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Equal_should_create_EqualValidator_with_explicit_value",
+ "result": "success",
+ "time": 0.3343,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Equal_should_create_EqualValidator_with_lambda",
+ "result": "success",
+ "time": 0.6079,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "GreaterThan_should_create_GreaterThanValidator_with_explicit_value",
+ "result": "success",
+ "time": 0.2587,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "GreaterThan_should_create_GreaterThanValidator_with_lambda",
+ "result": "success",
+ "time": 0.4794,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_explicit_value",
+ "result": "success",
+ "time": 0.2869,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_lambda",
+ "result": "success",
+ "time": 7.8787,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_lambda_with_other_Nullable",
+ "result": "success",
+ "time": 1.9588999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Length_should_create_ExactLengthValidator",
+ "result": "success",
+ "time": 0.3392,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Length_should_create_LengthValidator",
+ "result": "success",
+ "time": 0.2207,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Length_should_create_MaximumLengthValidator",
+ "result": "success",
+ "time": 0.2942,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Length_should_create_MinimumLengthValidator",
+ "result": "success",
+ "time": 0.26449999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "LessThan_should_create_LessThanValidator_with_explicit_value",
+ "result": "success",
+ "time": 0.2742,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "LessThan_should_create_LessThanValidator_with_lambda",
+ "result": "success",
+ "time": 0.5323,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "LessThanOrEqual_should_create_LessThanOrEqualValidator_with_explicit_value",
+ "result": "success",
+ "time": 0.6133,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "LessThanOrEqual_should_create_LessThanOrEqualValidator_with_lambda",
+ "result": "success",
+ "time": 0.5095,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "LessThanOrEqual_should_create_LessThanOrEqualValidator_with_lambda_with_other_Nullable",
+ "result": "success",
+ "time": 0.4351,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Must_should_create_PredicateValidator_with_context",
+ "result": "success",
+ "time": 0.8328,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Must_should_create_PredicateValidator_with_PropertyValidatorContext",
+ "result": "success",
+ "time": 4.2745,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Must_should_create_PredicteValidator",
+ "result": "success",
+ "time": 0.49379999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MustAsync_should_create_AsyncPredicateValidator_with_context",
+ "result": "success",
+ "time": 0.1972,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MustAsync_should_create_AsyncPredicateValidator_with_PropertyValidatorContext",
+ "result": "success",
+ "time": 1.6184999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MustAsync_should_create_AsyncPredicteValidator",
+ "result": "success",
+ "time": 0.5833,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MustAsync_should_not_throw_InvalidCastException",
+ "result": "success",
+ "time": 10.451600000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NotEmpty_should_create_NotEmptyValidator",
+ "result": "success",
+ "time": 0.2803,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NotEqual_should_create_NotEqualValidator_with_explicit_value",
+ "result": "success",
+ "time": 0.3685,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NotEqual_should_create_NotEqualValidator_with_lambda",
+ "result": "success",
+ "time": 0.5555,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NotNull_should_create_NotNullValidator",
+ "result": "success",
+ "time": 0.2713,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ScalePrecision_should_create_ScalePrecisionValidator",
+ "result": "success",
+ "time": 2.0008999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ScalePrecision_should_create_ScalePrecisionValidator_with_ignore_trailing_zeros",
+ "result": "success",
+ "time": 0.2146,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.DefaultValidatorExtensionTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0247,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0234,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0248,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.022699999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.2222,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.022699999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.023,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_email_validation_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0314,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Invalid_email_addressex_regex",
+ "result": "success",
+ "time": 0.0395,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Invalid_email_addressex_regex",
+ "result": "success",
+ "time": 0.0316,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Invalid_email_addressex_regex",
+ "result": "success",
+ "time": 0.0334,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Invalid_email_addressex_regex",
+ "result": "success",
+ "time": 0.3859,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0162,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.2029,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0167,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0174,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0166,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0157,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0167,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0191,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0307,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0158,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_aspnetcore_compatible",
+ "result": "success",
+ "time": 0.0173,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0234,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.022,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.026,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.4724,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0244,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0219,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0245,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 16.3384,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.022600000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0805,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0258,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.0275,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Valid_email_addresses_regex",
+ "result": "success",
+ "time": 0.022600000000000002,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.EmailValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passes_for_ienumerable_that_doesnt_implement_ICollection",
+ "result": "success",
+ "time": 3.0376000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passes_when_collection_empty",
+ "result": "success",
+ "time": 0.27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_there_is_a_value_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.19890000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_error_should_be_set",
+ "result": "success",
+ "time": 0.2342,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_Default_for_type_validator_should_pass_datetime",
+ "result": "success",
+ "time": 0.3325,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_Default_for_type_validator_should_pass_int",
+ "result": "success",
+ "time": 0.3963,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_empty_string_validator_should_pass",
+ "result": "success",
+ "time": 0.2019,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_null_validator_should_pass",
+ "result": "success",
+ "time": 0.2377,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_whitespace_validation_should_pass",
+ "result": "success",
+ "time": 0.1968,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.EmptyTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Flags_enum_invalid_when_using_outofrange_negative_value",
+ "result": "success",
+ "time": 0.756,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Flags_enum_invalid_when_using_outofrange_positive_value",
+ "result": "success",
+ "time": 0.7806,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Flags_enum_valid_when_using_bitwise_value",
+ "result": "success",
+ "time": 19.2413,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Flags_enum_validates_correctly_when_using_zero_value",
+ "result": "success",
+ "time": 0.38539999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Flags_enum_with_overlapping_flags_valid_when_using_bitwise_value",
+ "result": "success",
+ "time": 0.299,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "IsValidTests",
+ "result": "success",
+ "time": 0.1215,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nullable_enum_invalid_when_bad_value_specified",
+ "result": "success",
+ "time": 0.38470000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nullable_enum_valid_when_property_value_is_null",
+ "result": "success",
+ "time": 0.1594,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nullable_enum_valid_when_value_specified",
+ "result": "success",
+ "time": 1.8848,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_enum_is_initialized_with_invalid_value_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2553,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_enum_is_not_initialized_with_valid_value_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.0819,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_the_default_error_should_be_set",
+ "result": "success",
+ "time": 0.1061,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.EnumValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_property_uses_custom_resolver",
+ "result": "success",
+ "time": 0.38289999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_store_comparison_type",
+ "result": "success",
+ "time": 0.3359,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_store_property_to_compare",
+ "result": "success",
+ "time": 0.32830000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_on_case_insensitive_comparison",
+ "result": "success",
+ "time": 0.2418,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_on_case_insensitive_comparison_using_expression",
+ "result": "success",
+ "time": 0.25379999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_use_ordinal_comparison_by_default",
+ "result": "success",
+ "time": 0.1642,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_against_property",
+ "result": "success",
+ "time": 0.29329999999999995,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_objects_are_equal_validation_should_succeed",
+ "result": "success",
+ "time": 0.3395,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_objects_are_not_equal_validation_should_fail",
+ "result": "success",
+ "time": 0.21919999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_the_error_should_be_set",
+ "result": "success",
+ "time": 0.23,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.EqualValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Min_and_max_properties_should_be_set",
+ "result": "success",
+ "time": 0.0707,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_exact_length_rule_failes_error_should_have_exact_length_error_errorcode",
+ "result": "success",
+ "time": 0.6217,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_an_exact_length_the_validator_should_pass",
+ "result": "success",
+ "time": 0.2146,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_length_is_larger_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2571,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_length_is_smaller_the_validator_should_fail",
+ "result": "success",
+ "time": 0.46890000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.2836,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ExactLengthValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "To_and_from_properties_should_be_set",
+ "result": "success",
+ "time": 0.0668,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "To_and_from_properties_should_be_set_for_dates",
+ "result": "success",
+ "time": 0.09179999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "To_and_from_properties_should_be_set_for_strings",
+ "result": "success",
+ "time": 0.067,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null",
+ "result": "success",
+ "time": 0.2242,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null",
+ "result": "success",
+ "time": 0.6361,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_larger_than_the_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.5079,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_larger_than_the_range_then_the_validator_should_fail_for_strings",
+ "result": "success",
+ "time": 0.2392,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_to_is_smaller_than_the_from_then_the_validator_should_throw",
+ "result": "success",
+ "time": 0.3029,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_for_strings",
+ "result": "success",
+ "time": 0.1562,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.2535,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set_for_strings",
+ "result": "success",
+ "time": 0.2668,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_between_the_range_specified_then_the_validator_should_pass",
+ "result": "success",
+ "time": 1.1727,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_between_the_range_specified_then_the_validator_should_pass_for_strings",
+ "result": "success",
+ "time": 0.2261,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.28390000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_fail_for_strings",
+ "result": "success",
+ "time": 0.9095000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2263,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_fail_for_strings",
+ "result": "success",
+ "time": 0.23399999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_smaller_than_the_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.24689999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_smaller_than_the_range_then_the_validator_should_fail_for_strings",
+ "result": "success",
+ "time": 0.2367,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ExclusiveBetweenValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_extract_member_from_member_expression",
+ "result": "success",
+ "time": 0.11299999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_return_null_for_non_member_expressions",
+ "result": "success",
+ "time": 0.1368,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_split_pascal_cased_member_name",
+ "result": "success",
+ "time": 0.6315000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SplitPascalCase_should_return_null_when_input_is_null",
+ "result": "success",
+ "time": 0.0314,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ExtensionTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_should_work_with_child_collection",
+ "result": "success",
+ "time": 0.7127,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_colletion_index",
+ "result": "success",
+ "time": 0.28659999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_colletion_index_async",
+ "result": "success",
+ "time": 0.7781,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_parent_index",
+ "result": "success",
+ "time": 1.6135,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_parent_index_async",
+ "result": "success",
+ "time": 1.1019,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_specify_condition_for_individual_collection_elements",
+ "result": "success",
+ "time": 0.4461,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_use_cascade_with_RuleForEach",
+ "result": "success",
+ "time": 0.6943,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_validate_collection_using_validator_for_base_type",
+ "result": "success",
+ "time": 0.4768,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Collection_should_be_excluded",
+ "result": "success",
+ "time": 0.544,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Collection_should_be_explicitly_included_with_expression",
+ "result": "success",
+ "time": 0.7823,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Collection_should_be_explicitly_included_with_string",
+ "result": "success",
+ "time": 0.5339,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_should_work_with_child_collection",
+ "result": "success",
+ "time": 0.3728,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly_gets_collection_indices",
+ "result": "success",
+ "time": 0.3199,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly_gets_collection_indices_async",
+ "result": "success",
+ "time": 0.699,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_rule_for_each_item_in_collection",
+ "result": "success",
+ "time": 0.3186,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_rule_for_each_item_in_collection_async",
+ "result": "success",
+ "time": 0.7972,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_collection_for_null_property_should_not_throw_null_reference",
+ "result": "success",
+ "time": 0.4414,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_conditions_Rule_For",
+ "result": "success",
+ "time": 0.9052,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_conditions_Rule_For_Each",
+ "result": "success",
+ "time": 0.9411,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Overrides_indexer",
+ "result": "success",
+ "time": 1.2315,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Overrides_indexer_async",
+ "result": "success",
+ "time": 1.1100999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Regular_rules_can_drop_into_RuleForEach",
+ "result": "success",
+ "time": 0.8814,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "RuleForEach_async_RunsTasksSynchronously",
+ "result": "success",
+ "time": 23.6497,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_scramble_property_name_when_using_collection_validators_several_levels_deep",
+ "result": "success",
+ "time": 0.3437,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_scramble_property_name_when_using_collection_validators_several_levels_deep_with_ValidateAsync",
+ "result": "success",
+ "time": 2.1348000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_override_property_name",
+ "result": "success",
+ "time": 0.3821,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Skips_null_items",
+ "result": "success",
+ "time": 0.47859999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Top_level_collection",
+ "result": "success",
+ "time": 0.3379,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_useful_error_message_when_used_on_non_property",
+ "result": "success",
+ "time": 0.43560000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_child_validator_asynchronously",
+ "result": "success",
+ "time": 0.7232000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_child_validator_synchronously",
+ "result": "success",
+ "time": 0.356,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection",
+ "result": "success",
+ "time": 0.5174,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_runs_outside_RuleForEach_loop",
+ "result": "success",
+ "time": 0.4935,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_runs_outside_RuleForEach_loop_async",
+ "result": "success",
+ "time": 1.2558,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ForEachRuleTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_property_uses_custom_resolver",
+ "result": "success",
+ "time": 0.5497,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_type",
+ "result": "success",
+ "time": 0.20120000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_less_than_input",
+ "result": "success",
+ "time": 0.3948,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_localize_value",
+ "result": "success",
+ "time": 0.8092,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_set_default_error_when_validation_fails",
+ "result": "success",
+ "time": 0.1125,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_equal_to_input",
+ "result": "success",
+ "time": 0.078,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_greater_than_input",
+ "result": "success",
+ "time": 0.08,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_nullable_with_nullable_property",
+ "result": "success",
+ "time": 0.38539999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_property",
+ "result": "success",
+ "time": 0.5735,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null",
+ "result": "success",
+ "time": 0.2299,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null_cross_property",
+ "result": "success",
+ "time": 0.46599999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null",
+ "result": "success",
+ "time": 0.24649999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null_cross_property",
+ "result": "success",
+ "time": 0.2763,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_property",
+ "result": "success",
+ "time": 0.2879,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.GreaterThanOrEqualToValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_property_uses_custom_resolver",
+ "result": "success",
+ "time": 0.4008,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_Type",
+ "result": "success",
+ "time": 0.2061,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_equal_to_input",
+ "result": "success",
+ "time": 0.07289999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_less_than_input",
+ "result": "success",
+ "time": 0.0764,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_set_default_error_when_validation_fails",
+ "result": "success",
+ "time": 0.1047,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_greater_than_input",
+ "result": "success",
+ "time": 0.08600000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_nullable_with_nullable_property",
+ "result": "success",
+ "time": 0.6029,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_property",
+ "result": "success",
+ "time": 0.5936,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null",
+ "result": "success",
+ "time": 0.5006999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null_cross_property",
+ "result": "success",
+ "time": 0.26689999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null",
+ "result": "success",
+ "time": 0.2583,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null_cross_property",
+ "result": "success",
+ "time": 0.5453,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_property",
+ "result": "success",
+ "time": 0.4626,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.GreaterThanValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "To_and_from_properties_should_be_set",
+ "result": "success",
+ "time": 0.131,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "To_and_from_properties_should_be_set_for_strings",
+ "result": "success",
+ "time": 0.0602,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null",
+ "result": "success",
+ "time": 0.2167,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null",
+ "result": "success",
+ "time": 0.4472,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_larger_than_the_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2468,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_larger_than_the_range_then_the_validator_should_fail_for_strings",
+ "result": "success",
+ "time": 0.2377,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_to_is_smaller_than_the_from_then_the_validator_should_throw",
+ "result": "success",
+ "time": 0.6235999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_for_strings",
+ "result": "success",
+ "time": 0.13290000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.2354,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set_for_strings",
+ "result": "success",
+ "time": 0.2385,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_between_the_range_specified_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.3572,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_between_the_range_specified_then_the_validator_should_pass_for_strings",
+ "result": "success",
+ "time": 0.22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.1963,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_pass_for_strings",
+ "result": "success",
+ "time": 0.3005,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.2097,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_pass_for_strings",
+ "result": "success",
+ "time": 0.19560000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_smaller_than_the_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2294,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_value_is_smaller_than_the_range_then_the_validator_should_fail_for_strings",
+ "result": "success",
+ "time": 0.2161,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.InclusiveBetweenValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_use_custom_subclass_with_nongeneric_overload",
+ "result": "success",
+ "time": 0.6978000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection",
+ "result": "success",
+ "time": 0.6633,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_collection_async",
+ "result": "success",
+ "time": 4.0405,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_inheritance_async",
+ "result": "success",
+ "time": 1.2651999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_inheritance_hierarchy",
+ "result": "success",
+ "time": 0.5062000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_ruleset",
+ "result": "success",
+ "time": 0.9577,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_ruleset_async",
+ "result": "success",
+ "time": 1.6248,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_callback",
+ "result": "success",
+ "time": 1.2889,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_callback_accepting_derived",
+ "result": "success",
+ "time": 0.6007,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_callback_accepting_derived_async",
+ "result": "success",
+ "time": 4.8985,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_callback_async",
+ "result": "success",
+ "time": 1.1747999999999998,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.InheritanceValidatorTest",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_inline_validator_to_build_rules",
+ "result": "success",
+ "time": 1.6789999999999998,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.InlineValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "All_languages_should_be_loaded",
+ "result": "success",
+ "time": 1.3878,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "All_localizations_have_same_parameters_as_English",
+ "result": "success",
+ "time": 21.761,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Always_use_specific_language",
+ "result": "success",
+ "time": 0.0666,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Always_use_specific_language_with_string_source",
+ "result": "success",
+ "time": 0.3219,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_replace_message",
+ "result": "success",
+ "time": 0.24509999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_replace_message_without_overriding_all_languages",
+ "result": "success",
+ "time": 0.1258,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Disables_localization",
+ "result": "success",
+ "time": 0.16369999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Falls_back_to_default_localization_key_when_error_code_key_not_found",
+ "result": "success",
+ "time": 0.28150000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Falls_back_to_english_when_culture_not_registered",
+ "result": "success",
+ "time": 0.2145,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Falls_back_to_english_when_translation_missing",
+ "result": "success",
+ "time": 0.523,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Falls_back_to_parent_culture",
+ "result": "success",
+ "time": 0.4487,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_bosnian_latin_culture",
+ "result": "success",
+ "time": 0.011,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_bosnian_latin_culture",
+ "result": "success",
+ "time": 0.0627,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_bosnian_latin_culture",
+ "result": "success",
+ "time": 0.661,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_croatian_culture",
+ "result": "success",
+ "time": 0.45990000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_culture",
+ "result": "success",
+ "time": 0.0741,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_serbian_culture",
+ "result": "success",
+ "time": 0.4456,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_serbian_culture",
+ "result": "success",
+ "time": 0.0484,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_serbian_culture",
+ "result": "success",
+ "time": 0.01,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_translation_for_specific_culture",
+ "result": "success",
+ "time": 0.0989,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_error_code_as_localization_key",
+ "result": "success",
+ "time": 0.3393,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.LanguageManagerTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Min_and_max_properties_should_be_set",
+ "result": "success",
+ "time": 0.1047,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_input_is_null_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.352,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_max_is_smaller_than_the_min_then_the_validator_should_throw",
+ "result": "success",
+ "time": 0.4785,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_maxlength_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.356,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_minlength_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.3529,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_between_the_lambda_range_specified_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.92,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_between_the_range_specified_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.2179,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_exactly_the_size_of_the_lambda_lower_bound_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.3377,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_exactly_the_size_of_the_lambda_upper_bound_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.3149,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_exactly_the_size_of_the_lower_bound_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.21910000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_exactly_the_size_of_the_upper_bound_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.32899999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_larger_than_the_lambda_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.3557,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_larger_than_the_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2796,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_smaller_than_the_lambda_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.3612,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_smaller_than_the_range_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.4057,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 11.340599999999998,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.LengthValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_property_uses_custom_resolver",
+ "result": "success",
+ "time": 1.0333,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_type",
+ "result": "success",
+ "time": 0.1094,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_greater_than_input",
+ "result": "success",
+ "time": 0.0853,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_set_default_error_when_validation_fails",
+ "result": "success",
+ "time": 0.1044,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_equal_to_input",
+ "result": "success",
+ "time": 0.0726,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_less_than_input",
+ "result": "success",
+ "time": 0.082,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_nullable_with_nullable_property",
+ "result": "success",
+ "time": 0.4362,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_property",
+ "result": "success",
+ "time": 0.5804,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null",
+ "result": "success",
+ "time": 0.36719999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null_cross_property",
+ "result": "success",
+ "time": 0.4822,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null",
+ "result": "success",
+ "time": 0.2607,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null_cross_property",
+ "result": "success",
+ "time": 0.283,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_property",
+ "result": "success",
+ "time": 0.321,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.LessThanOrEqualToValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_property_uses_custom_resolver",
+ "result": "success",
+ "time": 0.3967,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_type",
+ "result": "success",
+ "time": 0.08940000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Extracts_property_from_constant_using_expression",
+ "result": "success",
+ "time": 0.0678,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Extracts_property_from_expression",
+ "result": "success",
+ "time": 0.5257000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_equal_to_input",
+ "result": "success",
+ "time": 0.2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_greater_than_input",
+ "result": "success",
+ "time": 0.19249999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_set_default_validation_message_when_validation_fails",
+ "result": "success",
+ "time": 0.352,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_less_than_input",
+ "result": "success",
+ "time": 0.1783,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_value_to_compare_is_null",
+ "result": "success",
+ "time": 0.28909999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_against_property",
+ "result": "success",
+ "time": 1.2022000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_nullable_with_nullable_property",
+ "result": "success",
+ "time": 0.773,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_property",
+ "result": "success",
+ "time": 0.5793,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_is_null",
+ "result": "success",
+ "time": 0.34259999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null",
+ "result": "success",
+ "time": 0.2586,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_not_null_cross_property",
+ "result": "success",
+ "time": 0.27080000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_with_nullable_when_property_null_cross_property",
+ "result": "success",
+ "time": 0.46349999999999997,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.LessThanValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly_assigns_default_localized_error_message",
+ "result": "success",
+ "time": 1.1647,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_throw_InvalidCastException_when_using_RuleForEach",
+ "result": "success",
+ "time": 0.4547,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Formats_string_with_placeholders",
+ "result": "success",
+ "time": 0.2342,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Formats_string_with_placeholders_when_you_cant_edit_the_string",
+ "result": "success",
+ "time": 0.2285,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_func_to_get_message",
+ "result": "success",
+ "time": 0.23829999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_string_format_with_property_value",
+ "result": "success",
+ "time": 0.7191,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.LocalisedMessagesTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_localized_name",
+ "result": "success",
+ "time": 0.3024,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_localized_name_expression",
+ "result": "success",
+ "time": 0.8903,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.LocalisedNameTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ComplexPropertyGet",
+ "result": "success",
+ "time": 0.9033,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ComplexPropertySet",
+ "result": "success",
+ "time": 0.44129999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Equality",
+ "result": "success",
+ "time": 1.0753,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ImplicitCast",
+ "result": "success",
+ "time": 0.8765999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Name",
+ "result": "success",
+ "time": 0.4323,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SimpleFieldGet",
+ "result": "success",
+ "time": 0.4109,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SimpleFieldSet",
+ "result": "success",
+ "time": 0.4092,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SimplePropertyGet",
+ "result": "success",
+ "time": 0.4082,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SimplePropertySet",
+ "result": "success",
+ "time": 0.4415,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.MemberAccessorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adds_argument_and_custom_arguments",
+ "result": "success",
+ "time": 0.0699,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adds_formatted_argument_and_custom_arguments",
+ "result": "success",
+ "time": 0.0808,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adds_formatted_argument_and_formatted_custom_arguments",
+ "result": "success",
+ "time": 0.2678,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adds_PropertyName_to_message",
+ "result": "success",
+ "time": 0.0779,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adds_value_to_message",
+ "result": "success",
+ "time": 0.0583,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Format_property_value",
+ "result": "success",
+ "time": 0.2165,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_ignore_unknown_numbered_parameters",
+ "result": "success",
+ "time": 0.1013,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_ignore_unknown_parameters",
+ "result": "success",
+ "time": 0.8556,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Understands_date_formats",
+ "result": "success",
+ "time": 0.17479999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Understands_numeric_formats",
+ "result": "success",
+ "time": 0.1847,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.MessageFormatterTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_use_child_validator_at_model_level",
+ "result": "success",
+ "time": 0.4502,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_at_model_level",
+ "result": "success",
+ "time": 0.3216,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ModelLevelValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Resolves_nested_properties",
+ "result": "success",
+ "time": 0.5703,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_Should_support_custom_propertynameresolver",
+ "result": "success",
+ "time": 0.7316,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_custom_property_name",
+ "result": "success",
+ "time": 0.2739,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.NameResolutionPluggabilityTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_for_array",
+ "result": "success",
+ "time": 0.465,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_for_ienumerable_that_doesnt_implement_ICollection",
+ "result": "success",
+ "time": 1.2461,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_when_collection_empty",
+ "result": "success",
+ "time": 0.5821,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_there_is_a_value_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.2293,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_error_should_be_set",
+ "result": "success",
+ "time": 0.27769999999999995,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_Default_for_type_validator_should_fail_datetime",
+ "result": "success",
+ "time": 1.9899000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_Default_for_type_validator_should_fail_int",
+ "result": "success",
+ "time": 1.8552,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_empty_string_validator_should_fail",
+ "result": "success",
+ "time": 0.2511,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_null_validator_should_fail",
+ "result": "success",
+ "time": 0.2923,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_value_is_whitespace_validation_should_fail",
+ "result": "success",
+ "time": 0.21780000000000002,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.NotEmptyTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comparison_property_uses_custom_resolver",
+ "result": "success",
+ "time": 0.4998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_handle_custom_value_types_correctly",
+ "result": "success",
+ "time": 2.2529,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_be_valid_for_case_insensitve_comparison",
+ "result": "success",
+ "time": 0.4358,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_be_valid_for_case_insensitve_comparison_with_expression",
+ "result": "success",
+ "time": 0.2824,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_store_comparison_type",
+ "result": "success",
+ "time": 0.4205,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_store_property_to_compare",
+ "result": "success",
+ "time": 1.8339999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_use_ordinal_comparison_by_default",
+ "result": "success",
+ "time": 0.2273,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_across_properties",
+ "result": "success",
+ "time": 0.31720000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_objects_are_equal_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.2655,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_objects_are_not_equal_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.2334,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.2574,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.NotEqualValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Fails_when_nullable_value_type_is_null",
+ "result": "success",
+ "time": 0.39080000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Not_null_validator_should_not_crash_with_non_nullable_value_type",
+ "result": "success",
+ "time": 0.27349999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NotNullValidator_should_fail_if_value_is_null",
+ "result": "success",
+ "time": 0.2029,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NotNullValidator_should_pass_if_value_has_value",
+ "result": "success",
+ "time": 0.2119,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_fails_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.22460000000000002,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.NotNullTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Not_null_validator_should_not_crash_with_non_nullable_value_type",
+ "result": "success",
+ "time": 0.5603,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NullValidator_should_fail_if_value_has_value",
+ "result": "success",
+ "time": 0.2075,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NullValidator_should_pass_if_value_is_null",
+ "result": "success",
+ "time": 0.3543,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passes_when_nullable_value_type_is_null",
+ "result": "success",
+ "time": 0.2748,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_validator_passes_the_error_message_should_be_set",
+ "result": "success",
+ "time": 0.2424,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.NullTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "OnFailure_called_for_each_failed_rule",
+ "result": "success",
+ "time": 0.5670000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "OnFailure_called_for_each_failed_rule_asyncAsync",
+ "result": "success",
+ "time": 1.8854,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_be_able_to_access_error_message_in_OnFailure",
+ "result": "success",
+ "time": 0.5239,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_should_be_true",
+ "result": "success",
+ "time": 1.2439,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_works_with_Include",
+ "result": "success",
+ "time": 0.2922,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenAsyncWithOnFailure_should_invoke_condition_on_async_inner_validator",
+ "result": "success",
+ "time": 0.6154,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenAsyncWithOnFailure_should_invoke_condition_on_inner_validator",
+ "result": "success",
+ "time": 1.4785,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenAsyncWithOnFailure_should_invoke_condition_on_inner_validator_invoked_synchronously",
+ "result": "success",
+ "time": 0.3084,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenWithOnFailure_should_invoke_condition_on_async_inner_validator",
+ "result": "success",
+ "time": 0.634,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenWithOnFailure_should_invoke_condition_on_inner_validator",
+ "result": "success",
+ "time": 0.2855,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.OnFailureTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_fail_when_predicate_returns_false",
+ "result": "success",
+ "time": 0.0917,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_succeed_when_predicate_returns_true",
+ "result": "success",
+ "time": 0.0766,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_predicate_is_null",
+ "result": "success",
+ "time": 0.3168,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_metadata_should_be_set_on_failure",
+ "result": "success",
+ "time": 1.2067,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_the_default_error_should_be_set",
+ "result": "success",
+ "time": 0.4204,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.PredicateValidatorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "AddIndexer_throws_when_nothing_added",
+ "result": "success",
+ "time": 0.171,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Calling_ToString_should_construct_string_representation_of_chain",
+ "result": "success",
+ "time": 0.0748,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Calling_ToString_should_construct_string_representation_of_chain_with_indexers",
+ "result": "success",
+ "time": 0.2382,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Creates_from_expression",
+ "result": "success",
+ "time": 0.12760000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_be_subchain",
+ "result": "success",
+ "time": 0.12029999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_ignore_blanks",
+ "result": "success",
+ "time": 0.0472,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_be_subchain",
+ "result": "success",
+ "time": 0.050300000000000004,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.PropertyChainTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_expression_in_message",
+ "result": "success",
+ "time": 0.2264,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_expression_in_message_lambda",
+ "result": "success",
+ "time": 0.28009999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_access_expression_in_message_lambda_regex",
+ "result": "success",
+ "time": 0.2767,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_lazily_loaded_expression",
+ "result": "success",
+ "time": 0.31760000000000005,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_lazily_loaded_expression_with_options",
+ "result": "success",
+ "time": 1.451,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Uses_regex_object",
+ "result": "success",
+ "time": 0.49510000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_does_not_match_the_lambda_regex_regular_expression_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.3653,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_does_not_match_the_lambda_regular_expression_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.1392,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_does_not_match_the_regular_expression_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.16440000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_empty_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.10490000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_is_null_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.09280000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_matches_the_lambda_regex_regular_expression_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.1215,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_matches_the_lambda_regular_expression_then_the_validator_should_pass",
+ "result": "success",
+ "time": 0.3275,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_text_matches_the_regular_expression_then_the_validator_should_pass",
+ "result": "success",
+ "time": 1.805,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_the_default_error_should_be_set",
+ "result": "success",
+ "time": 0.1265,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.RegularExpressionValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adding_a_validator_should_return_builder",
+ "result": "success",
+ "time": 0.0714,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Adding_a_validator_should_store_validator",
+ "result": "success",
+ "time": 0.0807,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Calling_validate_should_delegate_to_underlying_validator",
+ "result": "success",
+ "time": 1.4739,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Calling_ValidateAsync_should_delegate_to_underlying_async_validator",
+ "result": "success",
+ "time": 13.4579,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Calling_ValidateAsync_should_delegate_to_underlying_sync_validator",
+ "result": "success",
+ "time": 73.5933,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Conditional_child_validator_should_register_with_validator_type_not_property",
+ "result": "success",
+ "time": 0.3936,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nullable_object_with_async_condition_should_not_throw",
+ "result": "success",
+ "time": 0.5033000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nullable_object_with_condition_should_not_throw",
+ "result": "success",
+ "time": 1.088,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Property_should_return_null_when_it_is_not_a_property_being_validated",
+ "result": "success",
+ "time": 0.3637,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Property_should_return_property_being_validated",
+ "result": "success",
+ "time": 0.0816,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "PropertyDescription_should_return_custom_property_name",
+ "result": "success",
+ "time": 0.6558,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "PropertyDescription_should_return_property_name_split",
+ "result": "success",
+ "time": 0.4031,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Result_should_use_custom_property_name_when_no_property_name_can_be_determined",
+ "result": "success",
+ "time": 0.5762,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Rule_for_a_non_memberexpression_should_not_generate_property_name",
+ "result": "success",
+ "time": 0.3533,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_build_property_name",
+ "result": "success",
+ "time": 0.0559,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_compile_expression",
+ "result": "success",
+ "time": 0.1225,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_set_custom_error",
+ "result": "success",
+ "time": 0.1428,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_set_custom_property_name",
+ "result": "success",
+ "time": 0.3705,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_if_message_is_null",
+ "result": "success",
+ "time": 0.1371,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_if_overriding_validator_is_null",
+ "result": "success",
+ "time": 0.14880000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_if_overriding_validator_provider_is_null",
+ "result": "success",
+ "time": 0.1555,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_if_property_name_is_null",
+ "result": "success",
+ "time": 0.2522,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_if_validator_is_null",
+ "result": "success",
+ "time": 0.14579999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_async_inverse_predicate_is_null",
+ "result": "success",
+ "time": 0.354,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_async_predicate_is_null",
+ "result": "success",
+ "time": 0.1555,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_context_predicate_is_null",
+ "result": "success",
+ "time": 0.1421,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_inverse_context_predicate_is_null",
+ "result": "success",
+ "time": 0.33540000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_inverse_predicate_is_null",
+ "result": "success",
+ "time": 0.3373,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_throw_when_predicate_is_null",
+ "result": "success",
+ "time": 0.1542,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.RuleBuilderTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_inside_dependent_rules",
+ "result": "success",
+ "time": 1505.6573,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_inside_dependent_rules_when_parent_rule_not_async",
+ "result": "success",
+ "time": 992.5303,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Dependent_rules_inside_ruleset",
+ "result": "success",
+ "time": 0.4097,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Dependent_rules_inside_when",
+ "result": "success",
+ "time": 1.14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_invoke_dependent_rule_if_parent_rule_does_not_pass",
+ "result": "success",
+ "time": 0.328,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Invokes_dependent_rule_if_parent_rule_passes",
+ "result": "success",
+ "time": 0.3376,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_dependent_rules",
+ "result": "success",
+ "time": 0.5419,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_dependent_rules_inside_ruleset",
+ "result": "success",
+ "time": 0.5315,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_dependent_rules_inside_ruleset_inside_method",
+ "result": "success",
+ "time": 0.7514000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_dependent_rules_inside_ruleset_no_result_when_second_level_fails",
+ "result": "success",
+ "time": 0.5888,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_dependent_rules_inside_ruleset_no_result_when_top_level_fails",
+ "result": "success",
+ "time": 1.6869,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TestAsyncWithDependentRules_AsyncEntry",
+ "result": "success",
+ "time": 5.0739,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TestAsyncWithDependentRules_SyncEntry",
+ "result": "success",
+ "time": 1.3845999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Treats_root_level_RuleFor_call_as_dependent_rule_if_user_forgets_to_use_DependentRulesBuilder",
+ "result": "success",
+ "time": 0.3687,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.RuleDependencyTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Applies_multiple_rulesets_to_rule",
+ "result": "success",
+ "time": 0.4398,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Combines_rulesets_and_explicit_properties",
+ "result": "success",
+ "time": 0.9970000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Combines_rulesets_and_explicit_properties_async",
+ "result": "success",
+ "time": 1.092,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_all_rules",
+ "result": "success",
+ "time": 0.7106,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_in_rule_in_default_and_none",
+ "result": "success",
+ "time": 0.354,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_in_rule_in_ruleset_and_default",
+ "result": "success",
+ "time": 0.38020000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_multiple_rulesets",
+ "result": "success",
+ "time": 1.7933000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_rules_in_default_ruleset_and_specific_ruleset",
+ "result": "success",
+ "time": 0.4761,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_rules_in_specified_ruleset",
+ "result": "success",
+ "time": 0.1594,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_rules_not_specified_in_ruleset",
+ "result": "success",
+ "time": 0.1365,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Includes_all_rulesets",
+ "result": "success",
+ "time": 0.8384,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Includes_all_rulesets_async",
+ "result": "success",
+ "time": 1.0633000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Includes_combination_of_rulesets",
+ "result": "success",
+ "time": 0.6445,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Includes_combination_of_rulesets_async",
+ "result": "success",
+ "time": 1.0528,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Ruleset_cascades_to_child_collection_validator",
+ "result": "success",
+ "time": 0.8193,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Ruleset_cascades_to_child_validator",
+ "result": "success",
+ "time": 0.5176000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Ruleset_selection_should_cascade_downwards_with_when_setting_child_validator_using_include_statement",
+ "result": "success",
+ "time": 0.1585,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Ruleset_selection_should_cascade_downwards_with_when_setting_child_validator_using_include_statement_with_lambda",
+ "result": "success",
+ "time": 0.8220000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Ruleset_selection_should_not_cascade_downwards_when_set_on_property",
+ "result": "success",
+ "time": 0.9641,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Trims_spaces",
+ "result": "success",
+ "time": 0.4086,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WithMessage_works_inside_rulesets",
+ "result": "success",
+ "time": 0.1237,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.RulesetTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Scale_precision_should_be_valid",
+ "result": "success",
+ "time": 0.3178,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Scale_precision_should_be_valid_when_ignoring_trailing_zeroes",
+ "result": "success",
+ "time": 1.5273,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Scale_precision_should_be_valid_when_they_are_equal",
+ "result": "success",
+ "time": 0.383,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Scale_precision_should_not_be_valid",
+ "result": "success",
+ "time": 0.6978000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Scale_precision_should_not_be_valid_when_ignoring_trailing_zeroes",
+ "result": "success",
+ "time": 0.4372,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Scale_precision_should_not_be_valid_when_they_are_equal",
+ "result": "success",
+ "time": 0.4406,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ScalePrecisionValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Async_condition_can_be_used_inside_ruleset",
+ "result": "success",
+ "time": 1.8948,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Condition_can_be_used_inside_ruleset",
+ "result": "success",
+ "time": 0.5963999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_execute_custom_Rule_when_async_condition_false",
+ "result": "success",
+ "time": 0.9039999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_execute_custom_Rule_when_condition_false",
+ "result": "success",
+ "time": 0.8838,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_execute_customasync_Rule_when_async_condition_false",
+ "result": "success",
+ "time": 0.8363,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_execute_customasync_Rule_when_condition_false",
+ "result": "success",
+ "time": 0.34909999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Doesnt_throw_NullReferenceException_when_instance_not_null",
+ "result": "success",
+ "time": 0.1771,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Doesnt_throw_NullReferenceException_when_instance_not_null_async",
+ "result": "success",
+ "time": 1.4607999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_custom_rule_when_async_condition_true",
+ "result": "success",
+ "time": 0.7245,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_custom_rule_when_condition_true",
+ "result": "success",
+ "time": 1.0053,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_customasync_rule_when_async_condition_true",
+ "result": "success",
+ "time": 1.1516,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_customasync_rule_when_condition_true",
+ "result": "success",
+ "time": 1.4208,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_async_conditions_with_Custom_rule",
+ "result": "success",
+ "time": 0.7695,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_async_conditions_with_CustomAsync_rule",
+ "result": "success",
+ "time": 0.9986,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_conditions_with_Custom_rule",
+ "result": "success",
+ "time": 0.4756,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Nested_conditions_with_CustomAsync_rule",
+ "result": "success",
+ "time": 2.7533000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Outer_async_Unless_clause_will_trump_an_inner_Unless_clause_when_inner_fails_but_the_outer_is_satisfied",
+ "result": "success",
+ "time": 0.4874,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Outer_Unless_clause_will_trump_an_inner_Unless_clause_when_inner_fails_but_the_outer_is_satisfied",
+ "result": "success",
+ "time": 0.1804,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Rules_invoke_when_inverse_shared_async_condition_matches",
+ "result": "success",
+ "time": 0.9430000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Rules_invoke_when_inverse_shared_condition_matches",
+ "result": "success",
+ "time": 0.1103,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Rules_not_invoked_when_inverse_shared_async_condition_does_not_match",
+ "result": "success",
+ "time": 2.8571,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Rules_not_invoked_when_inverse_shared_condition_does_not_match",
+ "result": "success",
+ "time": 0.9261999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "RuleSet_can_be_used_inside_async_condition",
+ "result": "success",
+ "time": 1.1754,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "RuleSet_can_be_used_inside_condition",
+ "result": "success",
+ "time": 0.8270000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs_otherwise_conditions_for_UnlessAsync",
+ "result": "success",
+ "time": 4.1051,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs_otherwise_conditions_for_When",
+ "result": "success",
+ "time": 0.5630000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs_otherwise_conditions_for_WhenAsync",
+ "result": "success",
+ "time": 1.1260000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs_otherwise_conditons_for_Unless",
+ "result": "success",
+ "time": 0.8404,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_async_When_is_applied_to_groupd_rules_when_initial_predicate_is_true_and_all_individual_rules_are_satisfied",
+ "result": "success",
+ "time": 0.4461,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_async_When_is_applied_to_grouped_rules_when_initial_predicate_is_true",
+ "result": "success",
+ "time": 0.9460000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_async_When_is_not_applied_to_grouped_rules_when_initial_predicate_is_false",
+ "result": "success",
+ "time": 0.40890000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_async_When_respects_the_smaller_scope_of_a_inner_Unless_when_the_inner_Unless_predicate_fails",
+ "result": "success",
+ "time": 2.9811,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_async_When_respects_the_smaller_scope_of_an_inner_Unless_when_the_inner_Unless_predicate_is_satisfied",
+ "result": "success",
+ "time": 0.4845,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_When_is_applied_to_groupd_rules_when_initial_predicate_is_true_and_all_individual_rules_are_satisfied",
+ "result": "success",
+ "time": 0.455,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_When_is_applied_to_grouped_rules_when_initial_predicate_is_true",
+ "result": "success",
+ "time": 0.15239999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_When_is_not_applied_to_grouped_rules_when_initial_predicate_is_false",
+ "result": "success",
+ "time": 0.1183,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_When_respects_the_smaller_scope_of_a_inner_Unless_when_the_inner_Unless_predicate_fails",
+ "result": "success",
+ "time": 0.1544,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shared_When_respects_the_smaller_scope_of_an_inner_Unless_when_the_inner_Unless_predicate_is_satisfied",
+ "result": "success",
+ "time": 1.9156,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_async_condition_executed_for_each_instance_of_RuleForEach_condition_should_not_be_cached",
+ "result": "success",
+ "time": 1.2985,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_condition_executed_for_each_instance_of_RuleForEach_condition_should_not_be_cached",
+ "result": "success",
+ "time": 0.6033,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_condition_only_executed_once",
+ "result": "success",
+ "time": 0.4167,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "WhenAsync_condition_only_executed_once",
+ "result": "success",
+ "time": 0.92,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.SharedConditionTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_validate_property_value_without_instance",
+ "result": "success",
+ "time": 0.37579999999999997,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.StandalonePropertyValidationTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "IsValidTests_CaseInsensitive_CaseCorrect",
+ "result": "success",
+ "time": 0.10959999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "IsValidTests_CaseInsensitive_CaseIncorrect",
+ "result": "success",
+ "time": 0.2316,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "IsValidTests_CaseSensitive_CaseCorrect",
+ "result": "success",
+ "time": 1.2556,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "IsValidTests_CaseSensitive_CaseIncorrect",
+ "result": "success",
+ "time": 0.1363,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_enumType_is_not_an_enum_it_should_throw",
+ "result": "success",
+ "time": 0.4576,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_enumType_is_null_it_should_throw",
+ "result": "success",
+ "time": 2.1549,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_property_is_initialized_with_empty_string_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.1593,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_property_is_initialized_with_invalid_string_then_the_validator_should_fail",
+ "result": "success",
+ "time": 0.0987,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_the_property_is_initialized_with_null_then_the_validator_should_be_valid",
+ "result": "success",
+ "time": 0.087,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_validation_fails_the_default_error_should_be_set",
+ "result": "success",
+ "time": 0.1968,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.StringEnumValidatorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Add_AddsItem",
+ "result": "success",
+ "time": 0.6937,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_raise_event_once_handler_detached",
+ "result": "success",
+ "time": 0.16090000000000002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When_Item_Added_Raises_ItemAdded",
+ "result": "success",
+ "time": 0.8476,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.TrackingCollectionTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Transforms_collection_element",
+ "result": "success",
+ "time": 0.8965000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Transforms_collection_element_async",
+ "result": "success",
+ "time": 1.2982,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Transforms_property_value",
+ "result": "success",
+ "time": 0.3746,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Transforms_property_value_to_another_type",
+ "result": "success",
+ "time": 0.4268,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.TransformTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_Provide_conditional_severity",
+ "result": "success",
+ "time": 0.28909999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_Provide_severity_for_item_in_collection",
+ "result": "success",
+ "time": 0.7448,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly_provides_object_being_validated",
+ "result": "success",
+ "time": 0.3232,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Defaults_user_severity_to_error",
+ "result": "success",
+ "time": 0.1704,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_use_last_supplied_severity",
+ "result": "success",
+ "time": 0.6834,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Stores_user_severity_against_validation_failure",
+ "result": "success",
+ "time": 0.2021,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Throws_when_provider_is_null",
+ "result": "success",
+ "time": 0.1945,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.UserSeverityTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_Provide_state_for_item_in_collection",
+ "result": "success",
+ "time": 1.113,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly_provides_object_being_validated",
+ "result": "success",
+ "time": 0.3223,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Stores_user_state_against_validation_failure",
+ "result": "success",
+ "time": 1.1142,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Throws_when_provider_is_null",
+ "result": "success",
+ "time": 0.2016,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.UserStateTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_throw_when_valid",
+ "result": "success",
+ "time": 0.2097,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_throw_when_valid_and_a_ruleset",
+ "result": "success",
+ "time": 0.3775,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_throw_when_valid_and_a_ruleset_async",
+ "result": "success",
+ "time": 0.3892,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_throw_when_valid_async",
+ "result": "success",
+ "time": 1.014,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Only_root_validator_throws",
+ "result": "success",
+ "time": 0.7993,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Populates_errors",
+ "result": "success",
+ "time": 0.3478,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Serializes_exception",
+ "result": "success",
+ "time": 7.024,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Throws_exception",
+ "result": "success",
+ "time": 0.4234,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Throws_exception_async",
+ "result": "success",
+ "time": 0.4271,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Throws_exception_with_a_ruleset",
+ "result": "success",
+ "time": 0.7043,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Throws_exception_with_a_ruleset_async",
+ "result": "success",
+ "time": 1.1925,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ToString_provides_error_details",
+ "result": "success",
+ "time": 11.7391,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ValidationException_provides_correct_message_when_appendDefaultMessage_false",
+ "result": "success",
+ "time": 0.1514,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ValidationException_provides_correct_message_when_appendDefaultMessage_true",
+ "result": "success",
+ "time": 0.0992,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ValidateAndThrowTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_serialize_failure",
+ "result": "success",
+ "time": 0.0995,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_serialize_result",
+ "result": "success",
+ "time": 7.1021,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_add_errors",
+ "result": "success",
+ "time": 0.0917,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_be_valid_when_there_are_no_errors",
+ "result": "success",
+ "time": 0.0335,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_not_be_valid_when_there_are_errors",
+ "result": "success",
+ "time": 0.0549,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ToString_return_empty_string_when_there_is_no_error",
+ "result": "success",
+ "time": 0.1348,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ToString_return_error_messages_with_given_separator",
+ "result": "success",
+ "time": 0.0727,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ToString_return_error_messages_with_newline_as_separator",
+ "result": "success",
+ "time": 0.3538,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ValidationResultTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_throw_when_rule_declared_without_property",
+ "result": "success",
+ "time": 0.1726,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Gets_validators_for_property",
+ "result": "success",
+ "time": 0.1789,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "GetValidatorsForMember_and_GetRulesForMember_can_both_retrieve_for_model_level_rule",
+ "result": "success",
+ "time": 0.3935,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns_empty_collection_for_property_with_no_validators",
+ "result": "success",
+ "time": 0.0885,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Should_retrieve_name_given_to_it_pass_property_as_string",
+ "result": "success",
+ "time": 0.5729,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ValidatorDescriptorTester",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_use_property_with_include",
+ "result": "success",
+ "time": 0.9319000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_validate_other_property",
+ "result": "success",
+ "time": 0.4189,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does_not_validate_other_property_using_expression",
+ "result": "success",
+ "time": 0.3211,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_correct_rule_when_using_property_with_include",
+ "result": "success",
+ "time": 1.118,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Executes_correct_rule_when_using_property_with_include_async",
+ "result": "success",
+ "time": 1.7451999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Includes_nested_property",
+ "result": "success",
+ "time": 0.6524,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Includes_nested_property_using_expression",
+ "result": "success",
+ "time": 0.5054000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MemberNameValidatorSelector_returns_true_when_property_name_matches",
+ "result": "success",
+ "time": 0.29750000000000004,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_nullable_property_with_overriden_name_when_selected",
+ "result": "success",
+ "time": 1.9594999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Validates_property_using_expression",
+ "result": "success",
+ "time": 1.3178,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ValidatorSelectorTests",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": null,
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Allows_only_one_failure_to_match",
+ "result": "success",
+ "time": 0.7083,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_use_indexer_in_string_message",
+ "result": "success",
+ "time": 0.562,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can_use_indexer_in_string_message_inverse",
+ "result": "success",
+ "time": 0.553,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected_error_code_check",
+ "result": "success",
+ "time": 0.5873999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected_message_argument_check",
+ "result": "success",
+ "time": 0.9659,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected_message_check",
+ "result": "success",
+ "time": 0.6922,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected_severity_check",
+ "result": "success",
+ "time": 4.6721,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected_state_check",
+ "result": "success",
+ "time": 0.8907999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Matches_any_failure",
+ "result": "success",
+ "time": 0.6901,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Matches_model_level_rule",
+ "result": "success",
+ "time": 0.6478999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Model_level_check_fails_if_no_model_level_failures",
+ "result": "success",
+ "time": 0.5599,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_should_not_throw_when_property_Does_have_child_validator",
+ "result": "success",
+ "time": 2.2892,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_should_not_throw_when_property_Does_have_child_validator_and_expecting_a_basetype",
+ "result": "success",
+ "time": 0.4634,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_should_not_throw_when_property_has_collection_validators",
+ "result": "success",
+ "time": 0.5756,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_should_throw_when_property_has_a_different_child_validator",
+ "result": "success",
+ "time": 0.5867,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_should_work_with_DependentRules",
+ "result": "success",
+ "time": 1.2294,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildvalidator_throws_when_collection_property_Does_not_have_child_validator",
+ "result": "success",
+ "time": 0.3538,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_throws_when_property_does_not_have_child_validator",
+ "result": "success",
+ "time": 0.34450000000000003,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveChildValidator_works_on_model_level_rules",
+ "result": "success",
+ "time": 1.3494,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_async",
+ "result": "success",
+ "time": 2.7288,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_async_throws",
+ "result": "success",
+ "time": 1.366,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_model_async",
+ "result": "success",
+ "time": 1.3614,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_model_async_throws",
+ "result": "success",
+ "time": 1.1585,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_preconstructed_object_does_not_throw_for_unwritable_property",
+ "result": "success",
+ "time": 0.8894000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_not_throw_when_there_are_errors_with_preconstructed_object",
+ "result": "success",
+ "time": 0.6462,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors",
+ "result": "success",
+ "time": 0.7782,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.746,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.6089,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_not_throw_when_there_are_validation_errors_ruleforeach",
+ "result": "success",
+ "time": 0.8097,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_Should_support_nested_properties",
+ "result": "success",
+ "time": 0.8523,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_Should_throw_when_there_are_no_validation_errors",
+ "result": "success",
+ "time": 0.8389,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_throw_when_there_are_no_validation_errors_with_preconstructed_object",
+ "result": "success",
+ "time": 0.8107,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used",
+ "result": "success",
+ "time": 1.7937,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used",
+ "result": "success",
+ "time": 0.5484,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used",
+ "result": "success",
+ "time": 0.8127,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_Is_Used",
+ "result": "success",
+ "time": 0.6412,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_should_throw_when_there_are_not_validation_errors_ruleforeach",
+ "result": "success",
+ "time": 2.2201999999999997,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_with_an_unmatched_rule_and_a_single_error_should_throw_an_exception",
+ "result": "success",
+ "time": 0.6954,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationError_with_an_unmatched_rule_and_multiple_errors_should_throw_an_exception",
+ "result": "success",
+ "time": 1.7809,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationErrorFor_takes_account_of_rulesets",
+ "result": "success",
+ "time": 0.7521,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldHaveValidationErrorFor_takes_account_of_rulesets_fluent_approach",
+ "result": "success",
+ "time": 0.7776000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_async",
+ "result": "success",
+ "time": 1.5238,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_async_model_throws",
+ "result": "success",
+ "time": 1.1796,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_async_throws",
+ "result": "success",
+ "time": 2.2945,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_model_async",
+ "result": "success",
+ "time": 1.2782,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_correctly_handle_explicitly_providing_object_to_validate",
+ "result": "success",
+ "time": 3.1438,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_correctly_handle_explicitly_providing_object_to_validate_and_other_property_fails_validation",
+ "result": "success",
+ "time": 1.4272,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_have_validation_error_details_when_thrown_ruleforeach",
+ "result": "success",
+ "time": 1.2661,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_not_throw_when_there_are_no_errors",
+ "result": "success",
+ "time": 0.8220999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHAveValidationError_should_not_throw_When_there_are_no_errors_with_preconstructed_object",
+ "result": "success",
+ "time": 0.721,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_not_throw_when_there_are_not_validation_errors_ruleforeach",
+ "result": "success",
+ "time": 0.8011999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_Should_support_nested_properties",
+ "result": "success",
+ "time": 0.9315,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_errors",
+ "result": "success",
+ "time": 0.8857999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_errors_with_preconstructed_object",
+ "result": "success",
+ "time": 2.3915,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.5719,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.897,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.5838,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_not_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.5804,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.6807,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_validation_errors__WhenAsyn_is_used",
+ "result": "success",
+ "time": 0.8635,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ShouldNotHaveValidationError_should_throw_when_there_are_validation_errors_ruleforeach",
+ "result": "success",
+ "time": 0.9397,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Tests_nested_property",
+ "result": "success",
+ "time": 0.4914,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Tests_nested_property_reverse",
+ "result": "success",
+ "time": 0.4663,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Tests_nested_property_using_obsolete_method",
+ "result": "success",
+ "time": 0.46759999999999996,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TestValidate_runs_async",
+ "result": "success",
+ "time": 0.7477,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TestValidate_runs_async_throws",
+ "result": "success",
+ "time": 0.8540000000000001,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_error_code_check",
+ "result": "success",
+ "time": 1.6124,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_message_check",
+ "result": "success",
+ "time": 0.1548,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_message_check",
+ "result": "success",
+ "time": 0.3297,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_message_check",
+ "result": "success",
+ "time": 0.1797,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_message_check",
+ "result": "success",
+ "time": 0.7345999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_severity_check",
+ "result": "success",
+ "time": 0.9091,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Unexpected_state_check",
+ "result": "success",
+ "time": 0.9751,
+ },
+ ],
+ },
+ ],
+ "name": "FluentValidation.Tests.ValidatorTesterTester",
+ "totalTime": undefined,
+ },
+ ],
+ "totalTime": 4480,
}
`;
diff --git a/__tests__/__snapshots__/jest-junit.test.ts.snap b/__tests__/__snapshots__/jest-junit.test.ts.snap
index fde78d2d..e4f1c823 100644
--- a/__tests__/__snapshots__/jest-junit.test.ts.snap
+++ b/__tests__/__snapshots__/jest-junit.test.ts.snap
@@ -1,12 +1,30 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`jest-junit tests matches report snapshot 1`] = `
-Object {
- "annotations": Array [
- Object {
- "annotation_level": "failure",
- "end_line": 10,
- "message": "Error: expect(received).toBeTruthy()
+exports[`jest-junit tests report from ./reports/jest test results matches snapshot 1`] = `
+TestRunResult {
+ "path": "fixtures/jest-junit.xml",
+ "suites": Array [
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Test 1",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Passing test",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Test 1 › Test 1.1",
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 10,
+ "path": "__tests__/main.test.js",
+ "stackTrace": "Error: expect(received).toBeTruthy()
Received: false
at Object. (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\__tests__\\\\main.test.js:10:21)
@@ -16,14 +34,16 @@ Received: false
at mapper (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:28:19)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:97:5)",
- "path": "__tests__/main.test.js",
- "start_line": 10,
- "title": "[__tests__\\\\main.test.js] Failing test",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 2,
- "message": "Error: Some error
+ },
+ "name": "Failing test",
+ "result": "failed",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": Object {
+ "line": 2,
+ "path": "lib/main.js",
+ "stackTrace": "Error: Some error
at Object.throwError (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\lib\\\\main.js:2:9)
at Object. (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\__tests__\\\\main.test.js:14:11)
at Object.asyncJestTest (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmineAsyncInstall.js:106:37)
@@ -32,14 +52,21 @@ Received: false
at mapper (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:28:19)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:97:5)",
- "path": "lib/main.js",
- "start_line": 2,
- "title": "[__tests__\\\\main.test.js] Exception in target unit",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 21,
- "message": "Error: Some error
+ },
+ "name": "Exception in target unit",
+ "result": "failed",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Test 2",
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 21,
+ "path": "__tests__/main.test.js",
+ "stackTrace": "Error: Some error
at Object. (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\__tests__\\\\main.test.js:21:11)
at Object.asyncJestTest (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmineAsyncInstall.js:106:37)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:45:12
@@ -47,14 +74,27 @@ Received: false
at mapper (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:28:19)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:97:5)",
- "path": "__tests__/main.test.js",
- "start_line": 21,
- "title": "[__tests__\\\\main.test.js] Exception in test",
- },
- Object {
- "annotation_level": "failure",
- "end_line": 1,
- "message": ": Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Error:
+ },
+ "name": "Exception in test",
+ "result": "failed",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "__tests__\\\\main.test.js",
+ "totalTime": 486,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": Object {
+ "line": 1,
+ "path": "__tests__/second.test.js",
+ "stackTrace": ": Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Error:
at new Spec (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmine\\\\Spec.js:116:22)
at new Spec (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\setup_jest_globals.js:78:9)
at specFactory (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmine\\\\Env.js:523:24)
@@ -68,52 +108,32113 @@ Received: false
at jasmine2 (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\index.js:230:13)
at runTestInternal (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-runner\\\\build\\\\runTest.js:380:22)
at runTest (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-runner\\\\build\\\\runTest.js:472:34)",
- "path": "__tests__/second.test.js",
- "start_line": 1,
- "title": "[__tests__\\\\second.test.js] Timeout test",
+ },
+ "name": "Timeout test",
+ "result": "failed",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Skipped test",
+ "result": "skipped",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "__tests__\\\\second.test.js",
+ "totalTime": 82,
},
],
- "summary": "![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20skipped%2C%204%20failed-critical)
-
-### fixtures/jest-junit.xml
-
-**6** tests were completed in **1.360s** with **1** passed, **1** skipped and **4** failed.
-
-| Result | Suite | Tests | Time | Passed ✔️ | Skipped ✖️ | Failed ❌ |
-| :---: | :--- | ---: | ---: | ---: | ---: | ---: |
-| ❌ | [__tests__\\\\main.test.js](#ts-0-tests-main-test-js) | 4 | 486ms | 1 | 0 | 3 |
-| ❌ | [__tests__\\\\second.test.js](#ts-1-tests-second-test-js) | 2 | 82ms | 0 | 1 | 1 |
-
-# Test Suites
-
-## __tests__\\\\main.test.js ❌
-
-### Test 1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ✔️ | Passing test | 1ms |
-
-### Test 1 › Test 1.1
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Failing test | 2ms |
-| ❌ | Exception in target unit | 0ms |
-
-### Test 2
-
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Exception in test | 0ms |
+ "totalTime": 1360,
+}
+`;
-## __tests__\\\\second.test.js ❌
+exports[`jest-junit tests report from facebook/jest test results matches snapshot 1`] = `
+TestRunResult {
+ "path": "fixtures/external/jest/jest-test-results.xml",
+ "suites": Array [
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "picks a name based on the rootDir",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "keeps custom project name based on the projects rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "keeps custom names based on the rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "minimal config is stable across runs",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sets coverageReporters correctly when argv.json is set",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "rootDir",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if the options is missing a rootDir property",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "automock",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "falsy automock is not overwritten",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "collectCoverageOnlyFrom",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes all paths relative to rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not change absolute paths",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "collectCoverageFrom",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "findRelatedTests",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "it generates --coverageCoverageFrom patterns when needed",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "roots",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes all paths relative to rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not change absolute paths",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "transform",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes the path",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pulls in config if it's passed as an array, and defaults to empty object",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "haste",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes the path for hasteImplModulePath",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "setupFilesAfterEnv",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes the path according to rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not change absolute paths",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "setupTestFrameworkScriptFile",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "logs a deprecation warning when \`setupTestFrameworkScriptFile\` is used",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "logs an error when \`setupTestFrameworkScriptFile\` and \`setupFilesAfterEnv\` are used",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "coveragePathIgnorePatterns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize paths relative to rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize trailing slashes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "watchPathIgnorePatterns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize paths relative to rootDir",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize trailing slashes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathIgnorePatterns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize paths relative to rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize trailing slashes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "modulePathIgnorePatterns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize paths relative to rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not normalize trailing slashes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "substitutes tokens",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testRunner",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to Circus",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves jasmine",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is overwritten by argv",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "coverageDirectory",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to /coverage",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testEnvironment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves to an environment and prefers jest-environment-\`name\`",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on invalid environment names",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "babel-jest",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly identifies and uses babel-jest",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses babel-jest if babel-jest is explicitly specified in a custom transform options",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Upgrade help",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "logs a warning when \`scriptPreprocessor\` and/or \`preprocessorIgnorePatterns\` are used",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testRegex",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "testRegex empty string is mapped to empty array",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "testRegex string is mapped to an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "testRegex array is preserved",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testMatch",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "testMatch default not applied if testRegex is set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "testRegex default not applied if testMatch is set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if testRegex and testMatch are both specified",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes testMatch",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleDirectories",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to node_modules",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes moduleDirectories",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "preset",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when preset not found",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when module was found but no \\"jest-preset.js\\" or \\"jest-preset.json\\" files",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when a dependency is missing in the preset",
+ "result": "success",
+ "time": 44,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when preset is invalid",
+ "result": "success",
+ "time": 59,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when preset evaluation throws type error",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with \\"react-native\\"",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "searches for .json and .js preset files",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "merges with options",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "merges with options and moduleNameMapper preset is overridden by options",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "merges with options and transform preset is overridden by options",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts setupFilesAfterEnv from preset",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "preset with globals",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should merge the globals preset correctly",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "preset without setupFiles",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should normalize setupFiles correctly",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "preset without setupFilesAfterEnv",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should normalize setupFilesAfterEnv correctly",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "runner",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to \`jest-runner\`",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves to runners that do not have the prefix",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves to runners and prefers jest-runner-\`name\`",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw error when a runner is not found",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "watchPlugins",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves to watch plugins and prefers jest-watch-\`name\`",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves watch plugins that do not have the prefix",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "normalizes multiple watchPlugins",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw error when a watch plugin is not found",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to empty",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "joins multiple --testPathPatterns and ",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "gives precedence to --all",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern --testPathPattern",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses --testPathPattern if set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores invalid regular expressions and logs a warning",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "joins multiple --testPathPattern if set",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern --testPathPattern posix",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not escape the pattern",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern --testPathPattern win32",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "preserves any use of \\"\\\\\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "replaces POSIX path separators",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "replaces POSIX paths in multiple args",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "coerces all patterns to strings",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern ",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses if set",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores invalid regular expressions and logs a warning",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "joins multiple if set",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern posix",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not escape the pattern",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testPathPattern win32",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "preserves any use of \\"\\\\\\"",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "replaces POSIX path separators",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "replaces POSIX paths in multiple args",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "coerces all patterns to strings",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleFileExtensions",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to something useful",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if missing \`js\` but using jest-runner",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw if missing \`js\` with a custom runner",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "cwd",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is set to process.cwd",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is not lost if the config has its own cwd property",
+ "result": "success",
+ "time": 6,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Defaults",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be accepted by normalize",
+ "result": "success",
+ "time": 3,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "displayName",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw an error when displayName is is an empty object",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw an error when displayName is missing color",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw an error when displayName is missing name",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw an error when displayName is using invalid values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a default color for the runner undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a default color for the runner jest-runner",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a default color for the runner jest-runner-eslint",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a default color for the runner jest-runner-tslint",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a default color for the runner jest-runner-tsc",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "testTimeout",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return timeout value if defined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw an error if timeout is a negative number",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "extensionsToTreatAsEsm",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should pass valid config through",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should enforce leading dots",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on .js",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on .mjs",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on .cjs",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/normalize.test.js",
+ "totalTime": 798,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Repl cli",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs without errors",
+ "result": "success",
+ "time": 1028,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-repl/src/__tests__/jest_repl.test.js",
+ "totalTime": 1172,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "chalk",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "level 0",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "level 1",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "level 2",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "level 3",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "matcher error toMatchInlineSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected properties must be an object (non-null) without snapshot",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected properties must be an object (null) with snapshot",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Inline snapshot must be a string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Snapshot matchers cannot be used with not",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "matcher error toMatchSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected properties must be an object (non-null)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected properties must be an object (null) with hint",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Expected properties must be an object (null) without hint",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Snapshot state must be initialized",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "matcher error toMatchSnapshot received value must be an object",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(non-null)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(null)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "matcher error toThrowErrorMatchingInlineSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Inline snapshot must be a string",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Snapshot state must be initialized",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "matcher error toThrowErrorMatchingSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Received value must be a function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Snapshot matchers cannot be used with not",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "other error toThrowErrorMatchingSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Received function did not throw",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass false toMatchInlineSnapshot with properties equals false",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "with snapshot",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "without snapshot",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass false toMatchInlineSnapshot with properties",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "equals true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass false toMatchSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "New snapshot was not written (multi line)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "New snapshot was not written (single line)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass false toMatchSnapshot with properties equals false",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isLineDiffable false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isLineDiffable true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass false toMatchSnapshot with properties",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "equals true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass false toThrowErrorMatchingInlineSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "with snapshot",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pass true toMatchSnapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "without properties",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printPropertiesAndReceived",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "omit missing properties",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived backtick",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "single line expected and received",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived empty string",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected and received single line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "received and expected multi line",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived escape",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "double quote marks in string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "backslash in multi line string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "backslash in single line string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "regexp",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived expand",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fallback to line diff",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multi line small change in one line and other is unchanged",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multi line small changes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "single line large changes",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived has no common after clean up chaff",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "string single line",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived MAX_DIFF_STRING_LENGTH unquoted",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "both are less",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected is more",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "received is more",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived MAX_DIFF_STRING_LENGTH quoted",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "both are less",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected is more",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "received is more",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived isLineDiffable false",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "asymmetric matcher",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "boolean",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "date",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived isLineDiffable true",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "single line expected and received",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "single line expected and multi line received",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived ignore indentation",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup delete",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup fall back",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup insert",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived ignore indentation object",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "delete",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "insert",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printSnapshotAndReceived without serialize",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "backtick single line expected and received",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "backtick single line expected and multi line received",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has no common after clean up chaff multi line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has no common after clean up chaff single line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prettier/pull/5590",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/printSnapshot.test.ts",
+ "totalTime": 1188,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "get configuration defaults",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/Defaults.test.ts",
+ "totalTime": 672,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "isCoreModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false if \`hasCoreModules\` is false.",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true if \`hasCoreModules\` is true and \`moduleName\` is a core module.",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false if \`hasCoreModules\` is true and \`moduleName\` is not a core module.",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false if \`hasCoreModules\` is true and \`moduleNameMapper\` alias a module same name with core module",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "findNodeModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to override the default resolver",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes packageFilter to the resolve module when using the default resolver",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "resolveModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to resolve node modules",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to resolve node modules with custom extensions",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to resolve node modules with custom extensions and platforms",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to resolve node modules by resolving their realpath",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to specify custom resolve paths",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not confuse directories with files",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getMockModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is possible to use custom resolver to resolve deps inside mock modules with moduleNameMapper",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "nodeModulesPaths",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides custom module paths after node_modules",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Resolver.getModulePaths() -> nodeModulesPaths()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can resolve node modules relative to absolute paths in \\"moduleDirectories\\" on Windows platforms",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can resolve node modules relative to absolute paths in \\"moduleDirectories\\" on Posix platforms",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-resolve/src/__tests__/resolve.test.ts",
+ "totalTime": 1308,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toEqual",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be reflexive",
+ "result": "success",
+ "time": 58,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be symmetric",
+ "result": "success",
+ "time": 204,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/matchers-toEqual.property.test.ts",
+ "totalTime": 1062,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "snapshots needs update with npm test",
+ "result": "success",
+ "time": 250,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "snapshots needs update with yarn test",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "snapshots all have results (no update)",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "snapshots all have results (after update)",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/SummaryReporter.test.js",
+ "totalTime": 366,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "readConfigs() throws when called without project paths",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "readConfigs() loads async config file",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "readConfigs() reject if async was rejected",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/readConfigs.test.ts",
+ "totalTime": 135,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "generateEmptyCoverage",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates an empty coverage object for a file without running it",
+ "result": "success",
+ "time": 370,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a null coverage result when using /* istanbul ignore file */",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates a null coverage result when collectCoverage global config is false",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js",
+ "totalTime": 1129,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Any.asymmetricMatch()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Any.toAsymmetricMatcher()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Any.toAsymmetricMatcher() with function name",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Any throws when called with empty constructor",
+ "result": "success",
+ "time": 47,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Anything matches any type",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Anything does not match null and undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Anything.toAsymmetricMatcher()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ArrayContaining matches",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ArrayContaining does not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ArrayContaining throws for non-arrays",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ArrayNotContaining matches",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ArrayNotContaining does not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ArrayNotContaining throws for non-arrays",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectContaining matches",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectContaining does not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectContaining matches defined properties",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectContaining matches prototype properties",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectContaining throws for non-objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectContaining does not mutate the sample",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectNotContaining matches",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectNotContaining does not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectNotContaining inverts ObjectContaining",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ObjectNotContaining throws for non-objects",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringContaining matches string against string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringContaining throws if expected value is not string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringContaining returns false if received value is not string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotContaining matches string against string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotContaining throws if expected value is not string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotContaining returns true if received value is not string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringMatching matches string against regexp",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringMatching matches string against string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringMatching throws if expected value is neither string nor regexp",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringMatching returns false if received value is not string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringMatching returns false even if coerced non-string received value matches pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotMatching matches string against regexp",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotMatching matches string against string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotMatching throws if expected value is neither string nor regexp",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StringNotMatching returns true if received value is not string",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/asymmetricMatchers.test.ts",
+ "totalTime": 207,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "onRunComplete",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns an error when threshold is not met for global",
+ "result": "success",
+ "time": 299,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns an error when threshold is not met for file",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns \`undefined\` when threshold is met",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns an error when threshold is not met for non-covered file",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns an error when threshold is not met for directory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns \`undefined\` when threshold is met for directory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns an error when there is no coverage data for a threshold",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns 'undefined' when global threshold group
+ is empty because PATH and GLOB threshold groups have matched all the
+ files in the coverage data.",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getLastError() returns 'undefined' when file and directory path
+ threshold groups overlap",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "that if globs or paths are specified alongside global, coverage
+ data for matching paths will be subtracted from overall coverage
+ and thresholds will be applied independently",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "that files are matched by all matching threshold groups",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "that it passes custom options when creating reporters",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/CoverageReporter.test.js",
+ "totalTime": 397,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() replaces empty function call with a template literal",
+ "result": "success",
+ "time": 63,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() can handle typescript without prettier",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() can handle tsx without prettier",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() can handle flow and jsx without prettier",
+ "result": "success",
+ "time": 35,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() can use prettier to fix formatting for whole file",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() replaces existing template literal - babel parser",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() replaces existing template literal - flow parser",
+ "result": "success",
+ "time": 169,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() replaces existing template literal - typescript parser",
+ "result": "success",
+ "time": 155,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() replaces existing template literal with property matchers",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() creates template literal with property matchers",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() creates template literal with property matchers",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() throws if frame does not match",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() throws if multiple calls to to the same location",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() uses escaped backticks",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() works with non-literals in expect call",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() indents multi-line snapshots with spaces",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() does not re-indent error snapshots",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() does not re-indent already indented snapshots",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() indents multi-line snapshots with tabs",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() indents snapshots after prettier reformats",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveInlineSnapshots() does not indent empty lines",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts",
+ "totalTime": 1149,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "readConfig() throws when an object is passed without a file path",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/readConfig.test.ts",
+ "totalTime": 76,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "When offset is -1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When offset is in the first set of items",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When offset is in the middle of the list",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When offset is at the end of the list",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "When offset is at the end and size is smaller than max",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-watcher/src/lib/__tests__/scroll.test.ts",
+ "totalTime": 57,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toThrowError",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "to throw or not to throw",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid actual",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError substring",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (error)",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (non-error falsey)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly escapes strings when matching against errors",
+ "result": "success",
+ "time": 37,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (error)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (non-error truthy)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError regexp",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (error)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (non-error falsey)",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (error)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (non-error truthy)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError error class",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class did not match (error)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class did not match (non-error falsey)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class should not match (error)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class should not match (error subclass)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class should not match (error subsubclass)",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError error-message pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError error-message fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiline diff highlight incorrect expected space",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric any-Class pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric any-Class fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric anything pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric anything fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric no-symbol pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric no-symbol fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric objectContaining pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError asymmetric objectContaining fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError promise/async throws if Error-like object is returned",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class did not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but should not have",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrowError expected is undefined",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but should not have (non-error falsey)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "to throw or not to throw",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid actual",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow substring",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (error)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (non-error falsey)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly escapes strings when matching against errors",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (error)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (non-error truthy)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow regexp",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (error)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message did not match (non-error falsey)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (error)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but message should not match (non-error truthy)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow error class",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class did not match (error)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class did not match (non-error falsey)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class should not match (error)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class should not match (error subclass)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class should not match (error subsubclass)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow error-message pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow error-message fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiline diff highlight incorrect expected space",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric any-Class pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric any-Class fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric anything pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric anything fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric no-symbol pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric no-symbol fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric objectContaining pass",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow asymmetric objectContaining fail",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow promise/async throws if Error-like object is returned",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "did not throw at all",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but class did not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but should not have",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toThrow expected is undefined",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "threw, but should not have (non-error falsey)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/toThrowMatchers.test.ts",
+ "totalTime": 257,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "recursively validates default Jest config",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "recursively validates default jest-validate config",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pretty prints valid config for Boolean",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pretty prints valid config for Array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pretty prints valid config for String",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pretty prints valid config for Object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pretty prints valid config for Function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "omits null and undefined config values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "recursively omits null and undefined config values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "treat async and non-async functions as equivalent",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "treat async and non-async functions as equivalent",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "treat async and non-async functions as equivalent",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "treat async and non-async functions as equivalent",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "respects recursiveDenylist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "displays warning for unknown config options",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "displays warning for deprecated config options",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with custom warnings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with custom errors",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with custom deprecations",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with multiple valid types",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reports errors nicely when failing with multiple valid options",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Repeated types within multiple valid examples are coalesced in error report",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Comments in config JSON using \\"//\\" key are not warned",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-validate/src/__tests__/validate.test.ts",
+ "totalTime": 283,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "defaults",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns cached object if called multiple times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolveSnapshotPath()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolveTestPath()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "custom resolver in project config",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns cached object if called multiple times",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolveSnapshotPath()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolveTestPath()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "malformed custom resolver in project config",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "missing resolveSnapshotPath throws",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "missing resolveTestPath throws",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "missing testPathForConsistencyCheck throws",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "inconsistent functions throws",
+ "result": "success",
+ "time": 20,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts",
+ "totalTime": 98,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves to the result of generateEmptyCoverage upon success",
+ "result": "success",
+ "time": 127,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws errors on invalid JavaScript",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/CoverageWorker.test.js",
+ "totalTime": 199,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns source string with inline maps when no transformOptions is passed",
+ "result": "success",
+ "time": 177,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can pass null to createTransformer",
+ "result": "success",
+ "time": 17,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "caller option correctly merges from defaults and options",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{\\"supportsDynamicImport\\":true,\\"supportsStaticESM\\":true} -> {\\"supportsDynamicImport\\":true,\\"supportsStaticESM\\":true}",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{\\"supportsDynamicImport\\":false,\\"supportsStaticESM\\":false} -> {\\"supportsDynamicImport\\":false,\\"supportsStaticESM\\":false}",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{\\"supportsStaticESM\\":false} -> {\\"supportsDynamicImport\\":false,\\"supportsStaticESM\\":false}",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{\\"supportsDynamicImport\\":true} -> {\\"supportsDynamicImport\\":true,\\"supportsStaticESM\\":false}",
+ "result": "success",
+ "time": 11,
+ },
+ ],
+ },
+ ],
+ "name": "packages/babel-jest/src/__tests__/index.ts",
+ "totalTime": 371,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Resolve config path .js",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "file path with \\".js\\"",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "directory path with \\".js\\"",
+ "result": "success",
+ "time": 11,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Resolve config path .ts",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "file path with \\".ts\\"",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "directory path with \\".ts\\"",
+ "result": "success",
+ "time": 3,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Resolve config path .mjs",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "file path with \\".mjs\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "directory path with \\".mjs\\"",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Resolve config path .cjs",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "file path with \\".cjs\\"",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "directory path with \\".cjs\\"",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Resolve config path .json",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "file path with \\".json\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "directory path with \\".json\\"",
+ "result": "success",
+ "time": 3,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/resolveConfigPath.test.ts",
+ "totalTime": 183,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "groupTestsBySuites",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should handle empty results",
+ "result": "success",
+ "time": 293,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group A1 in A",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group A1 in A; B1 in B",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group A1, A2 in A",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group A1, A2 in A; B1, B2 in B",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group AB1 in AB",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group AB1, AB2 in AB",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group A1 in A; AB1 in AB",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group AB1 in AB; A1 in A",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group AB1 in AB; CD1 in CD",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should group ABC1 in ABC; BC1 in BC; D1 in D; A1 in A",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/VerboseReporter.test.js",
+ "totalTime": 425,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "keyToTestName()",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "testNameToKey",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveSnapshotFile() works with",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "saveSnapshotFile() works with",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getSnapshotData() throws when no snapshot version",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getSnapshotData() throws for older snapshot version",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getSnapshotData() throws for newer snapshot version",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getSnapshotData() does not throw for when updating",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getSnapshotData() marks invalid snapshot dirty when updating",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "getSnapshotData() marks valid snapshot not dirty when updating",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "escaping",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serialize handles \\\\r\\\\n",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ExtraLineBreaks",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "0 empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1 line has double quote marks at edges",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1 line has spaces at edges",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "2 lines both are blank",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "2 lines have double quote marks at edges",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "2 lines first is blank",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "2 lines last is blank",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "removeLinesBeforeExternalMatcherTrap",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "contains external matcher trap",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't contain external matcher trap",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "DeepMerge with property matchers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly merges a nested object",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly merges an object with an array of objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly merges an object with an array of strings",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly merges an array of objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly merges an array of arrays",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/utils.test.ts",
+ "totalTime": 214,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "test always",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test success",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test change",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test success-change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test failure-change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test always with rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test success with rootDir",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test change with rootDir",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test success-change with rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test failure-change with rootDir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test always with moduleName",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test success with moduleName",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test change with moduleName",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test success-change with moduleName",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test failure-change with moduleName",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "node-notifier is an optional dependency",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "without node-notifier uses mock function that throws an error",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws the error when require throws an unexpected error",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node-notifier when it is available",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/NotifyReporter.test.ts",
+ "totalTime": 166,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime CLI",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails with no path",
+ "result": "success",
+ "time": 80,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "displays script output",
+ "result": "success",
+ "time": 1197,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "always disables automocking",
+ "result": "success",
+ "time": 1424,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws script errors",
+ "result": "success",
+ "time": 1209,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-repl/src/__tests__/runtime_cli.test.js",
+ "totalTime": 4094.0000000000005,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is available globally when matcher is unary",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is available globally when matcher is variadic",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes matcherUtils in context",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is ok if there is no message specified",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes an equality function to custom matchers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "defines asymmetric unary matchers",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "defines asymmetric unary matchers that can be prefixed by not",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "defines asymmetric variadic matchers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "defines asymmetric variadic matchers that can be prefixed by not",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints the Symbol into the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/extend.test.ts",
+ "totalTime": 99,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getCallsite",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "without source map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores errors when fs throws",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reads source map file to determine line and column",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-source-map/src/__tests__/getCallsite.test.ts",
+ "totalTime": 86,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "maps special values to valid options",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "maps regular values to themselves",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with string objects",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "explicit flags override those from --config",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/setFromArgv.test.ts",
+ "totalTime": 53,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls handler on change value",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls handler on success prompt",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls handler on cancel prompt",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-watcher/src/lib/__tests__/prompt.test.ts",
+ "totalTime": 91,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "docblock",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts valid docblock with line comment",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts valid docblock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts valid docblock with more comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts from invalid docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns extract and parsedocblock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses directives out of a docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses multiple of the same directives out of a docblock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses >=3 of the same directives out of a docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses directives out of a docblock with comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses directives out of a docblock with line comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses multiline directives",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses multiline directives even if there are linecomments within the docblock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports slashes in @team directive",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts comments from docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts multiline comments from docblock",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "preserves leading whitespace in multiline comments from docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "removes leading newlines in multiline comments from docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts comments from beginning and end of docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "preserve urls within a pragma's values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "strip linecomments from pragmas but preserve for comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts docblock comments as CRLF when docblock contains CRLF",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts docblock comments as LF when docblock contains LF",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "strips the docblock out of a file that contains a top docblock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns a file unchanged if there is no top docblock to strip",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with no pragmas as empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with one pragma on one line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with multiple pragmas on multiple lines",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with multiple of the same pragma",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with pragmas",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with comments and no keys",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks with multiline comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks that are parseable",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can augment existing docblocks with comments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks using CRLF if comments contains CRLF",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints docblocks using LF if comments contains LF",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-docblock/src/__tests__/index.test.ts",
+ "totalTime": 177,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "dedentLines non-null",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "no lines",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "one line empty string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "one line empty object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "one line self-closing element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object value empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object value string includes double-quote marks",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup with props and text",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup with components as props",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "dedentLines null",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "object key multi-line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object value multi-line",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object key and value multi-line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup prop multi-line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup prop component with multi-line text",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup text multi-line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup text multiple lines",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup unclosed self-closing start tag",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "markup unclosed because no end tag",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/dedentLines.test.ts",
+ "totalTime": 94,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getMaxWorkers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns 1 when runInBand",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns 1 when the OS CPUs are not available",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns the \`maxWorkers\` when specified",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns based on the number of cpus",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getMaxWorkers % based",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "50% = 2 workers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "< 0 workers should become 1",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "0% shouldn't break",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/getMaxWorkers.test.ts",
+ "totalTime": 67,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "wrapAnsiString()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "wraps a long string containing ansi chars",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the string unaltered if given a terminal width of zero",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "trimAndFormatPath()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "trims dirname",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "trims dirname (longer line width)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "trims dirname and basename",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not trim anything",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "split at the path.sep index",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printDisplayName",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should default displayName color to white when displayName is a string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should default displayName color to white when color is not a valid value",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should correctly print the displayName when color and name are valid values",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/utils.test.ts",
+ "totalTime": 85,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw matcher can take func",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "throw matcher from promise",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can take error",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can take custom error",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/throwMatcher.test.ts",
+ "totalTime": 481,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "matcher returns matcher name, expected and actual values",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/matcher.test.ts",
+ "totalTime": 131,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "validate pattern function",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "without passed args returns true",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true for empty pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true for valid pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false for invalid pattern",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-config/src/__tests__/validatePattern.test.ts",
+ "totalTime": 52,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "isBuiltinModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true for the \`path\` module",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return false for the \`chalk\` module",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true for the \`_http_common\` module",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return false for any internal node builtins",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts",
+ "totalTime": 36,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw when directly imported",
+ "result": "success",
+ "time": 505,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-globals/src/__tests__/index.ts",
+ "totalTime": 533,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "replacePathSepForRegex() posix",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the path",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "replacePathSepForRegex() win32",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should replace POSIX path separators",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should escape Windows path separators",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not escape an escaped dot",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not escape an escaped regexp symbol",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should escape Windows path separators inside groups",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should escape Windows path separator at the beginning",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not escape several already escaped path separators",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-regex-util/src/__tests__/index.test.ts",
+ "totalTime": 56,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 0 calls and default name",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 2 calls, 1 return, 1 throw",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 0 calls and default name in React element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 0 calls and non-default name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 1 calls and non-default name via new in object",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 1 calls in React element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock with 2 calls",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "indent option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "min option",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "maxDepth option",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-snapshot/src/__tests__/mockSerializer.test.ts",
+ "totalTime": 45,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getWatermarks",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "that watermarks use thresholds as upper target",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "that watermarks are created always created",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/getWatermarks.test.ts",
+ "totalTime": 37,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normal output, everything goes to stdout",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when using stderr as output, no stdout call is made",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/DefaultReporter.test.js",
+ "totalTime": 148,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should call \`terminal-link\` correctly",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should render the terminal link",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should display test time for slow test",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not display test time for fast test",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/getResultHeader.test.js",
+ "totalTime": 30,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toEqual duck type Text",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toEqual duck type Element",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toEqual duck type Fragment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toEqual document createTextNode",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toEqual document createElement",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toEqual document createDocumentFragment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot false",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "isNot true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/toEqual-dom.test.ts",
+ "totalTime": 99,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "NodeEnvironment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses a copy of the process object",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes process.on",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes global.global",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should configure setTimeout/setInterval to use the node api",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has modern fake timers implementation",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TextEncoder references the same global Uint8Array constructor",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-environment-node/src/__tests__/node_environment.test.ts",
+ "totalTime": 184,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Retrieves the snapshot status",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Shows no snapshot updates if all snapshots matched",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Retrieves the snapshot status after a snapshot update",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js",
+ "totalTime": 28,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "validates yargs special options",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "validates testURL",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for unknown option",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for multiple unknown options",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not show suggestion when unrecognized cli param length <= 1",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows suggestion when unrecognized cli param length > 1",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-validate/src/__tests__/validateCLIOptions.test.js",
+ "totalTime": 83,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates a snapshot summary",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates a snapshot summary after an update",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates a snapshot summary with multiple snapshot being written/updated",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns nothing if there are no updates",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js",
+ "totalTime": 49,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "for multiline test name returns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with highlighted pattern and replaced line breaks",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "for one line test name with pattern in the head returns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with highlighted pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with cutted tail and highlighted pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with cutted tail and cutted highlighted pattern",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "for one line test name pattern in the middle",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with highlighted pattern returns",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with cutted tail and highlighted pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with cutted tail and cutted highlighted pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with highlighted cutted",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "for one line test name pattern in the tail returns",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with highlighted pattern",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with cutted tail and cutted highlighted pattern",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test name with highlighted cutted",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts",
+ "totalTime": 129,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "shouldInstrument should return true",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testRegex is provided and file is not a test file",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when more than one testRegex is provided and filename is not a test file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testMatch is provided and file is not a test file",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testPathIgnorePatterns is provided and file is not a test file",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when more than one testPathIgnorePatterns is provided and filename is not a test file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testRegex and testPathIgnorePatterns are provided and file is not a test file",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testMatch and testPathIgnorePatterns are provided and file is not a test file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true when file is in collectCoverageOnlyFrom when provided",
+ "result": "success",
+ "time": 32,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true when filename matches collectCoverageFrom",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true if the file is not in coveragePathIgnorePatterns",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true if file is a testfile but forceCoverageMatch is set",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "shouldInstrument should return false",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "if collectCoverage is falsy",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testRegex is provided and filename is a test file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when more than one testRegex is provided and filename matches one of the patterns",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testMatch is provided and file is a test file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testRegex and testPathIgnorePatterns are provided and filename is a test file",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when testMatch and testPathIgnorePatterns are provided and file is a test file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when file is not in collectCoverageOnlyFrom when provided",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when filename does not match collectCoverageFrom",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "if the file is in coveragePathIgnorePatterns",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "if file is in mock patterns",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "if file is a globalSetup file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "if file is globalTeardown file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "if file is in setupFiles",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "if file is in setupFilesAfterEnv",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-transform/src/__tests__/shouldInstrument.test.ts",
+ "totalTime": 155,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ScriptTransformer",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "transforms a file properly",
+ "result": "success",
+ "time": 204,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not transform Node core modules",
+ "result": "success",
+ "time": 51,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error if \`process\` doesn't return a string or an objectcontaining \`code\` key with processed string",
+ "result": "success",
+ "time": 79,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error if \`process\` doesn't defined",
+ "result": "success",
+ "time": 42,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error if createTransformer returns object without \`process\` method",
+ "result": "success",
+ "time": 98,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldn't throw error without process method. But with corrent createTransformer method",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses the supplied preprocessor",
+ "result": "success",
+ "time": 45,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses multiple preprocessors",
+ "result": "success",
+ "time": 35,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes source map if preprocessor supplies it",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes source map if preprocessor inlines it",
+ "result": "success",
+ "time": 38,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warns of unparseable inlined source maps from the preprocessor",
+ "result": "success",
+ "time": 67,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes source maps if given by the transformer",
+ "result": "success",
+ "time": 32,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not write source map if not given by the transformer",
+ "result": "success",
+ "time": 75,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should write a source map for the instrumented file when transformed",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should write a source map for the instrumented file when not transformed",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes expected transform options to getCacheKey",
+ "result": "success",
+ "time": 73,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates transformer with config",
+ "result": "success",
+ "time": 35,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reads values from the cache",
+ "result": "success",
+ "time": 93,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reads values from the cache when the file contains colons",
+ "result": "success",
+ "time": 84,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should reuse the value from in-memory cache which is set by custom transformer",
+ "result": "success",
+ "time": 25,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not reuse the in-memory cache between different projects",
+ "result": "success",
+ "time": 37,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "preload transformer when using \`preloadTransformer\`",
+ "result": "success",
+ "time": 36,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-transform/src/__tests__/ScriptTransformer.test.ts",
+ "totalTime": 1660,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "simple test",
+ "result": "success",
+ "time": 2145,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failures",
+ "result": "success",
+ "time": 707,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-circus/src/__tests__/baseTest.test.ts",
+ "totalTime": 2902,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "moduleMocker getMetadata",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the function \`name\` property",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks constant values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not retrieve metadata for arrays",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not retrieve metadata for undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not retrieve metadata for null",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retrieves metadata for ES6 classes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retrieves synchronous function metadata",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retrieves asynchronous function metadata",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retrieves metadata for object literals and it's members",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retrieves Date object metadata",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker generateFromMetadata",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "forwards the function name property",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fixes illegal function name properties",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "special cases the mockConstructor name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "wont interfere with previous mocks on a shared prototype",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock non-enumerable getters",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks getters of ES modules",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks ES2015 non-enumerable methods",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks ES2015 non-enumerable static properties and methods",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks methods in all the prototype chain (null prototype)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock methods from Object.prototype",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock methods from Object.prototype (in mock context)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock methods from Function.prototype",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock methods from Function.prototype (in mock context)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock methods from RegExp.prototype",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock methods from RegExp.prototype (in mock context)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks methods that are bound multiple times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks methods that are bound after mocking",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks regexp instances",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks functions with numeric names",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks the method in the passed object itself",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should delete previously inexistent methods when restoring",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports mock value returning undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports mock value once returning undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockReturnValueOnce mocks value just once",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports mocking resolvable async functions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports mocking resolvable async functions only once",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports mocking rejectable async functions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports mocking rejectable async functions only once",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tracks thrown errors without interfering with other tracking",
+ "result": "success",
+ "time": 33,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is tracked properly",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "results of recursive calls are tracked properly",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test results of recursive calls from within the recursive call",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "call mockClear inside recursive mock",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker generateFromMetadata mocked functions",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "tracks calls to mocks",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tracks instances made by mocks",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports clearing mock calls",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports clearing mocks",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports clearing all mocks",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports resetting mock return values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports resetting single use mock return values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports resetting mock implementations",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports resetting single use mock implementations",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports resetting all mocks",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "maintains function arity",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker generateFromMetadata return values",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "tracks return values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tracks mocked return values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports resetting return values",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker generateFromMetadata invocationCallOrder",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "tracks invocationCallOrder made by mocks",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports clearing mock invocationCallOrder",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports clearing all mocks invocationCallOrder",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles a property called \`prototype\`",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker getMockImplementation",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should mock calls to a mock function",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker mockImplementationOnce",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should mock constructor",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should mock single call to a mock function",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should fallback to default mock function when no specific mock is available",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockReturnValue does not override mockImplementationOnce",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockImplementation resets the mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should recognize a mocked function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default mockName is jest.fn()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockName sets the mock name",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockName gets reset by mockReset",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockName gets reset by mockRestore",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mockName is not reset by mockClear",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker spyOn",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw on invalid input",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports restoring all spies",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work with getters",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "moduleMocker spyOnProperty",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work - getter",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work - setter",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw on invalid input",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports restoring all spies",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work with getters on the prototype chain",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work with setters on the prototype chain",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports restoring all spies on the prototype chain",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-mock/src/__tests__/index.test.ts",
+ "totalTime": 509,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach is executed before each test in current/child describe blocks",
+ "result": "success",
+ "time": 2304,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiple before each hooks in one describe are executed in the right order",
+ "result": "success",
+ "time": 678,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll is exectued correctly",
+ "result": "success",
+ "time": 625,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-circus/src/__tests__/hooks.test.ts",
+ "totalTime": 3762,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime requireModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds haste modules",
+ "result": "success",
+ "time": 1124,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`module\` to modules",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`module.parent\` to modules",
+ "result": "success",
+ "time": 80,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`module.parent\` should be undefined for entrypoints",
+ "result": "success",
+ "time": 25,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolve module.parent.require correctly",
+ "result": "success",
+ "time": 49,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolve module.parent.filename correctly",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`module.loaded\` to modules",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`module.filename\` to modules",
+ "result": "success",
+ "time": 36,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`module.paths\` to modules",
+ "result": "success",
+ "time": 49,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`require.main\` to modules",
+ "result": "success",
+ "time": 52,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on non-existent haste modules",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds relative-path modules without file extension",
+ "result": "success",
+ "time": 46,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds relative-path modules with file extension",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on non-existent relative-path modules",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds node core built-in modules",
+ "result": "success",
+ "time": 48,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds and loads JSON files without file extension",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds and loads JSON files with file extension",
+ "result": "success",
+ "time": 29,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "requires a JSON file twice successfully",
+ "result": "success",
+ "time": 34,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides manual mock when real module doesnt exist",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't override real modules with manual mocks when explicitly unmocked",
+ "result": "success",
+ "time": 166,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves haste packages properly",
+ "result": "success",
+ "time": 30,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves platform extensions based on the default platform",
+ "result": "success",
+ "time": 204,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds modules encoded in UTF-8 *with BOM*",
+ "result": "success",
+ "time": 25,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds and loads JSON files encoded in UTF-8 *with BOM*",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should export a constructable Module class",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "caches Module correctly",
+ "result": "success",
+ "time": 23,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime requireModule on node >=12.12.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "overrides module.createRequire",
+ "result": "success",
+ "time": 28,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_module.test.js",
+ "totalTime": 2439,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime jest.mock",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses explicitly set mocks instead of automocking",
+ "result": "success",
+ "time": 635,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sets virtual mock for non-existing module required from same directory",
+ "result": "success",
+ "time": 29,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sets virtual mock for non-existing module required from different directory",
+ "result": "success",
+ "time": 18,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime jest.setMock",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses explicitly set mocks instead of automocking",
+ "result": "success",
+ "time": 21,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_mock.test.js",
+ "totalTime": 743,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "test/it error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "it doesn't throw an error with valid arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws error with missing callback function",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws an error when first argument isn't a string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws an error when callback function is not a function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test doesn't throw an error with valid arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test throws error with missing callback function",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test throws an error when first argument isn't a string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test throws an error when callback function is not a function",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-circus/src/__tests__/circusItTestError.test.ts",
+ "totalTime": 300,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "BaseWorkerPool",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when createWorker is not defined",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates and exposes n workers",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates and expoeses n workers",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates workers with the right options",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "makes a non-existing relative worker throw",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "create multiple workers with unique worker ids",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "aggregates all stdouts and stderrs from all workers",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when stdout and stderr are not piped to the parent",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "BaseWorkerPool end",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ends all workers",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves with forceExited=false if workers exited gracefully",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "force exits workers that do not exit gracefully and resolves with forceExited=true",
+ "result": "success",
+ "time": 501,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js",
+ "totalTime": 653,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not incorrectly match identity-obj-proxy as Immutable object",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.OrderedSet",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single string element",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single integer element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.List",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single string element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single integer element",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Stack",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single string element",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single integer element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Set",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single string element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single integer element",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple string elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple integer elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Map",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an object with single key",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an object with multiple keys {min: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an object with multiple keys {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.OrderedMap",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty collection {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an object with single key",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an object with multiple keys {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an object with multiple keys {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports object elements {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports React elements {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports non-string keys",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Record",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty record {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty record {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a record with descriptive name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a record without descriptive name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a record with values {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a record with values {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a record with Map value {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a record with Map value {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports imbricated Record {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports imbricated Record {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation of heterogeneous collections",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty Immutable.List as child of Object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty Immutable.Map as child of Array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-empty Array as child of Immutable.Map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-empty Object as child of Immutable.List",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indent option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "default implicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default explicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 0 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 4 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "maxDepth option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Immutable.List as child of Object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Immutable.Map as child of Array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Immutable.Seq as child of Immutable.Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Immutable.Map as descendants in immutable collection",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Seq",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty sequence from array {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty sequence from array {min: false}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a non-empty sequence from array {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a non-empty sequence from array {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a non-empty sequence from arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty sequence from object {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an empty sequence from object {min: false}",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a non-empty sequence from object {min: true}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a non-empty sequence from object {min: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a sequence of entries from Immutable.Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a sequence of values from ECMAScript Set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a sequence of values from Immutable.List",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a sequence of values from Immutable.Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a sequence of values from Immutable.Stack",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Seq lazy entries",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "from object properties",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "from Immutable.Map entries",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Immutable.Seq lazy values",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "from Immutable.Range",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "from iterator",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "from array items",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "from Immutable.List values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "from ECMAScript Set values",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/Immutable.test.ts",
+ "totalTime": 443,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime requireModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs source maps if available",
+ "result": "success",
+ "time": 560,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js",
+ "totalTime": 584,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "JSDomEnvironment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should configure setTimeout/setInterval to use the browser api",
+ "result": "success",
+ "time": 47,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has modern fake timers implementation",
+ "result": "success",
+ "time": 19,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts",
+ "totalTime": 783,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "babel-plugin-jest-hoist",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "automatic react runtime",
+ "result": "success",
+ "time": 102,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "top level mocking",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "within a block",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "within a block with no siblings",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts",
+ "totalTime": 347,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes fork options down to child_process.fork, adding the defaults",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes workerId to the child process and assign it to 1-indexed env.JEST_WORKER_ID",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "initializes the child process with the given workerPath",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stops initializing the worker after the amount of retries is exceeded",
+ "result": "success",
+ "time": 25,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides stdout and stderr from the child processes",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends the task to the child process",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resends the task to the child process after a retry",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the onProcessStart method synchronously if the queue is empty",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can send multiple messages to parent",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates error instances for known errors",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when the child process returns a strange message",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not restart the child if it cleanly exited",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves waitForExit() after the child process cleanly exited",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "restarts the child when the child process dies",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends SIGTERM when forceExit() is called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends SIGKILL some time after SIGTERM",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not send SIGKILL if SIGTERM exited the process",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js",
+ "totalTime": 184,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "jest-each .test",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.concurrent",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.concurrent.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.concurrent.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .it",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .fit",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .it.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .describe",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .fdescribe",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .describe.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using printf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call global test with title containing more param values than sprintf placeholders",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global test title with %p placeholder injected at the correct positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not calls global test title with %p placeholder when no data is supplied at given position",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case when given 1d array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function containing all parameters of each test case 2d array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each done callback",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test', 'only' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test', 'concurrent' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test', 'concurrent', 'only' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'it' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'fit' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'it', 'only' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call [ 'describe' ] with done when test function has more args than params of given test row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call [ 'fdescribe' ] with done when test function has more args than params of given test row",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call [ 'describe', 'only' ] with done when test function has more args than params of given test row",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .xtest",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .xit",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .it.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .xdescribe",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .describe.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using sprintf format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title with placeholder values correctly interpolated",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-each/src/__tests__/array.test.ts",
+ "totalTime": 192,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "jest-each .test",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.concurrent",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 33,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.concurrent.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.concurrent.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .it",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .fit",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .it.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .describe",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .fdescribe",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 51,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .describe.only",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in first column heading",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in second column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are additional words in last column heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is additional words in template after heading row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw error when there is only one column with additional words in template after heading",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are no arguments for given headings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings when given one row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when there are fewer arguments than headings over multiple rows",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when called with an empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key in multiple positions",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing $key.path",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing last seen object when $key.path is invalid",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with cb function with object built from table headings and values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given timeout",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats primitive values using .toString()",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each done callback",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test', 'only' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'test', 'concurrent', 'only' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'it' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'fit' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls [ 'it', 'only' ] with done when cb function has more args than params of given test row",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call [ 'describe' ] with done when test function has more args than params of given test row",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call [ 'fdescribe' ] with done when test function has more args than params of given test row",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call [ 'describe', 'only' ] with done when test function has more args than params of given test row",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .xtest",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .test.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .xit",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .it.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .xdescribe",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "jest-each .describe.skip",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with given title when multiple tests cases exist",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls global with title containing param values when using $variable format",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-each/src/__tests__/template.test.ts",
+ "totalTime": 483,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with no props or children",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with non-empty string child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with empty string child",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with non-zero number child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with zero number child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with mixed children",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports props with strings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports props with multiline strings",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports props with numbers",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with a function prop",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with a object prop",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an element with and object prop and children",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an element with complex props and mixed children",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "escapes children properly",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports everything all together",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sorts props in nested components",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with React elements as props",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with React elements with props",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with custom React elements with props",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with custom React elements with props (using displayName)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with custom React elements with props (using anonymous function)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with custom React elements with a child",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports undefined element type",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a fragment with no children",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a fragment with string child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a fragment with element child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports suspense",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with React elements with a child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with React elements with children",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single element with React elements with array children",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports array of elements",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "min option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReactElement plugin highlights syntax",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReactTestComponent plugin highlights syntax",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if theme option is null",
+ "result": "success",
+ "time": 50,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if theme option is not of type \\"object\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if theme option has value that is undefined in ansi-styles",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReactElement plugin highlights syntax with color from theme option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReactTestComponent plugin highlights syntax with color from theme option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports forwardRef with a child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports context Provider with a child",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports context Consumer with a child",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReactElement removes undefined props",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReactTestComponent removes undefined props",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "test object for subset match",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined props",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined children",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indent option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "default implicit: 2 spaces",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default explicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 0 spaces",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 4 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "maxDepth option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "elements",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "array of elements",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "React.memo without displayName",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders the component name",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "React.memo with displayName",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders the displayName of component before memoizing",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders the displayName of memoized component",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/react.test.tsx",
+ "totalTime": 325,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests are not marked done until their parent afterAll runs",
+ "result": "success",
+ "time": 2231,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "describe block cannot have hooks and no tests",
+ "result": "success",
+ "time": 697,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "describe block _can_ have hooks if a child describe block has tests",
+ "result": "success",
+ "time": 650,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "describe block hooks must not run if describe block is skipped",
+ "result": "success",
+ "time": 599,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "child tests marked with todo should not run if describe block is skipped",
+ "result": "success",
+ "time": 677,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "child tests marked with only should not run if describe block is skipped",
+ "result": "success",
+ "time": 724,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-circus/src/__tests__/afterAll.test.ts",
+ "totalTime": 5755,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "prettyFormat()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints empty arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an empty array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an array with items",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a empty typed array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a typed array with items",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an array buffer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a nested array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints true",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints false",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an error",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a typed error with a message",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a function constructor",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an anonymous callback function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an anonymous assigned function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a named function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a named generator function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can customize function names",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints Infinity",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints -Infinity",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an empty map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a map with values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a map with non-string keys",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints NaN",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints null",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a positive number",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a negative number",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints zero",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints negative zero",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a positive bigint",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a negative bigint",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints zero bigint",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints negative zero bigint",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a date",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an invalid date",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an empty object",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an object with properties",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an object with properties and symbols",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an object without non-enumerable properties which have string key",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an object without non-enumerable properties which have symbol key",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an object with sorted properties",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints regular expressions from constructors",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints regular expressions from literals",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints regular expressions {escapeRegex: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints regular expressions {escapeRegex: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "escapes regular expressions nested inside object",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints an empty set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a set with values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints and escape a string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't escape string with {excapeString: false}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a string with escapes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a multiline string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a multiline string as value of object property",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a symbol",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a WeakMap",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a WeakSet",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints deeply nested objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints circular references",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints parallel references",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can customize the max depth",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on invalid options",
+ "result": "success",
+ "time": 32,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports plugins",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports plugins that return empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if plugin does not return a string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws PrettyFormatPluginError if test throws an error",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws PrettyFormatPluginError if print throws an error",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws PrettyFormatPluginError if serialize throws an error",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports plugins with deeply nested arrays (#24)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should call plugins on nested basic values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints objects with no constructor",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints identity-obj-proxy with string constructor",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls toJSON and prints its return value",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls toJSON and prints an internal representation.",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls toJSON only on functions",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not call toJSON recursively",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls toJSON on Sets",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "disables toJSON calls through options",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "prettyFormat() indent option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "default implicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default explicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 0 spaces",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 4 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "prettyFormat() min",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints some basic values in min mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints some complex values in min mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not allow indent !== 0 in min mode",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/prettyFormat.test.ts",
+ "totalTime": 219,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Farm",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends a request to one worker",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends four requests to four unique workers",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles null computeWorkerKey, sending to first worker",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends the same worker key to the same worker",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if the call worked",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if the call failed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "checks that once a sticked task finishes, next time is sent to that worker",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "checks that even before a sticked task finishes, next time is sent to that worker",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "checks that locking works, and jobs are never lost",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can receive custom messages from workers",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/Farm.test.js",
+ "totalTime": 158,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "lazily requires the file",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls initialize with the correct arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns results immediately when function is synchronous",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns results when it gets resolved if function is asynchronous",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the main module if the method call is \\"default\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the main export if the method call is \\"default\\" and it is a Babel transpiled one",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "removes the message listener on END message",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the teardown method",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if an invalid message is detected",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if child is not forked",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/workers/__tests__/threadChild.test.js",
+ "totalTime": 120,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "queueRunner",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs every function in the queue.",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes \`fail\` to \`next\`.",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes errors to \`onException\`.",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes an error to \`onException\` on timeout.",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls \`fail\` with arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls \`fail\` when done(error) is invoked",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/queueRunner.test.ts",
+ "totalTime": 93,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes fork options down to child_process.fork, adding the defaults",
+ "result": "success",
+ "time": 67,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes workerId to the thread and assign it to env.JEST_WORKER_ID",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "initializes the thread with the given workerPath",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stops initializing the worker after the amount of retries is exceeded",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides stdout and stderr from the threads",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sends the task to the thread",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resends the task to the thread after a retry",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the onProcessStart method synchronously if the queue is empty",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can send multiple messages to parent",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates error instances for known errors",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when the thread returns a strange message",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not restart the thread if it cleanly exited",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves waitForExit() after the thread cleanly exited",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "restarts the thread when the thread dies",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "terminates the thread when forceExit() is called",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js",
+ "totalTime": 258,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "lazily requires the file",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls initialize with the correct arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns results immediately when function is synchronous",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns results when it gets resolved if function is asynchronous",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the main module if the method call is \\"default\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the main export if the method call is \\"default\\" and it is a Babel transpiled one",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "removes the message listener on END message",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the teardown method",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if an invalid message is detected",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if child is not forked",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/workers/__tests__/processChild.test.js",
+ "totalTime": 135,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "injects the serializable module map into each worker in watch mode",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "assign process.env.JEST_WORKER_ID = 1 when in runInBand mode",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runner/src/__tests__/testRunner.test.ts",
+ "totalTime": 905,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "beforeEach hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 19,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "beforeAll hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "afterEach hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "afterAll hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-circus/src/__tests__/hooksError.test.ts",
+ "totalTime": 127,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Using V8 implementation",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws the error with an invalid serialization",
+ "result": "success",
+ "time": 6,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 1",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 2",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 3",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 4",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 5",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 6",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Using V8 implementation Object 7",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes/deserializes in disk",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-serializer/src/__tests__/index.test.ts",
+ "totalTime": 158,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "CustomConsole assert",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "do not log when the assertion is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "do not log when the assertion is truthy and there is a message",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "log the assertion error when the assertion is falsy",
+ "result": "success",
+ "time": 33,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "log the assertion error when the assertion is falsy with another message argument",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole count",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "count using the default counter",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "count using the a labeled counter",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "countReset restarts default counter",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "countReset restarts custom counter",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole group",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "group without label",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "group with label",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "groupEnd remove the indentation of the current group",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "groupEnd can not remove the indentation below the starting point",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole time",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on default timer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on custom timer",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole dir",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should print the deepest value",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole timeLog",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on default timer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on custom timer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default timer with data",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "custom timer with data",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole console",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be able to initialize console instance",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-console/src/__tests__/bufferedConsole.test.ts",
+ "totalTime": 171,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "CustomConsole log",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should print to stdout",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole error",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should print to stderr",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole warn",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should print to stderr",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole assert",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "do not log when the assertion is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "do not log when the assertion is truthy and there is a message",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "log the assertion error when the assertion is falsy",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "log the assertion error when the assertion is falsy with another message argument",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole count",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "count using the default counter",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "count using the a labeled counter",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "countReset restarts default counter",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "countReset restarts custom counter",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole group",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "group without label",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "group with label",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "groupEnd remove the indentation of the current group",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "groupEnd can not remove the indentation below the starting point",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole time",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on default timer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on custom timer",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole dir",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should print the deepest value",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole timeLog",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on default timer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the time between time() and timeEnd() on custom timer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default timer with data",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "custom timer with data",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "CustomConsole console",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be able to initialize console instance",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-console/src/__tests__/CustomConsole.test.ts",
+ "totalTime": 115,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "DOMCollection plugin for object properties",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports DOMStringMap",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports NamedNodeMap",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports config.min option",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "DOMCollection plugin for list items",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports HTMLCollection for getElementsByTagName",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports HTMLCollection for children",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports config.maxDepth option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports NodeList for querySelectorAll",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports NodeList for childNodes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports HTMLOptionsCollection for select options",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports HTMLCollection for form elements",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/DOMCollection.test.ts",
+ "totalTime": 64,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "test/it.todo error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "todo throws error when given no arguments",
+ "result": "success",
+ "time": 35,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "todo throws error when given more than one argument",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "todo throws error when given none string description",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts",
+ "totalTime": 81,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "sorts by file size if there is no timing information",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sorts based on timing information",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sorts based on failures and timing information",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sorts based on failures, timing information and file size",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes the cache based on results without existing cache",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns failed tests in sorted order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes the cache based on the results",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with multiple contexts",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js",
+ "totalTime": 251,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Suite",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't throw on addExpectationResult when there are no children",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/Suite.test.ts",
+ "totalTime": 84,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(String)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(String)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(Function)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(Function)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(Array)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(Array)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(Object)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(Object)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(RegExp)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(RegExp)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(Symbol)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(Symbol)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(Function)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(Function)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports any(namedFuntction)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested any(namedFuntction)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "anything()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "arrayContaining()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "arrayNotContaining()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "objectContaining()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "objectNotContaining()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stringContaining(string)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "not.stringContaining(string)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stringMatching(string)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stringMatching(regexp)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stringMatching(regexp) {escapeRegex: false}",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stringMatching(regexp) {escapeRegex: true}",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stringNotMatching(string)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiple nested asymmetric matchers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "min option",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indent option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "default implicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default explicit: 2 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 0 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-default: 4 spaces",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "maxDepth option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "matchers as leaf nodes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "matchers as internal nodes",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts",
+ "totalTime": 137,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ConvertAnsi plugin",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports style.red",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports style.green",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports style.reset",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports style.bold",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports style.dim",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not support other colors",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/ConvertAnsi.test.ts",
+ "totalTime": 43,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getConsoleOutput",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for assert",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for count",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for debug",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for dir",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for dirxml",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for error",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for group",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for groupCollapsed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for info",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for log",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for time",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "takes noStackTrace and pass it on for warn",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-console/src/__tests__/getConsoleOutput.test.ts",
+ "totalTime": 56,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "expectationResultFactory",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if passed.",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if failed.",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if failed (with \`message\`).",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if failed (with \`error\`).",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the error name if the error message is empty",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if failed (with \`error\` as a string).",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result if failed (with \`error.stack\` not as a string).",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts",
+ "totalTime": 70,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "array .add",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result of adding 0 to 0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result of adding 0 to 1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result of adding 1 to 1",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "concurrent .add",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result of adding 0 to 0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result of adding 0 to 1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the result of adding 1 to 1",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "template .add",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns 0 when given 0 and 0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns 1 when given 0 and 1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns 2 when given 1 and 1",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when not called with the right number of arguments",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-each/src/__tests__/index.test.ts",
+ "totalTime": 44,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "pretty-format",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints global window as constructor name alone",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "DOMElement Plugin",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports a single HTML element",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an HTML element with a class property",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an HTML element with a title property",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "escapes double quote in attribute value",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an HTML element with a single attribute",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an HTML element with multiple attributes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an HTML element with attribute and text content",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports an element with text content",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested elements",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested elements with attributes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested elements with attribute and text content",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports nested elements with text content",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports siblings",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiline text node in pre",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiline text node preceding span in pre",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports multiline text node in textarea",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports empty text node",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports non-empty text node",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports comment node",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports fragment node",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports custom elements",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports SVG elements",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports indentation for array of elements",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports maxDepth option",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles \`tagName\` not being a string",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "DOMElement Plugin matches constructor name of SVG elements",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "jsdom 9 and 10",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jsdom 11",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/DOMElement.test.ts",
+ "totalTime": 148,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "formatTestResults",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes test full name",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-test-result/src/__tests__/formatTestResults.test.ts",
+ "totalTime": 53,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes the right API using default working",
+ "result": "success",
+ "time": 85,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exposes the right API using passed worker",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "breaks if any of the forbidden methods is tried to be exposed",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with minimal options",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not let make calls after the farm is ended",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not let end the farm after it is ended",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls doWork",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls getStderr and getStdout from worker",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/index.test.js",
+ "totalTime": 230,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "beforeEach hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeEach throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "beforeAll hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "beforeAll throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "afterEach hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterEach throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "afterAll hooks error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when \\"String\\" is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when 1 is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when [] is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when {} is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when Symbol(hello) is provided as a first argument to it",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when true is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when null is provided as a first argument to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "afterAll throws an error when undefined is provided as a first argument to it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/hooksError.test.ts",
+ "totalTime": 51,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Jasmine2Reporter",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "reports nested suites",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/reporter.test.ts",
+ "totalTime": 107,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "test/it.todo error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws error when given no arguments",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws error when given more than one argument",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws error when given none string description",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/todoError.test.ts",
+ "totalTime": 27,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "test/it error throwing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws error with missing callback function",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws an error when first argument isn't a string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it throws an error when callback function is not a function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test throws error with missing callback function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test throws an error when first argument isn't a string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "test throws an error when callback function is not a function",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/itTestError.test.ts",
+ "totalTime": 32,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "iterators",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works for arrays",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works for custom iterables",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works for Sets",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works for Maps",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/iterators.test.ts",
+ "totalTime": 43,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "pTimeout",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls \`clearTimeout\` and resolves when \`promise\` resolves.",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls \`clearTimeout\` and rejects when \`promise\` rejects.",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls \`onTimeout\` on timeout.",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/pTimeout.test.ts",
+ "totalTime": 44,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "creation of a cache key",
+ "result": "success",
+ "time": 33,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-create-cache-key-function/src/__tests__/index.test.ts",
+ "totalTime": 75,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "concurrent",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should add 1 to number",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should add 1 to number",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should add 1 to number",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/concurrent.test.ts",
+ "totalTime": 24,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "global.test",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts",
+ "totalTime": 23,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ReactElement Plugin",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes forwardRef without displayName",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes forwardRef with displayName",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "serializes forwardRef component with displayName",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/pretty-format/src/__tests__/ReactElement.test.ts",
+ "totalTime": 64,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the shared tasks in FIFO ordering",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the worker specific tasks in FIFO ordering",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "maintains global FIFO ordering between worker specific and shared tasks",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/FifoQueue.test.js",
+ "totalTime": 48,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the tasks in order",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the task with the lowest priority value if inserted in reversed order",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the task with the lowest priority value if inserted in correct order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses different queues for each worker",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "process task in the global and shared queue in order",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/PriorityQueue.test.js",
+ "totalTime": 63,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "SearchSource isTestFilePath",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports ../ paths and unix separators via testRegex",
+ "result": "success",
+ "time": 804,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports unix separators",
+ "result": "success",
+ "time": 265,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports win32 separators",
+ "result": "success",
+ "time": 277,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "SearchSource testPathsMatching",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests matching a pattern via testRegex",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests matching a pattern via testMatch",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests matching a JS regex pattern",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests matching a JS glob pattern",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests matching a JS with overriding glob patterns",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests with default file extensions using testRegex",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests with default file extensions using testMatch",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests with parentheses in their rootDir when using testMatch",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests with similar but custom file extensions",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests with totally custom foobar file extensions",
+ "result": "success",
+ "time": 38,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests with many kinds of file extensions",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests using a regex only",
+ "result": "success",
+ "time": 41,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests using a glob only",
+ "result": "success",
+ "time": 24,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "SearchSource findRelatedTests",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "makes sure a file is related to itself",
+ "result": "success",
+ "time": 60,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests that depend directly on the path",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "excludes untested files from coverage",
+ "result": "success",
+ "time": 17,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "SearchSource findRelatedTestsFromPattern",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns empty search result for empty input",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns empty search result for invalid input",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns empty search result if no related tests were found",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests for a single file",
+ "result": "success",
+ "time": 24,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds tests for multiple files",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mistake roots folders with prefix names",
+ "result": "success",
+ "time": 29,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "SearchSource findRelatedSourcesFromTestsInChangedFiles",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "return empty set if no SCM",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "return sources required by tests",
+ "result": "success",
+ "time": 17,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/SearchSource.test.ts",
+ "totalTime": 2596,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw if passed two arguments",
+ "result": "success",
+ "time": 46,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".rejects",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should reject",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should reject with toThrow",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should reject async function to toThrow",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value \\"a\\" synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value \\"a\\"",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [1] synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [1]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [Function anonymous] synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [Function anonymous]",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value {\\"a\\": 1} synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value {\\"a\\": 1}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value 4 synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value 4",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value null synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value null",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value true synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value true",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value undefined synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for promise that resolves",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".resolves",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should resolve",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value \\"a\\" synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value \\"a\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [1] synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [1]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [Function anonymous] synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value [Function anonymous]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value {\\"a\\": 1} synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value {\\"a\\": 1}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value 4 synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value 4",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value null synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value null",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value true synchronously",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value true",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value undefined synchronously",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails non-promise value undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for promise that rejects",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBe()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: 1 and 2",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: true and false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: [Function anonymous] and [Function anonymous]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: {} and {}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: {\\"a\\": 1} and {\\"a\\": 1}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: {\\"a\\": 1} and {\\"a\\": 5}",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: {\\"a\\": [Function a], \\"b\\": 2} and {\\"a\\": Any, \\"b\\": 2}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: {\\"a\\": undefined, \\"b\\": 2} and {\\"b\\": 2}",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: 2020-02-20T00:00:00.000Z and 2020-02-20T00:00:00.000Z",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: 2020-02-21T00:00:00.000Z and 2020-02-20T00:00:00.000Z",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: /received/ and /expected/",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: Symbol(received) and Symbol(expected)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: [Error: received] and [Error: expected]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: \\"abc\\" and \\"cde\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: \\"painless JavaScript testing\\" and \\"delightful JavaScript testing\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: \\"\\" and \\"compare one-line string to empty string\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: \\"with
+trailing space\\" and \\"without trailing space\\"",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: \\"four
+4
+line
+string\\" and \\"3
+line
+string\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: [] and []",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: null and undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: -0 and 0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: 1n and 2n",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for: {\\"a\\": 1n} and {\\"a\\": 1n}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for 'false' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '1' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '\\"a\\"' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for 'undefined' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for 'null' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '{}' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '[]' with '.not'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '1n' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '1n' with '.not'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not crash on circular references",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "assertion error matcherResult property contains matcher name, expected and actual values",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toStrictEqual()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not ignore keys with undefined values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not ignore keys with undefined values inside an array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not ignore keys with undefined values deep inside an object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when comparing same type",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "matches the expected snapshot when it fails",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "displays substring diff",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "displays substring diff for multiple lines",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not pass for different types",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not simply compare constructor names",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes for matching sparse arrays",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not pass when sparseness of arrays do not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not pass when equally sparse arrays have different values",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toEqual()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(true).toEqual(false)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toEqual(2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0).toEqual(-0)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0).toEqual(5e-324)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(5e-324).toEqual(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0).toEqual({})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toEqual(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toEqual({})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"abc\\").toEqual({\\"0\\": \\"a\\", \\"1\\": \\"b\\", \\"2\\": \\"c\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"0\\": \\"a\\", \\"1\\": \\"b\\", \\"2\\": \\"c\\"}).toEqual(\\"abc\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(/abc/gsy).toEqual(/abc/g)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 1}).toEqual({\\"a\\": 2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 5}).toEqual({\\"b\\": 6})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"foo\\": {\\"bar\\": 1}}).toEqual({\\"foo\\": {}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"getterAndSetter\\": {}}).toEqual({\\"getterAndSetter\\": {\\"foo\\": \\"bar\\"}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"frozenGetterAndSetter\\": {}}).toEqual({\\"frozenGetterAndSetter\\": {\\"foo\\": \\"bar\\"}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"getter\\": {}}).toEqual({\\"getter\\": {\\"foo\\": \\"bar\\"}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"frozenGetter\\": {}}).toEqual({\\"frozenGetter\\": {\\"foo\\": \\"bar\\"}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"setter\\": undefined}).toEqual({\\"setter\\": {\\"foo\\": \\"bar\\"}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"frozenSetter\\": undefined}).toEqual({\\"frozenSetter\\": {\\"foo\\": \\"bar\\"}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"banana\\").toEqual(\\"apple\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"1 234,57 $\\").toEqual(\\"1 234,57 $\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"type TypeName = T extends Function ? \\\\\\"function\\\\\\" : \\\\\\"object\\\\\\";\\").toEqual(\\"type TypeName = T extends Function
+? \\\\\\"function\\\\\\"
+: \\\\\\"object\\\\\\";\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(null).toEqual(undefined)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1]).toEqual([2])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1, 2]).toEqual([2, 1])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.List [1]).toEqual(Immutable.List [2])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.List [1, 2]).toEqual(Immutable.List [2, 1])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Map {}).toEqual(Set {})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Set {1, 2}).toEqual(Set {})",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [3]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [2]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Set {Set {1}, Set {2}}).toEqual(Set {Set {1}, Set {3}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [1, 2, 3])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Immutable.OrderedSet [2, 1])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Map {1 => \\"one\\", 2 => \\"two\\"}).toEqual(Map {1 => \\"one\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Map {\\"a\\" => 0}).toEqual(Map {\\"b\\" => 0})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Map {\\"v\\" => 1}).toEqual(Map {\\"v\\" => 2})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Map {[\\"v\\"] => 1}).toEqual(Map {[\\"v\\"] => 2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Map {[1] => Map {[1] => \\"one\\"}}).toEqual(Map {[1] => Map {[1] => \\"two\\"}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.Map {\\"a\\": 0}).toEqual(Immutable.Map {\\"b\\": 0})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.Map {\\"v\\": 1}).toEqual(Immutable.Map {\\"v\\": 2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.OrderedMap {1: \\"one\\", 2: \\"two\\"}).toEqual(Immutable.OrderedMap {2: \\"two\\", 1: \\"one\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Immutable.Map {\\"1\\": Immutable.Map {\\"2\\": {\\"a\\": 99}}}).toEqual(Immutable.Map {\\"1\\": Immutable.Map {\\"2\\": {\\"a\\": 11}}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([97, 98, 99]).toEqual([97, 98, 100])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 1, \\"b\\": 2}).toEqual(ObjectContaining {\\"a\\": 2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(false).toEqual(ObjectContaining {\\"a\\": 2})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1, 3]).toEqual(ArrayContaining [1, 2])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toEqual(ArrayContaining [1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"abd\\").toEqual(StringContaining \\"bc\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"abd\\").toEqual(StringMatching /bc/i)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(undefined).toEqual(Anything)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(undefined).toEqual(Any)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"Eve\\").toEqual({\\"asymmetricMatch\\": [Function asymmetricMatch]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"target\\": {\\"nodeType\\": 1, \\"value\\": \\"a\\"}}).toEqual({\\"target\\": {\\"nodeType\\": 1, \\"value\\": \\"b\\"}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"nodeName\\": \\"div\\", \\"nodeType\\": 1}).toEqual({\\"nodeName\\": \\"p\\", \\"nodeType\\": 1})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({Symbol(foo): 1, Symbol(bar): 2}).toEqual({Symbol(foo): Any, Symbol(bar): 1})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1n).toEqual(2n)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1n).toEqual(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(true).not.toEqual(true)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1).not.toEqual(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(NaN).not.toEqual(NaN)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).not.toEqual(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).not.toEqual(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).not.toEqual({})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"abc\\").not.toEqual(\\"abc\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"abc\\").not.toEqual(\\"abc\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"abc\\").not.toEqual(\\"abc\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1]).not.toEqual([1])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1, 2]).not.toEqual([1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.List [1]).not.toEqual(Immutable.List [1])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.List [1, 2]).not.toEqual(Immutable.List [1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).not.toEqual({})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 99}).not.toEqual({\\"a\\": 99})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {}).not.toEqual(Set {})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {1, 2}).not.toEqual(Set {1, 2})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {1, 2}).not.toEqual(Set {2, 1})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {[1], [2]}).not.toEqual(Set {[2], [1]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {Set {[1]}, Set {[2]}}).not.toEqual(Set {Set {[2]}, Set {[1]}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {[1], [2], [3], [3]}).not.toEqual(Set {[3], [3], [2], [1]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {{\\"a\\": 1}, {\\"b\\": 2}}).not.toEqual(Set {{\\"b\\": 2}, {\\"a\\": 1}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Set []).not.toEqual(Immutable.Set [])",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [2, 1])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.OrderedSet []).not.toEqual(Immutable.OrderedSet [])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.OrderedSet [1, 2]).not.toEqual(Immutable.OrderedSet [1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {}).not.toEqual(Map {})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {1 => \\"one\\", 2 => \\"two\\"}).not.toEqual(Map {1 => \\"one\\", 2 => \\"two\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {1 => \\"one\\", 2 => \\"two\\"}).not.toEqual(Map {2 => \\"two\\", 1 => \\"one\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {[1] => \\"one\\", [2] => \\"two\\", [3] => \\"three\\", [3] => \\"four\\"}).not.toEqual(Map {[3] => \\"three\\", [3] => \\"four\\", [2] => \\"two\\", [1] => \\"one\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {[1] => Map {[1] => \\"one\\"}, [2] => Map {[2] => \\"two\\"}}).not.toEqual(Map {[2] => Map {[2] => \\"two\\"}, [1] => Map {[1] => \\"one\\"}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {[1] => \\"one\\", [2] => \\"two\\"}).not.toEqual(Map {[2] => \\"two\\", [1] => \\"one\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {{\\"a\\": 1} => \\"one\\", {\\"b\\": 2} => \\"two\\"}).not.toEqual(Map {{\\"b\\": 2} => \\"two\\", {\\"a\\": 1} => \\"one\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Map {1 => [\\"one\\"], 2 => [\\"two\\"]}).not.toEqual(Map {2 => [\\"two\\"], 1 => [\\"one\\"]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Map {}).not.toEqual(Immutable.Map {})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Map {1: \\"one\\", 2: \\"two\\"}).not.toEqual(Immutable.Map {1: \\"one\\", 2: \\"two\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Map {1: \\"one\\", 2: \\"two\\"}).not.toEqual(Immutable.Map {2: \\"two\\", 1: \\"one\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.OrderedMap {1: \\"one\\", 2: \\"two\\"}).not.toEqual(Immutable.OrderedMap {1: \\"one\\", 2: \\"two\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.Map {\\"1\\": Immutable.Map {\\"2\\": {\\"a\\": 99}}}).not.toEqual(Immutable.Map {\\"1\\": Immutable.Map {\\"2\\": {\\"a\\": 99}}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([97, 98, 99]).not.toEqual([97, 98, 99])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 1, \\"b\\": 2}).not.toEqual(ObjectContaining {\\"a\\": 1})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1, 2, 3]).not.toEqual(ArrayContaining [2, 3])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"abcd\\").not.toEqual(StringContaining \\"bc\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"abcd\\").not.toEqual(StringMatching /bc/)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(true).not.toEqual(Anything)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([Function anonymous]).not.toEqual(Any)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 1, \\"b\\": [Function b], \\"c\\": true}).not.toEqual({\\"a\\": 1, \\"b\\": Any, \\"c\\": Anything})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"Alice\\").not.toEqual({\\"asymmetricMatch\\": [Function asymmetricMatch]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"nodeName\\": \\"div\\", \\"nodeType\\": 1}).not.toEqual({\\"nodeName\\": \\"div\\", \\"nodeType\\": 1})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({Symbol(foo): 1, Symbol(bar): 2}).not.toEqual({Symbol(foo): Any, Symbol(bar): 2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1n).not.toEqual(1n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0n).not.toEqual(0n)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1n]).not.toEqual([1n])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1n, 2]).not.toEqual([1n, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Immutable.List [1n]).not.toEqual(Immutable.List [1n])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 99n}).not.toEqual({\\"a\\": 99n})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {1n, 2n}).not.toEqual(Set {1n, 2n})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "assertion error matcherResult property contains matcher name, expected and actual values",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "symbol based keys in arrays are processed correctly",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-enumerable members should be skipped during equal",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "non-enumerable symbolic members should be skipped during equal",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toEqual() cyclic object equality",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "properties with the same circularity are equal",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properties with different circularity are not equal",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "are not equal if circularity is not on the same property",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeInstanceOf()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing Map {} and [Function Map]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing [] and [Function Array]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing {} and [Function A]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing {} and [Function B]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing {} and [Function B]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing {} and [Function anonymous]",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing {} and [Function B]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passing {} and [Function name() {}]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing \\"a\\" and [Function String]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing 1 and [Function Number]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing true and [Function Boolean]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing {} and [Function B]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing {} and [Function A]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing undefined and [Function String]",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing null and [Function String]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing /\\\\w+/ and [Function anonymous]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "failing {} and [Function RegExp]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if constructor is not a function",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeTruthy(), .toBeFalsy()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not accept arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'{}' is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[]' is truthy",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'true' is truthy",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'1' is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'\\"a\\"' is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'0.5' is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'Map {}' is truthy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[Function anonymous]' is truthy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'Infinity' is truthy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'1n' is truthy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'false' is falsy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'null' is falsy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'NaN' is falsy",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'0' is falsy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'\\"\\"' is falsy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'undefined' is falsy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'0n' is falsy",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeNaN()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(NaN).toBeNaN()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeNull()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '{}'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '[]'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for 'true'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '1'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '\\"a\\"'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '0.5'",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for 'Map {}'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for '[Function anonymous]'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for 'Infinity'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails for null with .not",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pass for null",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeDefined(), .toBeUndefined()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "'{}' is defined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[]' is defined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'true' is defined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'1' is defined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'\\"a\\"' is defined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'0.5' is defined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'Map {}' is defined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[Function anonymous]' is defined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'Infinity' is defined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'1n' is defined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined is undefined",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1).toBeLessThan(2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2).toBeLessThan(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2).toBeGreaterThan(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toBeGreaterThan(2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1).toBeLessThanOrEqual(2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2).toBeLessThanOrEqual(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2).toBeGreaterThanOrEqual(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toBeGreaterThanOrEqual(2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [1, 2]",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(-Infinity).toBeLessThan(Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Infinity).toBeLessThan(-Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Infinity).toBeGreaterThan(-Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(-Infinity).toBeGreaterThan(Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(-Infinity).toBeLessThanOrEqual(Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Infinity).toBeLessThanOrEqual(-Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Infinity).toBeGreaterThanOrEqual(-Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(-Infinity).toBeGreaterThanOrEqual(Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [-Infinity, Infinity]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(5e-324).toBeLessThan(1.7976931348623157e+308)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1.7976931348623157e+308).toBeLessThan(5e-324)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1.7976931348623157e+308).toBeGreaterThan(5e-324)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(5e-324).toBeGreaterThan(1.7976931348623157e+308)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(5e-324).toBeLessThanOrEqual(1.7976931348623157e+308)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1.7976931348623157e+308).toBeLessThanOrEqual(5e-324)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1.7976931348623157e+308).toBeGreaterThanOrEqual(5e-324)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(5e-324).toBeGreaterThanOrEqual(1.7976931348623157e+308)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [5e-324, 1.7976931348623157e+308]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(17).toBeLessThan(34)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(34).toBeLessThan(17)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(34).toBeGreaterThan(17)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(17).toBeGreaterThan(34)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(17).toBeLessThanOrEqual(34)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(34).toBeLessThanOrEqual(17)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(34).toBeGreaterThanOrEqual(17)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(17).toBeGreaterThanOrEqual(34)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [17, 34]",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(3).toBeLessThan(7)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(7).toBeLessThan(3)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(7).toBeGreaterThan(3)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(3).toBeGreaterThan(7)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(3).toBeLessThanOrEqual(7)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(7).toBeLessThanOrEqual(3)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(7).toBeGreaterThanOrEqual(3)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(3).toBeGreaterThanOrEqual(7)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [3, 7]",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(9).toBeLessThan(18)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(18).toBeLessThan(9)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(18).toBeGreaterThan(9)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(9).toBeGreaterThan(18)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(9).toBeLessThanOrEqual(18)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(18).toBeLessThanOrEqual(9)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(18).toBeGreaterThanOrEqual(9)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(9).toBeGreaterThanOrEqual(18)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [9, 18]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0.1).toBeLessThan(0.2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0.2).toBeLessThan(0.1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0.2).toBeGreaterThan(0.1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0.1).toBeGreaterThan(0.2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0.1).toBeLessThanOrEqual(0.2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0.2).toBeLessThanOrEqual(0.1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0.2).toBeGreaterThanOrEqual(0.1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0.1).toBeGreaterThanOrEqual(0.2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [0.1, 0.2]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can compare BigInt to Numbers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1n).toBeLessThan(2n)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2n).toBeLessThan(1n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2n).toBeGreaterThan(1n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1n).toBeGreaterThan(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1n).toBeLessThanOrEqual(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2n).toBeLessThanOrEqual(1n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2n).toBeGreaterThanOrEqual(1n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1n).toBeGreaterThanOrEqual(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [1n, 2n]",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(17n).toBeLessThan(34n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(34n).toBeLessThan(17n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(34n).toBeGreaterThan(17n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(17n).toBeGreaterThan(34n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(17n).toBeLessThanOrEqual(34n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(34n).toBeLessThanOrEqual(17n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(34n).toBeGreaterThanOrEqual(17n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(17n).toBeGreaterThanOrEqual(34n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [17n, 34n]",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(-1).toBeLessThan(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2n).toBeLessThan(-1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2n).toBeGreaterThan(-1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(-1).toBeGreaterThan(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(-1).toBeLessThanOrEqual(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2n).toBeLessThanOrEqual(-1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2n).toBeGreaterThanOrEqual(-1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(-1).toBeGreaterThanOrEqual(2n)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [-1, 2n]",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [1, 1]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [5e-324, 5e-324]",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [Infinity, Infinity]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [-Infinity, -Infinity]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [1, 1]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal numbers: [9007199254740991, 9007199254740991]",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toContain(), .toContainEqual()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "iterable",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1, 2, 3, 4]' contains '1'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[\\"a\\", \\"b\\", \\"c\\", \\"d\\"]' contains '\\"a\\"'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[undefined, null]' contains 'null'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[undefined, null]' contains 'undefined'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[Symbol(a)]' contains 'Symbol(a)'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'\\"abcdef\\"' contains '\\"abc\\"'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'\\"11112111\\"' contains '\\"2\\"'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'Set {\\"abc\\", \\"def\\"}' contains '\\"abc\\"'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[0, 1]' contains '1'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1n, 2n, 3n, 4n]' contains '1n'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1, 2, 3, 3n, 4]' contains '3n'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1, 2, 3]' does not contain '4'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[null, undefined]' does not contain '1'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[{}, []]' does not contain '[]'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[{}, []]' does not contain '{}'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1n, 2n, 3n]' does not contain '3'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error cases",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1, 2, 3, 4]' contains a value equal to '1'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[\\"a\\", \\"b\\", \\"c\\", \\"d\\"]' contains a value equal to '\\"a\\"'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[undefined, null]' contains a value equal to 'null'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[undefined, null]' contains a value equal to 'undefined'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[Symbol(a)]' contains a value equal to 'Symbol(a)'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[{\\"a\\": \\"b\\"}, {\\"a\\": \\"c\\"}]' contains a value equal to '{\\"a\\": \\"b\\"}'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'Set {1, 2, 3, 4}' contains a value equal to '1'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[0, 1]' contains a value equal to '1'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[{\\"a\\": \\"b\\"}, {\\"a\\": \\"c\\"}]' does not contain a value equal to'{\\"a\\": \\"d\\"}'",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error cases for toContainEqual",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeCloseTo",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).toBeCloseTo(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).toBeCloseTo(0.001)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1.23).toBeCloseTo(1.229)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1.23).toBeCloseTo(1.226)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1.23).toBeCloseTo(1.225)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(1.23).toBeCloseTo(1.234)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Infinity).toBeCloseTo(Infinity)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(-Infinity).toBeCloseTo(-Infinity)",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0).toBeCloseTo(0.01)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toBeCloseTo(1.23)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1.23).toBeCloseTo(1.2249999)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Infinity).toBeCloseTo(-Infinity)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Infinity).toBeCloseTo(1.23)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(-Infinity).toBeCloseTo(-1.23)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(3.141592e-7).toBeCloseTo(3e-7, 8)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(56789).toBeCloseTo(51234, -4)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).toBeCloseTo(0.1, 0)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).toBeCloseTo(0.0001, 3)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(0).toBeCloseTo(0.000004, 5)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2.0000002).toBeCloseTo(2, 5)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toBeCloseTo throws: Matcher error",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise empty isNot false received",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise empty isNot true expected",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise rejects isNot false expected",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise rejects isNot true received",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise resolves isNot false received",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise resolves isNot true expected",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toMatch()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(foo).toMatch(foo)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Foo bar).toMatch(/^foo/i)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [bar, foo]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws: [bar, /foo/]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [1, \\"foo\\"]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [{}, \\"foo\\"]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [[], \\"foo\\"]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [true, \\"foo\\"]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [/foo/i, \\"foo\\"]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [[Function anonymous], \\"foo\\"]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String actual value passed: [undefined, \\"foo\\"]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String/RegExp expected value passed: [\\"foo\\", 1]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String/RegExp expected value passed: [\\"foo\\", {}]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String/RegExp expected value passed: [\\"foo\\", []]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String/RegExp expected value passed: [\\"foo\\", true]",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String/RegExp expected value passed: [\\"foo\\", [Function anonymous]]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if non String/RegExp expected value passed: [\\"foo\\", undefined]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "escapes strings properly",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not maintain RegExp state between calls",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toHaveLength",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1, 2]).toHaveLength(2)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([]).toHaveLength(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([\\"a\\", \\"b\\"]).toHaveLength(2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"abc\\").toHaveLength(3)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"\\").toHaveLength(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([Function anonymous]).toHaveLength(0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1, 2]).toHaveLength(3)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([]).toHaveLength(1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([\\"a\\", \\"b\\"]).toHaveLength(99)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"abc\\").toHaveLength(66)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"\\").toHaveLength(1)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error cases",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toHaveLength matcher error expected length",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "not number",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number Infinity",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number NaN",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number float",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number negative integer",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".toHaveProperty()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a.b.c.d', 1)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a,b,c,d', 1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a.b.c.d\\": 1}).toHaveProperty('a.b.c.d', 1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": [1, 2, 3]}}).toHaveProperty('a,b,1', 2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": [1, 2, 3]}}).toHaveProperty('a,b,1', Any)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 0}).toHaveProperty('a', 0)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": undefined}}).toHaveProperty('a.b', undefined)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {}}).toHaveProperty('a.b', undefined)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": {\\"c\\": 5}}}).toHaveProperty('a.b', {\\"c\\": 5})",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"property\\": 1}).toHaveProperty('property', 1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).toHaveProperty('a', undefined)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).toHaveProperty('b', \\"b\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).toHaveProperty('setter', undefined)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"val\\": true}).toHaveProperty('a', undefined)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"val\\": true}).toHaveProperty('c', \\"c\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"val\\": true}).toHaveProperty('val', true)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"nodeName\\": \\"DIV\\"}).toHaveProperty('nodeType', 1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(\\"\\").toHaveProperty('length', 0)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([Function memoized]).toHaveProperty('memo', [])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a.b.ttt.d', 1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a.b.c.d', 2)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a.b.c.d\\": 1}).toHaveProperty('a.b.c.d', 2)",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a.b.c.d\\": 1}).toHaveProperty('a.b.c.d', 2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"children\\": [\\"\\\\\\"That cartoon\\\\\\"\\"], \\"props\\": null, \\"type\\": \\"p\\"}).toHaveProperty('children,0', \\"\\\\\\"That cat cartoon\\\\\\"\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"children\\": [\\"Roses are red.
+Violets are blue.
+Testing with Jest is good for you.\\"], \\"props\\": null, \\"type\\": \\"pre\\"}).toHaveProperty('children,0', \\"Roses are red, violets are blue.
+Testing with Jest
+Is good for you.\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a,b,c,d', 2)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": {\\"c\\": {}}}}).toHaveProperty('a.b.c.d', 1)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 1}).toHaveProperty('a.b.c.d', 5)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toHaveProperty('a', \\"test\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": 3}}).toHaveProperty('a.b', undefined)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toHaveProperty('a.b.c', \\"test\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"abc\\").toHaveProperty('a.b.c', {\\"a\\": 5})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": {\\"c\\": 5}}}).toHaveProperty('a.b', {\\"c\\": 4})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toHaveProperty('a', \\"a\\")",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toHaveProperty('b', undefined)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a.b.c.d')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": {\\"c\\": {\\"d\\": 1}}}}).toHaveProperty('a,b,c,d')",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a.b.c.d\\": 1}).toHaveProperty('a.b.c.d')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": [1, 2, 3]}}).toHaveProperty('a,b,1')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 0}).toHaveProperty('a')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"b\\": undefined}}).toHaveProperty('a.b')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": {\\"b\\": {\\"c\\": {}}}}).toHaveProperty('a.b.c.d')",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 1}).toHaveProperty('a.b.c.d')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toHaveProperty('a')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(1).toHaveProperty('a.b.c')",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"abc\\").toHaveProperty('a.b.c')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(false).toHaveProperty('key')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(0).toHaveProperty('key')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(\\"\\").toHaveProperty('key')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Symbol()).toHaveProperty('key')",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"key\\": 1}).toHaveProperty('not')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{error} expect(null).toHaveProperty('a.b')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{error} expect(undefined).toHaveProperty('a')",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{error} expect({\\"a\\": {\\"b\\": {}}}).toHaveProperty('undefined')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{error} expect({\\"a\\": {\\"b\\": {}}}).toHaveProperty('null')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{error} expect({\\"a\\": {\\"b\\": {}}}).toHaveProperty('1')",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{error} expect({}).toHaveProperty('')",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toMatchObject() circular references simple circular references",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"hello\\", \\"ref\\": [Circular]}).toMatchObject({})",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"hello\\", \\"ref\\": [Circular]}).toMatchObject({\\"a\\": \\"hello\\", \\"ref\\": [Circular]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toMatchObject({\\"a\\": \\"hello\\", \\"ref\\": [Circular]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"hello\\", \\"ref\\": [Circular]}).toMatchObject({\\"a\\": \\"world\\", \\"ref\\": [Circular]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"ref\\": \\"not a ref\\"}).toMatchObject({\\"a\\": \\"hello\\", \\"ref\\": [Circular]})",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toMatchObject() circular references transitive circular references",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}}).toMatchObject({})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}}).toMatchObject({\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toMatchObject({\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"world\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}}).toMatchObject({\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"nestedObj\\": {\\"parentObj\\": \\"not the parent ref\\"}}).toMatchObject({\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}})",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toMatchObject()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\"}).toMatchObject({\\"a\\": \\"b\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\"}).toMatchObject({\\"a\\": \\"b\\", \\"c\\": \\"d\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}, \\"z\\": \\"z\\"}}).toMatchObject({\\"a\\": \\"b\\", \\"t\\": {\\"z\\": \\"z\\"}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}, \\"z\\": \\"z\\"}}).toMatchObject({\\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": [3, 4, 5], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": [3, 4, 5]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": [3, 4, 5, \\"v\\"], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": [3, 4, 5, \\"v\\"]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 1, \\"c\\": 2}).toMatchObject({\\"a\\": Any})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": {\\"x\\": \\"x\\", \\"y\\": \\"y\\"}}).toMatchObject({\\"a\\": {\\"x\\": Any}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {1, 2}).toMatchObject(Set {1, 2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(Set {1, 2}).toMatchObject(Set {2, 1})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-11-30T00:00:00.000Z)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": 2015-11-30T00:00:00.000Z, \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": 2015-11-30T00:00:00.000Z})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": null, \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": null})",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": undefined, \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": undefined})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": [{\\"a\\": \\"a\\", \\"b\\": \\"b\\"}]}).toMatchObject({\\"a\\": [{\\"a\\": \\"a\\"}]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([1, 2]).toMatchObject([1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": undefined}).toMatchObject({\\"a\\": undefined})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([]).toMatchObject([])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([Error: foo]).toMatchObject([Error: foo])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect([Error: bar]).toMatchObject({\\"message\\": \\"bar\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).toMatchObject({\\"a\\": undefined, \\"b\\": \\"b\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\"}).toMatchObject({\\"a\\": \\"b\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\", Symbol(jest): \\"jest\\"}).toMatchObject({\\"a\\": \\"b\\", Symbol(jest): \\"jest\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\", Symbol(jest): \\"jest\\"}).toMatchObject({\\"a\\": \\"b\\", \\"c\\": \\"d\\", Symbol(jest): \\"jest\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).toMatchObject({\\"a\\": undefined, \\"b\\": \\"b\\", \\"c\\": \\"c\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({}).toMatchObject({\\"d\\": 4})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: true} expect({\\"a\\": \\"b\\", \\"toString\\": [Function toString]}).toMatchObject({\\"toString\\": Any})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\"}).toMatchObject({\\"e\\": \\"b\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\"}).toMatchObject({\\"a\\": \\"b!\\", \\"c\\": \\"d\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"a\\", \\"c\\": \\"d\\"}).toMatchObject({\\"a\\": Any})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\", \\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}, \\"z\\": \\"z\\"}}).toMatchObject({\\"a\\": \\"b\\", \\"t\\": {\\"z\\": [3]}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\", \\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}, \\"z\\": \\"z\\"}}).toMatchObject({\\"t\\": {\\"l\\": {\\"r\\": \\"r\\"}}})",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": [3, 4, 5], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": [3, 4, 5, 6]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": [3, 4, 5], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": [3, 4]})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": [3, 4, \\"v\\"], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": [\\"v\\"]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": [3, 4, 5], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": {\\"b\\": 4}})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": [3, 4, 5], \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": {\\"b\\": Any}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1, 2]).toMatchObject([1, 3])",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([0]).toMatchObject([-0])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(Set {1, 2}).toMatchObject(Set {2})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-10-10T00:00:00.000Z)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 2015-11-30T00:00:00.000Z, \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": 2015-10-10T00:00:00.000Z})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": null, \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": \\"4\\"})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": null, \\"b\\": \\"b\\"}).toMatchObject({\\"a\\": undefined})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": undefined}).toMatchObject({\\"a\\": null})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": [{\\"a\\": \\"a\\", \\"b\\": \\"b\\"}]}).toMatchObject({\\"a\\": [{\\"a\\": \\"c\\"}]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": 1, \\"b\\": 1, \\"c\\": 1, \\"d\\": {\\"e\\": {\\"f\\": 555}}}).toMatchObject({\\"d\\": {\\"e\\": {\\"f\\": 222}}})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({}).toMatchObject({\\"a\\": undefined})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect([Error: foo]).toMatchObject([Error: bar])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\"}).toMatchObject({\\"c\\": \\"d\\"})",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\", \\"c\\": \\"d\\", Symbol(jest): \\"jest\\"}).toMatchObject({\\"a\\": \\"c\\", Symbol(jest): Any})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{pass: false} expect({\\"a\\": \\"b\\"}).toMatchObject({\\"toString\\": Any})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect(null).toMatchObject({})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect(4).toMatchObject({})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect(\\"44\\").toMatchObject({})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect(true).toMatchObject({})",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect(undefined).toMatchObject({})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect({}).toMatchObject(null)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect({}).toMatchObject(4)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect({}).toMatchObject(\\"some string\\")",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect({}).toMatchObject(true)",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws expect({}).toMatchObject(undefined)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not match properties up in the prototype chain",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/matchers.test.js",
+ "totalTime": 862,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "understands dependencies using jest.requireActual",
+ "result": "success",
+ "time": 1614,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jestRequireActual.test.ts",
+ "totalTime": 1665,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Watch mode flows",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly passing test path pattern",
+ "result": "success",
+ "time": 582,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Correctly passing test name pattern",
+ "result": "success",
+ "time": 73,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs Jest once by default and shows usage",
+ "result": "success",
+ "time": 60,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runs Jest in a non-interactive environment not showing usage",
+ "result": "success",
+ "time": 125,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves relative to the package root",
+ "result": "success",
+ "time": 77,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows prompts for WatchPlugins in alphabetical order",
+ "result": "success",
+ "time": 72,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows update snapshot prompt (without interactive)",
+ "result": "success",
+ "time": 57,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows update snapshot prompt (with interactive)",
+ "result": "success",
+ "time": 60,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to hook into JestHook",
+ "result": "success",
+ "time": 69,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to override eligible internal plugins",
+ "result": "success",
+ "time": 61,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to be configured",
+ "result": "success",
+ "time": 70,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to hook into file system changes",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "makes watch plugin initialization errors look nice",
+ "result": "success",
+ "time": 104,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 114,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 72,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 174,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 63,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 64,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 62,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 60,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 70,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 61,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 64,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 63,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 71,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 76,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 78,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 57,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 52,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 58,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 62,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 73,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 69,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 61,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 70,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 110,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 84,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 69,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 78,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 87,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 93,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 82,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 131,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 248,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 77,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 64,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 86,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 72,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 74,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to modify only white-listed global config keys",
+ "result": "success",
+ "time": 60,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "triggers enter on a WatchPlugin when its key is pressed",
+ "result": "success",
+ "time": 73,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prevents Jest from handling keys when active and returns control when end is called",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"o\\" runs test in \\"only changed files\\" mode",
+ "result": "success",
+ "time": 69,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"a\\" runs test in \\"watch all\\" mode",
+ "result": "success",
+ "time": 62,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"ENTER\\" reruns the tests",
+ "result": "success",
+ "time": 108,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"t\\" reruns the tests in \\"test name pattern\\" mode",
+ "result": "success",
+ "time": 93,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"p\\" reruns the tests in \\"filename pattern\\" mode",
+ "result": "success",
+ "time": 80,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Can combine \\"p\\" and \\"t\\" filters",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"u\\" reruns the tests in \\"update snapshot\\" mode",
+ "result": "success",
+ "time": 67,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passWithNoTest should be set to true in watch mode",
+ "result": "success",
+ "time": 65,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows the correct usage for the f key in \\"only failed tests\\" mode",
+ "result": "success",
+ "time": 62,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Watch mode flows when dealing with potential watch plugin key conflicts",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "forbids WatchPlugins overriding reserved internal plugins",
+ "result": "success",
+ "time": 70,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "forbids WatchPlugins overriding reserved internal plugins",
+ "result": "success",
+ "time": 58,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "forbids WatchPlugins overriding reserved internal plugins",
+ "result": "success",
+ "time": 62,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to override non-reserved internal plugins",
+ "result": "success",
+ "time": 68,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows WatchPlugins to override non-reserved internal plugins",
+ "result": "success",
+ "time": 62,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "forbids third-party WatchPlugins overriding each other",
+ "result": "success",
+ "time": 78,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/watch.test.js",
+ "totalTime": 6755,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "transitive dependencies",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks a manually mocked and mapped module",
+ "result": "success",
+ "time": 618,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unmocks transitive dependencies in node_modules by default",
+ "result": "success",
+ "time": 357,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unmocks transitive dependencies in node_modules when using unmock",
+ "result": "success",
+ "time": 360,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unmocks transitive dependencies in node_modules by default when using both patterns and unmock",
+ "result": "success",
+ "time": 415,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks deep dependencies when using unmock",
+ "result": "success",
+ "time": 299,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mock deep dependencies when using deepUnmock",
+ "result": "success",
+ "time": 258,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js",
+ "totalTime": 2366,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Watch mode flows with changed files",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should correct require new files without legacy cache",
+ "result": "success",
+ "time": 1430,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/watchFileChanges.test.ts",
+ "totalTime": 1514,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "HasteMap",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exports constants",
+ "result": "success",
+ "time": 272,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates valid cache file paths",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates different cache file paths for different roots",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates different cache file paths for different dependency extractor cache keys",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates different cache file paths for different hasteImplModulePath cache keys",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates different cache file paths for different projects",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "matches files against a pattern",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores files given a pattern",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores vcs directories without ignore pattern",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores vcs directories with ignore pattern regex",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warn on ignore pattern except for regex",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "builds a haste map on a fresh cache",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not crawl native files even if requested to do so",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retains all files if \`retainAllFiles\` is specified",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warns on duplicate mock files",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warns on duplicate module ids",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warns on duplicate module ids only once",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on duplicate module ids if \\"throwOnModuleCollision\\" is set to true",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "splits up modules by platform",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not access the file system on a warm cache with no changes",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only does minimal file system access when files change",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly handles file deletions",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly handles platform-specific file additions",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly handles platform-specific file deletions",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly handles platform-specific file renames",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "discards the cache when configuration changes",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores files that do not exist",
+ "result": "success",
+ "time": 53,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "distributes work across workers",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tries to crawl using node as a fallback",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tries to crawl using node as a fallback when promise fails once",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stops crawling when both crawlers fail",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "HasteMap builds a haste map on a fresh cache with SHA-1s",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses watchman: false",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses watchman: true",
+ "result": "success",
+ "time": 15,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "HasteMap duplicate modules",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "recovers when a duplicate file is deleted",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "recovers with the correct type when a duplicate file is deleted",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "recovers when a duplicate module is renamed",
+ "result": "success",
+ "time": 12,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "HasteMap file system changes processing",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides a new set of hasteHS and moduleMap",
+ "result": "success",
+ "time": 41,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles several change events at once",
+ "result": "success",
+ "time": 35,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not emit duplicate change events",
+ "result": "success",
+ "time": 43,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "emits a change even if a file in node_modules has changed",
+ "result": "success",
+ "time": 36,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly tracks changes to both platform-specific versions of a single module name",
+ "result": "success",
+ "time": 35,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "HasteMap file system changes processing recovery from duplicate module IDs",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "recovers when the oldest version of the duplicates is fixed",
+ "result": "success",
+ "time": 66,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "recovers when the most recent duplicate is fixed",
+ "result": "success",
+ "time": 90,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignore directories",
+ "result": "success",
+ "time": 37,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/__tests__/index.test.js",
+ "totalTime": 1145,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "code coverage for Handlebars",
+ "result": "success",
+ "time": 1830,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/coverageHandlebars.test.ts",
+ "totalTime": 1873,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not crash when expect involving a DOM node fails",
+ "result": "success",
+ "time": 1355,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/compareDomNodes.test.ts",
+ "totalTime": 1407,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "check is not leaking memory",
+ "result": "success",
+ "time": 1702,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jestEnvironmentJsdom.test.ts",
+ "totalTime": 1744,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolve platform modules",
+ "result": "success",
+ "time": 1764,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/resolve.test.ts",
+ "totalTime": 1863,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Snapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "stores new snapshots on the first run",
+ "result": "success",
+ "time": 959,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with escaped characters",
+ "result": "success",
+ "time": 2154,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with escaped regex",
+ "result": "success",
+ "time": 1375,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with template literal substitutions",
+ "result": "success",
+ "time": 1520,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Snapshot Validation",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not save snapshots in CI mode by default",
+ "result": "success",
+ "time": 890,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works on subsequent runs without \`-u\`",
+ "result": "success",
+ "time": 1752,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "deletes the snapshot if the test suite has been removed",
+ "result": "success",
+ "time": 1549,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "deletes a snapshot when a test does removes all the snapshots",
+ "result": "success",
+ "time": 1766,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "updates the snapshot when a test removes some snapshots",
+ "result": "success",
+ "time": 1800,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/snapshot.test.ts",
+ "totalTime": 13899,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks modules by default when using automocking",
+ "result": "success",
+ "time": 338,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't mock modules when explicitly unmocked when using automocking",
+ "result": "success",
+ "time": 100,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't mock modules when explicitly unmocked via a different name",
+ "result": "success",
+ "time": 45,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't mock modules when disableAutomock() has been called",
+ "result": "success",
+ "time": 90,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses manual mock when automocking on and mock is available",
+ "result": "success",
+ "time": 29,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not use manual mock when automocking is off and a real module is available",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves mapped module names and unmocks them by default",
+ "result": "success",
+ "time": 88,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "automocking is disabled by default",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unmocks modules in config.unmockedModulePathPatterns for tests with automock enabled when automock is false",
+ "result": "success",
+ "time": 96,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unmocks virtual mocks after they have been mocked previously",
+ "result": "success",
+ "time": 116,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "resetModules",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all the modules",
+ "result": "success",
+ "time": 22,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "isolateModules",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "keeps it's registry isolated from global one",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all modules after the block",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets module after failing",
+ "result": "success",
+ "time": 48,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot nest isolateModules blocks",
+ "result": "success",
+ "time": 50,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can call resetModules within a isolateModules block",
+ "result": "success",
+ "time": 25,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "isolateModules can use isolateModules from a beforeEach block",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can use the required module from beforeEach and re-require it",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js",
+ "totalTime": 1223,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime requireMock",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses manual mocks before attempting to automock",
+ "result": "success",
+ "time": 281,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can resolve modules that are only referenced from mocks",
+ "result": "success",
+ "time": 38,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stores and re-uses manual mock exports",
+ "result": "success",
+ "time": 36,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "automocks haste modules without a manual mock",
+ "result": "success",
+ "time": 77,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "automocks relative-path modules without a file extension",
+ "result": "success",
+ "time": 43,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "automocks relative-path modules with a file extension",
+ "result": "success",
+ "time": 36,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "just falls back when loading a native module",
+ "result": "success",
+ "time": 31,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stores and re-uses automocked haste exports",
+ "result": "success",
+ "time": 31,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stores and re-uses automocked relative-path modules",
+ "result": "success",
+ "time": 102,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiple node core modules returns correct module",
+ "result": "success",
+ "time": 74,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws on non-existent haste modules",
+ "result": "success",
+ "time": 69,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses manual mocks when using a custom resolver",
+ "result": "success",
+ "time": 49,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`require.main\` in mock",
+ "result": "success",
+ "time": 33,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_mock.test.js",
+ "totalTime": 962,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses NODE_PATH to find modules",
+ "result": "success",
+ "time": 303,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses modulePaths to find modules",
+ "result": "success",
+ "time": 231,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds modules in NODE_PATH containing multiple paths",
+ "result": "success",
+ "time": 248,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not find modules if NODE_PATH is relative",
+ "result": "success",
+ "time": 260,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_node_path.test.js",
+ "totalTime": 1088,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime require.resolve",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves a module path",
+ "result": "success",
+ "time": 292,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves a module path with moduleNameMapper",
+ "result": "success",
+ "time": 74,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime require.resolve with the jest-resolve-outside-vm-option",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "forwards to the real Node require in an internal context",
+ "result": "success",
+ "time": 87,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores the option in an external context",
+ "result": "success",
+ "time": 127,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not understand a self-constructed outsideJestVmPath in an external context",
+ "result": "success",
+ "time": 87,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts",
+ "totalTime": 707,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "complains if the value is a primitive",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not show the GC if hidden",
+ "result": "success",
+ "time": 80,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not hide the GC if visible",
+ "result": "success",
+ "time": 34,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly checks simple leaks",
+ "result": "success",
+ "time": 108,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests different objects",
+ "result": "success",
+ "time": 445,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly checks more complex leaks",
+ "result": "success",
+ "time": 240,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-leak-detector/src/__tests__/index.test.ts",
+ "totalTime": 986,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "async jasmine with pending during test",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not work on jest-circus",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be reported as a pending test",
+ "result": "skipped",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts",
+ "totalTime": 72,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "config for reporters supports \`default\`",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".addReporter() .removeReporter()",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "schedule tests run in parallel per default",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "schedule tests run in serial if the runner flags them",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should bail after \`n\` failures",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not bail if less than \`n\` failures",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should set runInBand to run in serial",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should set runInBand to not run in serial",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/TestScheduler.test.js",
+ "totalTime": 520,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect works correctly with RegExps created inside a VM",
+ "result": "success",
+ "time": 1477,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/expectInVm.test.ts",
+ "totalTime": 1527,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime requireActual",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "requires node module when manual mock exists",
+ "result": "success",
+ "time": 314,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "requireActual with moduleNameMapper",
+ "result": "success",
+ "time": 51,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_actual.test.js",
+ "totalTime": 478,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime require.cache",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "require.cache returns loaded module list as native Nodejs require does",
+ "result": "success",
+ "time": 388,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "require.cache is tolerant readonly",
+ "result": "success",
+ "time": 31,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_cache.test.js",
+ "totalTime": 454,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses configured moduleDirectories",
+ "result": "success",
+ "time": 288,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves packages",
+ "result": "success",
+ "time": 47,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "finds closest module from moduleDirectories",
+ "result": "success",
+ "time": 44,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only checks the configured directories",
+ "result": "success",
+ "time": 103,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_module_directories.test.js",
+ "totalTime": 525,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime internalModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "loads modules and applies transforms",
+ "result": "success",
+ "time": 170,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "loads internal modules without applying transforms",
+ "result": "success",
+ "time": 162,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "loads JSON modules and applies transforms",
+ "result": "success",
+ "time": 189,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "loads internal JSON modules without applying transforms",
+ "result": "success",
+ "time": 123,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_internal_module.test.js",
+ "totalTime": 727,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "check",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true if the arguments are valid",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if runInBand and maxWorkers are both specified",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if onlyChanged and watchAll are both specified",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if onlyFailures and watchAll are both specified",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception when lastCommit and watchAll are both specified",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if findRelatedTests is specified with no file paths",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if maxWorkers is specified with no number",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows maxWorkers to be a %",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows using \\"js\\" file for --config option",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows using \\"ts\\" file for --config option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows using \\"mjs\\" file for --config option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows using \\"cjs\\" file for --config option",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows using \\"json\\" file for --config option",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if selectProjects is not provided any project names",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if config is not a valid JSON string",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "raises an exception if config is not a supported file type",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "buildArgv",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return only camelcased args",
+ "result": "success",
+ "time": 14,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-cli/src/__tests__/cli/args.test.ts",
+ "totalTime": 345,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime jest.spyOn",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the original function",
+ "result": "success",
+ "time": 395,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime jest.spyOnProperty",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the original function",
+ "result": "success",
+ "time": 43,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js",
+ "totalTime": 521,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves no dependencies for non-existent path",
+ "result": "success",
+ "time": 72,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves dependencies for existing path",
+ "result": "success",
+ "time": 30,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the mocks of dependencies as dependencies",
+ "result": "success",
+ "time": 67,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves dependencies for scoped packages",
+ "result": "success",
+ "time": 41,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves no inverse dependencies for empty paths set",
+ "result": "success",
+ "time": 51,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves no inverse dependencies for set of non-existent paths",
+ "result": "success",
+ "time": 41,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves inverse dependencies for existing path",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves inverse dependencies of mock",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves inverse dependencies from available snapshot",
+ "result": "success",
+ "time": 47,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves dependencies correctly when dependency resolution fails",
+ "result": "success",
+ "time": 41,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves dependencies correctly when mock dependency resolution fails",
+ "result": "success",
+ "time": 27,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts",
+ "totalTime": 666,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should exclude jasmine from stack trace for Unix paths.",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".formatExecError()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formatStackTrace should strip node internals",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not exclude vendor from stack trace",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "retains message in babel code frame error",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "codeframe",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "no codeframe",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "no stack",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "formatStackTrace",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints code frame and stacktrace",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print code frame when noCodeFrame = true",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print codeframe when noStackTrace = true",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-message-util/src/__tests__/messages.test.ts",
+ "totalTime": 205,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "different types",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "'1' and 'a'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[object Object]' and 'a'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'' and '2'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'null' and 'undefined'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'() => {}' and '3'",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "no visual difference",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "'\\"a\\"' and '\\"a\\"'",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'{}' and '{}'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[]' and '[]'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'[1,2]' and '[1,2]'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'11' and '11'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'null' and 'null'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'null' and 'null'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'undefined' and 'undefined'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'null' and 'null'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'undefined' and 'undefined'",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'false' and 'false'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'{\\"a\\":1}' and '{\\"a\\":1}'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "'{\\"a\\":{\\"b\\":5}}' and '{\\"a\\":{\\"b\\":5}}'",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Map key order should be irrelevant",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Set value order should be irrelevant",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "oneline strings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "numbers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "-0 and 0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "booleans",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "collapses big diffs to patch format",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "falls back to not call toJSON if serialization has no differences",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "but then objects have differences",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "and then objects have no differences",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "falls back to not call toJSON if it throws",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "and then objects have differences",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "and then objects have no differences",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "multiline strings",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "objects",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "multiline string non-snapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "multiline string snapshot",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "React elements",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "multiline string as value of object property (non-snapshot)",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "multiline string as value of object property (snapshot)",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation in JavaScript structures from less to more",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation in JavaScript structures from more to less",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "color of text",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation in React elements (non-snapshot) from less to more",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation in React elements (non-snapshot) from more to less",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation in React elements (snapshot) from less to more",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "indentation in React elements (snapshot) from more to less",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "outer React element (non-snapshot) from less to more",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "outer React element (non-snapshot) from more to less",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "trailing newline in multiline string not enclosed in quotes from less to more",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "trailing newline in multiline string not enclosed in quotes from more to less",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "(unexpanded)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(expanded)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "context",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "number of lines: -1 (5 default)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number of lines: 0",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number of lines: 1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number of lines: 2",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number of lines: 3.1 (5 default)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number of lines: undefined (5 default)",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "diffLinesUnified edge cases",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "a empty string b empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a empty string b one line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a multiple lines b empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a one line b multiple lines",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "diffLinesUnified2 edge cases",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "a empty string b empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a empty string b one line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a multiple lines b empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a one line b multiple lines",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "diffLinesUnified2 edge cases lengths not equal",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "a",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "b",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "diffStringsUnified edge cases",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty both a and b",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty only a",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty only b",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "equal both non-empty",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiline has no common after clean up chaff",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "one-line has no common after clean up chaff",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options 7980",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diff",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options change indicators",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diff",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options change color",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "no diff",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options common",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diff",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "no diff",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options includeChangeCounts false",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffLinesUnified",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options includeChangeCounts true padding",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffLinesUnified a has 2 digits",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffLinesUnified b has 2 digits",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options omitAnnotationLines true",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diff",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified and includeChangeCounts true",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified empty strings",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options trailingSpaceFormatter",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffDefault default no color",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffDefault middle dot",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffDefault yellowish common",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "options emptyFirstOrLastLinePlaceholder default empty string",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffDefault",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diffStringsUnified",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-diff/src/__tests__/diff.test.ts",
+ "totalTime": 625,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Watch mode flows",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"T\\" enters pattern mode",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js",
+ "totalTime": 246,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toBeCalled",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails with any argument passed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not fails with any argument passed",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveBeenCalled",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails with any argument passed",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not fails with any argument passed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toBeCalledTimes",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only accepts a number argument",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not only accepts a number argument",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes if function called equal to expected times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function called more than expected times",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function called less than expected times",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveBeenCalledTimes",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only accepts a number argument",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not only accepts a number argument",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes if function called equal to expected times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function called more than expected times",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function called less than expected times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "lastCalledWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that don't match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with trailing undefined arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments that don't match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveBeenLastCalledWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with trailing undefined arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments that don't match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "nthCalledWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with trailing undefined arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with three calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not positive integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "negative throw matcher error for n that is not integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveBeenNthCalledWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with trailing undefined arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with three calls",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not positive integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "negative throw matcher error for n that is not integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toBeCalledWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with trailing undefined arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveBeenCalledWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with arguments that match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with trailing undefined arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with many arguments that don't match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toReturn",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not works only on jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw matcher error if received is spy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when undefined is returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when at least one call does not throw",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when not returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when all calls throw",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when a call throws undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails with any argument passed",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not fails with any argument passed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveReturned",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not works only on jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw matcher error if received is spy",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when undefined is returned",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes when at least one call does not throw",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when not returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when all calls throw",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes when a call throws undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails with any argument passed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not fails with any argument passed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toReturnTimes",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw matcher error if received is spy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only accepts a number argument",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not only accepts a number argument",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes if function returned equal to expected times",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls that return undefined are counted as returns",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function returned more than expected times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function called less than expected times",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls that throw are not counted",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls that throw undefined are not counted",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveReturnedTimes",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw matcher error if received is spy",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only accepts a number argument",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not only accepts a number argument",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes if function returned equal to expected times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls that return undefined are counted as returns",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function returned more than expected times",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": ".not passes if function called less than expected times",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls that throw are not counted",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls that throw undefined are not counted",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "lastReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects directly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects indirectly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws is not considered to have returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is not considered to have returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "lastReturnedWith lastReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with three calls",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveLastReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects directly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects indirectly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws is not considered to have returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is not considered to have returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveLastReturnedWith lastReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with three calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "nthReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects directly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects indirectly created",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws is not considered to have returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is not considered to have returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "nthReturnedWith nthReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with three calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should replace 1st, 2nd, 3rd with first, second, third",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not positive integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should reject nth value greater than number of calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "negative throw matcher error for n that is not number",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveNthReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects directly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects indirectly created",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws is not considered to have returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is not considered to have returned",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveNthReturnedWith nthReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with three calls",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should replace 1st, 2nd, 3rd with first, second, third",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not positive integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should reject nth value greater than number of calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "positive throw matcher error for n that is not integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "negative throw matcher error for n that is not number",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toReturnWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects directly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects indirectly created",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws is not considered to have returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is not considered to have returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toReturnWith returnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with more calls than the limit",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveReturnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works only on spies or jest.fn",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when not called",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with no arguments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does not match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with argument that does match",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects directly created",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with Immutable.js objects indirectly created",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws is not considered to have returned",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a call that throws undefined is not considered to have returned",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes the custom mock name in the error message",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toHaveReturnedWith returnedWith",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with more calls than the limit",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "incomplete recursive calls are handled properly",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/spyMatchers.test.ts",
+ "totalTime": 395,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "gets hg SCM roots and dedupes them",
+ "result": "success",
+ "time": 559,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "gets git SCM roots and dedupes them",
+ "result": "success",
+ "time": 416,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "gets mixed git and hg SCM roots and dedupes them",
+ "result": "success",
+ "time": 467,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "gets changed files for git",
+ "result": "success",
+ "time": 2298,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "monitors only root paths for git",
+ "result": "success",
+ "time": 151,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not find changes in files with no diff, for git",
+ "result": "success",
+ "time": 628,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles a bad revision for \\"changedSince\\", for git",
+ "result": "success",
+ "time": 878,
+ },
+ TestCaseResult {
+ "error": Object {
+ "line": 418,
+ "path": "e2e/__tests__/jestChangedFiles.test.ts",
+ "stackTrace": "Error: abort: empty revision range
+ at makeError (/home/dorny/dorny/jest/node_modules/execa/lib/error.js:59:11)
+ at handlePromise (/home/dorny/dorny/jest/node_modules/execa/index.js:114:26)
+ at runMicrotasks ()
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)
+ at Object.findChangedFiles (/home/dorny/dorny/jest/packages/jest-changed-files/build/hg.js:99:16)
+ at async Promise.all (index 0)
+ at getChangedFilesForRoots (/home/dorny/dorny/jest/packages/jest-changed-files/build/index.js:57:5)
+ at Object. (/home/dorny/dorny/jest/e2e/__tests__/jestChangedFiles.test.ts:418:28)
+ at _callCircusTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:218:5)
+ at _runTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:155:3)",
+ },
+ "name": "gets changed files for hg",
+ "result": "failed",
+ "time": 2219,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "monitors only root paths for hg",
+ "result": "success",
+ "time": 281,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles a bad revision for \\"changedSince\\", for hg",
+ "result": "success",
+ "time": 949,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jestChangedFiles.test.ts",
+ "totalTime": 9045,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "stringify()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "[]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1.5",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "null",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "\\"abc\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Symbol(abc)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "NaN",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Infinity",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "-Infinity",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "/ab\\\\.c/gi",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1n",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "0n",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "circular references",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "toJSON error",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "toJSON errors when comparing two objects",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reduces maxDepth if stringifying very large objects",
+ "result": "success",
+ "time": 96,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ensureNumbers()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "dont throw error when variables are numbers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when expected is not a number (backward compatibility)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when received is not a number (backward compatibility)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ensureNumbers() with options",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise empty isNot false received",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise empty isNot true expected",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise rejects isNot false expected",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise rejects isNot true received",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise resolves isNot false received",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "promise resolves isNot true expected",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ensureNoExpected()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "dont throw error when undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when expected is not undefined with matcherName",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error when expected is not undefined with matcherName and options",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "diff",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "forwards to jest-diff",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "two booleans",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "two numbers",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "two bigints",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "pluralize()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "one",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "two",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "20",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getLabelPrinter",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "0 args",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1 empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "1 non-empty string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "2 equal lengths",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "2 unequal lengths",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns incorrect padding if inconsistent arg is shorter",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if inconsistent arg is longer",
+ "result": "success",
+ "time": 26,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "matcherHint",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "expectedColor",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "receivedColor",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "secondArgumentColor",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-matcher-utils/src/__tests__/index.test.ts",
+ "totalTime": 391,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Watch mode flows",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"P\\" enters pattern mode",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Pressing \\"c\\" clears the filters",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js",
+ "totalTime": 165,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime createMockFromModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not cause side effects in the rest of the module system when generating a mock",
+ "result": "success",
+ "time": 408,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves mapped modules correctly",
+ "result": "success",
+ "time": 94,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates mock objects in the right environment",
+ "result": "success",
+ "time": 37,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js",
+ "totalTime": 606,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime requireModule",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "emulates a node stack trace during module load",
+ "result": "success",
+ "time": 398,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "emulates a node stack trace during function execution",
+ "result": "success",
+ "time": 70,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_environment.test.js",
+ "totalTime": 497,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "watchman crawler and node crawler both include dotfiles",
+ "result": "success",
+ "time": 77,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts",
+ "totalTime": 337,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "watchman watch",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns a list of all files when there are no clocks",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "updates file map and removedFiles when the clock is given",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets the file map and tracks removedFiles when watchman is fresh",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly resets the file map when only one watcher is reset",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not add directory filters to query when watching a ROOT",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SHA-1 requested and available",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "SHA-1 requested and NOT available",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "source control query",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js",
+ "totalTime": 153,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "FakeTimers construction",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs setTimeout mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "accepts to promisify setTimeout mock",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs clearTimeout mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs setInterval mock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs clearInterval mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks process.nextTick if it exists on global",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks setImmediate if it exists on global",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks clearImmediate if setImmediate is on global",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runAllTicks",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs all ticks, in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no ticks have been scheduled",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only runs a scheduled callback once",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cancels a callback even from native nextTick",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cancels a callback even from native setImmediate",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesnt run a tick callback if native nextTick already did",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesnt run immediate if native setImmediate already did",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "native doesnt run immediate if fake already did",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws before allowing infinite recursion",
+ "result": "success",
+ "time": 43,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runAllTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs all timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warns when trying to advance timers while real timers are used",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no timers have been scheduled",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only runs a setTimeout callback once (ever)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs callbacks with arguments after the interval",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesnt pass the callback to native setTimeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws before allowing infinite recursion",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "also clears ticks",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers advanceTimersByTime",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no timers have been scheduled",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws before allowing infinite recursion",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers advanceTimersToNextTimer",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run correct amount of steps",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "setTimeout inside setTimeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no timers have been scheduled",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers reset",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all pending setTimeouts",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all pending setIntervals",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all pending ticks callbacks & immediates",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets current advanceTimersByTime time cursor",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runOnlyPendingTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs all timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not run timers that were cleared in another timer",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runWithRealTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "executes callback with native timers",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock timers after executing callback",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock timer functions even if callback throws",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers useRealTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets native timer APIs",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets native process.nextTick when present",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets native setImmediate when present",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers useFakeTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock timer APIs",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock process.nextTick when present",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock setImmediate when present",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers getTimerCount",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the correct count",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes immediates and ticks",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "not includes cancelled immediates",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts",
+ "totalTime": 302,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime jest.fn",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates mock functions",
+ "result": "success",
+ "time": 330,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates mock functions with mock implementations",
+ "result": "success",
+ "time": 31,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime jest.isMockFunction",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "recognizes a mocked function",
+ "result": "success",
+ "time": 35,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Runtime jest.clearAllMocks",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "clears all mocks",
+ "result": "success",
+ "time": 29,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_jest_fn.js",
+ "totalTime": 479,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toStrictEqual",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be reflexive",
+ "result": "success",
+ "time": 44,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be symmetric",
+ "result": "success",
+ "time": 92,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "toStrictEqual on node >=9",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be equivalent to Node deepStrictEqual",
+ "result": "success",
+ "time": 113,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts",
+ "totalTime": 394,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be reflexive",
+ "result": "success",
+ "time": 45,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should find the same number of common items when switching the inputs",
+ "result": "success",
+ "time": 29,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should have at most the length of its inputs",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should have at most the same number of each character as its inputs",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be a subsequence of its inputs",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be no-op when passing common items",
+ "result": "success",
+ "time": 30,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should find the exact common items when one array is subarray of the other",
+ "result": "success",
+ "time": 22,
+ },
+ ],
+ },
+ ],
+ "name": "packages/diff-sequences/src/__tests__/index.property.test.ts",
+ "totalTime": 357,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "FakeTimers construction",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs setTimeout mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs clearTimeout mock",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs setInterval mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "installs clearInterval mock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks process.nextTick if it exists on global",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks setImmediate if it exists on global",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks clearImmediate if setImmediate is on global",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runAllTicks",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs all ticks, in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no ticks have been scheduled",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only runs a scheduled callback once",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws before allowing infinite recursion",
+ "result": "success",
+ "time": 25,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runAllTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs all timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "warns when trying to advance timers while real timers are used",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no timers have been scheduled",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only runs a setTimeout callback once (ever)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs callbacks with arguments after the interval",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't pass the callback to native setTimeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws before allowing infinite recursion",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "also clears ticks",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers advanceTimersByTime",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no timers have been scheduled",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers advanceTimersToNextTimer",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs timers in order",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run correct amount of steps",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "setTimeout inside setTimeout",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing when no timers have been scheduled",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers reset",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all pending setTimeouts",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all pending setIntervals",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets all pending ticks callbacks",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets current advanceTimersByTime time cursor",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers runOnlyPendingTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs all timers in order",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not run timers that were cleared in another timer",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers useRealTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets native timer APIs",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets native process.nextTick when present",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets native setImmediate when present",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers useFakeTimers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock timer APIs",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock process.nextTick when present",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resets mock setImmediate when present",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FakeTimers getTimerCount",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the correct count",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes immediates and ticks",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "not includes cancelled immediates",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts",
+ "totalTime": 317,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toContain",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should always find the value when inside the array",
+ "result": "success",
+ "time": 122,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not find the value if it has been cloned into the array",
+ "result": "success",
+ "time": 56,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/matchers-toContain.property.test.ts",
+ "totalTime": 236,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime wrapCodeInModuleWrapper",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates the correct args for the module wrapper",
+ "result": "success",
+ "time": 194,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "injects \\"extra globals\\"",
+ "result": "success",
+ "time": 43,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_wrap.js",
+ "totalTime": 263,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "toContainEqual",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should always find the value when inside the array",
+ "result": "success",
+ "time": 91,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should always find the value when cloned inside the array",
+ "result": "success",
+ "time": 52,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts",
+ "totalTime": 287,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "invalid arg length",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is not a number",
+ "result": "success",
+ "time": 40,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Infinity is not a safe integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Not a Number is not a safe integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MAX_SAFE_INTEGER + 1 is not a safe integer",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MIN_SAFE_INTEGER - 1 is not a safe integer",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is a negative integer",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "invalid arg callback",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "null is not a function",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined is not a function",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "input callback encapsulates comparison zero and negative zero",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "are not common according to Object.is method",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "are common according to === operator",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "input callback encapsulates comparison Not a Number",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is common according to Object.is method",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is not common according to === operator",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "input callback encapsulates sequences",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "arrays of strings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "string and array of strings",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "strings",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "no common items negative zero is equivalent to zero for length",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "of a",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "of b",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "of a and b",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "no common items",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "a empty and b empty",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a empty and b non-empty",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a non-empty and b empty",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "no common items a non-empty and b non-empty",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "baDeltaLength 0 even",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "baDeltaLength 1 odd",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "baDeltaLength 2 even",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "baDeltaLength 7 odd",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "only common items",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "length 1",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "length 2",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "all common items outside",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "preceding changes",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "following change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "preceding and following changes in one sequence",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "some common items inside and outside",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "preceding changes adjacent to common in both sequences",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "following changes adjacent to common in both sequences",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "all common items inside non-recursive",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "move from start to end relative to change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "move from start to end relative to common",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "move from start to end relative to change and common",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reverse relative to change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "preceding middle",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "following middle",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "all common items inside recursive",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prev reverse at depth 1 and preceding at depth 2",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "last forward at depth 1 and following at depth 2",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "preceding at depth 2 and both at depth 3 of following",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "interleaved single change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "interleaved double changes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "optimization decreases iMaxF",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "optimization decreases iMaxR",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "common substrings",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "progress",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "regression",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "wrapping",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/diff-sequences/src/__tests__/index.test.ts",
+ "totalTime": 195,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": ".getType()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "null",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "number",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "string",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "function",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "boolean",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "symbol",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "regexp",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "date",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "bigint",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-get-type/src/__tests__/getType.test.ts",
+ "totalTime": 45,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "init project with package.json and no jest config all questions answered with answer: \\"No\\"",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the default configuration (an empty config)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should generate empty config with mjs extension",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init project with package.json and no jest config some questions answered with answer: \\"Yes\\"",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create configuration for {clearMocks: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create configuration for {coverage: true}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create configuration for {coverageProvider: \\"babel\\"}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create configuration for {coverageProvider: \\"v8\\"}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create configuration for {environment: \\"jsdom\\"}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create configuration for {environment: \\"node\\"}",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create package.json with configured test command when {scripts: true}",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init no package json",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should throw an error if there is no package.json file",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init has-jest-config-file-js ask the user whether to override config or not",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"Yes\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"No\\"",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init has-jest-config-file-ts ask the user whether to override config or not",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"Yes\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"No\\"",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init has-jest-config-file-mjs ask the user whether to override config or not",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"Yes\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"No\\"",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init has-jest-config-file-cjs ask the user whether to override config or not",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"Yes\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"No\\"",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init has-jest-config-file-json ask the user whether to override config or not",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"Yes\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"No\\"",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init project using jest.config.ts ask the user whether he wants to use Typescript or not",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"Yes\\"",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "user answered with \\"No\\"",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init has jest config in package.json",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should ask the user whether to override config or not",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "init already has \\"jest\\" in packageJson.scripts.test",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not ask \\"test script question\\"",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-cli/src/init/__tests__/init.test.js",
+ "totalTime": 119,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime requireModule with no extension",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error pointing out file with extension",
+ "result": "success",
+ "time": 204,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js",
+ "totalTime": 261,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the same value for primitive or function values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not execute getters/setters, but copies them",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "copies symbols",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "copies arrays as array objects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles cyclic dependencies",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses the blacklist to avoid copying properties on the first level",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not keep the prototype by default when top level is object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not keep the prototype by default when top level is array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not keep the prototype of arrays when keepPrototype = false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "keeps the prototype of arrays when keepPrototype = true",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not keep the prototype for objects when keepPrototype = false",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "keeps the prototype for objects when keepPrototype = true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/deepCyclicCopy.test.ts",
+ "totalTime": 86,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with jest.config.js",
+ "result": "success",
+ "time": 94,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/version.test.ts",
+ "totalTime": 138,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "creates a process object that looks like the original one",
+ "result": "success",
+ "time": 32,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fakes require(\\"process\\") so it is equal to \\"global.process\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "checks that process.env works as expected on Linux platforms",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "checks that process.env works as expected in Windows platforms",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/createProcessObject.test.ts",
+ "totalTime": 81,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "instruments files",
+ "result": "success",
+ "time": 239,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/instrumentation.test.ts",
+ "totalTime": 275,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "runJest",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "when watch is set then exit process",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "when watch is set then an error message is printed",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/runJest.test.js",
+ "totalTime": 261,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Replaceable constructor",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "init with object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "init with array",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "init with Map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "init with other type should throw error",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Replaceable get",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "get object item",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "get array item",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "get Map item",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Replaceable set",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "set object item",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "set array item",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "set Map item",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Replaceable forEach",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "object forEach",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "array forEach",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "map forEach",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "forEach should ignore nonenumerable property",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Replaceable isReplaceable",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true if two object types equal and support",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return false if two object types not equal",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return false if object types not support",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts",
+ "totalTime": 111,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to milliseconds",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats seconds properly",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats milliseconds properly",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats microseconds properly",
+ "result": "success",
+ "time": 30,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats nanoseconds properly",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "interprets lower than lowest powers as nanoseconds",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "interprets higher than highest powers as seconds",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "interprets non-multiple-of-3 powers as next higher prefix",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats the quantity properly when pad length is lower",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats the quantity properly when pad length is equal",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "left pads the quantity properly when pad length is higher",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/formatTime.test.ts",
+ "totalTime": 82,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Jest Worker Process Integration",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls a single method from the worker",
+ "result": "success",
+ "time": 25,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "distributes sequential calls across child processes",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "schedules the task on the first available child processes if the scheduling policy is in-order",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "schedules the task on the first available child processes",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "distributes concurrent calls across child processes",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sticks parallel calls to children",
+ "result": "success",
+ "time": 15,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/thread-integration.test.js",
+ "totalTime": 114,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "worker",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses JavaScript files and extracts module information",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "accepts a custom dependency extractor",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "delegates to hasteImplModulePath for getting the id",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses package.json files as haste packages",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns an error when a file cannot be accessed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "simply computes SHA-1s when requested (works well with binary data)",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "avoids computing dependencies if not requested and Haste does not need it",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/__tests__/worker.test.js",
+ "totalTime": 100,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "printDiffOrStringify",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected is empty and received is single line",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected is multi line and received is empty",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected and received are single line with multiple changes",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected and received are multi line with trailing spaces",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has no common after clean up chaff multiline",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has no common after clean up chaff one-line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object contain readonly symbol key object",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printDiffOrStringify MAX_DIFF_STRING_LENGTH",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "both are less",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected is more",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "received is more",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "printDiffOrStringify asymmetricMatcher",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "minimal test",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jest asymmetricMatcher",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "custom asymmetricMatcher",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "nested object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object in array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "circular object",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "transitive circular",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "circular array",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "circular map",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts",
+ "totalTime": 114,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getPath()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "property exists",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "property doesnt exist",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "property exist but undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "property is a getter on class instance",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "property is inherited",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "path breaks",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty object at the end",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getObjectSubset",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect(getObjectSubset({\\"a\\": \\"b\\", \\"c\\": \\"d\\"}, {\\"a\\": \\"d\\"})).toEqual({\\"a\\": \\"b\\"})",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect(getObjectSubset({\\"a\\": [1, 2], \\"b\\": \\"b\\"}, {\\"a\\": [3, 4]})).toEqual({\\"a\\": [1, 2]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect(getObjectSubset([{\\"a\\": \\"b\\", \\"c\\": \\"d\\"}], [{\\"a\\": \\"z\\"}])).toEqual([{\\"a\\": \\"b\\"}])",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect(getObjectSubset([1, 2], [1, 2, 3])).toEqual([1, 2])",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect(getObjectSubset({\\"a\\": [1]}, {\\"a\\": [1, 2]})).toEqual({\\"a\\": [1]})",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expect(getObjectSubset(2015-11-30T00:00:00.000Z, 2016-12-30T00:00:00.000Z)).toEqual(2015-11-30T00:00:00.000Z)",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getObjectSubset returns the object instance if the subset has no extra properties",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Date",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getObjectSubset returns the subset instance if its property values are equal",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Object",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getObjectSubset returns the subset instance if its property values are equal Uint8Array",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "expected",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "received",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getObjectSubset calculating subsets of objects with circular references",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "simple circular references",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "transitive circular references",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "emptyObject()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "matches an empty object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not match an object with keys",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not match a non-object",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "subsetEquality()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "matching object returns true",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "object without keys is undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "objects to not match",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "null does not return errors",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined does not return errors",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "subsetEquality() matching subsets with circular references",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "simple circular references",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "referenced object on same level should not regarded as circular reference",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "transitive circular references",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "iterableEquality",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given circular iterators",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given circular Set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given nested Sets",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given inequal set within a set",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given inequal map within a set",
+ "result": "success",
+ "time": 5,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given inequal set within a map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given circular Set shape",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given circular key in Map",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given nested Maps",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given circular key and value in Map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given circular value in Map",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/utils.test.ts",
+ "totalTime": 147,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the same value for primitive or function values",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "convert accessor descriptor into value descriptor",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shuold not skips non-enumerables",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "copies symbols",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "copies arrays as array objects",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles cyclic dependencies",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Copy Map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Copy cyclic Map",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "return same value for built-in object type except array, map and object",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should copy object symbol key property",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should set writable, configurable to true",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts",
+ "totalTime": 49,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "isError",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not assume objects are errors",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should detect simple error instances",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should detect errors from another context",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should detect DOMException errors from another context",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/isError.test.ts",
+ "totalTime": 43,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": ".isPrimitive()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: null",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: 100",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: hello world",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: true",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: Symbol(a)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: 0",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: NaN",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: Infinity",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns true when given primitive value of: 1n",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: {}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: []",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: {}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: {}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: {}",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: \\"2021-01-24T19:22:19.272Z\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns false when given non primitive value of: {}",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-get-type/src/__tests__/isPrimitive.test.ts",
+ "totalTime": 36,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "node crawler",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "crawls for files based on patterns",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "updates only changed files",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns removed files",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node fs APIs with incompatible find binary",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node fs APIs without find binary",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node fs APIs if \\"forceNodeFilesystemAPI\\" is set to true, regardless of platform",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "completes with empty roots",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "completes with fs.readdir throwing an error",
+ "result": "success",
+ "time": 11,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "node crawler readdir withFileTypes support",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls lstat for directories and symlinks if readdir withFileTypes is not supported",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "avoids calling lstat for directories and symlinks if readdir withFileTypes is supported",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/crawlers/__tests__/node.test.js",
+ "totalTime": 170,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "run for \\"onlyChanged\\" and \\"changedSince\\"",
+ "result": "success",
+ "time": 1464,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run only changed files",
+ "result": "success",
+ "time": 5196,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "report test coverage for only changed files",
+ "result": "success",
+ "time": 1889,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "report test coverage of source on test file change under only changed files",
+ "result": "success",
+ "time": 822,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "do not pickup non-tested files when reporting coverage on only changed files",
+ "result": "success",
+ "time": 861,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "collect test coverage when using onlyChanged",
+ "result": "success",
+ "time": 1058,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "onlyChanged in config is overwritten by --all or testPathPattern",
+ "result": "success",
+ "time": 7023,
+ },
+ TestCaseResult {
+ "error": Object {
+ "line": 360,
+ "path": "e2e/__tests__/onlyChanged.test.ts",
+ "stackTrace": "Error: expect(received).toMatch(expected)
-| Result | Test | Time |
-| :---: | :--- | ---: |
-| ❌ | Timeout test | 4ms |
-| ✖️ | Skipped test | 0ms |
-",
- "title": "jest tests ❌",
+Expected pattern: /PASS __tests__(\\\\/|\\\\\\\\)file2.test.js/
+Received string: \\"·
+ ● Test suite failed to run·
+ abort: empty revision range
+\\"
+ at Object.toMatch (/home/dorny/dorny/jest/e2e/__tests__/onlyChanged.test.ts:360:18)
+ at Promise.then.completed (/home/dorny/dorny/jest/packages/jest-circus/build/utils.js:307:28)
+ at new Promise ()
+ at callAsyncCircusFn (/home/dorny/dorny/jest/packages/jest-circus/build/utils.js:229:10)
+ at _callCircusTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:218:40)
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)
+ at _runTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:155:3)
+ at _runTestsForDescribeBlock (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:66:9)
+ at run (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:25:3)
+ at runAndTransformResultsToJestFormat (/home/dorny/dorny/jest/packages/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:163:21)",
+ },
+ "name": "gets changed files for hg",
+ "result": "failed",
+ "time": 3765,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "path on Windows is case-insensitive",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/onlyChanged.test.ts",
+ "totalTime": 22281,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "joinAlignedDiffsExpand",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "first line is empty common",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "joinAlignedDiffsNoExpand",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "patch 0 with context 1 and change at start and end",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "patch 0 with context 5 and first line is empty common",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "patch 1 with context 4 and last line is empty common",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "patch 2 with context 3",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "patch 3 with context 2 and omit excess common at start",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts",
+ "totalTime": 44,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "SnapshotInteractiveMode",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is inactive at construction",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "call to run process the first file",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "call to abort",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "call to reset",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "press Q or ESC triggers an abort",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "press ENTER trigger a run",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "skip 1 test, then restart",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "skip 1 test, then quit",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "update 1 test, then finish and return",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "skip 2 tests, then finish and restart",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "update 2 tests, then finish and return",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "update 1 test, skip 1 test, then finish and restart",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "skip 1 test, update 1 test, then finish and restart",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js",
+ "totalTime": 89,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime statics",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runtime.createHasteMap passes correct ignore files to HasteMap",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Runtime.createHasteMap passes correct ignore files to HasteMap in watch mode",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-runtime/src/__tests__/Runtime-statics.test.js",
+ "totalTime": 162,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getAlignedDiffs lines",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "change preceding and following common",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "common preceding and following change",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "common at end when both current change lines are empty",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "common between delete and insert",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "common between insert and delete",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getAlignedDiffs newline",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "delete only",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "insert only",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "delete with adjacent change",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "insert with adjacent changes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "change from space",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "change to space",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getAlignedDiffs substrings first",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "common when both current change lines are empty",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "common when either current change line is non-empty",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "delete completes the current line",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "insert completes the current line",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getAlignedDiffs substrings middle",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is empty in delete between common",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is empty in insert at start",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is non-empty in delete at end",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is non-empty in insert between common",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getAlignedDiffs substrings last",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is empty in delete at end",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is empty in insert at end",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is non-empty in common not at end",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "getAlignedDiffs strings",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "change at start and delete or insert at end",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "delete or insert at start and change at end",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts",
+ "totalTime": 72,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": ".assertions()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "redeclares different assertion count",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "expects no assertions",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": ".hasAssertions()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not throw if there is an assertion",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if expected is not undefined",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "hasAssertions not leaking to global state",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/assertionCounts.test.ts",
+ "totalTime": 60,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getPlatformExtension",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should get platform ext",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js",
+ "totalTime": 35,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "isRegExpSupported",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return true when passing valid regular expression",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return false when passing an invalid regular expression",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js",
+ "totalTime": 31,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "stack trace points to correct location when using matchers",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stack trace points to correct location when using nested matchers",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "stack trace points to correct location when throwing from a custom matcher",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/stacktrace.test.ts",
+ "totalTime": 69,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Jest Worker Integration",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls a single method from the worker",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "distributes sequential calls across child processes",
+ "result": "success",
+ "time": 3,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "schedules the task on the first available child processes if the scheduling policy is in-order",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "distributes concurrent calls across child processes",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "sticks parallel calls to children",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/process-integration.test.js",
+ "totalTime": 62,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "is valid when it is a file inside roots",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is not valid when it is a snapshot file",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "is not valid when it is a file in the coverage dir",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/lib/__tests__/isValidPath.test.ts",
+ "totalTime": 166,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ErrorWithStack",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls Error.captureStackTrace with given callsite when capture exists",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/errorWithStack.test.ts",
+ "totalTime": 41,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns true when running on interactive environment",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Returns false when running on a non-interactive environment",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/isInteractive.test.ts",
+ "totalTime": 35,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "diffStringsRaw",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "one-line with cleanup",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "one-line without cleanup",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-diff/src/__tests__/diffStringsRaw.test.ts",
+ "totalTime": 55,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works like micromatch with only positive globs",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works like micromatch with a mix of overlapping positive and negative globs",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works like micromatch with only negative globs",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works like micromatch with empty globs",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/globsToMatcher.test.ts",
+ "totalTime": 56,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return true for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return true for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return false for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return false for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return false for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return true for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return false for runInBand mode",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return true for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return true for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return false for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return false for runInBand mode",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shouldRunInBand() - should return true for runInBand mode",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/testSchedulerHelper.test.js",
+ "totalTime": 48,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns the passed object",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "turns a V8 global object into a Node global object",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/installCommonGlobals.test.ts",
+ "totalTime": 68,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getMockName",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "extracts mock name from file path",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/__tests__/get_mock_name.test.js",
+ "totalTime": 22,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "WorkerPool",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create a ChildProcessWorker and send to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create a NodeThreadWorker and send to it",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should avoid NodeThreadWorker if not passed enableWorkerThreads",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-worker/src/__tests__/WorkerPool.test.js",
+ "totalTime": 51,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "dependencyExtractor",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not extract dependencies inside comments",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not extract dependencies inside comments (windows line endings)",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not extract dependencies inside comments (unicode line endings)",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`import\` statements",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from side-effect only \`import\` statements",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not extract dependencies from \`import type/typeof\` statements",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`export\` statements",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`export-from\` statements",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not extract dependencies from \`export type/typeof\` statements",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from dynamic \`import\` calls",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`require\` calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`jest.requireActual\` calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`jest.requireMock\` calls",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`jest.genMockFromModule\` calls",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should extract dependencies from \`jest.createMockFromModule\` calls",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js",
+ "totalTime": 56,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "normalizePathSep",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does nothing on posix",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "replace slashes on windows",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js",
+ "totalTime": 35,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "fastPath.relative",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should get relative paths inside the root",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should get relative paths outside the root",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should get relative paths outside the root when start with same word",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "fastPath.resolve",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should get the absolute path for paths inside the root",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should get the absolute path for paths outside the root",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-haste-map/src/lib/__tests__/fast_path.test.js",
+ "totalTime": 29,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "FailedTestsCache",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should filter tests",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/FailedTestsCache.test.js",
+ "totalTime": 25,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "getNoTestsFoundMessage",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns correct message when monitoring only failures",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns correct message when monitoring only changed",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns correct message with verbose option",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns correct message without options",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns correct message with passWithNoTests",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js",
+ "totalTime": 61,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Common globals",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "check process",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/__tests__/globals.test.ts",
+ "totalTime": 22,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints the jest version",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints the test framework name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints the config object",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts",
+ "totalTime": 48,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "not a Promise: ",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "null",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "true",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "42",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "\\"1337\\"",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Symbol()",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "[]",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "{}",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "a resolved Promise",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "a rejected Promise",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-util/src/__tests__/isPromise.test.ts",
+ "totalTime": 30,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should remove jest config if exists",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should add test script when there are no scripts",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should add test script when there are scripts",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not add test script when { shouldModifyScripts: false }",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts",
+ "totalTime": 30,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Symbol in objects",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should compare objects with Symbol keys",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should compare objects with mixed keys and Symbol",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should compare objects with different Symbol keys",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "packages/expect/src/__tests__/symbolInObjects.test.ts",
+ "totalTime": 33,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "stub",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/test-in-root/test.js",
+ "totalTime": 37,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "stub",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/test-in-root/spec.js",
+ "totalTime": 19,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "dummy-test",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/v8-coverage/empty-sourcemap/test.ts",
+ "totalTime": 31,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should copy dom element",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should copy complex element",
+ "result": "success",
+ "time": 3,
+ },
+ ],
+ },
+ ],
+ "name": "packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts",
+ "totalTime": 48,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "on node ^12.16.0 || >=13.7.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs TS test with native ESM",
+ "result": "success",
+ "time": 923,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/nativeEsmTypescript.test.ts",
+ "totalTime": 956,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "maps code coverage against original source",
+ "result": "success",
+ "time": 12660,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/coverageRemapping.test.ts",
+ "totalTime": 12701,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalTeardown is triggered once after all test suites",
+ "result": "success",
+ "time": 2025.9999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jest throws an error when globalTeardown does not export a function",
+ "result": "success",
+ "time": 1144,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalTeardown function gets jest config object as a parameter",
+ "result": "success",
+ "time": 959,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should call globalTeardown function of multiple projects",
+ "result": "success",
+ "time": 1711,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not call a globalTeardown of a project if there are no tests to run from this project",
+ "result": "success",
+ "time": 882,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalTeardown works with default export",
+ "result": "success",
+ "time": 1045,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalTeardown throws with named export",
+ "result": "success",
+ "time": 1041,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/globalTeardown.test.ts",
+ "totalTime": 11886,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "--listTests doesn't duplicate the test files",
+ "result": "success",
+ "time": 445,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can pass projects or global config",
+ "result": "success",
+ "time": 3379,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "\\"No tests found\\" message for projects",
+ "result": "success",
+ "time": 977,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows a single non-root project",
+ "result": "success",
+ "time": 1215,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows a single non-root project",
+ "result": "success",
+ "time": 751,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly runs a single non-root project",
+ "result": "success",
+ "time": 805,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly runs a single non-root project",
+ "result": "success",
+ "time": 839,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "projects can be workspaces with non-JS/JSON files",
+ "result": "success",
+ "time": 1371,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "objects in project configuration",
+ "result": "success",
+ "time": 869,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows a single project",
+ "result": "success",
+ "time": 822,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolves projects and their properly",
+ "result": "success",
+ "time": 1938,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Does transform files with the corresponding project transformer",
+ "result": "success",
+ "time": 737,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "doesn't bleed module file extensions resolution with multiple workers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "external config files",
+ "result": "success",
+ "time": 1025,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "inline config files",
+ "result": "success",
+ "time": 1101,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/multiProjectRunner.test.ts",
+ "totalTime": 16360,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "basic support",
+ "result": "success",
+ "time": 3007,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error thrown before snapshot",
+ "result": "success",
+ "time": 2377,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "first snapshot fails, second passes",
+ "result": "success",
+ "time": 1373,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not mark snapshots as obsolete in skipped tests",
+ "result": "success",
+ "time": 1244,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "accepts custom snapshot name",
+ "result": "success",
+ "time": 821,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles property matchers",
+ "result": "success",
+ "time": 1917,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles invalid property matchers",
+ "result": "success",
+ "time": 1906,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles property matchers with hint",
+ "result": "success",
+ "time": 1752,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles property matchers with deep properties",
+ "result": "success",
+ "time": 2528,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toMatchSnapshot.test.ts",
+ "totalTime": 17025,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints message about flag on slow tests",
+ "result": "success",
+ "time": 1993,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints message about flag on forceExit",
+ "result": "success",
+ "time": 678,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints out info about open handlers",
+ "result": "success",
+ "time": 868,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not report promises",
+ "result": "success",
+ "time": 728,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints out info about open handlers from inside tests",
+ "result": "success",
+ "time": 903,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "on node >=11.10.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not report ELD histograms",
+ "result": "success",
+ "time": 729,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "notify",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not report --notify flag",
+ "result": "success",
+ "time": 789,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "on node >=11",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not report timeouts using unref",
+ "result": "success",
+ "time": 763,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/detectOpenHandles.ts",
+ "totalTime": 7528,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "not throwing Error objects",
+ "result": "success",
+ "time": 4615,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with node assert",
+ "result": "success",
+ "time": 854,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with assertions in separate files",
+ "result": "success",
+ "time": 765,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with async failures",
+ "result": "success",
+ "time": 983,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with snapshot failures",
+ "result": "success",
+ "time": 782,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with snapshot failures with hint",
+ "result": "success",
+ "time": 784,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "errors after test has completed",
+ "result": "success",
+ "time": 782,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/failures.test.ts",
+ "totalTime": 10353,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "console printing",
+ "result": "success",
+ "time": 755,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "console printing with --verbose",
+ "result": "success",
+ "time": 943,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print to console with --silent",
+ "result": "success",
+ "time": 855,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "respects --noStackTrace",
+ "result": "success",
+ "time": 974,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "respects noStackTrace in config",
+ "result": "success",
+ "time": 1008,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "the jsdom console is the same as the test console",
+ "result": "success",
+ "time": 1429,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not error out when using winston",
+ "result": "success",
+ "time": 2049,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/console.test.ts",
+ "totalTime": 8071.999999999999,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "basic test constructs",
+ "result": "success",
+ "time": 762,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "interleaved describe and test children order",
+ "result": "success",
+ "time": 704,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "skips",
+ "result": "success",
+ "time": 685,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only",
+ "result": "success",
+ "time": 827,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot have describe with no implementation",
+ "result": "success",
+ "time": 682,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot test with no implementation",
+ "result": "success",
+ "time": 701,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "skips with expand arg",
+ "result": "success",
+ "time": 683,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "only with expand arg",
+ "result": "success",
+ "time": 701,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot test with no implementation with expand arg",
+ "result": "success",
+ "time": 663,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "function as descriptor",
+ "result": "success",
+ "time": 752,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/globals.test.ts",
+ "totalTime": 7505,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits with 1 if coverage threshold is not met",
+ "result": "success",
+ "time": 963,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits with 1 if path threshold group is not found in coverage data",
+ "result": "success",
+ "time": 962,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits with 0 if global threshold group is not found in coverage data",
+ "result": "success",
+ "time": 847,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "excludes tests matched by path threshold groups from global group",
+ "result": "success",
+ "time": 1174,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "file is matched by all path and glob threshold groups",
+ "result": "success",
+ "time": 836,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/coverageThreshold.test.ts",
+ "totalTime": 4868,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a message with path pattern at the end",
+ "result": "success",
+ "time": 3030,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testPathPatternReporterMessage.test.ts",
+ "totalTime": 3076,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Dynamic test filtering",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses the default JSON option",
+ "result": "success",
+ "time": 1044,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses the CLI option",
+ "result": "success",
+ "time": 786,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ignores the filter if requested to do so",
+ "result": "success",
+ "time": 880,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when you return clowny stuff",
+ "result": "success",
+ "time": 361,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "will call setup on filter before filtering",
+ "result": "success",
+ "time": 1544,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "will print error when filter throws",
+ "result": "success",
+ "time": 369,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "will return no results when setup hook throws",
+ "result": "success",
+ "time": 354,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/filter.test.ts",
+ "totalTime": 5422,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Given a config with two named projects, first-project and second-project when Jest is started with \`--selectProjects first-project\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs the tests in the first project only",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that only first-project will run",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two named projects, first-project and second-project when Jest is started with \`--selectProjects second-project\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs the tests in the second project only",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that only second-project will run",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two named projects, first-project and second-project when Jest is started with \`--selectProjects first-project second-project\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs the tests in the first and second projects",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that both first-project and second-project will run",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two named projects, first-project and second-project when Jest is started without providing \`--selectProjects\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs the tests in the first and second projects",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print which projects are run",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two named projects, first-project and second-project when Jest is started with \`--selectProjects third-project\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that no project was found",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two projects, first-project and an unnamed project when Jest is started with \`--selectProjects first-project\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs the tests in the first project only",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that a project does not have a name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that only first-project will run",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two projects, first-project and an unnamed project when Jest is started without providing \`--selectProjects\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs the tests in the first and second projects",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print that a project has no name",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Given a config with two projects, first-project and an unnamed project when Jest is started with \`--selectProjects third-project\`",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that a project does not have a name",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints that no project was found",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/selectProjects.test.ts",
+ "totalTime": 5236,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite without mock name, mock called",
+ "result": "success",
+ "time": 872,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite without mock name, mock not called",
+ "result": "success",
+ "time": 864,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with mock name, expect mock not called",
+ "result": "success",
+ "time": 755,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with mock name, mock called, expect fail",
+ "result": "success",
+ "time": 721,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with mock name, mock called 5 times",
+ "result": "success",
+ "time": 766,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with mock name, mock not called 5 times, expect fail",
+ "result": "success",
+ "time": 948,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with mock name, mock called",
+ "result": "success",
+ "time": 848,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with mock name, mock not called",
+ "result": "success",
+ "time": 948,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/mockNames.test.ts",
+ "totalTime": 6771,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Stack Trace",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a stack trace for runtime errors",
+ "result": "success",
+ "time": 958,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print a stack trace for runtime errors when --noStackTrace is given",
+ "result": "success",
+ "time": 606,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a stack trace for matching errors",
+ "result": "success",
+ "time": 714,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print a stack trace for matching errors when --noStackTrace is given",
+ "result": "success",
+ "time": 599,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a stack trace for errors",
+ "result": "success",
+ "time": 643,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a stack trace for errors without message in stack trace",
+ "result": "success",
+ "time": 602,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not print a stack trace for errors when --noStackTrace is given",
+ "result": "success",
+ "time": 520,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/stackTrace.test.ts",
+ "totalTime": 4725,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with passing tests",
+ "result": "success",
+ "time": 882,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows error message when not enough arguments are supplied to tests",
+ "result": "success",
+ "time": 597,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows the correct errors in stderr when failing tests",
+ "result": "success",
+ "time": 769,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows only the tests with .only as being ran",
+ "result": "success",
+ "time": 653,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows only the tests without .skip as being ran",
+ "result": "success",
+ "time": 612,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs only the describe.only.each tests",
+ "result": "success",
+ "time": 562,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "formats args with pretty format when given %p",
+ "result": "success",
+ "time": 580,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/each.test.ts",
+ "totalTime": 4721,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works fine when function throws error",
+ "result": "success",
+ "time": 1138,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "updates existing snapshot",
+ "result": "success",
+ "time": 844,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot be used with .not",
+ "result": "success",
+ "time": 680,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should support rejecting promises",
+ "result": "success",
+ "time": 808,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts",
+ "totalTime": 3562,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not re-run tests when only access time is modified",
+ "result": "success",
+ "time": 4313,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/watchModeNoAccess.test.ts",
+ "totalTime": 4370,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "successfully runs the tests inside \`pnp/\`",
+ "result": "success",
+ "time": 2547,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/pnp.test.ts",
+ "totalTime": 2715,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "errors if describe returns a Promise",
+ "result": "success",
+ "time": 781,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "errors if describe returns something",
+ "result": "success",
+ "time": 709,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "errors if describe throws",
+ "result": "success",
+ "time": 778,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/declarationErrors.test.ts",
+ "totalTime": 2389,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Wrong globals for environment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "print useful error for window",
+ "result": "success",
+ "time": 736,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print useful error for document",
+ "result": "success",
+ "time": 533,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print useful error for navigator",
+ "result": "success",
+ "time": 606,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print useful error for unref",
+ "result": "success",
+ "time": 1301,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print useful error when it explodes during evaluation",
+ "result": "success",
+ "time": 659,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/wrongEnv.test.ts",
+ "totalTime": 3877,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "setupFilesAfterEnv",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "requires multiple setup files before each file in the suite",
+ "result": "success",
+ "time": 1063,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "requires setup files *after* the test runners are required",
+ "result": "success",
+ "time": 800,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/setupFilesAfterEnvConfig.test.ts",
+ "totalTime": 1967,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "No tests are found",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails the test suite in standard situation",
+ "result": "success",
+ "time": 488,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't fail the test suite if --passWithNoTests passed",
+ "result": "success",
+ "time": 518,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't fail the test suite if using --lastCommit",
+ "result": "success",
+ "time": 608,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't fail the test suite if using --onlyChanged",
+ "result": "success",
+ "time": 565,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't fail the test suite if using --findRelatedTests",
+ "result": "success",
+ "time": 505,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/noTestsFound.test.ts",
+ "totalTime": 2739,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with custom matchers",
+ "result": "success",
+ "time": 873,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "custom async matchers",
+ "result": "success",
+ "time": 623,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/customMatcherStackTrace.test.ts",
+ "totalTime": 1539,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "print correct error message with nested test definitions outside describe",
+ "result": "success",
+ "time": 1354,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print correct error message with nested test definitions inside describe",
+ "result": "success",
+ "time": 1088,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print correct message when nesting describe inside it",
+ "result": "success",
+ "time": 1047,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "print correct message when nesting a hook inside it",
+ "result": "success",
+ "time": 1027,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/nestedTestDefinitions.test.ts",
+ "totalTime": 4641,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with auto-clear",
+ "result": "success",
+ "time": 801,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite without auto-clear",
+ "result": "success",
+ "time": 837,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/autoClearMocks.test.ts",
+ "totalTime": 1681,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits the process after test are done but before timers complete",
+ "result": "success",
+ "time": 2157,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/forceExit.test.ts",
+ "totalTime": 2208,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits with a specified code when test fail",
+ "result": "success",
+ "time": 2073,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits with a specified code when bailing from a failed test",
+ "result": "success",
+ "time": 2188,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testFailureExitCode.test.ts",
+ "totalTime": 4476,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "",
+ "result": "success",
+ "time": 905,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/promiseReject.test.ts",
+ "totalTime": 967,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "run timers after resetAllMocks test",
+ "result": "success",
+ "time": 944,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run timers with resetMocks in config test",
+ "result": "success",
+ "time": 814,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/timerResetMocks.test.ts",
+ "totalTime": 1878,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "triggers setup/teardown hooks",
+ "result": "success",
+ "time": 1422,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testEnvironmentAsync.test.ts",
+ "totalTime": 1493,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "show error message with matching files",
+ "result": "success",
+ "time": 1064,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "show error message when no js moduleFileExtensions",
+ "result": "success",
+ "time": 117,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/resolveNoFileExtensions.test.ts",
+ "totalTime": 1263,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with nested event loops",
+ "result": "success",
+ "time": 1392,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/nestedEventLoop.test.ts",
+ "totalTime": 1422,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "no tests found message is redirected to stderr",
+ "result": "success",
+ "time": 1257,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/useStderr.test.ts",
+ "totalTime": 1352,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work without error",
+ "result": "success",
+ "time": 1310,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/domDiffing.test.ts",
+ "totalTime": 1361,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "console printing",
+ "result": "success",
+ "time": 1301,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/consoleAfterTeardown.test.ts",
+ "totalTime": 1341,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs tests in only test.js and spec.js",
+ "result": "success",
+ "time": 944,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testInRoot.test.ts",
+ "totalTime": 1008.9999999999999,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`require.main\` on using \`jest.isolateModules\` should not be undefined",
+ "result": "success",
+ "time": 867,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/requireMainIsolateModules.test.ts",
+ "totalTime": 976,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "jest --clearCache",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "normal run results in cache directory being written",
+ "result": "success",
+ "time": 792,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "clearCache results in deleted directory and exitCode 0",
+ "result": "success",
+ "time": 127,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/clearCache.test.ts",
+ "totalTime": 1004,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Runtime Internal Module Registry",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly makes use of internal module registry when requiring modules",
+ "result": "success",
+ "time": 1150,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/runtimeInternalModuleRegistry.test.ts",
+ "totalTime": 1202,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "resolve node module",
+ "result": "success",
+ "time": 890,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/resolveNodeModule.test.ts",
+ "totalTime": 943,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "setImmediate",
+ "result": "success",
+ "time": 859,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/setImmediate.test.ts",
+ "totalTime": 904,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "JSON Reporter",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails the test suite if it contains no tests",
+ "result": "success",
+ "time": 824,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/emptySuiteError.test.ts",
+ "totalTime": 885,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with test cases that contain malformed sourcemaps",
+ "result": "success",
+ "time": 823,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/badSourceMap.test.ts",
+ "totalTime": 858,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "useRealTimers cancels \\"timers\\": \\"fake\\" for whole test file",
+ "result": "success",
+ "time": 986,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/timerUseRealTimers.test.ts",
+ "totalTime": 1018,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can redefine global",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/global-mutation.test.ts",
+ "totalTime": 40,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "run Jest programmatically cjs",
+ "result": "success",
+ "time": 75,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run Jest programmatically esm",
+ "result": "success",
+ "time": 462,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/runProgrammatically.test.ts",
+ "totalTime": 575,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Symbol deletion",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/symbol.test.ts",
+ "totalTime": 49,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not warn when a mock file changes",
+ "result": "success",
+ "time": 298,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/hasteMapMockChanged.test.ts",
+ "totalTime": 379,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "error when rootDir does not exist",
+ "result": "success",
+ "time": 109,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error when rootDir is a file",
+ "result": "success",
+ "time": 109,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error when roots directory does not exist",
+ "result": "success",
+ "time": 137,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "error when roots is a file",
+ "result": "success",
+ "time": 129,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/existentRoots.test.ts",
+ "totalTime": 627,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`done()\` works properly in hooks",
+ "result": "success",
+ "time": 819,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/doneInHooks.test.ts",
+ "totalTime": 855,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls asynchronous handleTestEvent in testEnvironment",
+ "result": "success",
+ "time": 1458,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testEnvironmentCircusAsync.test.ts",
+ "totalTime": 1507,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "moduleNameMapper wrong configuration",
+ "result": "success",
+ "time": 1030,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "moduleNameMapper wrong array configuration",
+ "result": "success",
+ "time": 909,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "moduleNameMapper correct configuration",
+ "result": "success",
+ "time": 913,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "moduleNameMapper correct configuration mocking module of absolute path",
+ "result": "success",
+ "time": 1479,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "moduleNameMapper with mocking",
+ "result": "success",
+ "time": 967,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/moduleNameMapper.test.ts",
+ "totalTime": 5395,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Custom Reporters Integration",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "valid string format for adding reporters",
+ "result": "success",
+ "time": 966,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "valid array format for adding reporters",
+ "result": "success",
+ "time": 623,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid format for adding reporters",
+ "result": "success",
+ "time": 115,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "default reporters enabled",
+ "result": "success",
+ "time": 620,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TestReporter with all tests passing",
+ "result": "success",
+ "time": 978,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "TestReporter with all tests failing",
+ "result": "success",
+ "time": 1093,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "IncompleteReporter for flexibility",
+ "result": "success",
+ "time": 801,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reporters can be default exports",
+ "result": "success",
+ "time": 792,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints reporter errors",
+ "result": "success",
+ "time": 495,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/customReporters.test.ts",
+ "totalTime": 6553,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "--findRelatedTests flag",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs tests related to filename",
+ "result": "success",
+ "time": 1324,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs tests related to uppercased filename on case-insensitive os",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs tests related to filename with a custom dependency extractor",
+ "result": "success",
+ "time": 1307,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates coverage report for filename",
+ "result": "success",
+ "time": 2001.9999999999998,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "coverage configuration is applied correctly",
+ "result": "success",
+ "time": 1516,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/findRelatedFiles.test.ts",
+ "totalTime": 6230,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Environment override",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses jsdom when specified",
+ "result": "success",
+ "time": 1501,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node as default from package.json",
+ "result": "success",
+ "time": 1002,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node when specified",
+ "result": "success",
+ "time": 664,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails when the env is not available",
+ "result": "success",
+ "time": 121,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Environment equivalent",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses jsdom",
+ "result": "success",
+ "time": 1092,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses node",
+ "result": "success",
+ "time": 731,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/env.test.ts",
+ "totalTime": 5221,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalSetup is triggered once before all test suites",
+ "result": "success",
+ "time": 2384,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jest throws an error when globalSetup does not export a function",
+ "result": "success",
+ "time": 851,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalSetup function gets jest config object as a parameter",
+ "result": "success",
+ "time": 918,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should call globalSetup function of multiple projects",
+ "result": "success",
+ "time": 1307,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not call a globalSetup of a project if there are no tests to run from this project",
+ "result": "success",
+ "time": 1189,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not call any globalSetup if there are no tests to run",
+ "result": "success",
+ "time": 792,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalSetup works with default export",
+ "result": "success",
+ "time": 926,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globalSetup throws with named export",
+ "result": "success",
+ "time": 783,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not transpile the transformer",
+ "result": "success",
+ "time": 718,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should transform node_modules if configured by transformIgnorePatterns",
+ "result": "success",
+ "time": 1165,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/globalSetup.test.ts",
+ "totalTime": 13926,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a warning if a worker is force exited",
+ "result": "success",
+ "time": 2355,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "force exits a worker that fails to exit gracefully",
+ "result": "success",
+ "time": 2319,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/workerForceExit.test.ts",
+ "totalTime": 4751,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "successfully runs the tests inside \`babel-plugin-jest-hoist/\`",
+ "result": "success",
+ "time": 6179,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/babelPluginJestHoist.test.ts",
+ "totalTime": 6249,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "code coverage for transform instrumented code",
+ "result": "success",
+ "time": 4910,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/coverageTransformInstrumented.test.ts",
+ "totalTime": 5029,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not work on jest-circus",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exceeds the timeout set using jasmine.DEFAULT_TIMEOUT_INTERVAL",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not exceed the timeout using jasmine.DEFAULT_TIMEOUT_INTERVAL",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can read and write jasmine.DEFAULT_TIMEOUT_INTERVAL",
+ "result": "skipped",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/timeoutsLegacy.test.ts",
+ "totalTime": 71,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "successfully transpiles async",
+ "result": "success",
+ "time": 4040,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/asyncRegenerator.test.ts",
+ "totalTime": 4127,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works fine when function throws error",
+ "result": "success",
+ "time": 790,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws the error if tested function didn't throw error",
+ "result": "success",
+ "time": 713,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "accepts custom snapshot name",
+ "result": "success",
+ "time": 653,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot be used with .not",
+ "result": "success",
+ "time": 644,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should support rejecting promises",
+ "result": "success",
+ "time": 647,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts",
+ "totalTime": 3524,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with all statuses",
+ "result": "success",
+ "time": 891,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows error messages when called with no arguments",
+ "result": "success",
+ "time": 602,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows error messages when called with multiple arguments",
+ "result": "success",
+ "time": 669,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows error messages when called with invalid argument",
+ "result": "success",
+ "time": 624,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows todo messages when in verbose mode",
+ "result": "success",
+ "time": 710,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testTodo.test.ts",
+ "totalTime": 3573,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "onlyFailures flag works in non-watch mode",
+ "result": "success",
+ "time": 2841,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/onlyFailuresNonWatch.test.ts",
+ "totalTime": 2893,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports json preset",
+ "result": "success",
+ "time": 860,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports js preset",
+ "result": "success",
+ "time": 956,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/presets.test.ts",
+ "totalTime": 1966,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with passing tests",
+ "result": "success",
+ "time": 1173,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "shows the correct errors in stderr when failing tests",
+ "result": "success",
+ "time": 760,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/expectAsyncMatcher.test.ts",
+ "totalTime": 2732,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "babel-jest",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs transpiled code",
+ "result": "success",
+ "time": 2241,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "instruments only specific files and collects coverage",
+ "result": "success",
+ "time": 2589,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "babel-jest ignored",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "tells user to match ignored files",
+ "result": "success",
+ "time": 940,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "babel-jest with manual transformer",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs transpiled code",
+ "result": "success",
+ "time": 1608,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "no babel-jest",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails with syntax error on flow types",
+ "result": "success",
+ "time": 1343,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "instrumentation with no babel-jest",
+ "result": "success",
+ "time": 1378,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "custom transformer",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "proprocesses files",
+ "result": "success",
+ "time": 673,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "instruments files",
+ "result": "success",
+ "time": 706,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "multiple-transformers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "transforms dependencies using specific transformers",
+ "result": "success",
+ "time": 7383,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ecmascript-modules-support",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs transpiled code",
+ "result": "success",
+ "time": 923,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "transformer-config",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs transpiled code",
+ "result": "success",
+ "time": 1636,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "instruments only specific files and collects coverage",
+ "result": "success",
+ "time": 1588,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "transformer caching",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not rerun transform within worker",
+ "result": "success",
+ "time": 1033,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "transform-environment",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should transform the environment",
+ "result": "success",
+ "time": 1044,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "transform-runner",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should transform runner",
+ "result": "success",
+ "time": 795,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "transform-testrunner",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should transform testRunner",
+ "result": "success",
+ "time": 783,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/transform.test.ts",
+ "totalTime": 26740,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "chai assertion errors should display properly",
+ "result": "success",
+ "time": 1817,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/chaiAssertionLibrary.ts",
+ "totalTime": 1902,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "processes stack traces and code frames with source maps with coverage",
+ "result": "success",
+ "time": 2394,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts",
+ "totalTime": 2444,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "run prioritySequence first sync",
+ "result": "success",
+ "time": 933,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run prioritySequence first async",
+ "result": "success",
+ "time": 901,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "run failed tests async",
+ "result": "success",
+ "time": 849,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/customTestSequencers.test.ts",
+ "totalTime": 2757,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Correct BeforeAll run",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ensures the BeforeAll of ignored suite is not run",
+ "result": "success",
+ "time": 905,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/beforeAllFiltered.ts",
+ "totalTime": 958,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Fake promises",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be possible to resolve with fake timers using immediates",
+ "result": "success",
+ "time": 901,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be possible to resolve with fake timers using asap",
+ "result": "success",
+ "time": 780,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/fakePromises.test.ts",
+ "totalTime": 1716,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "processes stack traces and code frames with source maps",
+ "result": "success",
+ "time": 2153,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/stackTraceSourceMaps.test.ts",
+ "totalTime": 2185,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "successfully runs tests with dynamic dependencies",
+ "result": "success",
+ "time": 811,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/dynamicRequireDependencies.ts",
+ "totalTime": 847,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "overriding native promise does not freeze Jest",
+ "result": "success",
+ "time": 1116,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "has a duration even if time is faked",
+ "result": "success",
+ "time": 859,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/overrideGlobals.test.ts",
+ "totalTime": 2045.9999999999998,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Tests are executed only once even in an MPR",
+ "result": "success",
+ "time": 908,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/executeTestsOnceInMpr.ts",
+ "totalTime": 976,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "module.parent should be null in test files",
+ "result": "success",
+ "time": 830,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/moduleParentNullInTest.ts",
+ "totalTime": 886,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints useful error for requires after test is done",
+ "result": "success",
+ "time": 842,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/requireAfterTeardown.test.ts",
+ "totalTime": 921,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with invalid assertions in afterAll",
+ "result": "success",
+ "time": 827,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/lifecycles.ts",
+ "totalTime": 861,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exits the process after test are done but before timers complete",
+ "result": "success",
+ "time": 187,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/hasteMapSha1.test.ts",
+ "totalTime": 298,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "JSON is available in the global scope",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "JSON.parse creates objects from within this context",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/json.test.ts",
+ "totalTime": 29,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "testNamePattern",
+ "result": "success",
+ "time": 859,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testResultsProcessor.test.ts",
+ "totalTime": 910,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "jest --debug",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs debugging info before running the test",
+ "result": "success",
+ "time": 857,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/debug.test.ts",
+ "totalTime": 899,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "imported globals",
+ "result": "success",
+ "time": 1012,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/importedGlobals.test.ts",
+ "totalTime": 1043,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "use the custom resolver",
+ "result": "success",
+ "time": 749,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/customResolver.test.ts",
+ "totalTime": 826,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles circular inequality properly",
+ "result": "success",
+ "time": 1407,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/circularInequality.test.ts",
+ "totalTime": 1451,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "globals are undefined if passed \`false\` from CLI",
+ "result": "success",
+ "time": 876,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "globals are undefined if passed \`false\` from config",
+ "result": "success",
+ "time": 918,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/injectGlobals.test.ts",
+ "totalTime": 1860,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "correctly skip \`beforeAll\`s in skipped tests",
+ "result": "success",
+ "time": 998,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/skipBeforeAfterAll.test.ts",
+ "totalTime": 1061,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with custom inline snapshot matchers",
+ "result": "success",
+ "time": 2145,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/customInlineSnapshotMatchers.test.ts",
+ "totalTime": 2206,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Regex Char In Path",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "parses paths containing regex chars correctly",
+ "result": "success",
+ "time": 873,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/regexCharInPath.test.ts",
+ "totalTime": 962,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Coverage Report",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report",
+ "result": "success",
+ "time": 551,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "File path not found in mulit-project scenario",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report",
+ "result": "success",
+ "time": 463,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/noTestFound.test.ts",
+ "totalTime": 1063,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "test config is without transform",
+ "result": "success",
+ "time": 133,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "on node ^12.16.0 || >=13.7.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs test with native ESM",
+ "result": "success",
+ "time": 690,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "on node >=14.3.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports top-level await",
+ "result": "skipped",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/nativeEsm.test.ts",
+ "totalTime": 905,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with passing tests",
+ "result": "success",
+ "time": 777,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws error for unknown dashed & camelcase args",
+ "result": "success",
+ "time": 119,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/supportsDashedArgs.ts",
+ "totalTime": 968,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should transform linked modules",
+ "result": "success",
+ "time": 734,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/transformLinkedModules.test.ts",
+ "totalTime": 783,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "testNamePattern",
+ "result": "success",
+ "time": 788,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testNamePattern.test.ts",
+ "totalTime": 859,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocks async functions",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/nativeAsyncMock.test.ts",
+ "totalTime": 55,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "reports the correct file size",
+ "result": "success",
+ "time": 83,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "updates the file size when a file changes",
+ "result": "success",
+ "time": 217,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/hasteMapSize.test.ts",
+ "totalTime": 397,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defining tests and hooks asynchronously throws",
+ "result": "success",
+ "time": 832,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/circusDeclarationErrors.test.ts",
+ "totalTime": 869,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls testEnvironment handleTestEvent",
+ "result": "success",
+ "time": 1456,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testEnvironmentCircus.test.ts",
+ "totalTime": 1501,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`done()\` should not be called more than once",
+ "result": "success",
+ "time": 820,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/callDoneTwice.test.ts",
+ "totalTime": 882,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "hook in empty describe",
+ "result": "success",
+ "time": 829,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "hook in describe with skipped test",
+ "result": "success",
+ "time": 614,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "hook in empty nested describe",
+ "result": "success",
+ "time": 680,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiple hooks in empty describe",
+ "result": "success",
+ "time": 726,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/emptyDescribeWithHooks.test.ts",
+ "totalTime": 2886,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not work on jest-circus",
+ "result": "success",
+ "time": 4,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fail.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.addMatchers.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.any.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.anything.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.arrayContaining.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.createSpy.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.objectContaining.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.stringMatching.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pending.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "spyOn.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "spyOnProperty.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaultTimeoutInterval.test.js errors in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "fail.test.js errors when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.addMatchers.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.any.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.anything.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.arrayContaining.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.createSpy.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.objectContaining.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "jasmine.stringMatching.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "pending.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "spyOn.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "spyOnProperty.test.js errors when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaultTimeoutInterval.test.js passes when not in errorOnDeprecated mode",
+ "result": "skipped",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/errorOnDeprecated.test.ts",
+ "totalTime": 56,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Test Retries",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "retries failed tests",
+ "result": "success",
+ "time": 859,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reporter shows more than 1 invocation if test is retried",
+ "result": "success",
+ "time": 829,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reporter shows 1 invocation if tests are not retried",
+ "result": "success",
+ "time": 811,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests are not retried if beforeAll hook failure occurs",
+ "result": "success",
+ "time": 706,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testRetries.test.ts",
+ "totalTime": 3277,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with jest.config.ts",
+ "result": "success",
+ "time": 3356,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with tsconfig.json",
+ "result": "success",
+ "time": 3224,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "traverses directory tree up until it finds jest.config",
+ "result": "success",
+ "time": 3116,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "it does type check the config",
+ "result": "success",
+ "time": 2278,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid JS in jest.config.ts",
+ "result": "success",
+ "time": 2200,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jest.config.ts.test.ts",
+ "totalTime": 14322,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report",
+ "result": "success",
+ "time": 2076,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "collects coverage only from specified file",
+ "result": "success",
+ "time": 1646,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "collects coverage only from multiple specified files",
+ "result": "success",
+ "time": 1587,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "collects coverage only from specified files avoiding dependencies",
+ "result": "success",
+ "time": 1173,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "json reporter printing with --coverage",
+ "result": "success",
+ "time": 898,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report as json",
+ "result": "success",
+ "time": 1824,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report when text is requested",
+ "result": "success",
+ "time": 1872,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report when text-summary is requested",
+ "result": "success",
+ "time": 1850,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report when text and text-summary is requested",
+ "result": "success",
+ "time": 1827,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not output coverage report when html is requested",
+ "result": "success",
+ "time": 2021,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "collects coverage from duplicate files avoiding shared cache",
+ "result": "success",
+ "time": 2245,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generates coverage when using the testRegex config param",
+ "result": "success",
+ "time": 2300,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/coverageReport.test.ts",
+ "totalTime": 22264,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "basic support",
+ "result": "success",
+ "time": 4442,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "do not indent empty lines",
+ "result": "success",
+ "time": 1940,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles property matchers",
+ "result": "success",
+ "time": 3820,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "removes obsolete external snapshots",
+ "result": "success",
+ "time": 3007,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports async matchers",
+ "result": "success",
+ "time": 895,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports async tests",
+ "result": "success",
+ "time": 1117,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes snapshots with non-literals in expect(...)",
+ "result": "success",
+ "time": 897,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "handles mocking native modules prettier relies on",
+ "result": "success",
+ "time": 1142,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports custom matchers",
+ "result": "success",
+ "time": 2263,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports custom matchers with property matcher",
+ "result": "success",
+ "time": 1950,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "multiple custom matchers and native matchers",
+ "result": "success",
+ "time": 1385,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "indentation is correct in the presences of existing snapshots",
+ "result": "success",
+ "time": 932,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toMatchInlineSnapshot.test.ts",
+ "totalTime": 23917,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders correctly",
+ "result": "success",
+ "time": 478,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders the ActivityIndicator component",
+ "result": "success",
+ "time": 106,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders the TextInput component",
+ "result": "success",
+ "time": 2887,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders the FlatList component",
+ "result": "success",
+ "time": 791,
+ },
+ ],
+ },
+ ],
+ "name": "examples/react-native/__tests__/intro.test.js",
+ "totalTime": 8559,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with a single snapshot",
+ "result": "success",
+ "time": 2009,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when a different assertion is failing",
+ "result": "success",
+ "time": 600,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when multiple tests have snapshots but only one of them failed multiple times",
+ "result": "success",
+ "time": 1640,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts",
+ "totalTime": 4670,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "exceeds the timeout",
+ "result": "success",
+ "time": 782,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not exceed the timeout",
+ "result": "success",
+ "time": 664,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "exceeds the command line testTimeout",
+ "result": "success",
+ "time": 1529,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not exceed the command line testTimeout",
+ "result": "success",
+ "time": 856,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/timeouts.test.ts",
+ "totalTime": 4029,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty external",
+ "result": "success",
+ "time": 1636,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "empty internal ci false",
+ "result": "success",
+ "time": 1213,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "undefined internal ci true",
+ "result": "success",
+ "time": 598,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts",
+ "totalTime": 3544,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "async jasmine",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with beforeAll",
+ "result": "success",
+ "time": 1317,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with beforeEach",
+ "result": "success",
+ "time": 673,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with afterAll",
+ "result": "success",
+ "time": 1151,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with afterEach",
+ "result": "success",
+ "time": 638,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with fit",
+ "result": "success",
+ "time": 936,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with xit",
+ "result": "success",
+ "time": 738,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws when not a promise is returned",
+ "result": "success",
+ "time": 670,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests async promise code",
+ "result": "success",
+ "time": 10831,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with concurrent",
+ "result": "success",
+ "time": 757,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with concurrent within a describe block when invoked with testNamePattern",
+ "result": "success",
+ "time": 686,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with concurrent.each",
+ "result": "success",
+ "time": 717,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with concurrent.only.each",
+ "result": "success",
+ "time": 1171,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "doesn't execute more than 5 tests simultaneously",
+ "result": "success",
+ "time": 976,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "async test fails",
+ "result": "success",
+ "time": 6223,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "generator test",
+ "result": "success",
+ "time": 688,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jasmineAsync.test.ts",
+ "totalTime": 28291,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "config as JSON",
+ "result": "success",
+ "time": 381,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with sane config JSON",
+ "result": "success",
+ "time": 621,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "watchman config option is respected over default argv",
+ "result": "success",
+ "time": 640,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "config from argv is respected with sane config JSON",
+ "result": "success",
+ "time": 530,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with jsdom testEnvironmentOptions config JSON",
+ "result": "success",
+ "time": 1558,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "negated flags override previous flags",
+ "result": "success",
+ "time": 156,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/config.test.ts",
+ "totalTime": 3945,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "fails a test that terminates the worker with a fatal error",
+ "result": "success",
+ "time": 3117,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/fatalWorkerError.test.ts",
+ "totalTime": 3167,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with a single snapshot",
+ "result": "success",
+ "time": 2153,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works when multiple tests have snapshots but only one of them failed multiple times",
+ "result": "success",
+ "time": 2208,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/toMatchSnapshotWithRetries.test.ts",
+ "totalTime": 4435,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can press \\"p\\" to filter by file name",
+ "result": "success",
+ "time": 1471,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can press \\"t\\" to filter by test name",
+ "result": "success",
+ "time": 1775,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/watchModePatterns.test.ts",
+ "totalTime": 3503,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "triggers unexpected token error message for non-JS assets",
+ "result": "success",
+ "time": 980,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "triggers unexpected token error message for untranspiled node_modules",
+ "result": "success",
+ "time": 794,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not trigger unexpected token error message for regular syntax errors",
+ "result": "success",
+ "time": 1539,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/unexpectedToken.test.ts",
+ "totalTime": 3411,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "understands dependencies using jest.requireMock",
+ "result": "success",
+ "time": 1909,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jestRequireMock.test.ts",
+ "totalTime": 2119,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "instruments and collects coverage for typescript files",
+ "result": "success",
+ "time": 2830,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/typescriptCoverage.test.ts",
+ "totalTime": 2893,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with jest.config.js",
+ "result": "success",
+ "time": 1016,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "traverses directory tree up until it finds jest.config",
+ "result": "success",
+ "time": 882,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "invalid JS in jest.config.js",
+ "result": "success",
+ "time": 135,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jest.config.js.test.ts",
+ "totalTime": 2134,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`require.main\` on using \`--resetModules='true'\` should not be undefined",
+ "result": "success",
+ "time": 970,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`require.main\` on using \`jest.resetModules()\` should not be undefined",
+ "result": "success",
+ "time": 915,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/requireMainResetModules.test.ts",
+ "totalTime": 1961,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "modern implementation of fake timers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be possible to use modern implementation from config",
+ "result": "success",
+ "time": 792,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should be possible to use modern implementation from jest-object",
+ "result": "success",
+ "time": 831,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/modernFakeTimers.test.ts",
+ "totalTime": 1680,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs tests by exact path",
+ "result": "success",
+ "time": 1938,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/runTestsByPath.test.ts",
+ "totalTime": 1999,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "respects testEnvironment docblock",
+ "result": "success",
+ "time": 1513,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testEnvironment.test.ts",
+ "totalTime": 1628,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with concurrent.each",
+ "result": "success",
+ "time": 817,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with concurrent.only.each",
+ "result": "success",
+ "time": 695,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/circusConcurrentEach.test.ts",
+ "totalTime": 1591,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with auto-restore",
+ "result": "success",
+ "time": 822,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite without auto-restore",
+ "result": "success",
+ "time": 845,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/autoRestoreMocks.test.ts",
+ "totalTime": 1797,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "JSON Reporter",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "writes test result to sum.result.json",
+ "result": "success",
+ "time": 721,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "outputs coverage report",
+ "result": "success",
+ "time": 698,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/jsonReporter.test.ts",
+ "totalTime": 1514,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite with auto-reset",
+ "result": "success",
+ "time": 801,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "suite without auto-reset",
+ "result": "success",
+ "time": 827,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/autoResetMocks.test.ts",
+ "totalTime": 1666,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "runs only \\"it.only\\" tests",
+ "result": "success",
+ "time": 834,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/focusedTests.test.ts",
+ "totalTime": 888,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can press \\"f\\" to run only failed tests",
+ "result": "success",
+ "time": 1341,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/watchModeOnlyFailed.test.ts",
+ "totalTime": 1394,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not work on jest-circus",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Correct beforeEach order",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ensures the correct order for beforeEach",
+ "result": "skipped",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/beforeEachQueue.ts",
+ "totalTime": 55,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with injected globals",
+ "result": "success",
+ "time": 962,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/extraGlobals.test.ts",
+ "totalTime": 1010.9999999999999,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Snapshot serializers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders snapshot",
+ "result": "success",
+ "time": 607,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "compares snapshots correctly",
+ "result": "success",
+ "time": 1365,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/snapshotSerializers.test.ts",
+ "totalTime": 2065,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "defaults to null for location",
+ "result": "success",
+ "time": 836,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds correct location info when provided with flag",
+ "result": "success",
+ "time": 859,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/locationInResults.test.ts",
+ "totalTime": 1764,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints console.logs when run with forceExit",
+ "result": "success",
+ "time": 726,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts",
+ "totalTime": 793,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does not require project modules from inside node_modules",
+ "result": "success",
+ "time": 723,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/dependencyClash.test.ts",
+ "totalTime": 833,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "produces code coverage for uncovered files without transformer",
+ "result": "success",
+ "time": 1020.9999999999999,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/coverageWithoutTransform.test.ts",
+ "totalTime": 1075,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "CLI accepts exact file names if matchers matched",
+ "result": "success",
+ "time": 741,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "CLI skips exact file names if no matchers matched",
+ "result": "success",
+ "time": 389,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/cliHandlesExactFilenames.test.ts",
+ "totalTime": 1230,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "on node >=12.2.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "\`require.main\` not undefined after createRequire",
+ "result": "success",
+ "time": 891,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/requireMainAfterCreateRequire.test.ts",
+ "totalTime": 966,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "jest.resetModules should not error when _isMockFunction is defined but not boolean",
+ "result": "success",
+ "time": 883,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/resetModules.test.ts",
+ "totalTime": 926,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "can press \\"u\\" to update snapshots",
+ "result": "success",
+ "time": 993,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/watchModeUpdateSnapshot.test.ts",
+ "totalTime": 1075,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "mock works with generator",
+ "result": "success",
+ "time": 974,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/generatorMock.test.ts",
+ "totalTime": 1027,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "require.resolve.paths",
+ "result": "success",
+ "time": 1119,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/resolveGetPaths.test.ts",
+ "totalTime": 1155,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints coverage with missing sourcemaps",
+ "result": "success",
+ "time": 1002.9999999999999,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints coverage with empty sourcemaps",
+ "result": "success",
+ "time": 1338,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/v8Coverage.test.ts",
+ "totalTime": 2412,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "require.resolve with paths",
+ "result": "success",
+ "time": 1117,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/resolveWithPaths.test.ts",
+ "totalTime": 1170,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "logs memory usage",
+ "result": "success",
+ "time": 830,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/logHeapUsage.test.ts",
+ "totalTime": 884,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "provides \`require.main\` set to test suite module",
+ "result": "success",
+ "time": 1008.9999999999999,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/requireMain.test.ts",
+ "totalTime": 1137,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "store snapshot even if fs is mocked",
+ "result": "success",
+ "time": 800,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/snapshotMockFs.test.ts",
+ "totalTime": 883,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Snapshot serializers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders snapshot",
+ "result": "success",
+ "time": 798,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/snapshot-unknown.test.ts",
+ "totalTime": 838,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "AppComponent",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create the app",
+ "result": "success",
+ "time": 69,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should have as title 'angular'",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should render title in a h1 tag",
+ "result": "success",
+ "time": 115,
+ },
+ ],
+ },
+ ],
+ "name": "examples/angular/app.component.spec.ts",
+ "totalTime": 654,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints a usable stack trace even if no Error.captureStackTrace",
+ "result": "success",
+ "time": 848,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts",
+ "totalTime": 899,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "testNamePattern skipped",
+ "result": "success",
+ "time": 924,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/testNamePatternSkipped.test.ts",
+ "totalTime": 991,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "that the failureDetails property is set",
+ "result": "success",
+ "time": 856,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/failureDetailsProperty.test.ts",
+ "totalTime": 907,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Custom snapshot resolver",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Resolves snapshot files using custom resolver",
+ "result": "success",
+ "time": 735,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/snapshotResolver.test.ts",
+ "totalTime": 823,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints stack trace pointing to process.exit call",
+ "result": "success",
+ "time": 1012.9999999999999,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/processExit.test.ts",
+ "totalTime": 1070,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "supports NODE_PATH",
+ "result": "success",
+ "time": 833,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/nodePath.test.ts",
+ "totalTime": 866,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Verbose Reporter",
+ "result": "success",
+ "time": 631,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/verbose.test.ts",
+ "totalTime": 683,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "--listTests flag",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "causes tests to be printed in different lines",
+ "result": "success",
+ "time": 478,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "causes tests to be printed out as JSON when using the --json flag",
+ "result": "success",
+ "time": 404,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/listTests.test.ts",
+ "totalTime": 945,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "allows retrieving the current domain",
+ "result": "success",
+ "time": 867,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/createProcessObject.test.ts",
+ "totalTime": 908,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "CheckboxWithLabel changes the text after click",
+ "result": "success",
+ "time": 33,
+ },
+ ],
+ },
+ ],
+ "name": "examples/react-testing-library/__tests__/CheckboxWithLabel-test.js",
+ "totalTime": 469,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Service: DataService",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create service",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should return the right title",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "examples/angular/shared/data.service.spec.ts",
+ "totalTime": 431,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "prints useful error for environment methods after test is done",
+ "result": "success",
+ "time": 846,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/environmentAfterTeardown.test.ts",
+ "totalTime": 892,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "reads config from cjs file",
+ "result": "success",
+ "time": 157,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "on node ^12.17.0 || >=13.2.0",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "reads config from mjs file",
+ "result": "success",
+ "time": 202,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "reads config from js file when package.json#type=module",
+ "result": "success",
+ "time": 115,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/esmConfigFile.test.ts",
+ "totalTime": 526,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "CheckboxWithLabel changes the text after click",
+ "result": "success",
+ "time": 6,
+ },
+ ],
+ },
+ ],
+ "name": "examples/enzyme/__tests__/CheckboxWithLabel-test.js",
+ "totalTime": 434,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "define mock per test",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses mocked module",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "uses actual module",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "examples/module-mock/__tests__/mock_per_test.js",
+ "totalTime": 116,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should aggregate docs from collection",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "examples/mongodb/__test__/db.test.js",
+ "totalTime": 236,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders correctly",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders as an anchor when no page is set",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly escapes quotes",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "changes the class when hovered",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "examples/snapshot/__tests__/link.react.test.js",
+ "totalTime": 181,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "CheckboxWithLabel changes the text after click",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ ],
+ "name": "examples/typescript/__tests__/CheckboxWithLabel-test.tsx",
+ "totalTime": 227,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "CheckboxWithLabel changes the text after click",
+ "result": "success",
+ "time": 17,
+ },
+ ],
+ },
+ ],
+ "name": "examples/react/__tests__/CheckboxWithLabel-test.js",
+ "totalTime": 256,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "--showConfig outputs config info and exits",
+ "result": "success",
+ "time": 144,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/showConfig.test.ts",
+ "totalTime": 195,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "renders correctly",
+ "result": "success",
+ "time": 2,
+ },
+ ],
+ },
+ ],
+ "name": "examples/snapshot/__tests__/clock.react.test.js",
+ "totalTime": 62,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "schedules a 10-second timer after 1 second",
+ "result": "success",
+ "time": 26,
+ },
+ ],
+ },
+ ],
+ "name": "examples/timer/__tests__/infinite_timer_game.test.js",
+ "totalTime": 94,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls into $.ajax with the correct params",
+ "result": "success",
+ "time": 73,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the callback when $.ajax requests are finished",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "examples/jquery/__tests__/fetch_current_user.test.js",
+ "totalTime": 196,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "displays a user after a click",
+ "result": "success",
+ "time": 71,
+ },
+ ],
+ },
+ ],
+ "name": "examples/jquery/__tests__/display_user.test.js",
+ "totalTime": 196,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "timerGame",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "waits 1 second before ending the game",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the callback after 1 second via runAllTimers",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls the callback after 1 second via advanceTimersByTime",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/timer/__tests__/timer_game.test.js",
+ "totalTime": 74,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with resolves",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with promises",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with async/await",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with async/await and resolves",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests error with rejects",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests error with promises",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests error with async/await",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "tests error with async/await and rejects",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "examples/async/__tests__/user.test.js",
+ "totalTime": 96,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "implementation created by automock",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "implementation created by jest.createMockFromModule",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "examples/automatic-mocks/__tests__/createMockFromModule.test.js",
+ "totalTime": 115,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "listFilesInDirectorySync",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "includes all files in the directory in the summary",
+ "result": "success",
+ "time": 21,
+ },
+ ],
+ },
+ ],
+ "name": "examples/manual-mocks/__tests__/file_summarizer.test.js",
+ "totalTime": 87,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "calc - mocks",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns result from subtract",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "returns result from sum",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds last result to memory",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "subtracts last result to memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "clears the memory",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws an error when invalid Op is passed",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "examples/typescript/__tests__/calc.test.ts",
+ "totalTime": 276,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds 1 + 2 to equal 3",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "examples/getting-started/sum.test.js",
+ "totalTime": 78,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "Service: SubService",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should create service",
+ "result": "success",
+ "time": 12,
+ },
+ ],
+ },
+ ],
+ "name": "examples/angular/shared/sub.service.spec.ts",
+ "totalTime": 109,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "if orginal user model",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/manual-mocks/__tests__/user.test.js",
+ "totalTime": 41,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds 1 + 2 to equal 3 in TScript",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds 1 + 2 to equal 3 in JavaScript",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ ],
+ "name": "examples/typescript/__tests__/sum-test.ts",
+ "totalTime": 69,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "if utils are mocked",
+ "result": "success",
+ "time": 0,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "mocked implementation",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/automatic-mocks/__tests__/automock.test.js",
+ "totalTime": 74,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "if lodash head is mocked",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/manual-mocks/__tests__/lodashMocking.test.js",
+ "totalTime": 109,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "if user model is mocked",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/manual-mocks/__tests__/userMocked.test.js",
+ "totalTime": 105,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds 1 + 2 to equal 3 in Typescript",
+ "result": "success",
+ "time": 2,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "adds 1 + 2 to equal 3 in JavaScript",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/typescript/__tests__/sum.test.js",
+ "totalTime": 100,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "b",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/custom-test-sequencer/b.test.js",
+ "totalTime": 21,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "subtracts 5 - 1 to equal 4 in TypeScript",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/typescript/__tests__/sub-test.ts",
+ "totalTime": 43,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does a full mock",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "examples/module-mock/__tests__/full_mock.js",
+ "totalTime": 60,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "globals are properly defined",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/global.test.ts",
+ "totalTime": 31,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "original implementation",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "examples/automatic-mocks/__tests__/disableAutomocking.test.js",
+ "totalTime": 24,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "timers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work before calling resetAllMocks",
+ "result": "success",
+ "time": 1,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "should not break after calling resetAllMocks",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js",
+ "totalTime": 30,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "v8 module",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/requireV8Module.test.ts",
+ "totalTime": 30,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "timers",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "should work before calling resetAllMocks",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js",
+ "totalTime": 34,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "does a partial mock",
+ "result": "success",
+ "time": 1,
+ },
+ ],
+ },
+ ],
+ "name": "examples/module-mock/__tests__/partial_mock.js",
+ "totalTime": 215,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "d",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/custom-test-sequencer/d.test.js",
+ "totalTime": 21,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "a",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/custom-test-sequencer/a.test.js",
+ "totalTime": 29,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "e",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/custom-test-sequencer/e.test.js",
+ "totalTime": 27,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "c",
+ "result": "success",
+ "time": 0,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/custom-test-sequencer/c.test.js",
+ "totalTime": 42,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "errors when a test both returns a promise and takes a callback",
+ "result": "success",
+ "time": 704,
+ },
+ ],
+ },
+ ],
+ "name": "e2e/__tests__/asyncAndCallback.test.ts",
+ "totalTime": 746,
+ },
+ ],
+ "totalTime": 165872,
}
`;
diff --git a/__tests__/dart-json.test.ts b/__tests__/dart-json.test.ts
index 09da0755..66380053 100644
--- a/__tests__/dart-json.test.ts
+++ b/__tests__/dart-json.test.ts
@@ -1,31 +1,30 @@
import * as fs from 'fs'
import * as path from 'path'
-import {parseDartJson} from '../src/parsers/dart-json/dart-json-parser'
-import {ParseOptions} from '../src/parsers/parser-types'
+import {DartJsonParser} from '../src/parsers/dart-json/dart-json-parser'
+import {ParseOptions} from '../src/test-parser'
+import {getReport} from '../src/report/get-report'
import {normalizeFilePath} from '../src/utils/file-utils'
-const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json')
-const outputPath = path.join(__dirname, '__outputs__', 'dart-json.md')
-const xmlFixture = {
- path: normalizeFilePath(path.relative(__dirname, fixturePath)),
- content: fs.readFileSync(fixturePath, {encoding: 'utf8'})
-}
-
describe('dart-json tests', () => {
it('matches report snapshot', async () => {
const opts: ParseOptions = {
- name: 'Dart tests',
- annotations: true,
+ parseErrors: true,
trackedFiles: ['lib/main.dart', 'test/main_test.dart', 'test/second_test.dart'],
workDir: 'C:/Users/Michal/Workspace/dorny/test-check/reports/dart/'
}
- const result = await parseDartJson([xmlFixture], opts)
- fs.mkdirSync(path.dirname(outputPath), {recursive: true})
- fs.writeFileSync(outputPath, result?.output?.summary ?? '')
+ const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json')
+ const outputPath = path.join(__dirname, '__outputs__', 'dart-json.md')
+ const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
+ const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
- expect(result.success).toBeFalsy()
- expect(result?.output).toMatchSnapshot()
+ const parser = new DartJsonParser(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)
})
})
diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts
index b18075c9..72ae1700 100644
--- a/__tests__/dotnet-trx.test.ts
+++ b/__tests__/dotnet-trx.test.ts
@@ -1,31 +1,51 @@
import * as fs from 'fs'
import * as path from 'path'
-import {parseDotnetTrx} from '../src/parsers/dotnet-trx/dotnet-trx-parser'
-import {ParseOptions} from '../src/parsers/parser-types'
+import {DotnetTrxParser} from '../src/parsers/dotnet-trx/dotnet-trx-parser'
+import {ParseOptions} from '../src/test-parser'
+import {getReport} from '../src/report/get-report'
import {normalizeFilePath} from '../src/utils/file-utils'
-const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx')
-const outputPath = path.join(__dirname, '__outputs__', 'dotnet-trx.md')
-const xmlFixture = {
- path: normalizeFilePath(path.relative(__dirname, fixturePath)),
- content: fs.readFileSync(fixturePath, {encoding: 'utf8'})
-}
-
describe('dotnet-trx tests', () => {
it('matches report snapshot', async () => {
+ const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx')
+ const outputPath = path.join(__dirname, '__outputs__', 'dotnet-trx.md')
+ const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
+ const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
+
const opts: ParseOptions = {
- name: 'Dotnet TRX tests',
- annotations: true,
+ parseErrors: true,
trackedFiles: ['DotnetTests.Unit/Calculator.cs', 'DotnetTests.XUnitTests/CalculatorTests.cs'],
workDir: 'C:/Users/Michal/Workspace/dorny/test-check/reports/dotnet/'
}
- const result = await parseDotnetTrx([xmlFixture], opts)
+ const parser = new DotnetTrxParser(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, result?.output?.summary ?? '')
+ fs.writeFileSync(outputPath, report)
+ })
+
+ it('report from FluentValidation test results matches snapshot', async () => {
+ const fixturePath = path.join(__dirname, 'fixtures', 'external', 'FluentValidation.Tests.trx')
+ const outputPath = path.join(__dirname, '__outputs__', 'fluent-validation-test-results.md')
+ const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
+ const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
- expect(result.success).toBeFalsy()
- expect(result?.output).toMatchSnapshot()
+ const opts: ParseOptions = {
+ trackedFiles: [],
+ parseErrors: true,
+ workDir: ''
+ }
+
+ const parser = new DotnetTrxParser(opts)
+ const result = await parser.parse(filePath, fileContent)
+ expect(result).toMatchSnapshot()
+
+ const report = getReport([result], {listTests: 'failed'})
+ fs.mkdirSync(path.dirname(outputPath), {recursive: true})
+ fs.writeFileSync(outputPath, report)
})
})
diff --git a/__tests__/fixtures/external/FluentValidation.Tests.trx b/__tests__/fixtures/external/FluentValidation.Tests.trx
new file mode 100644
index 00000000..4ac6323c
--- /dev/null
+++ b/__tests__/fixtures/external/FluentValidation.Tests.trx
@@ -0,0 +1,4662 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [xUnit.net 00:00:00.8621784] FluentValidation.Tests.AccessorCacheTests.Benchmark [SKIP]
+
+
+
+
\ No newline at end of file
diff --git a/__tests__/fixtures/external/jest/files.txt b/__tests__/fixtures/external/jest/files.txt
new file mode 100644
index 00000000..d40a82ea
--- /dev/null
+++ b/__tests__/fixtures/external/jest/files.txt
@@ -0,0 +1,2317 @@
+.azure-pipelines-steps.yml
+.azure-pipelines.yml
+.circleci/config.yml
+.circleci/website.sh
+.editorconfig
+.eslintignore
+.eslintplugin/index.js
+.eslintrc.js
+.github/CODEOWNERS
+.github/FUNDING.yml
+.github/ISSUE_TEMPLATE.md
+.github/ISSUE_TEMPLATE/bug.md
+.github/ISSUE_TEMPLATE/config.yml
+.github/ISSUE_TEMPLATE/feature.md
+.github/ISSUE_TEMPLATE/question.md
+.github/ISSUE_TEMPLATE/regression.md
+.github/PULL_REQUEST_TEMPLATE.md
+.github/SUPPORT.md
+.github/dependabot.yml
+.github/workflows/nodejs.yml
+.gitignore
+.npmignore
+.prettierignore
+.vscode/extensions.json
+.vscode/launch.json
+.vscode/settings.json
+.vscode/tasks.json
+.watchmanconfig
+.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
+.yarn/releases/yarn-2.4.0.cjs
+.yarnrc
+.yarnrc.yml
+CHANGELOG.md
+CODE_OF_CONDUCT.md
+CONTRIBUTING.md
+LICENSE
+README.md
+babel.config.js
+crowdin.yaml
+docs/Architecture.md
+docs/BypassingModuleMocks.md
+docs/CLI.md
+docs/CodeTransformation.md
+docs/Configuration.md
+docs/DynamoDB.md
+docs/ECMAScriptModules.md
+docs/EnvironmentVariables.md
+docs/Es6ClassMocks.md
+docs/ExpectAPI.md
+docs/GettingStarted.md
+docs/GlobalAPI.md
+docs/JestCommunity.md
+docs/JestObjectAPI.md
+docs/JestPlatform.md
+docs/ManualMocks.md
+docs/MigrationGuide.md
+docs/MockFunctionAPI.md
+docs/MockFunctions.md
+docs/MongoDB.md
+docs/MoreResources.md
+docs/Puppeteer.md
+docs/SetupAndTeardown.md
+docs/SnapshotTesting.md
+docs/TestingAsyncCode.md
+docs/TestingFrameworks.md
+docs/TimerMocks.md
+docs/Troubleshooting.md
+docs/TutorialAsync.md
+docs/TutorialReact.md
+docs/TutorialReactNative.md
+docs/TutorialjQuery.md
+docs/UsingMatchers.md
+docs/WatchPlugins.md
+docs/Webpack.md
+e2e/MockStdinWatchPlugin.js
+e2e/Utils.ts
+e2e/__tests__/__snapshots__/asyncAndCallback.test.ts.snap
+e2e/__tests__/__snapshots__/beforeAllFiltered.ts.snap
+e2e/__tests__/__snapshots__/beforeEachQueue.ts.snap
+e2e/__tests__/__snapshots__/callDoneTwice.test.ts.snap
+e2e/__tests__/__snapshots__/chaiAssertionLibrary.ts.snap
+e2e/__tests__/__snapshots__/circularInequality.test.ts.snap
+e2e/__tests__/__snapshots__/circusDeclarationErrors.test.ts.snap
+e2e/__tests__/__snapshots__/cliHandlesExactFilenames.test.ts.snap
+e2e/__tests__/__snapshots__/console.test.ts.snap
+e2e/__tests__/__snapshots__/consoleAfterTeardown.test.ts.snap
+e2e/__tests__/__snapshots__/consoleLogOutputWhenRunInBand.test.ts.snap
+e2e/__tests__/__snapshots__/coverageHandlebars.test.ts.snap
+e2e/__tests__/__snapshots__/coverageRemapping.test.ts.snap
+e2e/__tests__/__snapshots__/coverageReport.test.ts.snap
+e2e/__tests__/__snapshots__/coverageThreshold.test.ts.snap
+e2e/__tests__/__snapshots__/coverageTransformInstrumented.test.ts.snap
+e2e/__tests__/__snapshots__/coverageWithoutTransform.test.ts.snap
+e2e/__tests__/__snapshots__/customInlineSnapshotMatchers.test.ts.snap
+e2e/__tests__/__snapshots__/customMatcherStackTrace.test.ts.snap
+e2e/__tests__/__snapshots__/customReporters.test.ts.snap
+e2e/__tests__/__snapshots__/declarationErrors.test.ts.snap
+e2e/__tests__/__snapshots__/detectOpenHandles.ts.snap
+e2e/__tests__/__snapshots__/domDiffing.test.ts.snap
+e2e/__tests__/__snapshots__/each.test.ts.snap
+e2e/__tests__/__snapshots__/emptyDescribeWithHooks.test.ts.snap
+e2e/__tests__/__snapshots__/environmentAfterTeardown.test.ts.snap
+e2e/__tests__/__snapshots__/errorOnDeprecated.test.ts.snap
+e2e/__tests__/__snapshots__/executeTestsOnceInMpr.ts.snap
+e2e/__tests__/__snapshots__/expectAsyncMatcher.test.ts.snap
+e2e/__tests__/__snapshots__/failures.test.ts.snap
+e2e/__tests__/__snapshots__/findRelatedFiles.test.ts.snap
+e2e/__tests__/__snapshots__/globals.test.ts.snap
+e2e/__tests__/__snapshots__/injectGlobals.test.ts.snap
+e2e/__tests__/__snapshots__/jest.config.js.test.ts.snap
+e2e/__tests__/__snapshots__/jest.config.ts.test.ts.snap
+e2e/__tests__/__snapshots__/jestChangedFiles.test.ts.snap
+e2e/__tests__/__snapshots__/listTests.test.ts.snap
+e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap
+e2e/__tests__/__snapshots__/multiProjectRunner.test.ts.snap
+e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap
+e2e/__tests__/__snapshots__/nestedTestDefinitions.test.ts.snap
+e2e/__tests__/__snapshots__/processExit.test.ts.snap
+e2e/__tests__/__snapshots__/requireAfterTeardown.test.ts.snap
+e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap
+e2e/__tests__/__snapshots__/showConfig.test.ts.snap
+e2e/__tests__/__snapshots__/snapshot.test.ts.snap
+e2e/__tests__/__snapshots__/snapshotMockFs.test.ts.snap
+e2e/__tests__/__snapshots__/snapshotSerializers.test.ts.snap
+e2e/__tests__/__snapshots__/stackTrace.test.ts.snap
+e2e/__tests__/__snapshots__/stackTraceSourceMapsWithCoverage.test.ts.snap
+e2e/__tests__/__snapshots__/testNamePattern.test.ts.snap
+e2e/__tests__/__snapshots__/testNamePatternSkipped.test.ts.snap
+e2e/__tests__/__snapshots__/testTodo.test.ts.snap
+e2e/__tests__/__snapshots__/timeouts.test.ts.snap
+e2e/__tests__/__snapshots__/timeoutsLegacy.test.ts.snap
+e2e/__tests__/__snapshots__/toMatchInlineSnapshot.test.ts.snap
+e2e/__tests__/__snapshots__/toThrowErrorMatchingInlineSnapshot.test.ts.snap
+e2e/__tests__/__snapshots__/toThrowErrorMatchingSnapshot.test.ts.snap
+e2e/__tests__/__snapshots__/transform.test.ts.snap
+e2e/__tests__/__snapshots__/typescriptCoverage.test.ts.snap
+e2e/__tests__/__snapshots__/v8Coverage.test.ts.snap
+e2e/__tests__/__snapshots__/watchModeOnlyFailed.test.ts.snap
+e2e/__tests__/__snapshots__/watchModePatterns.test.ts.snap
+e2e/__tests__/__snapshots__/watchModeUpdateSnapshot.test.ts.snap
+e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap
+e2e/__tests__/asyncAndCallback.test.ts
+e2e/__tests__/asyncRegenerator.test.ts
+e2e/__tests__/autoClearMocks.test.ts
+e2e/__tests__/autoResetMocks.test.ts
+e2e/__tests__/autoRestoreMocks.test.ts
+e2e/__tests__/babelPluginJestHoist.test.ts
+e2e/__tests__/badSourceMap.test.ts
+e2e/__tests__/beforeAllFiltered.ts
+e2e/__tests__/beforeEachQueue.ts
+e2e/__tests__/callDoneTwice.test.ts
+e2e/__tests__/chaiAssertionLibrary.ts
+e2e/__tests__/circularInequality.test.ts
+e2e/__tests__/circusConcurrentEach.test.ts
+e2e/__tests__/circusDeclarationErrors.test.ts
+e2e/__tests__/clearCache.test.ts
+e2e/__tests__/cliHandlesExactFilenames.test.ts
+e2e/__tests__/compareDomNodes.test.ts
+e2e/__tests__/config.test.ts
+e2e/__tests__/console.test.ts
+e2e/__tests__/consoleAfterTeardown.test.ts
+e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts
+e2e/__tests__/coverageHandlebars.test.ts
+e2e/__tests__/coverageRemapping.test.ts
+e2e/__tests__/coverageReport.test.ts
+e2e/__tests__/coverageThreshold.test.ts
+e2e/__tests__/coverageTransformInstrumented.test.ts
+e2e/__tests__/coverageWithoutTransform.test.ts
+e2e/__tests__/createProcessObject.test.ts
+e2e/__tests__/customInlineSnapshotMatchers.test.ts
+e2e/__tests__/customMatcherStackTrace.test.ts
+e2e/__tests__/customReporters.test.ts
+e2e/__tests__/customResolver.test.ts
+e2e/__tests__/customTestSequencers.test.ts
+e2e/__tests__/debug.test.ts
+e2e/__tests__/declarationErrors.test.ts
+e2e/__tests__/dependencyClash.test.ts
+e2e/__tests__/detectOpenHandles.ts
+e2e/__tests__/domDiffing.test.ts
+e2e/__tests__/doneInHooks.test.ts
+e2e/__tests__/dynamicRequireDependencies.ts
+e2e/__tests__/each.test.ts
+e2e/__tests__/emptyDescribeWithHooks.test.ts
+e2e/__tests__/emptySuiteError.test.ts
+e2e/__tests__/env.test.ts
+e2e/__tests__/environmentAfterTeardown.test.ts
+e2e/__tests__/errorOnDeprecated.test.ts
+e2e/__tests__/esmConfigFile.test.ts
+e2e/__tests__/executeTestsOnceInMpr.ts
+e2e/__tests__/existentRoots.test.ts
+e2e/__tests__/expectAsyncMatcher.test.ts
+e2e/__tests__/expectInVm.test.ts
+e2e/__tests__/extraGlobals.test.ts
+e2e/__tests__/failureDetailsProperty.test.ts
+e2e/__tests__/failures.test.ts
+e2e/__tests__/fakePromises.test.ts
+e2e/__tests__/fatalWorkerError.test.ts
+e2e/__tests__/filter.test.ts
+e2e/__tests__/findRelatedFiles.test.ts
+e2e/__tests__/focusedTests.test.ts
+e2e/__tests__/forceExit.test.ts
+e2e/__tests__/generatorMock.test.ts
+e2e/__tests__/global-mutation.test.ts
+e2e/__tests__/global.test.ts
+e2e/__tests__/globalSetup.test.ts
+e2e/__tests__/globalTeardown.test.ts
+e2e/__tests__/globals.test.ts
+e2e/__tests__/hasteMapMockChanged.test.ts
+e2e/__tests__/hasteMapSha1.test.ts
+e2e/__tests__/hasteMapSize.test.ts
+e2e/__tests__/importedGlobals.test.ts
+e2e/__tests__/injectGlobals.test.ts
+e2e/__tests__/iterator-to-null-test.ts
+e2e/__tests__/jasmineAsync.test.ts
+e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts
+e2e/__tests__/jest.config.js.test.ts
+e2e/__tests__/jest.config.ts.test.ts
+e2e/__tests__/jestChangedFiles.test.ts
+e2e/__tests__/jestEnvironmentJsdom.test.ts
+e2e/__tests__/jestRequireActual.test.ts
+e2e/__tests__/jestRequireMock.test.ts
+e2e/__tests__/json.test.ts
+e2e/__tests__/jsonReporter.test.ts
+e2e/__tests__/lifecycles.ts
+e2e/__tests__/listTests.test.ts
+e2e/__tests__/locationInResults.test.ts
+e2e/__tests__/logHeapUsage.test.ts
+e2e/__tests__/mockNames.test.ts
+e2e/__tests__/modernFakeTimers.test.ts
+e2e/__tests__/moduleNameMapper.test.ts
+e2e/__tests__/moduleParentNullInTest.ts
+e2e/__tests__/multiProjectRunner.test.ts
+e2e/__tests__/nativeAsyncMock.test.ts
+e2e/__tests__/nativeEsm.test.ts
+e2e/__tests__/nativeEsmTypescript.test.ts
+e2e/__tests__/nestedEventLoop.test.ts
+e2e/__tests__/nestedTestDefinitions.test.ts
+e2e/__tests__/noTestFound.test.ts
+e2e/__tests__/noTestsFound.test.ts
+e2e/__tests__/nodePath.test.ts
+e2e/__tests__/onlyChanged.test.ts
+e2e/__tests__/onlyFailuresNonWatch.test.ts
+e2e/__tests__/overrideGlobals.test.ts
+e2e/__tests__/pnp.test.ts
+e2e/__tests__/presets.test.ts
+e2e/__tests__/processExit.test.ts
+e2e/__tests__/promiseReject.test.ts
+e2e/__tests__/regexCharInPath.test.ts
+e2e/__tests__/requireAfterTeardown.test.ts
+e2e/__tests__/requireMain.test.ts
+e2e/__tests__/requireMainAfterCreateRequire.test.ts
+e2e/__tests__/requireMainIsolateModules.test.ts
+e2e/__tests__/requireMainResetModules.test.ts
+e2e/__tests__/requireV8Module.test.ts
+e2e/__tests__/resetModules.test.ts
+e2e/__tests__/resolve.test.ts
+e2e/__tests__/resolveGetPaths.test.ts
+e2e/__tests__/resolveNoFileExtensions.test.ts
+e2e/__tests__/resolveNodeModule.test.ts
+e2e/__tests__/resolveWithPaths.test.ts
+e2e/__tests__/runProgrammatically.test.ts
+e2e/__tests__/runTestsByPath.test.ts
+e2e/__tests__/runtimeInternalModuleRegistry.test.ts
+e2e/__tests__/selectProjects.test.ts
+e2e/__tests__/setImmediate.test.ts
+e2e/__tests__/setupFilesAfterEnvConfig.test.ts
+e2e/__tests__/showConfig.test.ts
+e2e/__tests__/skipBeforeAfterAll.test.ts
+e2e/__tests__/snapshot-unknown.test.ts
+e2e/__tests__/snapshot.test.ts
+e2e/__tests__/snapshotMockFs.test.ts
+e2e/__tests__/snapshotResolver.test.ts
+e2e/__tests__/snapshotSerializers.test.ts
+e2e/__tests__/stackTrace.test.ts
+e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts
+e2e/__tests__/stackTraceSourceMaps.test.ts
+e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts
+e2e/__tests__/supportsDashedArgs.ts
+e2e/__tests__/symbol.test.ts
+e2e/__tests__/testEnvironment.test.ts
+e2e/__tests__/testEnvironmentAsync.test.ts
+e2e/__tests__/testEnvironmentCircus.test.ts
+e2e/__tests__/testEnvironmentCircusAsync.test.ts
+e2e/__tests__/testFailureExitCode.test.ts
+e2e/__tests__/testInRoot.test.ts
+e2e/__tests__/testNamePattern.test.ts
+e2e/__tests__/testNamePatternSkipped.test.ts
+e2e/__tests__/testPathPatternReporterMessage.test.ts
+e2e/__tests__/testResultsProcessor.test.ts
+e2e/__tests__/testRetries.test.ts
+e2e/__tests__/testTodo.test.ts
+e2e/__tests__/timeouts.test.ts
+e2e/__tests__/timeoutsLegacy.test.ts
+e2e/__tests__/timerResetMocks.test.ts
+e2e/__tests__/timerUseRealTimers.test.ts
+e2e/__tests__/toMatchInlineSnapshot.test.ts
+e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts
+e2e/__tests__/toMatchSnapshot.test.ts
+e2e/__tests__/toMatchSnapshotWithRetries.test.ts
+e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts
+e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts
+e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts
+e2e/__tests__/transform.test.ts
+e2e/__tests__/transformLinkedModules.test.ts
+e2e/__tests__/typescriptCoverage.test.ts
+e2e/__tests__/unexpectedToken.test.ts
+e2e/__tests__/useStderr.test.ts
+e2e/__tests__/v8Coverage.test.ts
+e2e/__tests__/verbose.test.ts
+e2e/__tests__/version.test.ts
+e2e/__tests__/watchModeNoAccess.test.ts
+e2e/__tests__/watchModeOnlyFailed.test.ts
+e2e/__tests__/watchModePatterns.test.ts
+e2e/__tests__/watchModeUpdateSnapshot.test.ts
+e2e/__tests__/workerForceExit.test.ts
+e2e/__tests__/wrongEnv.test.ts
+e2e/async-regenerator/__tests__/test.js
+e2e/async-regenerator/babel.config.js
+e2e/async-regenerator/package.json
+e2e/async-regenerator/yarn.lock
+e2e/auto-clear-mocks/with-auto-clear/__tests__/index.js
+e2e/auto-clear-mocks/with-auto-clear/index.js
+e2e/auto-clear-mocks/with-auto-clear/package.json
+e2e/auto-clear-mocks/without-auto-clear/__tests__/index.js
+e2e/auto-clear-mocks/without-auto-clear/index.js
+e2e/auto-clear-mocks/without-auto-clear/package.json
+e2e/auto-reset-mocks/with-auto-reset/__tests__/index.js
+e2e/auto-reset-mocks/with-auto-reset/index.js
+e2e/auto-reset-mocks/with-auto-reset/package.json
+e2e/auto-reset-mocks/without-auto-reset/__tests__/index.js
+e2e/auto-reset-mocks/without-auto-reset/index.js
+e2e/auto-reset-mocks/without-auto-reset/package.json
+e2e/auto-restore-mocks/with-auto-restore/__tests__/index.js
+e2e/auto-restore-mocks/with-auto-restore/index.js
+e2e/auto-restore-mocks/with-auto-restore/package.json
+e2e/auto-restore-mocks/without-auto-restore/__tests__/index.js
+e2e/auto-restore-mocks/without-auto-restore/index.js
+e2e/auto-restore-mocks/without-auto-restore/package.json
+e2e/babel-plugin-jest-hoist/__test_modules__/Mocked.js
+e2e/babel-plugin-jest-hoist/__test_modules__/Unmocked.js
+e2e/babel-plugin-jest-hoist/__test_modules__/__mocks__/jestBackticks.js
+e2e/babel-plugin-jest-hoist/__test_modules__/a.js
+e2e/babel-plugin-jest-hoist/__test_modules__/b.js
+e2e/babel-plugin-jest-hoist/__test_modules__/c.js
+e2e/babel-plugin-jest-hoist/__test_modules__/d.js
+e2e/babel-plugin-jest-hoist/__test_modules__/e.js
+e2e/babel-plugin-jest-hoist/__test_modules__/f.js
+e2e/babel-plugin-jest-hoist/__test_modules__/g.js
+e2e/babel-plugin-jest-hoist/__test_modules__/jestBackticks.js
+e2e/babel-plugin-jest-hoist/__tests__/importJest.test.js
+e2e/babel-plugin-jest-hoist/__tests__/integration.test.js
+e2e/babel-plugin-jest-hoist/__tests__/integrationAutomockOff.test.js
+e2e/babel-plugin-jest-hoist/__tests__/typescript.test.ts
+e2e/babel-plugin-jest-hoist/babel.config.js
+e2e/babel-plugin-jest-hoist/banana.js
+e2e/babel-plugin-jest-hoist/entry.ts
+e2e/babel-plugin-jest-hoist/mockFile.js
+e2e/babel-plugin-jest-hoist/package.json
+e2e/babel-plugin-jest-hoist/types.ts
+e2e/babel-plugin-jest-hoist/yarn.lock
+e2e/bad-source-map/__tests__/badSourceMap.js
+e2e/bad-source-map/__tests__/badSourceMap.js.map
+e2e/bad-source-map/package.json
+e2e/before-all-filtered/__tests__/beforeAllFiltered.test.js
+e2e/before-all-filtered/package.json
+e2e/before-all-skipped/__tests__/beforeAllFiltered.test.js
+e2e/before-all-skipped/package.json
+e2e/before-each-queue/__tests__/beforeEachQueue.test.js
+e2e/before-each-queue/package.json
+e2e/call-done-twice/__tests__/index.test.js
+e2e/call-done-twice/package.json
+e2e/chai-assertion-library-errors/__tests__/chai_assertion.js
+e2e/chai-assertion-library-errors/package.json
+e2e/chai-assertion-library-errors/yarn.lock
+e2e/circus-concurrent/__tests__/concurrent-each.test.js
+e2e/circus-concurrent/__tests__/concurrent-only-each.test.js
+e2e/circus-concurrent/package.json
+e2e/circus-declaration-errors/__tests__/asyncDefinition.test.js
+e2e/circus-declaration-errors/package.json
+e2e/clear-cache/__tests__/clearCache.test.js
+e2e/clear-cache/package.json
+e2e/compare-dom-nodes/__tests__/failedAssertion.js
+e2e/compare-dom-nodes/package.json
+e2e/console-after-teardown/__tests__/console.test.js
+e2e/console-after-teardown/package.json
+e2e/console-jsdom/__tests__/console.test.js
+e2e/console-jsdom/package.json
+e2e/console-winston/__tests__/console.test.js
+e2e/console-winston/package.json
+e2e/console-winston/yarn.lock
+e2e/console/__tests__/console.test.js
+e2e/console/package.json
+e2e/coverage-handlebars/__tests__/greet.js
+e2e/coverage-handlebars/greet.hbs
+e2e/coverage-handlebars/package.json
+e2e/coverage-handlebars/transform-handlebars.js
+e2e/coverage-handlebars/yarn.lock
+e2e/coverage-remapping/__tests__/coveredTest.ts
+e2e/coverage-remapping/covered.ts
+e2e/coverage-remapping/package.json
+e2e/coverage-remapping/typescriptPreprocessor.js
+e2e/coverage-remapping/yarn.lock
+e2e/coverage-report/.gitignore
+e2e/coverage-report/__mocks__/sumDependency.js
+e2e/coverage-report/__tests__/sum.test.js
+e2e/coverage-report/babel.config.js
+e2e/coverage-report/cached-duplicates/a/__tests__/identical.test.js
+e2e/coverage-report/cached-duplicates/a/identical.js
+e2e/coverage-report/cached-duplicates/b/__tests__/identical.test.js
+e2e/coverage-report/cached-duplicates/b/identical.js
+e2e/coverage-report/file.js
+e2e/coverage-report/notRequiredInTestSuite.js
+e2e/coverage-report/otherFile.js
+e2e/coverage-report/package.json
+e2e/coverage-report/setup.js
+e2e/coverage-report/sum.js
+e2e/coverage-report/sumDependency.js
+e2e/coverage-report/yarn.lock
+e2e/coverage-transform-instrumented/__tests__/coveredTest.js
+e2e/coverage-transform-instrumented/covered.js
+e2e/coverage-transform-instrumented/package.json
+e2e/coverage-transform-instrumented/preprocessor.js
+e2e/coverage-transform-instrumented/yarn.lock
+e2e/coverage-without-transform/__tests__/test.js
+e2e/coverage-without-transform/package.json
+e2e/coverage-without-transform/some-random-file.js
+e2e/create-process-object/__tests__/createProcessObject.test.js
+e2e/create-process-object/package.json
+e2e/create-process-object/setup.js
+e2e/custom-inline-snapshot-matchers/__tests__/asynchronous.test.js
+e2e/custom-inline-snapshot-matchers/package.json
+e2e/custom-matcher-stack-trace/__tests__/asynchronous.test.js
+e2e/custom-matcher-stack-trace/__tests__/sync.test.js
+e2e/custom-matcher-stack-trace/package.json
+e2e/custom-reporters/__tests__/add.test.js
+e2e/custom-reporters/__tests__/addFail.test.js
+e2e/custom-reporters/add.js
+e2e/custom-reporters/package.json
+e2e/custom-reporters/reporters/DefaultExportReporter.js
+e2e/custom-reporters/reporters/IncompleteReporter.js
+e2e/custom-reporters/reporters/TestReporter.js
+e2e/custom-resolver/__mocks__/manualMock.js
+e2e/custom-resolver/__tests__/customResolver.test.js
+e2e/custom-resolver/bar.js
+e2e/custom-resolver/foo.js
+e2e/custom-resolver/manualMock.js
+e2e/custom-resolver/package.json
+e2e/custom-resolver/resolver.js
+e2e/custom-test-sequencer/a.test.js
+e2e/custom-test-sequencer/b.test.js
+e2e/custom-test-sequencer/c.test.js
+e2e/custom-test-sequencer/d.test.js
+e2e/custom-test-sequencer/e.test.js
+e2e/custom-test-sequencer/package.json
+e2e/custom-test-sequencer/testSequencer.js
+e2e/custom-test-sequencer/testSequencerAsync.js
+e2e/declaration-errors/__tests__/describeReturnPromise.test.js
+e2e/declaration-errors/__tests__/describeReturnSomething.test.js
+e2e/declaration-errors/__tests__/describeThrow.test.js
+e2e/declaration-errors/package.json
+e2e/detect-open-handles/__tests__/histogram.js
+e2e/detect-open-handles/__tests__/inside.js
+e2e/detect-open-handles/__tests__/notify.js
+e2e/detect-open-handles/__tests__/outside.js
+e2e/detect-open-handles/__tests__/promise.js
+e2e/detect-open-handles/__tests__/unref.js
+e2e/detect-open-handles/babel.config.js
+e2e/detect-open-handles/package.json
+e2e/detect-open-handles/server.js
+e2e/dom-diffing/__tests__/dom.test.js
+e2e/dom-diffing/package.json
+e2e/done-in-hooks/__tests__/index.test.js
+e2e/done-in-hooks/package.json
+e2e/dynamic-require-dependencies/__tests__/dynamicRequire.test.js
+e2e/dynamic-require-dependencies/dynamicRequire.js
+e2e/dynamic-require-dependencies/package.json
+e2e/dynamic-require-dependencies/source.js
+e2e/each/__tests__/describeOnly.test.js
+e2e/each/__tests__/eachException.test.js
+e2e/each/__tests__/eachOnly.test.js
+e2e/each/__tests__/eachSkip.test.js
+e2e/each/__tests__/failure.test.js
+e2e/each/__tests__/pretty.test.js
+e2e/each/__tests__/success.test.js
+e2e/each/package.json
+e2e/empty-describe-with-hooks/__tests__/hookInDescribeWithSkippedTest.test.js
+e2e/empty-describe-with-hooks/__tests__/hookInEmptyDescribe.test.js
+e2e/empty-describe-with-hooks/__tests__/hookInEmptyNestedDescribe.test.js
+e2e/empty-describe-with-hooks/__tests__/multipleHooksInEmptyDescribe.test.js
+e2e/empty-describe-with-hooks/package.json
+e2e/empty-suite-error/__tests__/emptySuite.test.js
+e2e/empty-suite-error/package.json
+e2e/env-test/__tests__/env.test.js
+e2e/env-test/__tests__/equivalent.test.js
+e2e/env-test/package.json
+e2e/environment-after-teardown/__tests__/afterTeardown.test.js
+e2e/environment-after-teardown/package.json
+e2e/environmentOptions/__tests__/environmentOptions.test.js
+e2e/environmentOptions/package.json
+e2e/error-on-deprecated/__tests__/defaultTimeoutInterval.test.js
+e2e/error-on-deprecated/__tests__/fail.test.js
+e2e/error-on-deprecated/__tests__/jasmine.addMatchers.test.js
+e2e/error-on-deprecated/__tests__/jasmine.any.test.js
+e2e/error-on-deprecated/__tests__/jasmine.anything.test.js
+e2e/error-on-deprecated/__tests__/jasmine.arrayContaining.test.js
+e2e/error-on-deprecated/__tests__/jasmine.createSpy.test.js
+e2e/error-on-deprecated/__tests__/jasmine.objectContaining.test.js
+e2e/error-on-deprecated/__tests__/jasmine.stringMatching.test.js
+e2e/error-on-deprecated/__tests__/pending.test.js
+e2e/error-on-deprecated/__tests__/spyOn.test.js
+e2e/error-on-deprecated/__tests__/spyOnProperty.test.js
+e2e/error-on-deprecated/package.json
+e2e/esm-config/cjs/__tests__/test.js
+e2e/esm-config/cjs/jest.config.cjs
+e2e/esm-config/cjs/package.json
+e2e/esm-config/js/__tests__/test.js
+e2e/esm-config/js/jest.config.js
+e2e/esm-config/js/package.json
+e2e/esm-config/mjs/__tests__/test.js
+e2e/esm-config/mjs/jest.config.mjs
+e2e/esm-config/mjs/package.json
+e2e/expect-async-matcher/__tests__/failure.test.js
+e2e/expect-async-matcher/__tests__/success.test.js
+e2e/expect-async-matcher/babel.config.js
+e2e/expect-async-matcher/matchers.js
+e2e/expect-async-matcher/package.json
+e2e/expect-async-matcher/yarn.lock
+e2e/expect-in-vm/__tests__/expect-in-vm.test.js
+e2e/expect-in-vm/package.json
+e2e/failureDetails-property/__tests__/tests.test.js
+e2e/failureDetails-property/myreporter.js
+e2e/failureDetails-property/package.json
+e2e/failures/__tests__/__snapshots__/snapshot.test.js.snap
+e2e/failures/__tests__/__snapshots__/snapshotWithHint.test.js.snap
+e2e/failures/__tests__/assertionCount.test.js
+e2e/failures/__tests__/assertionError.test.js
+e2e/failures/__tests__/asyncFailures.test.js
+e2e/failures/__tests__/duringTests.test.js
+e2e/failures/__tests__/errorAfterTestComplete.test.js
+e2e/failures/__tests__/snapshot.test.js
+e2e/failures/__tests__/snapshotWithHint.test.js
+e2e/failures/__tests__/testMacro.test.js
+e2e/failures/__tests__/throwNumber.test.js
+e2e/failures/__tests__/throwObject.test.js
+e2e/failures/__tests__/throwObjectWithStackProp.test.js
+e2e/failures/__tests__/throwString.test.js
+e2e/failures/babel.config.js
+e2e/failures/macros.js
+e2e/failures/package.json
+e2e/failures/yarn.lock
+e2e/fake-promises/asap/__tests__/generator.test.js
+e2e/fake-promises/asap/fake-promises.js
+e2e/fake-promises/asap/package.json
+e2e/fake-promises/immediate/__tests__/generator.test.js
+e2e/fake-promises/immediate/fake-promises.js
+e2e/fake-promises/immediate/package.json
+e2e/filter/__tests__/bar.test.js
+e2e/filter/__tests__/foo.test.js
+e2e/filter/my-broken-filter.js
+e2e/filter/my-broken-setup-filter.js
+e2e/filter/my-clowny-filter.js
+e2e/filter/my-filter.js
+e2e/filter/my-secondary-filter.js
+e2e/filter/my-setup-filter.js
+e2e/filter/package.json
+e2e/focused-tests/__tests__/tests.js
+e2e/focused-tests/package.json
+e2e/generator-mock/__tests__/generatorMock.test.js
+e2e/generator-mock/index.js
+e2e/generator-mock/package.json
+e2e/global-setup-custom-transform/__tests__/test.js
+e2e/global-setup-custom-transform/index.js
+e2e/global-setup-custom-transform/package.json
+e2e/global-setup-custom-transform/setup.js
+e2e/global-setup-custom-transform/transformer.js
+e2e/global-setup-node-modules/.gitignore
+e2e/global-setup-node-modules/__tests__/test.js
+e2e/global-setup-node-modules/babel.config.js
+e2e/global-setup-node-modules/node_modules/example/index.js
+e2e/global-setup-node-modules/package.json
+e2e/global-setup-node-modules/setup.js
+e2e/global-setup/__tests__/setup1.test.js
+e2e/global-setup/__tests__/setup2.test.js
+e2e/global-setup/__tests__/setup3.test.js
+e2e/global-setup/babel.config.js
+e2e/global-setup/custom-tests-dir/pass.test.js
+e2e/global-setup/invalidSetup.js
+e2e/global-setup/invalidSetupWithNamedExport.js
+e2e/global-setup/package.json
+e2e/global-setup/project-1/setup.js
+e2e/global-setup/project-1/setup.test.js
+e2e/global-setup/project-2/setup.js
+e2e/global-setup/project-2/setup.test.js
+e2e/global-setup/projects.jest.config.js
+e2e/global-setup/setup.js
+e2e/global-setup/setupWithConfig.js
+e2e/global-setup/setupWithDefaultExport.js
+e2e/global-setup/yarn.lock
+e2e/global-teardown/__tests__/teardown1.test.js
+e2e/global-teardown/__tests__/teardown2.test.js
+e2e/global-teardown/__tests__/teardown3.test.js
+e2e/global-teardown/babel.config.js
+e2e/global-teardown/custom-tests-dir/pass.test.js
+e2e/global-teardown/invalidTeardown.js
+e2e/global-teardown/invalidTeardownWithNamedExport.js
+e2e/global-teardown/package.json
+e2e/global-teardown/project-1/teardown.js
+e2e/global-teardown/project-1/teardown.test.js
+e2e/global-teardown/project-2/teardown.js
+e2e/global-teardown/project-2/teardown.test.js
+e2e/global-teardown/projects.jest.config.js
+e2e/global-teardown/teardown.js
+e2e/global-teardown/teardownWithConfig.js
+e2e/global-teardown/teardownWithDefaultExport.js
+e2e/global-teardown/yarn.lock
+e2e/imported-globals/__tests__/env.test.js
+e2e/imported-globals/babel.config.js
+e2e/imported-globals/package.json
+e2e/jasmine-async/__tests__/asyncTestFails.test.js
+e2e/jasmine-async/__tests__/concurrent-each.test.js
+e2e/jasmine-async/__tests__/concurrent-many.test.js
+e2e/jasmine-async/__tests__/concurrent-only-each.test.js
+e2e/jasmine-async/__tests__/concurrent.test.js
+e2e/jasmine-async/__tests__/concurrentWithinDescribe.test.js
+e2e/jasmine-async/__tests__/generator.test.js
+e2e/jasmine-async/__tests__/pendingInPromise.test.js
+e2e/jasmine-async/__tests__/promiseAfterAll.test.js
+e2e/jasmine-async/__tests__/promiseAfterEach.test.js
+e2e/jasmine-async/__tests__/promiseBeforeAll.test.js
+e2e/jasmine-async/__tests__/promiseBeforeEach.test.js
+e2e/jasmine-async/__tests__/promiseFit.test.js
+e2e/jasmine-async/__tests__/promiseIt.test.js
+e2e/jasmine-async/__tests__/promiseXit.test.js
+e2e/jasmine-async/__tests__/returningValues.test.js
+e2e/jasmine-async/package.json
+e2e/json-reporter/__tests__/sum.test.js
+e2e/json-reporter/package.json
+e2e/json-reporter/sum.js
+e2e/lifecycles/__tests__/index.js
+e2e/lifecycles/index.js
+e2e/lifecycles/package.json
+e2e/list-tests/__tests__/dummy.test.js
+e2e/list-tests/__tests__/other.test.js
+e2e/list-tests/package.json
+e2e/location-in-results/__tests__/test.js
+e2e/location-in-results/package.json
+e2e/mock-json/__mocks__/data.json
+e2e/mock-json/__tests__/index.js
+e2e/mock-json/data.json
+e2e/mock-json/index.js
+e2e/mock-json/package.json
+e2e/mock-names/with-empty-mock-name-not-called/__tests__/index.js
+e2e/mock-names/with-empty-mock-name-not-called/index.js
+e2e/mock-names/with-empty-mock-name-not-called/package.json
+e2e/mock-names/with-empty-mock-name/__tests__/index.js
+e2e/mock-names/with-empty-mock-name/index.js
+e2e/mock-names/with-empty-mock-name/package.json
+e2e/mock-names/with-mock-name-call-times-fail/__tests__/index.js
+e2e/mock-names/with-mock-name-call-times-fail/index.js
+e2e/mock-names/with-mock-name-call-times-fail/package.json
+e2e/mock-names/with-mock-name-call-times-pass/__tests__/index.js
+e2e/mock-names/with-mock-name-call-times-pass/index.js
+e2e/mock-names/with-mock-name-call-times-pass/package.json
+e2e/mock-names/with-mock-name-not-called-fail/__tests__/index.js
+e2e/mock-names/with-mock-name-not-called-fail/index.js
+e2e/mock-names/with-mock-name-not-called-fail/package.json
+e2e/mock-names/with-mock-name-not-called-pass/__tests__/index.js
+e2e/mock-names/with-mock-name-not-called-pass/index.js
+e2e/mock-names/with-mock-name-not-called-pass/package.json
+e2e/mock-names/with-mock-name-not-called/__tests__/index.js
+e2e/mock-names/with-mock-name-not-called/index.js
+e2e/mock-names/with-mock-name-not-called/package.json
+e2e/mock-names/with-mock-name/__tests__/index.js
+e2e/mock-names/with-mock-name/index.js
+e2e/mock-names/with-mock-name/package.json
+e2e/mock-names/without-mock-name-not-called/__tests__/index.js
+e2e/mock-names/without-mock-name-not-called/index.js
+e2e/mock-names/without-mock-name-not-called/package.json
+e2e/mock-names/without-mock-name/__tests__/index.js
+e2e/mock-names/without-mock-name/index.js
+e2e/mock-names/without-mock-name/package.json
+e2e/modern-fake-timers/from-config/__tests__/test.js
+e2e/modern-fake-timers/from-config/package.json
+e2e/modern-fake-timers/from-jest-object/__tests__/test.js
+e2e/modern-fake-timers/from-jest-object/package.json
+e2e/module-name-mapper-correct-config/__mocks__/styleMock.js
+e2e/module-name-mapper-correct-config/__tests__/index.js
+e2e/module-name-mapper-correct-config/index.js
+e2e/module-name-mapper-correct-config/package.json
+e2e/module-name-mapper-correct-config/style.css
+e2e/module-name-mapper-correct-config/style.sass
+e2e/module-name-mapper-correct-mock-absolute-path/__tests__/index.js
+e2e/module-name-mapper-correct-mock-absolute-path/index.js
+e2e/module-name-mapper-correct-mock-absolute-path/package.json
+e2e/module-name-mapper-correct-mock-absolute-path/src/components/Button.js
+e2e/module-name-mapper-mock/__tests__/storage/track/Track.test.js
+e2e/module-name-mapper-mock/__tests__/storage/track/TrackExpected.test.js
+e2e/module-name-mapper-mock/package.json
+e2e/module-name-mapper-mock/src/storage/track/Track.js
+e2e/module-name-mapper-wrong-array-config/__tests__/index.js
+e2e/module-name-mapper-wrong-array-config/index.js
+e2e/module-name-mapper-wrong-array-config/package.json
+e2e/module-name-mapper-wrong-array-config/style.css
+e2e/module-name-mapper-wrong-config/__tests__/index.js
+e2e/module-name-mapper-wrong-config/index.js
+e2e/module-name-mapper-wrong-config/package.json
+e2e/module-name-mapper-wrong-config/style.css
+e2e/module-parent-null-in-test/__tests__/index.js
+e2e/module-parent-null-in-test/package.json
+e2e/multi-project-config-root/bar/__tests__/boggusBar.test.js
+e2e/multi-project-config-root/foo/__tests__/boggusFoo.test.js
+e2e/multi-project-config-root/package.json
+e2e/native-async-mock/Native.js
+e2e/native-async-mock/__tests__/nativeAsyncMock.test.js
+e2e/native-async-mock/package.json
+e2e/native-esm-typescript/__tests__/double.test.ts
+e2e/native-esm-typescript/babel.config.js
+e2e/native-esm-typescript/double.ts
+e2e/native-esm-typescript/package.json
+e2e/native-esm/__tests__/native-esm-tla.test.js
+e2e/native-esm/__tests__/native-esm.test.js
+e2e/native-esm/anotherDynamicImport.js
+e2e/native-esm/circularDependentA.mjs
+e2e/native-esm/circularDependentB.mjs
+e2e/native-esm/commonjs.cjs
+e2e/native-esm/commonjsNamed.cjs
+e2e/native-esm/dynamicImport.js
+e2e/native-esm/fromCjs.mjs
+e2e/native-esm/fromEsm.cjs
+e2e/native-esm/index.js
+e2e/native-esm/namedExport.cjs
+e2e/native-esm/namespaceExport.js
+e2e/native-esm/package.json
+e2e/native-esm/stateful.cjs
+e2e/native-esm/stateful.mjs
+e2e/nested-event-loop/__tests__/nestedEventLoop.test.js
+e2e/nested-event-loop/package.json
+e2e/nested-test-definitions/__tests__/nestedDescribeInTest.js
+e2e/nested-test-definitions/__tests__/nestedHookInTest.js
+e2e/nested-test-definitions/__tests__/nestedTestOutsideDescribe.js
+e2e/nested-test-definitions/__tests__/nestedTestWithinDescribe.js
+e2e/nested-test-definitions/index.js
+e2e/nested-test-definitions/package.json
+e2e/no-tests-found-test/package.json
+e2e/node-path/__tests__/nodePath.test.js
+e2e/node-path/package.json
+e2e/node-path/src/path/file.js
+e2e/override-globals/__tests__/index.js
+e2e/override-globals/babel.config.js
+e2e/override-globals/index.js
+e2e/override-globals/package.json
+e2e/override-globals/setup.js
+e2e/package.json
+e2e/pnp/__tests__/index.js
+e2e/pnp/__tests__/undeclared-dependency.test.js
+e2e/pnp/lib/index.js
+e2e/pnp/lib/package.json
+e2e/pnp/package.json
+e2e/pnp/undeclared-dependency/index.js
+e2e/pnp/undeclared-dependency/package.json
+e2e/pnp/yarn.lock
+e2e/presets/js/__tests__/index.js
+e2e/presets/js/node_modules/jest-preset-js/jest-preset.js
+e2e/presets/js/node_modules/jest-preset-js/mapper.js
+e2e/presets/js/package.json
+e2e/presets/json/__tests__/index.js
+e2e/presets/json/node_modules/jest-preset-json/jest-preset.json
+e2e/presets/json/node_modules/jest-preset-json/mapper.js
+e2e/presets/json/package.json
+e2e/process-exit/__tests__/test.js
+e2e/process-exit/babel.config.js
+e2e/process-exit/package.json
+e2e/promise-and-callback/__tests__/promise-and-callback.test.js
+e2e/promise-and-callback/package.json
+e2e/promise-reject/package.json
+e2e/regex-(char-in-path/__tests__/regexCharInPath.test.js
+e2e/regex-(char-in-path/package.json
+e2e/require-after-teardown/__tests__/lateRequire.test.js
+e2e/require-after-teardown/index.js
+e2e/require-after-teardown/package.json
+e2e/require-main-after-create-require/__tests__/parent.test.js
+e2e/require-main-after-create-require/child.js
+e2e/require-main-after-create-require/empty.js
+e2e/require-main-after-create-require/package.json
+e2e/require-main-isolate-modules/__tests__/index.test.js
+e2e/require-main-isolate-modules/child.js
+e2e/require-main-isolate-modules/index.js
+e2e/require-main-isolate-modules/package.json
+e2e/require-main-reset-modules/__tests__/resetModulesCallDirectly.test.js
+e2e/require-main-reset-modules/__tests__/resetModulesCallIndirectly.test.js
+e2e/require-main-reset-modules/__tests__/resetModulesFlagDirectly.test.js
+e2e/require-main-reset-modules/__tests__/resetModulesFlagIndirectly.test.js
+e2e/require-main-reset-modules/direct.js
+e2e/require-main-reset-modules/indirect.js
+e2e/require-main-reset-modules/package.json
+e2e/require-main/__tests__/loader.test.js
+e2e/require-main/babel.config.js
+e2e/require-main/example.js
+e2e/require-main/loader.js
+e2e/require-main/package.json
+e2e/reset-modules/__tests__/resetModules.test.js
+e2e/reset-modules/package.json
+e2e/resolve-get-paths/__tests__/resolveGetPaths.test.js
+e2e/resolve-get-paths/babel.config.js
+e2e/resolve-get-paths/package.json
+e2e/resolve-no-extensions/__tests__/test.js
+e2e/resolve-no-extensions/babel.config.js
+e2e/resolve-no-extensions/index.js
+e2e/resolve-no-extensions/package.json
+e2e/resolve-no-extensions/some-json-file.json
+e2e/resolve-node-module/__mocks__/mock-jsx-module/index.jsx
+e2e/resolve-node-module/__mocks__/mock-jsx-module/package.json
+e2e/resolve-node-module/__mocks__/mock-module-alt/index.js
+e2e/resolve-node-module/__mocks__/mock-module-alt/package.json
+e2e/resolve-node-module/__mocks__/mock-module-without-pkg/index.js
+e2e/resolve-node-module/__mocks__/mock-module/index.js
+e2e/resolve-node-module/__mocks__/mock-module/package.json
+e2e/resolve-node-module/__tests__/resolve-node-module.test.js
+e2e/resolve-node-module/package.json
+e2e/resolve-with-paths/__tests__/resolveWithPaths.test.js
+e2e/resolve-with-paths/babel.config.js
+e2e/resolve-with-paths/dir/mod.js
+e2e/resolve-with-paths/package.json
+e2e/resolve/Test5.js
+e2e/resolve/Test7.js
+e2e/resolve/__mocks__/Test5.js
+e2e/resolve/__mocks__/Test6.js
+e2e/resolve/__tests__/nope.txt
+e2e/resolve/__tests__/resolve.test.js
+e2e/resolve/hasteImpl.js
+e2e/resolve/package.json
+e2e/resolve/requiresUnexistingModule.js
+e2e/resolve/test1.android.js
+e2e/resolve/test1.js
+e2e/resolve/test1.json
+e2e/resolve/test1.native.js
+e2e/resolve/test2.js
+e2e/resolve/test2.json
+e2e/resolve/test2.native.js
+e2e/resolve/test2mapper.js
+e2e/resolve/test2mapper.native.js
+e2e/resolve/test3.js
+e2e/resolve/test3.json
+e2e/resolve/test4.json
+e2e/run-programmatically/babel.config.js
+e2e/run-programmatically/cjs.js
+e2e/run-programmatically/esm.js
+e2e/run-programmatically/index.js
+e2e/run-programmatically/package.json
+e2e/runJest.ts
+e2e/runtime-internal-module-registry/__mocks__/fs.js
+e2e/runtime-internal-module-registry/__tests__/runtimeInternalModuleRegistry.test.js
+e2e/runtime-internal-module-registry/package.json
+e2e/select-projects-missing-name/__tests__/first-project.test.js
+e2e/select-projects-missing-name/__tests__/second-project.test.js
+e2e/select-projects-missing-name/package.json
+e2e/select-projects/__tests__/first-project.test.js
+e2e/select-projects/__tests__/second-project.test.js
+e2e/select-projects/package.json
+e2e/set-immediate/__tests__/setImmediate.test.js
+e2e/set-immediate/package.json
+e2e/setup-files-after-env-config/__tests__/runnerPatch.test.js
+e2e/setup-files-after-env-config/__tests__/test1.test.js
+e2e/setup-files-after-env-config/__tests__/test2.test.js
+e2e/setup-files-after-env-config/setup1.js
+e2e/setup-files-after-env-config/setup2.js
+e2e/setup-files-after-env-config/setupHooksIntoRunner.js
+e2e/snapshot-escape/__tests__/snapshot.test.js
+e2e/snapshot-escape/__tests__/snapshotEscapeRegex.js
+e2e/snapshot-escape/__tests__/snapshotEscapeSubstitution.test.js
+e2e/snapshot-escape/package.json
+e2e/snapshot-mock-fs/__tests__/snapshot.test.js
+e2e/snapshot-mock-fs/package.json
+e2e/snapshot-resolver/__tests__/snapshot.test.js
+e2e/snapshot-resolver/customSnapshotResolver.js
+e2e/snapshot-resolver/package.json
+e2e/snapshot-serializers/__tests__/snapshot.test.js
+e2e/snapshot-serializers/package.json
+e2e/snapshot-serializers/plugins/bar.js
+e2e/snapshot-serializers/plugins/foo/index.js
+e2e/snapshot-serializers/transformer.js
+e2e/snapshot-serializers/utils.js
+e2e/snapshot-unknown/__tests__/__snapshots__/fails.test.js.snap
+e2e/snapshot-unknown/__tests__/__snapshots__/fails2.test.js.snap
+e2e/snapshot-unknown/__tests__/__snapshots__/works.test.js.snap
+e2e/snapshot-unknown/__tests__/works.test.js
+e2e/snapshot-unknown/package.json
+e2e/snapshot/__tests__/secondSnapshot.test.js
+e2e/snapshot/__tests__/snapshot.test.js
+e2e/snapshot/package.json
+e2e/stack-trace-no-capture-stack-trace/__tests__/runtimeError.test.js
+e2e/stack-trace-no-capture-stack-trace/package.json
+e2e/stack-trace-source-maps-with-coverage/__tests__/fails.ts
+e2e/stack-trace-source-maps-with-coverage/lib.ts
+e2e/stack-trace-source-maps-with-coverage/package.json
+e2e/stack-trace-source-maps-with-coverage/preprocessor.js
+e2e/stack-trace-source-maps-with-coverage/yarn.lock
+e2e/stack-trace-source-maps/__tests__/fails.ts
+e2e/stack-trace-source-maps/package.json
+e2e/stack-trace-source-maps/preprocessor.js
+e2e/stack-trace-source-maps/yarn.lock
+e2e/stack-trace/__tests__/runtimeError.test.js
+e2e/stack-trace/__tests__/stackTrace.test.js
+e2e/stack-trace/__tests__/stackTraceWithoutMessage.test.js
+e2e/stack-trace/__tests__/testError.test.js
+e2e/stack-trace/package.json
+e2e/test-environment-async/TestEnvironment.js
+e2e/test-environment-async/__tests__/custom.test.js
+e2e/test-environment-async/package.json
+e2e/test-environment-circus-async/CircusAsyncHandleTestEventEnvironment.js
+e2e/test-environment-circus-async/__tests__/circusHandleTestEvent.test.js
+e2e/test-environment-circus-async/package.json
+e2e/test-environment-circus/CircusHandleTestEventEnvironment.js
+e2e/test-environment-circus/__tests__/circusHandleTestEvent.test.js
+e2e/test-environment-circus/package.json
+e2e/test-environment/DocblockPragmasEnvironment.js
+e2e/test-environment/EsmDefaultEnvironment.js
+e2e/test-environment/__tests__/docblockPragmas.test.js
+e2e/test-environment/__tests__/env.test.js
+e2e/test-environment/__tests__/esmDefault.test.js
+e2e/test-environment/package.json
+e2e/test-in-root/foo.js
+e2e/test-in-root/footest.js
+e2e/test-in-root/package.json
+e2e/test-in-root/spec.js
+e2e/test-in-root/test.js
+e2e/test-name-pattern-skipped/__tests__/testNamePatternSkipped.test.js
+e2e/test-name-pattern-skipped/package.json
+e2e/test-name-pattern/__tests__/testNamePattern.test.js
+e2e/test-name-pattern/package.json
+e2e/test-results-processor/__tests__/processor.test.js
+e2e/test-results-processor/package.json
+e2e/test-results-processor/processor.js
+e2e/test-retries/__tests__/beforeAllFailure.test.js
+e2e/test-retries/__tests__/control.test.js
+e2e/test-retries/__tests__/e2e.test.js
+e2e/test-retries/__tests__/retry.test.js
+e2e/test-retries/package.json
+e2e/test-retries/reporters/RetryReporter.js
+e2e/test-todo/__tests__/statuses.test.js
+e2e/test-todo/__tests__/todoMultipleArgs.test.js
+e2e/test-todo/__tests__/todoNoArgs.test.js
+e2e/test-todo/__tests__/todoNonString.test.js
+e2e/test-todo/__tests__/verbose.test.js
+e2e/test-todo/package.json
+e2e/timer-reset-mocks/after-reset-all-mocks/index.js
+e2e/timer-reset-mocks/after-reset-all-mocks/package.json
+e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js
+e2e/timer-reset-mocks/with-reset-mocks/index.js
+e2e/timer-reset-mocks/with-reset-mocks/package.json
+e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js
+e2e/timer-use-real-timers/__tests__/useRealTimers.test.js
+e2e/timer-use-real-timers/package.json
+e2e/to-match-inline-snapshot-with-retries/package.json
+e2e/to-match-inline-snapshot/babel.config.js
+e2e/to-match-inline-snapshot/package.json
+e2e/to-match-snapshot-with-retries/package.json
+e2e/to-match-snapshot-with-string-serializer/package.json
+e2e/to-match-snapshot-with-string-serializer/serializers/string.js
+e2e/to-match-snapshot/package.json
+e2e/to-throw-error-matching-inline-snapshot/babel.config.js
+e2e/to-throw-error-matching-inline-snapshot/package.json
+e2e/to-throw-error-matching-snapshot/package.json
+e2e/transform-linked-modules/__tests__/linkedModules.test.js
+e2e/transform-linked-modules/ignored/normal.js
+e2e/transform-linked-modules/ignored/symlink.js
+e2e/transform-linked-modules/package.json
+e2e/transform-linked-modules/package/index.js
+e2e/transform-linked-modules/preprocessor.js
+e2e/transform/babel-jest-ignored/__tests__/ignoredFile.test.js
+e2e/transform/babel-jest-ignored/babel.config.js
+e2e/transform/babel-jest-ignored/package.json
+e2e/transform/babel-jest-manual/__tests__/babelJest.test.js
+e2e/transform/babel-jest-manual/foo.js
+e2e/transform/babel-jest-manual/package.json
+e2e/transform/babel-jest-manual/transformer.js
+e2e/transform/babel-jest-manual/yarn.lock
+e2e/transform/babel-jest/__tests__/babelJest.test.js
+e2e/transform/babel-jest/__tests__/changedCwd.test.js
+e2e/transform/babel-jest/babel.config.js
+e2e/transform/babel-jest/notCovered.js
+e2e/transform/babel-jest/package.json
+e2e/transform/babel-jest/some-dir/.gitkeep
+e2e/transform/babel-jest/this-directory-is-covered/covered.js
+e2e/transform/babel-jest/this-directory-is-covered/excludedFromCoverage.js
+e2e/transform/babel-jest/yarn.lock
+e2e/transform/cache/__tests__/aTests.js
+e2e/transform/cache/__tests__/bTests.js
+e2e/transform/cache/__tests__/cTests.js
+e2e/transform/cache/__tests__/dTests.js
+e2e/transform/cache/common-file.js
+e2e/transform/cache/package.json
+e2e/transform/cache/transformer.js
+e2e/transform/custom-instrumenting-preprocessor/__tests__/customPreprocessor.test.js
+e2e/transform/custom-instrumenting-preprocessor/package.json
+e2e/transform/custom-instrumenting-preprocessor/preprocessor.js
+e2e/transform/custom-instrumenting-preprocessor/src/index.js
+e2e/transform/custom-instrumenting-preprocessor/src/someOtherFile.js
+e2e/transform/ecmascript-modules-support/__tests__/ecmascriptModulesSupport.mjs
+e2e/transform/ecmascript-modules-support/babel.config.js
+e2e/transform/ecmascript-modules-support/package.json
+e2e/transform/ecmascript-modules-support/src/index.mjs
+e2e/transform/ecmascript-modules-support/src/module.mjs
+e2e/transform/multiple-transformers/__tests__/__snapshots__/multipleTransformers.test.js.snap
+e2e/transform/multiple-transformers/__tests__/multipleTransformers.test.js
+e2e/transform/multiple-transformers/babel.config.js
+e2e/transform/multiple-transformers/cssPreprocessor.js
+e2e/transform/multiple-transformers/filePreprocessor.js
+e2e/transform/multiple-transformers/jsPreprocessor.js
+e2e/transform/multiple-transformers/package.json
+e2e/transform/multiple-transformers/src/App.css
+e2e/transform/multiple-transformers/src/App.js
+e2e/transform/multiple-transformers/src/logo.svg
+e2e/transform/multiple-transformers/yarn.lock
+e2e/transform/no-babel-jest/__tests__/failsWithSyntaxError.test.js
+e2e/transform/no-babel-jest/__tests__/passesWithNoBabelJest.js
+e2e/transform/no-babel-jest/package.json
+e2e/transform/no-babel-jest/this-directory-is-covered/covered.js
+e2e/transform/no-babel-jest/this-directory-is-covered/excludedFromCoverage.js
+e2e/transform/transform-environment/__tests__/add.test.js
+e2e/transform/transform-environment/babel.config.js
+e2e/transform/transform-environment/environment.ts
+e2e/transform/transform-environment/package.json
+e2e/transform/transform-environment/tsconfig.json
+e2e/transform/transform-runner/__tests__/add.test.js
+e2e/transform/transform-runner/babel.config.js
+e2e/transform/transform-runner/package.json
+e2e/transform/transform-runner/runner.ts
+e2e/transform/transform-runner/tsconfig.json
+e2e/transform/transform-testrunner/__tests__/add.test.js
+e2e/transform/transform-testrunner/babel.config.js
+e2e/transform/transform-testrunner/package.json
+e2e/transform/transform-testrunner/test-runner.ts
+e2e/transform/transform-testrunner/tsconfig.json
+e2e/transform/transformer-config/.babelrc
+e2e/transform/transformer-config/NotCovered.js
+e2e/transform/transformer-config/__tests__/transformer-config.test.js
+e2e/transform/transformer-config/package.json
+e2e/transform/transformer-config/this-directory-is-covered/Covered.js
+e2e/transform/transformer-config/this-directory-is-covered/ExcludedFromCoverage.js
+e2e/transform/transformer-config/yarn.lock
+e2e/tsconfig.json
+e2e/typescript-coverage/__tests__/coveredTest.ts
+e2e/typescript-coverage/covered.ts
+e2e/typescript-coverage/package.json
+e2e/typescript-coverage/typescriptPreprocessor.js
+e2e/typescript-coverage/yarn.lock
+e2e/v8-coverage/empty-sourcemap/babel.config.js
+e2e/v8-coverage/empty-sourcemap/package.json
+e2e/v8-coverage/empty-sourcemap/test.ts
+e2e/v8-coverage/empty-sourcemap/types.ts
+e2e/v8-coverage/no-sourcemap/Thing.js
+e2e/v8-coverage/no-sourcemap/__tests__/Thing.test.js
+e2e/v8-coverage/no-sourcemap/cssTransform.js
+e2e/v8-coverage/no-sourcemap/package.json
+e2e/v8-coverage/no-sourcemap/x.css
+e2e/verbose-reporter/__tests__/verbose.test.js
+e2e/verbose-reporter/package.json
+e2e/wrong-env/__tests__/beforeTest.js
+e2e/wrong-env/__tests__/jsdom.js
+e2e/wrong-env/__tests__/node.js
+e2e/wrong-env/package.json
+examples/angular/.babelrc.js
+examples/angular/app.component.spec.ts
+examples/angular/app.component.ts
+examples/angular/app.module.ts
+examples/angular/jest.config.js
+examples/angular/package.json
+examples/angular/setupJest.js
+examples/angular/shared/data.service.spec.ts
+examples/angular/shared/data.service.ts
+examples/angular/shared/sub.service.spec.ts
+examples/angular/shared/sub.service.ts
+examples/async/.babelrc.js
+examples/async/__mocks__/request.js
+examples/async/__tests__/user.test.js
+examples/async/package.json
+examples/async/request.js
+examples/async/user.js
+examples/automatic-mocks/.babelrc.js
+examples/automatic-mocks/__tests__/automock.test.js
+examples/automatic-mocks/__tests__/createMockFromModule.test.js
+examples/automatic-mocks/__tests__/disableAutomocking.test.js
+examples/automatic-mocks/package.json
+examples/automatic-mocks/utils.js
+examples/enzyme/.babelrc.js
+examples/enzyme/CheckboxWithLabel.js
+examples/enzyme/__tests__/CheckboxWithLabel-test.js
+examples/enzyme/package.json
+examples/getting-started/.babelrc.js
+examples/getting-started/package.json
+examples/getting-started/sum.js
+examples/getting-started/sum.test.js
+examples/jquery/.babelrc.js
+examples/jquery/__tests__/display_user.test.js
+examples/jquery/__tests__/fetch_current_user.test.js
+examples/jquery/displayUser.js
+examples/jquery/fetchCurrentUser.js
+examples/jquery/package.json
+examples/manual-mocks/.babelrc.js
+examples/manual-mocks/FileSummarizer.js
+examples/manual-mocks/__mocks__/fs.js
+examples/manual-mocks/__mocks__/lodash.js
+examples/manual-mocks/__tests__/file_summarizer.test.js
+examples/manual-mocks/__tests__/lodashMocking.test.js
+examples/manual-mocks/__tests__/user.test.js
+examples/manual-mocks/__tests__/userMocked.test.js
+examples/manual-mocks/models/__mocks__/user.js
+examples/manual-mocks/models/user.js
+examples/manual-mocks/package.json
+examples/module-mock/.babelrc.js
+examples/module-mock/__tests__/full_mock.js
+examples/module-mock/__tests__/mock_per_test.js
+examples/module-mock/__tests__/partial_mock.js
+examples/module-mock/fruit.js
+examples/module-mock/package.json
+examples/mongodb/__test__/db.test.js
+examples/mongodb/babel.config.js
+examples/mongodb/jest.config.js
+examples/mongodb/mongo-environment.js
+examples/mongodb/package.json
+examples/mongodb/setup.js
+examples/mongodb/teardown.js
+examples/react-native/.babelrc.js
+examples/react-native/.buckconfig
+examples/react-native/.gitignore
+examples/react-native/.watchmanconfig
+examples/react-native/Intro.js
+examples/react-native/__tests__/__snapshots__/intro.test.js.snap
+examples/react-native/__tests__/intro.test.js
+examples/react-native/index.js
+examples/react-native/jest.config.js
+examples/react-native/package.json
+examples/react-testing-library/.babelrc.js
+examples/react-testing-library/CheckboxWithLabel.js
+examples/react-testing-library/__tests__/CheckboxWithLabel-test.js
+examples/react-testing-library/package.json
+examples/react/.babelrc.js
+examples/react/CheckboxWithLabel.js
+examples/react/__tests__/CheckboxWithLabel-test.js
+examples/react/package.json
+examples/snapshot/.babelrc.js
+examples/snapshot/Clock.react.js
+examples/snapshot/Link.react.js
+examples/snapshot/__tests__/__snapshots__/clock.react.test.js.snap
+examples/snapshot/__tests__/__snapshots__/link.react.test.js.snap
+examples/snapshot/__tests__/clock.react.test.js
+examples/snapshot/__tests__/link.react.test.js
+examples/snapshot/package.json
+examples/timer/.babelrc.js
+examples/timer/__tests__/infinite_timer_game.test.js
+examples/timer/__tests__/timer_game.test.js
+examples/timer/infiniteTimerGame.js
+examples/timer/package.json
+examples/timer/timerGame.js
+examples/typescript/.babelrc.js
+examples/typescript/CheckboxWithLabel.tsx
+examples/typescript/__tests__/CheckboxWithLabel-test.tsx
+examples/typescript/__tests__/calc.test.ts
+examples/typescript/__tests__/sub-test.ts
+examples/typescript/__tests__/sum-test.ts
+examples/typescript/__tests__/sum.test.js
+examples/typescript/calc.ts
+examples/typescript/memory.ts
+examples/typescript/package.json
+examples/typescript/sub.ts
+examples/typescript/sum.js
+examples/typescript/sum.ts
+examples/typescript/tsconfig.json
+fixtures/callExpressionWithoutText.example
+fixtures/dangerjs/github.example
+fixtures/dangerjs/travis-ci.example
+fixtures/declarationWithoutAssignment.example
+fixtures/failing-jsons/failing_expects.json
+fixtures/failing-jsons/failing_jest_json.json
+fixtures/failing-jsons/failing_json_multiple.json
+fixtures/failing-jsons/failing_metaphysics.json
+fixtures/failing-jsons/monorepo_root_1.json
+fixtures/failing-jsons/monorepo_root_2.json
+fixtures/global_its.example
+fixtures/metaphysics/partner_show.example
+fixtures/nested_its.example
+fixtures/parser_tests.js
+jest
+jest.config.ci.js
+jest.config.js
+jest.config.types.js
+lerna.json
+package.json
+packages/babel-jest/.npmignore
+packages/babel-jest/README.md
+packages/babel-jest/package.json
+packages/babel-jest/src/__tests__/index.ts
+packages/babel-jest/src/index.ts
+packages/babel-jest/src/loadBabelConfig.ts
+packages/babel-jest/tsconfig.json
+packages/babel-plugin-jest-hoist/.npmignore
+packages/babel-plugin-jest-hoist/README.md
+packages/babel-plugin-jest-hoist/package.json
+packages/babel-plugin-jest-hoist/src/__tests__/__snapshots__/hoistPlugin.test.ts.snap
+packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts
+packages/babel-plugin-jest-hoist/src/index.ts
+packages/babel-plugin-jest-hoist/tsconfig.json
+packages/babel-preset-jest/.npmignore
+packages/babel-preset-jest/README.md
+packages/babel-preset-jest/index.js
+packages/babel-preset-jest/package.json
+packages/diff-sequences/.npmignore
+packages/diff-sequences/README.md
+packages/diff-sequences/package.json
+packages/diff-sequences/perf/example.md
+packages/diff-sequences/perf/index.js
+packages/diff-sequences/src/__tests__/__snapshots__/index.test.ts.snap
+packages/diff-sequences/src/__tests__/index.property.test.ts
+packages/diff-sequences/src/__tests__/index.test.ts
+packages/diff-sequences/src/index.ts
+packages/diff-sequences/tsconfig.json
+packages/expect/.npmignore
+packages/expect/README.md
+packages/expect/package.json
+packages/expect/src/__tests__/__arbitraries__/sharedSettings.ts
+packages/expect/src/__tests__/__snapshots__/assertionCounts.test.ts.snap
+packages/expect/src/__tests__/__snapshots__/extend.test.ts.snap
+packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap
+packages/expect/src/__tests__/__snapshots__/spyMatchers.test.ts.snap
+packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap
+packages/expect/src/__tests__/assertionCounts.test.ts
+packages/expect/src/__tests__/asymmetricMatchers.test.ts
+packages/expect/src/__tests__/extend.test.ts
+packages/expect/src/__tests__/isError.test.ts
+packages/expect/src/__tests__/matchers-toContain.property.test.ts
+packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts
+packages/expect/src/__tests__/matchers-toEqual.property.test.ts
+packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts
+packages/expect/src/__tests__/matchers.test.js
+packages/expect/src/__tests__/spyMatchers.test.ts
+packages/expect/src/__tests__/stacktrace.test.ts
+packages/expect/src/__tests__/symbolInObjects.test.ts
+packages/expect/src/__tests__/toEqual-dom.test.ts
+packages/expect/src/__tests__/toThrowMatchers.test.ts
+packages/expect/src/__tests__/utils.test.ts
+packages/expect/src/asymmetricMatchers.ts
+packages/expect/src/extractExpectedAssertionsErrors.ts
+packages/expect/src/index.ts
+packages/expect/src/jasmineUtils.ts
+packages/expect/src/jestMatchersObject.ts
+packages/expect/src/matchers.ts
+packages/expect/src/print.ts
+packages/expect/src/spyMatchers.ts
+packages/expect/src/toThrowMatchers.ts
+packages/expect/src/types.ts
+packages/expect/src/utils.ts
+packages/expect/tsconfig.json
+packages/jest-changed-files/.npmignore
+packages/jest-changed-files/README.md
+packages/jest-changed-files/package.json
+packages/jest-changed-files/src/git.ts
+packages/jest-changed-files/src/hg.ts
+packages/jest-changed-files/src/index.ts
+packages/jest-changed-files/src/types.ts
+packages/jest-changed-files/tsconfig.json
+packages/jest-circus/.npmignore
+packages/jest-circus/README.md
+packages/jest-circus/package.json
+packages/jest-circus/runner.js
+packages/jest-circus/src/__mocks__/testEventHandler.ts
+packages/jest-circus/src/__mocks__/testUtils.ts
+packages/jest-circus/src/__tests__/__snapshots__/afterAll.test.ts.snap
+packages/jest-circus/src/__tests__/__snapshots__/baseTest.test.ts.snap
+packages/jest-circus/src/__tests__/__snapshots__/hooks.test.ts.snap
+packages/jest-circus/src/__tests__/afterAll.test.ts
+packages/jest-circus/src/__tests__/baseTest.test.ts
+packages/jest-circus/src/__tests__/circusItTestError.test.ts
+packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts
+packages/jest-circus/src/__tests__/hooks.test.ts
+packages/jest-circus/src/__tests__/hooksError.test.ts
+packages/jest-circus/src/eventHandler.ts
+packages/jest-circus/src/formatNodeAssertErrors.ts
+packages/jest-circus/src/globalErrorHandlers.ts
+packages/jest-circus/src/index.ts
+packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts
+packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts
+packages/jest-circus/src/legacy-code-todo-rewrite/jestExpect.ts
+packages/jest-circus/src/run.ts
+packages/jest-circus/src/state.ts
+packages/jest-circus/src/testCaseReportHandler.ts
+packages/jest-circus/src/types.ts
+packages/jest-circus/src/utils.ts
+packages/jest-circus/tsconfig.json
+packages/jest-cli/.npmignore
+packages/jest-cli/README.md
+packages/jest-cli/bin/jest.js
+packages/jest-cli/package.json
+packages/jest-cli/src/__tests__/cli/args.test.ts
+packages/jest-cli/src/cli/args.ts
+packages/jest-cli/src/cli/index.ts
+packages/jest-cli/src/index.ts
+packages/jest-cli/src/init/__tests__/__snapshots__/init.test.js.snap
+packages/jest-cli/src/init/__tests__/__snapshots__/modifyPackageJson.test.ts.snap
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-cjs/jest.config.cjs
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-cjs/package.json
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-js/jest.config.js
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-js/package.json
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-json/jest.config.json
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-json/package.json
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-mjs/jest.config.mjs
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-mjs/package.json
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-ts/jest.config.ts
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-file-ts/package.json
+packages/jest-cli/src/init/__tests__/fixtures/has-jest-config-in-package-json/package.json
+packages/jest-cli/src/init/__tests__/fixtures/no-package-json/index.js
+packages/jest-cli/src/init/__tests__/fixtures/only-package-json/package.json
+packages/jest-cli/src/init/__tests__/fixtures/test-generated-jest-config-ts/package.json
+packages/jest-cli/src/init/__tests__/fixtures/test-script-configured/package.json
+packages/jest-cli/src/init/__tests__/fixtures/type-module/package.json
+packages/jest-cli/src/init/__tests__/fixtures/typescript-in-dependencies/package.json
+packages/jest-cli/src/init/__tests__/fixtures/typescript-in-dev-dependencies/package.json
+packages/jest-cli/src/init/__tests__/init.test.js
+packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts
+packages/jest-cli/src/init/errors.ts
+packages/jest-cli/src/init/generateConfigFile.ts
+packages/jest-cli/src/init/index.ts
+packages/jest-cli/src/init/modifyPackageJson.ts
+packages/jest-cli/src/init/questions.ts
+packages/jest-cli/src/init/types.ts
+packages/jest-cli/tsconfig.json
+packages/jest-config/.npmignore
+packages/jest-config/package.json
+packages/jest-config/src/Defaults.ts
+packages/jest-config/src/Deprecated.ts
+packages/jest-config/src/Descriptions.ts
+packages/jest-config/src/ReporterValidationErrors.ts
+packages/jest-config/src/ValidConfig.ts
+packages/jest-config/src/__mocks__/fs.js
+packages/jest-config/src/__mocks__/os.js
+packages/jest-config/src/__mocks__/read-pkg.js
+packages/jest-config/src/__tests__/Defaults.test.ts
+packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap
+packages/jest-config/src/__tests__/getMaxWorkers.test.ts
+packages/jest-config/src/__tests__/jest-preset.json
+packages/jest-config/src/__tests__/normalize.test.js
+packages/jest-config/src/__tests__/readConfig.test.ts
+packages/jest-config/src/__tests__/readConfigs.test.ts
+packages/jest-config/src/__tests__/resolveConfigPath.test.ts
+packages/jest-config/src/__tests__/setFromArgv.test.ts
+packages/jest-config/src/__tests__/validatePattern.test.ts
+packages/jest-config/src/color.ts
+packages/jest-config/src/constants.ts
+packages/jest-config/src/getCacheDirectory.ts
+packages/jest-config/src/getMaxWorkers.ts
+packages/jest-config/src/index.ts
+packages/jest-config/src/normalize.ts
+packages/jest-config/src/readConfigFileAndSetRootDir.ts
+packages/jest-config/src/resolveConfigPath.ts
+packages/jest-config/src/setFromArgv.ts
+packages/jest-config/src/utils.ts
+packages/jest-config/src/validatePattern.ts
+packages/jest-config/src/vendor/jsonlint.js
+packages/jest-config/tsconfig.json
+packages/jest-console/.npmignore
+packages/jest-console/package.json
+packages/jest-console/src/BufferedConsole.ts
+packages/jest-console/src/CustomConsole.ts
+packages/jest-console/src/NullConsole.ts
+packages/jest-console/src/__tests__/CustomConsole.test.ts
+packages/jest-console/src/__tests__/bufferedConsole.test.ts
+packages/jest-console/src/__tests__/getConsoleOutput.test.ts
+packages/jest-console/src/getConsoleOutput.ts
+packages/jest-console/src/index.ts
+packages/jest-console/src/types.ts
+packages/jest-console/tsconfig.json
+packages/jest-core/.npmignore
+packages/jest-core/README.md
+packages/jest-core/package.json
+packages/jest-core/src/FailedTestsCache.ts
+packages/jest-core/src/ReporterDispatcher.ts
+packages/jest-core/src/SearchSource.ts
+packages/jest-core/src/SnapshotInteractiveMode.ts
+packages/jest-core/src/TestNamePatternPrompt.ts
+packages/jest-core/src/TestPathPatternPrompt.ts
+packages/jest-core/src/TestScheduler.ts
+packages/jest-core/src/TestWatcher.ts
+packages/jest-core/src/__tests__/FailedTestsCache.test.js
+packages/jest-core/src/__tests__/SearchSource.test.ts
+packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js
+packages/jest-core/src/__tests__/TestScheduler.test.js
+packages/jest-core/src/__tests__/__fixtures__/watchPlugin.js
+packages/jest-core/src/__tests__/__fixtures__/watchPlugin2.js
+packages/jest-core/src/__tests__/__fixtures__/watchPluginThrows.js
+packages/jest-core/src/__tests__/__snapshots__/SnapshotInteractiveMode.test.js.snap
+packages/jest-core/src/__tests__/__snapshots__/getNoTestsFoundMessage.test.js.snap
+packages/jest-core/src/__tests__/__snapshots__/watch.test.js.snap
+packages/jest-core/src/__tests__/__snapshots__/watchFilenamePatternMode.test.js.snap
+packages/jest-core/src/__tests__/__snapshots__/watchTestNamePatternMode.test.js.snap
+packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js
+packages/jest-core/src/__tests__/globals.test.ts
+packages/jest-core/src/__tests__/runJest.test.js
+packages/jest-core/src/__tests__/testSchedulerHelper.test.js
+packages/jest-core/src/__tests__/test_root/.hiddenFolder/not-really-a-test.txt
+packages/jest-core/src/__tests__/test_root/__testtests__/do-not-match-me.txt
+packages/jest-core/src/__tests__/test_root/__testtests__/not-really-a-test.txt
+packages/jest-core/src/__tests__/test_root/__testtests__/test.foobar
+packages/jest-core/src/__tests__/test_root/__testtests__/test.js
+packages/jest-core/src/__tests__/test_root/__testtests__/test.jsx
+packages/jest-core/src/__tests__/test_root/module.foobar
+packages/jest-core/src/__tests__/test_root/module.jsx
+packages/jest-core/src/__tests__/test_root/noTests.js
+packages/jest-core/src/__tests__/test_root_with_(parentheses)/__testtests__/test.js
+packages/jest-core/src/__tests__/test_root_with_(parentheses)/module.jsx
+packages/jest-core/src/__tests__/watch.test.js
+packages/jest-core/src/__tests__/watchFileChanges.test.ts
+packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js
+packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js
+packages/jest-core/src/assets/jest_logo.png
+packages/jest-core/src/cli/index.ts
+packages/jest-core/src/collectHandles.ts
+packages/jest-core/src/getChangedFilesPromise.ts
+packages/jest-core/src/getConfigsOfProjectsToRun.ts
+packages/jest-core/src/getNoTestFound.ts
+packages/jest-core/src/getNoTestFoundFailed.ts
+packages/jest-core/src/getNoTestFoundPassWithNoTests.ts
+packages/jest-core/src/getNoTestFoundRelatedToChangedFiles.ts
+packages/jest-core/src/getNoTestFoundVerbose.ts
+packages/jest-core/src/getNoTestsFoundMessage.ts
+packages/jest-core/src/getProjectDisplayName.ts
+packages/jest-core/src/getProjectNamesMissingWarning.ts
+packages/jest-core/src/getSelectProjectsMessage.ts
+packages/jest-core/src/jest.ts
+packages/jest-core/src/lib/__tests__/__snapshots__/logDebugMessages.test.ts.snap
+packages/jest-core/src/lib/__tests__/isValidPath.test.ts
+packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts
+packages/jest-core/src/lib/activeFiltersMessage.ts
+packages/jest-core/src/lib/createContext.ts
+packages/jest-core/src/lib/handleDeprecationWarnings.ts
+packages/jest-core/src/lib/isValidPath.ts
+packages/jest-core/src/lib/logDebugMessages.ts
+packages/jest-core/src/lib/updateGlobalConfig.ts
+packages/jest-core/src/lib/watchPluginsHelpers.ts
+packages/jest-core/src/plugins/Quit.ts
+packages/jest-core/src/plugins/TestNamePattern.ts
+packages/jest-core/src/plugins/TestPathPattern.ts
+packages/jest-core/src/plugins/UpdateSnapshots.ts
+packages/jest-core/src/plugins/UpdateSnapshotsInteractive.ts
+packages/jest-core/src/pluralize.ts
+packages/jest-core/src/runGlobalHook.ts
+packages/jest-core/src/runJest.ts
+packages/jest-core/src/testSchedulerHelper.ts
+packages/jest-core/src/types.ts
+packages/jest-core/src/version.ts
+packages/jest-core/src/watch.ts
+packages/jest-core/tsconfig.json
+packages/jest-create-cache-key-function/.npmignore
+packages/jest-create-cache-key-function/package.json
+packages/jest-create-cache-key-function/src/__tests__/index.test.ts
+packages/jest-create-cache-key-function/src/index.ts
+packages/jest-create-cache-key-function/tsconfig.json
+packages/jest-diff/.npmignore
+packages/jest-diff/README.md
+packages/jest-diff/package.json
+packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap
+packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap
+packages/jest-diff/src/__tests__/__snapshots__/joinAlignedDiffs.test.ts.snap
+packages/jest-diff/src/__tests__/diff.test.ts
+packages/jest-diff/src/__tests__/diffStringsRaw.test.ts
+packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts
+packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts
+packages/jest-diff/src/cleanupSemantic.ts
+packages/jest-diff/src/constants.ts
+packages/jest-diff/src/diffLines.ts
+packages/jest-diff/src/diffStrings.ts
+packages/jest-diff/src/getAlignedDiffs.ts
+packages/jest-diff/src/index.ts
+packages/jest-diff/src/joinAlignedDiffs.ts
+packages/jest-diff/src/normalizeDiffOptions.ts
+packages/jest-diff/src/printDiffs.ts
+packages/jest-diff/src/types.ts
+packages/jest-diff/tsconfig.json
+packages/jest-docblock/.npmignore
+packages/jest-docblock/README.md
+packages/jest-docblock/package.json
+packages/jest-docblock/src/__tests__/index.test.ts
+packages/jest-docblock/src/index.ts
+packages/jest-docblock/tsconfig.json
+packages/jest-each/.npmignore
+packages/jest-each/README.md
+packages/jest-each/assets/default-demo.gif
+packages/jest-each/assets/describe-demo.gif
+packages/jest-each/assets/tagged-template-literal.gif
+packages/jest-each/assets/test-demo.gif
+packages/jest-each/package.json
+packages/jest-each/src/__tests__/__snapshots__/array.test.ts.snap
+packages/jest-each/src/__tests__/__snapshots__/index.test.ts.snap
+packages/jest-each/src/__tests__/__snapshots__/template.test.ts.snap
+packages/jest-each/src/__tests__/array.test.ts
+packages/jest-each/src/__tests__/index.test.ts
+packages/jest-each/src/__tests__/template.test.ts
+packages/jest-each/src/bind.ts
+packages/jest-each/src/index.ts
+packages/jest-each/src/table/array.ts
+packages/jest-each/src/table/template.ts
+packages/jest-each/src/validation.ts
+packages/jest-each/tsconfig.json
+packages/jest-environment-jsdom/.npmignore
+packages/jest-environment-jsdom/package.json
+packages/jest-environment-jsdom/src/__mocks__/index.ts
+packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts
+packages/jest-environment-jsdom/src/index.ts
+packages/jest-environment-jsdom/tsconfig.json
+packages/jest-environment-node/.npmignore
+packages/jest-environment-node/package.json
+packages/jest-environment-node/src/__tests__/node_environment.test.ts
+packages/jest-environment-node/src/index.ts
+packages/jest-environment-node/tsconfig.json
+packages/jest-environment/.npmignore
+packages/jest-environment/package.json
+packages/jest-environment/src/index.ts
+packages/jest-environment/tsconfig.json
+packages/jest-fake-timers/.npmignore
+packages/jest-fake-timers/package.json
+packages/jest-fake-timers/src/__tests__/__snapshots__/legacyFakeTimers.test.ts.snap
+packages/jest-fake-timers/src/__tests__/__snapshots__/modernFakeTimers.test.ts.snap
+packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts
+packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts
+packages/jest-fake-timers/src/index.ts
+packages/jest-fake-timers/src/legacyFakeTimers.ts
+packages/jest-fake-timers/src/modernFakeTimers.ts
+packages/jest-fake-timers/tsconfig.json
+packages/jest-get-type/.npmignore
+packages/jest-get-type/package.json
+packages/jest-get-type/src/__tests__/getType.test.ts
+packages/jest-get-type/src/__tests__/isPrimitive.test.ts
+packages/jest-get-type/src/index.ts
+packages/jest-get-type/tsconfig.json
+packages/jest-globals/.npmignore
+packages/jest-globals/package.json
+packages/jest-globals/src/__tests__/index.ts
+packages/jest-globals/src/index.ts
+packages/jest-globals/tsconfig.json
+packages/jest-haste-map/.npmignore
+packages/jest-haste-map/package.json
+packages/jest-haste-map/src/HasteFS.ts
+packages/jest-haste-map/src/ModuleMap.ts
+packages/jest-haste-map/src/__tests__/__snapshots__/index.test.js.snap
+packages/jest-haste-map/src/__tests__/dependencyExtractor.js
+packages/jest-haste-map/src/__tests__/get_mock_name.test.js
+packages/jest-haste-map/src/__tests__/haste_impl.js
+packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts
+packages/jest-haste-map/src/__tests__/index.test.js
+packages/jest-haste-map/src/__tests__/test_dotfiles_root/.eslintrc.js
+packages/jest-haste-map/src/__tests__/test_dotfiles_root/index.js
+packages/jest-haste-map/src/__tests__/worker.test.js
+packages/jest-haste-map/src/blacklist.ts
+packages/jest-haste-map/src/constants.ts
+packages/jest-haste-map/src/crawlers/__tests__/node.test.js
+packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js
+packages/jest-haste-map/src/crawlers/node.ts
+packages/jest-haste-map/src/crawlers/watchman.ts
+packages/jest-haste-map/src/getMockName.ts
+packages/jest-haste-map/src/index.ts
+packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js
+packages/jest-haste-map/src/lib/__tests__/fast_path.test.js
+packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js
+packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js
+packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js
+packages/jest-haste-map/src/lib/dependencyExtractor.ts
+packages/jest-haste-map/src/lib/fast_path.ts
+packages/jest-haste-map/src/lib/getPlatformExtension.ts
+packages/jest-haste-map/src/lib/isRegExpSupported.ts
+packages/jest-haste-map/src/lib/normalizePathSep.ts
+packages/jest-haste-map/src/types.ts
+packages/jest-haste-map/src/watchers/FSEventsWatcher.ts
+packages/jest-haste-map/src/watchers/NodeWatcher.js
+packages/jest-haste-map/src/watchers/RecrawlWarning.js
+packages/jest-haste-map/src/watchers/WatchmanWatcher.js
+packages/jest-haste-map/src/watchers/common.js
+packages/jest-haste-map/src/worker.ts
+packages/jest-haste-map/tsconfig.json
+packages/jest-jasmine2/.npmignore
+packages/jest-jasmine2/package.json
+packages/jest-jasmine2/src/ExpectationFailed.ts
+packages/jest-jasmine2/src/PCancelable.ts
+packages/jest-jasmine2/src/__tests__/Suite.test.ts
+packages/jest-jasmine2/src/__tests__/__snapshots__/expectationResultFactory.test.ts.snap
+packages/jest-jasmine2/src/__tests__/concurrent.test.ts
+packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts
+packages/jest-jasmine2/src/__tests__/hooksError.test.ts
+packages/jest-jasmine2/src/__tests__/itTestError.test.ts
+packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts
+packages/jest-jasmine2/src/__tests__/iterators.test.ts
+packages/jest-jasmine2/src/__tests__/pTimeout.test.ts
+packages/jest-jasmine2/src/__tests__/queueRunner.test.ts
+packages/jest-jasmine2/src/__tests__/reporter.test.ts
+packages/jest-jasmine2/src/__tests__/todoError.test.ts
+packages/jest-jasmine2/src/assertionErrorMessage.ts
+packages/jest-jasmine2/src/each.ts
+packages/jest-jasmine2/src/errorOnPrivate.ts
+packages/jest-jasmine2/src/expectationResultFactory.ts
+packages/jest-jasmine2/src/index.ts
+packages/jest-jasmine2/src/isError.ts
+packages/jest-jasmine2/src/jasmine/CallTracker.ts
+packages/jest-jasmine2/src/jasmine/Env.ts
+packages/jest-jasmine2/src/jasmine/JsApiReporter.ts
+packages/jest-jasmine2/src/jasmine/ReportDispatcher.ts
+packages/jest-jasmine2/src/jasmine/Spec.ts
+packages/jest-jasmine2/src/jasmine/SpyStrategy.ts
+packages/jest-jasmine2/src/jasmine/Suite.ts
+packages/jest-jasmine2/src/jasmine/Timer.ts
+packages/jest-jasmine2/src/jasmine/createSpy.ts
+packages/jest-jasmine2/src/jasmine/jasmineLight.ts
+packages/jest-jasmine2/src/jasmine/spyRegistry.ts
+packages/jest-jasmine2/src/jasmineAsyncInstall.ts
+packages/jest-jasmine2/src/jestExpect.ts
+packages/jest-jasmine2/src/pTimeout.ts
+packages/jest-jasmine2/src/queueRunner.ts
+packages/jest-jasmine2/src/reporter.ts
+packages/jest-jasmine2/src/setup_jest_globals.ts
+packages/jest-jasmine2/src/treeProcessor.ts
+packages/jest-jasmine2/src/types.ts
+packages/jest-jasmine2/tsconfig.json
+packages/jest-leak-detector/.npmignore
+packages/jest-leak-detector/README.md
+packages/jest-leak-detector/package.json
+packages/jest-leak-detector/src/__tests__/__snapshots__/index.test.ts.snap
+packages/jest-leak-detector/src/__tests__/index.test.ts
+packages/jest-leak-detector/src/index.ts
+packages/jest-leak-detector/tsconfig.json
+packages/jest-matcher-utils/.npmignore
+packages/jest-matcher-utils/package.json
+packages/jest-matcher-utils/src/Replaceable.ts
+packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts
+packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap
+packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap
+packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts
+packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts
+packages/jest-matcher-utils/src/__tests__/index.test.ts
+packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts
+packages/jest-matcher-utils/src/deepCyclicCopyReplaceable.ts
+packages/jest-matcher-utils/src/index.ts
+packages/jest-matcher-utils/tsconfig.json
+packages/jest-message-util/.npmignore
+packages/jest-message-util/package.json
+packages/jest-message-util/src/__tests__/__snapshots__/messages.test.ts.snap
+packages/jest-message-util/src/__tests__/messages.test.ts
+packages/jest-message-util/src/index.ts
+packages/jest-message-util/src/types.ts
+packages/jest-message-util/tsconfig.json
+packages/jest-mock/.npmignore
+packages/jest-mock/README.md
+packages/jest-mock/package.json
+packages/jest-mock/src/__tests__/index.test.ts
+packages/jest-mock/src/index.ts
+packages/jest-mock/tsconfig.json
+packages/jest-phabricator/.npmignore
+packages/jest-phabricator/README.md
+packages/jest-phabricator/package.json
+packages/jest-phabricator/src/index.ts
+packages/jest-phabricator/tsconfig.json
+packages/jest-regex-util/.npmignore
+packages/jest-regex-util/package.json
+packages/jest-regex-util/src/__tests__/index.test.ts
+packages/jest-regex-util/src/index.ts
+packages/jest-regex-util/tsconfig.json
+packages/jest-repl/.npmignore
+packages/jest-repl/bin/jest-repl.js
+packages/jest-repl/bin/jest-runtime-cli.js
+packages/jest-repl/package.json
+packages/jest-repl/src/__tests__/jest_repl.test.js
+packages/jest-repl/src/__tests__/runtime_cli.test.js
+packages/jest-repl/src/__tests__/test_root/logging.js
+packages/jest-repl/src/__tests__/test_root/throwing.js
+packages/jest-repl/src/cli/args.ts
+packages/jest-repl/src/cli/index.ts
+packages/jest-repl/src/cli/repl.ts
+packages/jest-repl/src/cli/runtime-cli.ts
+packages/jest-repl/src/cli/version.ts
+packages/jest-repl/tsconfig.json
+packages/jest-reporters/.npmignore
+packages/jest-reporters/package.json
+packages/jest-reporters/src/BaseReporter.ts
+packages/jest-reporters/src/CoverageReporter.ts
+packages/jest-reporters/src/CoverageWorker.ts
+packages/jest-reporters/src/DefaultReporter.ts
+packages/jest-reporters/src/NotifyReporter.ts
+packages/jest-reporters/src/Status.ts
+packages/jest-reporters/src/SummaryReporter.ts
+packages/jest-reporters/src/VerboseReporter.ts
+packages/jest-reporters/src/__tests__/CoverageReporter.test.js
+packages/jest-reporters/src/__tests__/CoverageWorker.test.js
+packages/jest-reporters/src/__tests__/DefaultReporter.test.js
+packages/jest-reporters/src/__tests__/NotifyReporter.test.ts
+packages/jest-reporters/src/__tests__/SummaryReporter.test.js
+packages/jest-reporters/src/__tests__/VerboseReporter.test.js
+packages/jest-reporters/src/__tests__/__snapshots__/NotifyReporter.test.ts.snap
+packages/jest-reporters/src/__tests__/__snapshots__/SummaryReporter.test.js.snap
+packages/jest-reporters/src/__tests__/__snapshots__/generateEmptyCoverage.test.js.snap
+packages/jest-reporters/src/__tests__/__snapshots__/getSnapshotStatus.test.js.snap
+packages/jest-reporters/src/__tests__/__snapshots__/getSnapshotSummary.test.js.snap
+packages/jest-reporters/src/__tests__/__snapshots__/utils.test.ts.snap
+packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js
+packages/jest-reporters/src/__tests__/getResultHeader.test.js
+packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js
+packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js
+packages/jest-reporters/src/__tests__/getWatermarks.test.ts
+packages/jest-reporters/src/__tests__/utils.test.ts
+packages/jest-reporters/src/generateEmptyCoverage.ts
+packages/jest-reporters/src/getResultHeader.ts
+packages/jest-reporters/src/getSnapshotStatus.ts
+packages/jest-reporters/src/getSnapshotSummary.ts
+packages/jest-reporters/src/getWatermarks.ts
+packages/jest-reporters/src/index.ts
+packages/jest-reporters/src/types.ts
+packages/jest-reporters/src/utils.ts
+packages/jest-reporters/tsconfig.json
+packages/jest-resolve-dependencies/.npmignore
+packages/jest-resolve-dependencies/__mocks__/fake-node-module.js
+packages/jest-resolve-dependencies/package.json
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/__snapshots__/related.test.js.snap
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/file.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/file.test.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/hasMocked/__mocks__/file.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/hasMocked/file.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/hasMocked/file.test.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/node_modules/@myorg/pkg/index.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/node_modules/@myorg/pkg/package.json
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/related.test.js
+packages/jest-resolve-dependencies/src/__tests__/__fixtures__/scoped.js
+packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts
+packages/jest-resolve-dependencies/src/index.ts
+packages/jest-resolve-dependencies/tsconfig.json
+packages/jest-resolve/.npmignore
+packages/jest-resolve/package.json
+packages/jest-resolve/src/ModuleNotFoundError.ts
+packages/jest-resolve/src/__mocks__/bar/node_modules/bar/index.js
+packages/jest-resolve/src/__mocks__/bar/node_modules/foo
+packages/jest-resolve/src/__mocks__/foo.js
+packages/jest-resolve/src/__mocks__/foo/foo.js
+packages/jest-resolve/src/__mocks__/foo/index.js
+packages/jest-resolve/src/__mocks__/foo/node_modules/dep/index.js
+packages/jest-resolve/src/__mocks__/foo/node_modules/foo/index.js
+packages/jest-resolve/src/__mocks__/mockJsDependency.js
+packages/jest-resolve/src/__mocks__/mockJsDependency.native.js
+packages/jest-resolve/src/__mocks__/mockJsxDependency.jsx
+packages/jest-resolve/src/__mocks__/mockJsxDependency.native.jsx
+packages/jest-resolve/src/__mocks__/userResolver.d.ts
+packages/jest-resolve/src/__mocks__/userResolver.js
+packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts
+packages/jest-resolve/src/__tests__/resolve.test.ts
+packages/jest-resolve/src/defaultResolver.ts
+packages/jest-resolve/src/index.ts
+packages/jest-resolve/src/isBuiltinModule.ts
+packages/jest-resolve/src/nodeModulesPaths.ts
+packages/jest-resolve/src/shouldLoadAsEsm.ts
+packages/jest-resolve/src/types.ts
+packages/jest-resolve/tsconfig.json
+packages/jest-runner/.npmignore
+packages/jest-runner/package.json
+packages/jest-runner/src/__tests__/testRunner.test.ts
+packages/jest-runner/src/index.ts
+packages/jest-runner/src/runTest.ts
+packages/jest-runner/src/testWorker.ts
+packages/jest-runner/src/types.ts
+packages/jest-runner/tsconfig.json
+packages/jest-runtime/.npmignore
+packages/jest-runtime/package.json
+packages/jest-runtime/src/__mocks__/createRuntime.js
+packages/jest-runtime/src/__tests__/NODE_PATH_dir/regular_module_in_node_path.js
+packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js
+packages/jest-runtime/src/__tests__/Runtime-statics.test.js
+packages/jest-runtime/src/__tests__/__snapshots__/runtime_require_module_no_ext.test.js.snap
+packages/jest-runtime/src/__tests__/__snapshots__/runtime_wrap.js.snap
+packages/jest-runtime/src/__tests__/defaultResolver.js
+packages/jest-runtime/src/__tests__/instrumentation.test.ts
+packages/jest-runtime/src/__tests__/module_dir/module_directory_file.js
+packages/jest-runtime/src/__tests__/module_dir/to_be_instrumented.js
+packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js
+packages/jest-runtime/src/__tests__/runtime_environment.test.js
+packages/jest-runtime/src/__tests__/runtime_internal_module.test.js
+packages/jest-runtime/src/__tests__/runtime_jest_fn.js
+packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js
+packages/jest-runtime/src/__tests__/runtime_mock.test.js
+packages/jest-runtime/src/__tests__/runtime_module_directories.test.js
+packages/jest-runtime/src/__tests__/runtime_node_path.test.js
+packages/jest-runtime/src/__tests__/runtime_require_actual.test.js
+packages/jest-runtime/src/__tests__/runtime_require_cache.test.js
+packages/jest-runtime/src/__tests__/runtime_require_mock.test.js
+packages/jest-runtime/src/__tests__/runtime_require_module.test.js
+packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js
+packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js
+packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js
+packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts
+packages/jest-runtime/src/__tests__/runtime_wrap.js
+packages/jest-runtime/src/__tests__/test_root/JSONFile.json
+packages/jest-runtime/src/__tests__/test_root/ManuallyMocked.js
+packages/jest-runtime/src/__tests__/test_root/ModuleWithSideEffects.js
+packages/jest-runtime/src/__tests__/test_root/ModuleWithState.js
+packages/jest-runtime/src/__tests__/test_root/MyDirectoryModule/index.js
+packages/jest-runtime/src/__tests__/test_root/NativeModule.node
+packages/jest-runtime/src/__tests__/test_root/OnlyRequiredFromMock.js
+packages/jest-runtime/src/__tests__/test_root/RegularModule.js
+packages/jest-runtime/src/__tests__/test_root/RegularModuleWithWrongExt.txt
+packages/jest-runtime/src/__tests__/test_root/RelativeImageStub.js
+packages/jest-runtime/src/__tests__/test_root/RequireRegularModule.js
+packages/jest-runtime/src/__tests__/test_root/TestModuleNameMapperResolution.jsx
+packages/jest-runtime/src/__tests__/test_root/__mocks__/ExclusivelyManualMock.js
+packages/jest-runtime/src/__tests__/test_root/__mocks__/ManuallyMocked.js
+packages/jest-runtime/src/__tests__/test_root/__mocks__/mocked-node-module.js
+packages/jest-runtime/src/__tests__/test_root/__mocks__/nested1/nested2/nested3.js
+packages/jest-runtime/src/__tests__/test_root/create_require_module.js
+packages/jest-runtime/src/__tests__/test_root/dep_on_mapped_module.js
+packages/jest-runtime/src/__tests__/test_root/global_image_stub.js
+packages/jest-runtime/src/__tests__/test_root/haste-modules/Foo.react.js
+packages/jest-runtime/src/__tests__/test_root/haste-modules/FooContainer.react.js
+packages/jest-runtime/src/__tests__/test_root/haste-modules/FooRenderUtil.js
+packages/jest-runtime/src/__tests__/test_root/haste-package/core/module.js
+packages/jest-runtime/src/__tests__/test_root/haste-package/package.json
+packages/jest-runtime/src/__tests__/test_root/inner_parent_module.js
+packages/jest-runtime/src/__tests__/test_root/internal-module.js
+packages/jest-runtime/src/__tests__/test_root/internal-root.js
+packages/jest-runtime/src/__tests__/test_root/internal-root.json
+packages/jest-runtime/src/__tests__/test_root/mapped_dir/moduleInMapped.js
+packages/jest-runtime/src/__tests__/test_root/mapped_module_createMockFromModule.js
+packages/jest-runtime/src/__tests__/test_root/mapped_module_test.js
+packages/jest-runtime/src/__tests__/test_root/module_dir/module_dir_module.js
+packages/jest-runtime/src/__tests__/test_root/module_dir/my-module/core.js
+packages/jest-runtime/src/__tests__/test_root/module_dir/my-module/package.json
+packages/jest-runtime/src/__tests__/test_root/modules_with_main/export_main.js
+packages/jest-runtime/src/__tests__/test_root/modules_with_main/re_export_main.js
+packages/jest-runtime/src/__tests__/test_root/nested1/nested2/nested3.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/browser.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/node.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/package.json
+packages/jest-runtime/src/__tests__/test_root/node_modules/mocked-node-module/index.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/module-needing-parent/index.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/module-needing-parent/node_modules/parent-module/index.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/not-a-haste-package/core.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/not-a-haste-package/package.json
+packages/jest-runtime/src/__tests__/test_root/node_modules/npm3-main-dep/index.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/npm3-transitive-dep/index.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/npm3-transitive-dep/internal-code.js
+packages/jest-runtime/src/__tests__/test_root/node_modules/parent-module/index.js
+packages/jest-runtime/src/__tests__/test_root/platform/Platform.android.js
+packages/jest-runtime/src/__tests__/test_root/platform/Platform.ios.js
+packages/jest-runtime/src/__tests__/test_root/platform/Platform.js
+packages/jest-runtime/src/__tests__/test_root/platform/Platform.native.js
+packages/jest-runtime/src/__tests__/test_root/resolve_and_require_outside.js
+packages/jest-runtime/src/__tests__/test_root/resolve_mapped.js
+packages/jest-runtime/src/__tests__/test_root/resolve_self.js
+packages/jest-runtime/src/__tests__/test_root/root.js
+packages/jest-runtime/src/__tests__/test_root/sourcemaps/out/throwing-mapped-fn.js
+packages/jest-runtime/src/__tests__/test_root/sourcemaps/out/throwing-mapped-fn.js.map
+packages/jest-runtime/src/__tests__/test_root/sourcemaps/throwing-mapped-fn.js
+packages/jest-runtime/src/__tests__/test_root/subdir2/module_dir/module_dir_module.js
+packages/jest-runtime/src/__tests__/test_root/subdir2/module_dir/my-module/core.js
+packages/jest-runtime/src/__tests__/test_root/test_json_preprocessor.js
+packages/jest-runtime/src/__tests__/test_root/test_preprocessor.js
+packages/jest-runtime/src/__tests__/test_root/throwing.js
+packages/jest-runtime/src/__tests__/test_root/throwing_fn.js
+packages/jest-runtime/src/__tests__/test_root/utf8_with_bom.js
+packages/jest-runtime/src/__tests__/test_root/utf8_with_bom.json
+packages/jest-runtime/src/__tests__/test_root_with_dup_mocks/subdir1/__mocks__/my_module.js
+packages/jest-runtime/src/__tests__/test_root_with_dup_mocks/subdir1/my_module.js
+packages/jest-runtime/src/__tests__/test_root_with_dup_mocks/subdir2/__mocks__/my_module.js
+packages/jest-runtime/src/__tests__/test_root_with_dup_mocks/subdir2/module_dir/module_dir_module.js
+packages/jest-runtime/src/__tests__/test_root_with_dup_mocks/subdir2/my_module.js
+packages/jest-runtime/src/helpers.ts
+packages/jest-runtime/src/index.ts
+packages/jest-runtime/src/types.ts
+packages/jest-runtime/tsconfig.json
+packages/jest-serializer/.npmignore
+packages/jest-serializer/README.md
+packages/jest-serializer/package.json
+packages/jest-serializer/src/__tests__/index.test.ts
+packages/jest-serializer/src/index.ts
+packages/jest-serializer/tsconfig.json
+packages/jest-serializer/v8.d.ts
+packages/jest-snapshot/.npmignore
+packages/jest-snapshot/package.json
+packages/jest-snapshot/src/InlineSnapshots.ts
+packages/jest-snapshot/src/SnapshotResolver.ts
+packages/jest-snapshot/src/State.ts
+packages/jest-snapshot/src/__mocks__/prettier.js
+packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts
+packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts
+packages/jest-snapshot/src/__tests__/__snapshots__/SnapshotResolver.test.ts.snap
+packages/jest-snapshot/src/__tests__/__snapshots__/mockSerializer.test.ts.snap
+packages/jest-snapshot/src/__tests__/__snapshots__/printSnapshot.test.ts.snap
+packages/jest-snapshot/src/__tests__/dedentLines.test.ts
+packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-inconsistent-fns.js
+packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveSnapshotPath.js
+packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveTestPath.js
+packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-test-path-for-consistency-check.js
+packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver.js
+packages/jest-snapshot/src/__tests__/matcher.test.ts
+packages/jest-snapshot/src/__tests__/mockSerializer.test.ts
+packages/jest-snapshot/src/__tests__/plugins.test.ts
+packages/jest-snapshot/src/__tests__/plugins/bar.js
+packages/jest-snapshot/src/__tests__/plugins/foo.js
+packages/jest-snapshot/src/__tests__/printSnapshot.test.ts
+packages/jest-snapshot/src/__tests__/throwMatcher.test.ts
+packages/jest-snapshot/src/__tests__/utils.test.ts
+packages/jest-snapshot/src/colors.ts
+packages/jest-snapshot/src/dedentLines.ts
+packages/jest-snapshot/src/index.ts
+packages/jest-snapshot/src/mockSerializer.ts
+packages/jest-snapshot/src/plugins.ts
+packages/jest-snapshot/src/printSnapshot.ts
+packages/jest-snapshot/src/types.ts
+packages/jest-snapshot/src/utils.ts
+packages/jest-snapshot/tsconfig.json
+packages/jest-source-map/.npmignore
+packages/jest-source-map/package.json
+packages/jest-source-map/src/__tests__/getCallsite.test.ts
+packages/jest-source-map/src/getCallsite.ts
+packages/jest-source-map/src/index.ts
+packages/jest-source-map/src/types.ts
+packages/jest-source-map/tsconfig.json
+packages/jest-test-result/.npmignore
+packages/jest-test-result/package.json
+packages/jest-test-result/src/__tests__/formatTestResults.test.ts
+packages/jest-test-result/src/formatTestResults.ts
+packages/jest-test-result/src/helpers.ts
+packages/jest-test-result/src/index.ts
+packages/jest-test-result/src/types.ts
+packages/jest-test-result/tsconfig.json
+packages/jest-test-sequencer/.npmignore
+packages/jest-test-sequencer/package.json
+packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js
+packages/jest-test-sequencer/src/index.ts
+packages/jest-test-sequencer/tsconfig.json
+packages/jest-transform/.npmignore
+packages/jest-transform/package.json
+packages/jest-transform/src/ScriptTransformer.ts
+packages/jest-transform/src/__tests__/ScriptTransformer.test.ts
+packages/jest-transform/src/__tests__/__snapshots__/ScriptTransformer.test.ts.snap
+packages/jest-transform/src/__tests__/shouldInstrument.test.ts
+packages/jest-transform/src/enhanceUnexpectedTokenMessage.ts
+packages/jest-transform/src/index.ts
+packages/jest-transform/src/shouldInstrument.ts
+packages/jest-transform/src/types.ts
+packages/jest-transform/tsconfig.json
+packages/jest-types/.npmignore
+packages/jest-types/package.json
+packages/jest-types/src/Circus.ts
+packages/jest-types/src/Config.ts
+packages/jest-types/src/Global.ts
+packages/jest-types/src/TestResult.ts
+packages/jest-types/src/Transform.ts
+packages/jest-types/src/index.ts
+packages/jest-types/tsconfig.json
+packages/jest-util/.npmignore
+packages/jest-util/package.json
+packages/jest-util/src/ErrorWithStack.ts
+packages/jest-util/src/__tests__/createProcessObject.test.ts
+packages/jest-util/src/__tests__/deepCyclicCopy.test.ts
+packages/jest-util/src/__tests__/errorWithStack.test.ts
+packages/jest-util/src/__tests__/formatTime.test.ts
+packages/jest-util/src/__tests__/globsToMatcher.test.ts
+packages/jest-util/src/__tests__/installCommonGlobals.test.ts
+packages/jest-util/src/__tests__/isInteractive.test.ts
+packages/jest-util/src/__tests__/isPromise.test.ts
+packages/jest-util/src/clearLine.ts
+packages/jest-util/src/convertDescriptorToString.ts
+packages/jest-util/src/createDirectory.ts
+packages/jest-util/src/createProcessObject.ts
+packages/jest-util/src/deepCyclicCopy.ts
+packages/jest-util/src/formatTime.ts
+packages/jest-util/src/globsToMatcher.ts
+packages/jest-util/src/index.ts
+packages/jest-util/src/installCommonGlobals.ts
+packages/jest-util/src/interopRequireDefault.ts
+packages/jest-util/src/isInteractive.ts
+packages/jest-util/src/isPromise.ts
+packages/jest-util/src/pluralize.ts
+packages/jest-util/src/preRunMessage.ts
+packages/jest-util/src/replacePathSepForGlob.ts
+packages/jest-util/src/setGlobal.ts
+packages/jest-util/src/specialChars.ts
+packages/jest-util/src/testPathPatternToRegExp.ts
+packages/jest-util/src/tryRealpath.ts
+packages/jest-util/tsconfig.json
+packages/jest-validate/.npmignore
+packages/jest-validate/README.md
+packages/jest-validate/package.json
+packages/jest-validate/src/__tests__/__snapshots__/validate.test.ts.snap
+packages/jest-validate/src/__tests__/__snapshots__/validateCLIOptions.test.js.snap
+packages/jest-validate/src/__tests__/fixtures/jestConfig.ts
+packages/jest-validate/src/__tests__/validate.test.ts
+packages/jest-validate/src/__tests__/validateCLIOptions.test.js
+packages/jest-validate/src/condition.ts
+packages/jest-validate/src/defaultConfig.ts
+packages/jest-validate/src/deprecated.ts
+packages/jest-validate/src/errors.ts
+packages/jest-validate/src/exampleConfig.ts
+packages/jest-validate/src/index.ts
+packages/jest-validate/src/types.ts
+packages/jest-validate/src/utils.ts
+packages/jest-validate/src/validate.ts
+packages/jest-validate/src/validateCLIOptions.ts
+packages/jest-validate/src/warnings.ts
+packages/jest-validate/tsconfig.json
+packages/jest-watcher/.npmignore
+packages/jest-watcher/package.json
+packages/jest-watcher/src/BaseWatchPlugin.ts
+packages/jest-watcher/src/JestHooks.ts
+packages/jest-watcher/src/PatternPrompt.ts
+packages/jest-watcher/src/constants.ts
+packages/jest-watcher/src/index.ts
+packages/jest-watcher/src/lib/Prompt.ts
+packages/jest-watcher/src/lib/__tests__/__snapshots__/formatTestNameByPattern.test.ts.snap
+packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts
+packages/jest-watcher/src/lib/__tests__/prompt.test.ts
+packages/jest-watcher/src/lib/__tests__/scroll.test.ts
+packages/jest-watcher/src/lib/colorize.ts
+packages/jest-watcher/src/lib/formatTestNameByPattern.ts
+packages/jest-watcher/src/lib/patternModeHelpers.ts
+packages/jest-watcher/src/lib/scroll.ts
+packages/jest-watcher/src/types.ts
+packages/jest-watcher/tsconfig.json
+packages/jest-worker/.npmignore
+packages/jest-worker/README.md
+packages/jest-worker/package.json
+packages/jest-worker/src/Farm.ts
+packages/jest-worker/src/FifoQueue.ts
+packages/jest-worker/src/PriorityQueue.ts
+packages/jest-worker/src/WorkerPool.ts
+packages/jest-worker/src/__performance_tests__/test.js
+packages/jest-worker/src/__performance_tests__/workers/jest_worker.js
+packages/jest-worker/src/__performance_tests__/workers/pi.js
+packages/jest-worker/src/__performance_tests__/workers/worker_farm.js
+packages/jest-worker/src/__tests__/Farm.test.js
+packages/jest-worker/src/__tests__/FifoQueue.test.js
+packages/jest-worker/src/__tests__/PriorityQueue.test.js
+packages/jest-worker/src/__tests__/WorkerPool.test.js
+packages/jest-worker/src/__tests__/index.test.js
+packages/jest-worker/src/__tests__/process-integration.test.js
+packages/jest-worker/src/__tests__/thread-integration.test.js
+packages/jest-worker/src/base/BaseWorkerPool.ts
+packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js
+packages/jest-worker/src/index.ts
+packages/jest-worker/src/types.ts
+packages/jest-worker/src/workers/ChildProcessWorker.ts
+packages/jest-worker/src/workers/NodeThreadsWorker.ts
+packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js
+packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js
+packages/jest-worker/src/workers/__tests__/processChild.test.js
+packages/jest-worker/src/workers/__tests__/threadChild.test.js
+packages/jest-worker/src/workers/messageParent.ts
+packages/jest-worker/src/workers/processChild.ts
+packages/jest-worker/src/workers/threadChild.ts
+packages/jest-worker/tsconfig.json
+packages/jest/.npmignore
+packages/jest/README.md
+packages/jest/bin/jest.js
+packages/jest/package.json
+packages/jest/src/jest.ts
+packages/jest/tsconfig.json
+packages/pretty-format/.npmignore
+packages/pretty-format/README.md
+packages/pretty-format/package.json
+packages/pretty-format/perf/test.js
+packages/pretty-format/perf/world.geo.json
+packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts
+packages/pretty-format/src/__tests__/ConvertAnsi.test.ts
+packages/pretty-format/src/__tests__/DOMCollection.test.ts
+packages/pretty-format/src/__tests__/DOMElement.test.ts
+packages/pretty-format/src/__tests__/Immutable.test.ts
+packages/pretty-format/src/__tests__/ReactElement.test.ts
+packages/pretty-format/src/__tests__/__snapshots__/react.test.tsx.snap
+packages/pretty-format/src/__tests__/prettyFormat.test.ts
+packages/pretty-format/src/__tests__/react.test.tsx
+packages/pretty-format/src/__tests__/setPrettyPrint.ts
+packages/pretty-format/src/collections.ts
+packages/pretty-format/src/index.ts
+packages/pretty-format/src/plugins/AsymmetricMatcher.ts
+packages/pretty-format/src/plugins/ConvertAnsi.ts
+packages/pretty-format/src/plugins/DOMCollection.ts
+packages/pretty-format/src/plugins/DOMElement.ts
+packages/pretty-format/src/plugins/Immutable.ts
+packages/pretty-format/src/plugins/ReactElement.ts
+packages/pretty-format/src/plugins/ReactTestComponent.ts
+packages/pretty-format/src/plugins/lib/escapeHTML.ts
+packages/pretty-format/src/plugins/lib/markup.ts
+packages/pretty-format/src/types.ts
+packages/pretty-format/tsconfig.json
+packages/test-utils/README.md
+packages/test-utils/package.json
+packages/test-utils/src/ConditionalTest.ts
+packages/test-utils/src/alignedAnsiStyleSerializer.ts
+packages/test-utils/src/config.ts
+packages/test-utils/src/index.ts
+packages/test-utils/tsconfig.json
+patches/fbjs-scripts.patch
+patches/react-native.patch
+scripts/babel-plugin-jest-native-globals.js
+scripts/babel-plugin-jest-replace-ts-require-assignment.js
+scripts/babel-plugin-jest-require-outside-vm.js
+scripts/build.js
+scripts/buildTs.js
+scripts/buildUtils.js
+scripts/checkCopyrightHeaders.js
+scripts/cleanE2e.js
+scripts/mapCoverage.js
+scripts/remove-prettier-dep.js
+scripts/verifyOldTs.js
+scripts/watch.js
+test-types/empty.d.ts
+test-types/top-level-config.test.ts
+test-types/top-level-globals.test.ts
+test-types/top-level-jest-namespace.test.ts
+testSetupFile.js
+tsconfig.json
+website/.vscode/settings.json
+website/README.md
+website/blog/2016-03-11-javascript-unit-testing-performance.md
+website/blog/2016-04-12-jest-11.md
+website/blog/2016-06-22-jest-13.md
+website/blog/2016-07-27-jest-14.md
+website/blog/2016-09-01-jest-15.md
+website/blog/2016-10-03-jest-16.md
+website/blog/2016-12-15-2016-in-jest.md
+website/blog/2017-01-30-a-great-developer-experience.md
+website/blog/2017-02-21-jest-19-immersive-watch-mode-test-platform-improvements.md
+website/blog/2017-05-06-jest-20-delightful-testing-multi-project-runner.md
+website/blog/2017-12-18-jest-22.md
+website/blog/2018-05-29-jest-23-blazing-fast-delightful-testing.md
+website/blog/2018-06-27-supporting-jest-open-source.md
+website/blog/2019-01-25-jest-24-refreshing-polished-typescript-friendly.md
+website/blog/2020-01-21-jest-25.md
+website/blog/2020-05-05-jest-26.md
+website/core/Footer.js
+website/fetchSupporters.js
+website/languages.js
+website/package.json
+website/pages/en/help.js
+website/pages/en/index.js
+website/pages/en/versions.js
+website/pages/en/videos.js
+website/sidebars.json
+website/siteConfig.js
+website/static/css/code-block-buttons.css
+website/static/css/custom.css
+website/static/css/hljs-jest.css
+website/static/css/jest.css
+website/static/img/blog/15-console.png
+website/static/img/blog/15-failure1.png
+website/static/img/blog/15-failure2.png
+website/static/img/blog/15-watch.gif
+website/static/img/blog/16-reporter.gif
+website/static/img/blog/16-snapshots.png
+website/static/img/blog/16-watch.gif
+website/static/img/blog/19-asymmetric-matchers.png
+website/static/img/blog/19-cli-error.png
+website/static/img/blog/19-skipped-tests.png
+website/static/img/blog/19-snapshot-version.png
+website/static/img/blog/19-validate.png
+website/static/img/blog/20-multi-runner.gif
+website/static/img/blog/20-testing-apis.png
+website/static/img/blog/22-community.png
+website/static/img/blog/22-failure-21.png
+website/static/img/blog/22-failure-22.png
+website/static/img/blog/23-asymmetric-matchers.png
+website/static/img/blog/23-async-matchers.png
+website/static/img/blog/23-hanging-after.png
+website/static/img/blog/23-hanging-before.png
+website/static/img/blog/23-interactive.gif
+website/static/img/blog/23-jest-each.png
+website/static/img/blog/23-new-matchers.png
+website/static/img/blog/23-snapshot-matchers.png
+website/static/img/blog/23-typeahead.gif
+website/static/img/blog/24-assertion-error.png
+website/static/img/blog/24-different-types.png
+website/static/img/blog/24-mock-function.png
+website/static/img/blog/24-todo.png
+website/static/img/blog/25-snapshot-change-lines.png
+website/static/img/blog/25-snapshot-change-substrings.png
+website/static/img/blog/25-snapshot-insert-lines.png
+website/static/img/blog/Scheduling1.png
+website/static/img/blog/Scheduling2.png
+website/static/img/blog/collective.png
+website/static/img/blog/snapshot.png
+website/static/img/circus.png
+website/static/img/content/camera-with-flash.png
+website/static/img/content/failedSnapshotTest.png
+website/static/img/content/feature-coverage.png
+website/static/img/content/feature-fast.png
+website/static/img/content/feature-mocking.png
+website/static/img/content/female-technologist.png
+website/static/img/content/interactiveSnapshot.png
+website/static/img/content/interactiveSnapshotDone.png
+website/static/img/content/interactiveSnapshotUpdate.gif
+website/static/img/content/joker.png
+website/static/img/content/matchers/toBe.png
+website/static/img/content/matchers/toBeCloseTo.png
+website/static/img/content/matchers/toEqual.png
+website/static/img/content/matchers/toHaveProperty.png
+website/static/img/content/matchers/toMatchSnapshot.png
+website/static/img/content/matchers/toStrictEqual.png
+website/static/img/content/matchers/toThrowError.png
+website/static/img/content/runner.png
+website/static/img/favicon.png
+website/static/img/favicon/android-chrome-192x192.png
+website/static/img/favicon/android-chrome-512x512.png
+website/static/img/favicon/apple-touch-icon.png
+website/static/img/favicon/browserconfig.xml
+website/static/img/favicon/favicon-16x16.png
+website/static/img/favicon/favicon-32x32.png
+website/static/img/favicon/favicon.ico
+website/static/img/favicon/manifest.json
+website/static/img/favicon/mstile-144x144.png
+website/static/img/favicon/mstile-150x150.png
+website/static/img/favicon/mstile-310x150.png
+website/static/img/favicon/mstile-310x310.png
+website/static/img/favicon/mstile-70x70.png
+website/static/img/favicon/safari-pinned-tab.svg
+website/static/img/jest-badge.svg
+website/static/img/jest-card-fail.svg
+website/static/img/jest-card-pass.svg
+website/static/img/jest-card-run.svg
+website/static/img/jest-outline.svg
+website/static/img/jest-readme-headline.png
+website/static/img/jest.png
+website/static/img/jest.svg
+website/static/img/language.svg
+website/static/img/logos/airbnb.png
+website/static/img/logos/facebook.png
+website/static/img/logos/instagram.png
+website/static/img/logos/nyt.png
+website/static/img/logos/spotify.png
+website/static/img/logos/twitter.png
+website/static/img/opengraph.png
+website/static/img/oss_logo.png
+website/static/img/running-card-background.png
+website/static/js/code-block-buttons.js
+website/static/landing.js
+website/translators.txt
+website/versioned_docs/version-22.x/Architecture.md
+website/versioned_docs/version-22.x/BypassingModuleMocks.md
+website/versioned_docs/version-22.x/CLI.md
+website/versioned_docs/version-22.x/Configuration.md
+website/versioned_docs/version-22.x/DynamoDB.md
+website/versioned_docs/version-22.x/EnvironmentVariables.md
+website/versioned_docs/version-22.x/Es6ClassMocks.md
+website/versioned_docs/version-22.x/ExpectAPI.md
+website/versioned_docs/version-22.x/GettingStarted.md
+website/versioned_docs/version-22.x/GlobalAPI.md
+website/versioned_docs/version-22.x/JestCommunity.md
+website/versioned_docs/version-22.x/JestObjectAPI.md
+website/versioned_docs/version-22.x/JestPlatform.md
+website/versioned_docs/version-22.x/ManualMocks.md
+website/versioned_docs/version-22.x/MigrationGuide.md
+website/versioned_docs/version-22.x/MockFunctionAPI.md
+website/versioned_docs/version-22.x/MockFunctions.md
+website/versioned_docs/version-22.x/MongoDB.md
+website/versioned_docs/version-22.x/MoreResources.md
+website/versioned_docs/version-22.x/Puppeteer.md
+website/versioned_docs/version-22.x/SetupAndTeardown.md
+website/versioned_docs/version-22.x/SnapshotTesting.md
+website/versioned_docs/version-22.x/TestingAsyncCode.md
+website/versioned_docs/version-22.x/TestingFrameworks.md
+website/versioned_docs/version-22.x/TimerMocks.md
+website/versioned_docs/version-22.x/Troubleshooting.md
+website/versioned_docs/version-22.x/TutorialAsync.md
+website/versioned_docs/version-22.x/TutorialReact.md
+website/versioned_docs/version-22.x/TutorialReactNative.md
+website/versioned_docs/version-22.x/TutorialjQuery.md
+website/versioned_docs/version-22.x/UsingMatchers.md
+website/versioned_docs/version-22.x/Webpack.md
+website/versioned_docs/version-23.x/CLI.md
+website/versioned_docs/version-23.x/Configuration.md
+website/versioned_docs/version-23.x/ExpectAPI.md
+website/versioned_docs/version-23.x/GettingStarted.md
+website/versioned_docs/version-23.x/GlobalAPI.md
+website/versioned_docs/version-23.x/JestObjectAPI.md
+website/versioned_docs/version-23.x/MockFunctionAPI.md
+website/versioned_docs/version-23.x/MockFunctions.md
+website/versioned_docs/version-23.x/Puppeteer.md
+website/versioned_docs/version-23.x/SnapshotTesting.md
+website/versioned_docs/version-23.x/Troubleshooting.md
+website/versioned_docs/version-23.x/TutorialReact.md
+website/versioned_docs/version-23.x/WatchPlugins.md
+website/versioned_docs/version-24.x/CLI.md
+website/versioned_docs/version-24.x/Configuration.md
+website/versioned_docs/version-24.x/Es6ClassMocks.md
+website/versioned_docs/version-24.x/GettingStarted.md
+website/versioned_docs/version-24.x/GlobalAPI.md
+website/versioned_docs/version-24.x/JestObjectAPI.md
+website/versioned_docs/version-24.x/MockFunctionAPI.md
+website/versioned_docs/version-24.x/TutorialAsync.md
+website/versioned_docs/version-24.x/TutorialReact.md
+website/versioned_docs/version-24.x/WatchPlugins.md
+website/versioned_docs/version-24.x/Webpack.md
+website/versioned_docs/version-25.x/CLI.md
+website/versioned_docs/version-25.x/Configuration.md
+website/versioned_docs/version-25.x/ExpectAPI.md
+website/versioned_docs/version-25.x/GlobalAPI.md
+website/versioned_docs/version-25.x/JestObjectAPI.md
+website/versioned_docs/version-25.x/Troubleshooting.md
+website/versioned_docs/version-25.x/TutorialReactNative.md
+website/versioned_docs/version-26.0/CLI.md
+website/versioned_docs/version-26.0/Configuration.md
+website/versioned_docs/version-26.0/ECMAScriptModules.md
+website/versioned_docs/version-26.0/JestObjectAPI.md
+website/versioned_docs/version-26.0/JestPlatform.md
+website/versioned_docs/version-26.0/ManualMocks.md
+website/versioned_docs/version-26.2/CLI.md
+website/versioned_docs/version-26.2/Configuration.md
+website/versioned_docs/version-26.4/Configuration.md
+website/versioned_docs/version-26.4/GlobalAPI.md
+website/versioned_docs/version-26.5/CLI.md
+website/versioned_docs/version-26.5/Configuration.md
+website/versioned_docs/version-26.6/Configuration.md
+website/versioned_sidebars/version-22.x-sidebars.json
+website/versioned_sidebars/version-23.x-sidebars.json
+website/versioned_sidebars/version-24.x-sidebars.json
+website/versioned_sidebars/version-26.0-sidebars.json
+website/versions.json
+yarn.lock
diff --git a/__tests__/fixtures/external/jest/jest-test-results.xml b/__tests__/fixtures/external/jest/jest-test-results.xml
new file mode 100644
index 00000000..f35d4a51
--- /dev/null
+++ b/__tests__/fixtures/external/jest/jest-test-results.xml
@@ -0,0 +1,9357 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Error: abort: empty revision range
+ at makeError (/home/dorny/dorny/jest/node_modules/execa/lib/error.js:59:11)
+ at handlePromise (/home/dorny/dorny/jest/node_modules/execa/index.js:114:26)
+ at runMicrotasks (<anonymous>)
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)
+ at Object.findChangedFiles (/home/dorny/dorny/jest/packages/jest-changed-files/build/hg.js:99:16)
+ at async Promise.all (index 0)
+ at getChangedFilesForRoots (/home/dorny/dorny/jest/packages/jest-changed-files/build/index.js:57:5)
+ at Object.<anonymous> (/home/dorny/dorny/jest/e2e/__tests__/jestChangedFiles.test.ts:418:28)
+ at _callCircusTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:218:5)
+ at _runTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:155:3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Error: expect(received).toMatch(expected)
+
+Expected pattern: /PASS __tests__(\/|\\)file2.test.js/
+Received string: "·
+ ● Test suite failed to run·
+ abort: empty revision range
+"
+ at Object.toMatch (/home/dorny/dorny/jest/e2e/__tests__/onlyChanged.test.ts:360:18)
+ at Promise.then.completed (/home/dorny/dorny/jest/packages/jest-circus/build/utils.js:307:28)
+ at new Promise (<anonymous>)
+ at callAsyncCircusFn (/home/dorny/dorny/jest/packages/jest-circus/build/utils.js:229:10)
+ at _callCircusTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:218:40)
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)
+ at _runTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:155:3)
+ at _runTestsForDescribeBlock (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:66:9)
+ at run (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:25:3)
+ at runAndTransformResultsToJestFormat (/home/dorny/dorny/jest/packages/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:163:21)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/__tests__/jest-junit.test.ts b/__tests__/jest-junit.test.ts
index efbc01c2..c8a915ac 100644
--- a/__tests__/jest-junit.test.ts
+++ b/__tests__/jest-junit.test.ts
@@ -1,31 +1,53 @@
import * as fs from 'fs'
import * as path from 'path'
-import {parseJestJunit} from '../src/parsers/jest-junit/jest-junit-parser'
-import {ParseOptions} from '../src/parsers/parser-types'
+import {JestJunitParser} from '../src/parsers/jest-junit/jest-junit-parser'
+import {ParseOptions} from '../src/test-parser'
+import {getReport} from '../src/report/get-report'
import {normalizeFilePath} from '../src/utils/file-utils'
-const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml')
-const outputPath = path.join(__dirname, '__outputs__', 'jest-junit.md')
-const xmlFixture = {
- path: normalizeFilePath(path.relative(__dirname, fixturePath)),
- content: fs.readFileSync(fixturePath, {encoding: 'utf8'})
-}
-
describe('jest-junit tests', () => {
- it('matches report snapshot', async () => {
+ it('report from ./reports/jest test results matches snapshot', async () => {
+ const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml')
+ const outputPath = path.join(__dirname, '__outputs__', 'jest-junit.md')
+ const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
+ const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
+
const opts: ParseOptions = {
- name: 'jest tests',
- annotations: true,
+ parseErrors: true,
trackedFiles: ['__tests__/main.test.js', '__tests__/second.test.js', 'lib/main.js'],
workDir: 'C:/Users/Michal/Workspace/dorny/test-check/reports/jest/'
}
- const result = await parseJestJunit([xmlFixture], opts)
+ 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, result?.output?.summary ?? '')
+ fs.writeFileSync(outputPath, report)
+ })
+
+ it('report from facebook/jest test results matches snapshot', async () => {
+ const fixturePath = path.join(__dirname, 'fixtures', 'external', 'jest', 'jest-test-results.xml')
+ const trackedFilesPath = path.join(__dirname, 'fixtures', 'external', 'jest', 'files.txt')
+ const outputPath = path.join(__dirname, '__outputs__', 'jest-test-results.md')
+ const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
+ const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
- expect(result.success).toBeFalsy()
- expect(result?.output).toMatchSnapshot()
+ 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], {listTests: 'failed'})
+ fs.mkdirSync(path.dirname(outputPath), {recursive: true})
+ fs.writeFileSync(outputPath, report)
})
})
diff --git a/action.yml b/action.yml
index 2995c498..d50d0f47 100644
--- a/action.yml
+++ b/action.yml
@@ -4,19 +4,14 @@ description: |
Supports .NET (xUnit, NUnit, MSTest), Dart, Flutter and JavaScript (JEST).
author: Michal Dorner
inputs:
- annotations:
- description: Enables code annotations with error message and stack trace captured during test execution
- required: true
- default: 'true'
- fail-on-error:
- description: Set this action as failed if test report contain any failed test
- required: true
- default: 'true'
name:
description: Name of the check run
required: true
path:
- description: Path to test report
+ description: |
+ Coma separated list of paths to test reports
+ Supports wildcards via [fast-glob](https://github.com/mrmlnc/fast-glob)
+ All matched result files must be of same format
required: true
reporter:
description: |
@@ -26,13 +21,38 @@ inputs:
- flutter-machine
- jest-junit
required: true
+ list-suites:
+ description: |
+ Limits which test suites are listed. Supported options:
+ - all
+ - only-failed
+ required: true
+ default: 'all'
+ list-tests:
+ description: |
+ Limits which test cases are listed. Supported options:
+ - all
+ - only-failed
+ - none
+ required: true
+ default: 'all'
+ max-annotations:
+ description: |
+ Limits number of created annotations with error message and stack trace captured during test execution.
+ Must be less or equal to 50.
+ required: true
+ default: '10'
+ fail-on-error:
+ description: Set this action as failed if test report contain any failed test
+ required: true
+ default: 'true'
+ working-directory:
+ description: Relative path under $GITHUB_WORKSPACE where the repository was checked out
+ required: false
token:
description: GitHub Access Token
required: false
default: ${{ github.token }}
- working-directory:
- description: Relative path under $GITHUB_WORKSPACE where the repository was checked out
- required: false
outputs:
conclusion:
description: |
diff --git a/dist/index.js b/dist/index.js
index 13723e0e..0bfceb37 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -35,12 +35,15 @@ const core = __importStar(__nccwpck_require__(2186));
const github = __importStar(__nccwpck_require__(5438));
const fs = __importStar(__nccwpck_require__(5747));
const fast_glob_1 = __importDefault(__nccwpck_require__(3664));
+const get_annotations_1 = __nccwpck_require__(5867);
+const get_report_1 = __nccwpck_require__(3737);
const dart_json_parser_1 = __nccwpck_require__(4528);
const dotnet_trx_parser_1 = __nccwpck_require__(2664);
const jest_junit_parser_1 = __nccwpck_require__(1113);
const file_utils_1 = __nccwpck_require__(2711);
const git_1 = __nccwpck_require__(9844);
const github_utils_1 = __nccwpck_require__(3522);
+const markdown_utils_1 = __nccwpck_require__(6482);
async function run() {
try {
await main();
@@ -50,13 +53,27 @@ async function run() {
}
}
async function main() {
- const annotations = core.getInput('annotations', { required: true }) === 'true';
- const failOnError = core.getInput('fail-on-error', { required: true }) === 'true';
const name = core.getInput('name', { required: true });
const path = core.getInput('path', { required: true });
const reporter = core.getInput('reporter', { required: true });
- const token = core.getInput('token', { required: true });
+ const listSuites = core.getInput('list-suites', { required: true });
+ const listTests = core.getInput('list-tests', { required: true });
+ const maxAnnotations = parseInt(core.getInput('max-annotations', { required: true }));
+ const failOnError = core.getInput('fail-on-error', { required: true }) === 'true';
const workDirInput = core.getInput('working-directory', { required: false });
+ const token = core.getInput('token', { required: true });
+ if (listSuites !== 'all' && listSuites !== 'failed') {
+ core.setFailed(`Input parameter 'list-suites' has invalid value`);
+ return;
+ }
+ if (listTests !== 'all' && listTests !== 'failed' && listTests !== 'none') {
+ core.setFailed(`Input parameter 'list-tests' has invalid value`);
+ return;
+ }
+ if (isNaN(maxAnnotations) || maxAnnotations < 0 || maxAnnotations > 50) {
+ core.setFailed(`Input parameter 'max-annotations' has invalid value`);
+ return;
+ }
if (workDirInput) {
core.info(`Changing directory to ${workDirInput}`);
process.chdir(workDirInput);
@@ -65,57 +82,78 @@ async function main() {
const octokit = github.getOctokit(token);
const sha = github_utils_1.getCheckRunSha();
// We won't need tracked files if we are not going to create annotations
- const trackedFiles = annotations ? await git_1.listFiles() : [];
- const opts = {
- name,
- annotations,
+ const parseErrors = maxAnnotations > 0;
+ const trackedFiles = parseErrors ? await git_1.listFiles() : [];
+ const options = {
trackedFiles,
- workDir
+ workDir,
+ parseErrors
};
- const parser = getParser(reporter);
+ core.info(`Using test report parser '${reporter}'`);
+ const parser = getParser(reporter, options);
const files = await getFiles(path);
if (files.length === 0) {
core.setFailed(`No file matches path '${path}'`);
return;
}
- core.info(`Using test report parser '${reporter}'`);
- const result = await parser(files, opts);
- const conclusion = result.success ? 'success' : 'failure';
+ const results = [];
+ for (const file of files) {
+ core.info(`Processing test report ${file}`);
+ const content = await fs.promises.readFile(file, { encoding: 'utf8' });
+ const tr = await parser.parse(file, content);
+ results.push(tr);
+ }
+ core.info('Creating report summary');
+ const summary = get_report_1.getReport(results, { listSuites, listTests });
+ core.info('Creating annotations');
+ const annotations = get_annotations_1.getAnnotations(results, maxAnnotations);
+ const isFailed = results.some(tr => tr.result === 'failed');
+ const conclusion = isFailed ? 'failure' : 'success';
+ const icon = isFailed ? markdown_utils_1.Icon.fail : markdown_utils_1.Icon.success;
core.info(`Creating check run '${name}' with conclusion '${conclusion}'`);
await octokit.checks.create({
head_sha: sha,
name,
conclusion,
status: 'completed',
- output: result.output,
+ output: {
+ title: `${name} ${icon}`,
+ summary,
+ annotations
+ },
...github.context.repo
});
+ 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 time = results.reduce((sum, tr) => sum + tr.time, 0);
core.setOutput('conclusion', conclusion);
- if (failOnError && !result.success) {
+ core.setOutput('passed', passed);
+ core.setOutput('failed', failed);
+ core.setOutput('skipped', skipped);
+ core.setOutput('time', time);
+ if (failOnError && isFailed) {
core.setFailed(`Failed test has been found and 'fail-on-error' option is set to ${failOnError}`);
}
}
-function getParser(reporter) {
+function getParser(reporter, options) {
switch (reporter) {
case 'dart-json':
- return dart_json_parser_1.parseDartJson;
+ return new dart_json_parser_1.DartJsonParser(options);
case 'dotnet-trx':
- return dotnet_trx_parser_1.parseDotnetTrx;
+ return new dotnet_trx_parser_1.DotnetTrxParser(options);
case 'flutter-machine':
- return dart_json_parser_1.parseDartJson;
+ return new dart_json_parser_1.DartJsonParser(options);
case 'jest-junit':
- return jest_junit_parser_1.parseJestJunit;
+ return new jest_junit_parser_1.JestJunitParser(options);
default:
throw new Error(`Input variable 'reporter' is set to invalid value '${reporter}'`);
}
}
async function getFiles(pattern) {
- const paths = await fast_glob_1.default(pattern, { dot: true });
- return Promise.all(paths.map(async (path) => {
- core.info(`Reading test report '${path}'`);
- const content = await fs.promises.readFile(path, { encoding: 'utf8' });
- return { path, content };
- }));
+ const tasks = pattern.split(',').map(async (pat) => fast_glob_1.default(pat, { dot: true }));
+ const paths = await Promise.all(tasks);
+ return paths.flat();
}
exports.getFiles = getFiles;
run();
@@ -147,17 +185,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod);
return result;
};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.parseDartJson = void 0;
+exports.DartJsonParser = void 0;
const core = __importStar(__nccwpck_require__(2186));
-const get_report_1 = __importDefault(__nccwpck_require__(3737));
const file_utils_1 = __nccwpck_require__(2711);
-const markdown_utils_1 = __nccwpck_require__(6482);
const dart_json_types_1 = __nccwpck_require__(7887);
-const test_results_1 = __nccwpck_require__(8407);
+const test_results_1 = __nccwpck_require__(2768);
class TestRun {
constructor(path, suites, success, time) {
this.path = path;
@@ -200,154 +233,141 @@ class TestCase {
return this.testDone !== undefined ? this.testDone.time - this.testStart.time : 0;
}
}
-async function parseDartJson(files, options) {
- const testRuns = files.map(f => getTestRun(f.path, f.content));
- const testRunsResults = testRuns.map(getTestRunResult);
- const success = testRuns.every(tr => tr.success);
- const icon = success ? markdown_utils_1.Icon.success : markdown_utils_1.Icon.fail;
- return {
- success,
- output: {
- title: `${options.name.trim()} ${icon}`,
- summary: get_report_1.default(testRunsResults),
- annotations: options.annotations ? getAnnotations(testRuns, options.workDir, options.trackedFiles) : undefined
- }
- };
-}
-exports.parseDartJson = parseDartJson;
-function getTestRun(path, content) {
- core.info(`Parsing content of '${path}'`);
- const lines = content.split(/\n\r?/g);
- const events = lines
- .map((str, i) => {
- if (str.trim() === '') {
- return null;
- }
- try {
- return JSON.parse(str);
- }
- catch (e) {
- const col = e.columnNumber !== undefined ? `:${e.columnNumber}` : '';
- new Error(`Invalid JSON at ${path}:${i + 1}${col}\n\n${e}`);
- }
- })
- .filter(evt => evt != null);
- let success = false;
- let totalTime = 0;
- const suites = {};
- const tests = {};
- for (const evt of events) {
- if (dart_json_types_1.isSuiteEvent(evt)) {
- suites[evt.suite.id] = new TestSuite(evt.suite);
- }
- else if (dart_json_types_1.isGroupEvent(evt)) {
- suites[evt.group.suiteID].groups[evt.group.id] = new TestGroup(evt.group);
- }
- else if (dart_json_types_1.isTestStartEvent(evt) && evt.test.url !== null) {
- const test = new TestCase(evt);
- const suite = suites[evt.test.suiteID];
- const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]];
- group.tests.push(test);
- tests[evt.test.id] = test;
- }
- else if (dart_json_types_1.isTestDoneEvent(evt) && !evt.hidden) {
- tests[evt.testID].testDone = evt;
- }
- else if (dart_json_types_1.isErrorEvent(evt)) {
- tests[evt.testID].error = evt;
- }
- else if (dart_json_types_1.isDoneEvent(evt)) {
- success = evt.success;
- totalTime = evt.time;
- }
+class DartJsonParser {
+ constructor(options) {
+ this.options = options;
}
- return new TestRun(path, Object.values(suites), success, totalTime);
-}
-function getTestRunResult(tr) {
- const suites = tr.suites.map(s => {
- return new test_results_1.TestSuiteResult(s.suite.path, getGroups(s));
- });
- return new test_results_1.TestRunResult(tr.path, suites, tr.time);
-}
-function getGroups(suite) {
- const groups = Object.values(suite.groups).filter(grp => grp.tests.length > 0);
- groups.sort((a, b) => { var _a, _b; return ((_a = a.group.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.group.line) !== null && _b !== void 0 ? _b : 0); });
- return groups.map(group => {
- group.tests.sort((a, b) => { var _a, _b; return ((_a = a.testStart.test.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.testStart.test.line) !== null && _b !== void 0 ? _b : 0); });
- const tests = group.tests.map(t => new test_results_1.TestCaseResult(t.testStart.test.name, t.result, t.time));
- return new test_results_1.TestGroupResult(group.group.name, tests);
- });
-}
-function getAnnotations(testRuns, workDir, trackedFiles) {
- const annotations = [];
- for (const tr of testRuns) {
- for (const suite of tr.suites) {
- for (const group of Object.values(suite.groups)) {
- for (const test of group.tests) {
- if (test.error) {
- const err = getAnnotation(test, suite, workDir, trackedFiles);
- if (err !== null) {
- annotations.push(err);
- }
- }
- }
+ async parse(path, content) {
+ const tr = this.getTestRun(path, content);
+ const result = this.getTestRunResult(tr);
+ return Promise.resolve(result);
+ }
+ getTestRun(path, content) {
+ core.info(`Parsing content of '${path}'`);
+ const lines = content.split(/\n\r?/g);
+ const events = lines
+ .map((str, i) => {
+ if (str.trim() === '') {
+ return null;
+ }
+ try {
+ return JSON.parse(str);
+ }
+ catch (e) {
+ const col = e.columnNumber !== undefined ? `:${e.columnNumber}` : '';
+ new Error(`Invalid JSON at ${path}:${i + 1}${col}\n\n${e}`);
+ }
+ })
+ .filter(evt => evt != null);
+ let success = false;
+ let totalTime = 0;
+ const suites = {};
+ const tests = {};
+ for (const evt of events) {
+ if (dart_json_types_1.isSuiteEvent(evt)) {
+ suites[evt.suite.id] = new TestSuite(evt.suite);
+ }
+ else if (dart_json_types_1.isGroupEvent(evt)) {
+ suites[evt.group.suiteID].groups[evt.group.id] = new TestGroup(evt.group);
+ }
+ else if (dart_json_types_1.isTestStartEvent(evt) && evt.test.url !== null) {
+ const test = new TestCase(evt);
+ const suite = suites[evt.test.suiteID];
+ const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]];
+ group.tests.push(test);
+ tests[evt.test.id] = test;
+ }
+ else if (dart_json_types_1.isTestDoneEvent(evt) && !evt.hidden) {
+ tests[evt.testID].testDone = evt;
+ }
+ else if (dart_json_types_1.isErrorEvent(evt)) {
+ tests[evt.testID].error = evt;
+ }
+ else if (dart_json_types_1.isDoneEvent(evt)) {
+ success = evt.success;
+ totalTime = evt.time;
}
}
+ return new TestRun(path, Object.values(suites), success, totalTime);
}
- return annotations;
-}
-function getAnnotation(test, testSuite, workDir, trackedFiles) {
- var _a, _b, _c, _d, _e, _f;
- const stack = (_b = (_a = test.error) === null || _a === void 0 ? void 0 : _a.stackTrace) !== null && _b !== void 0 ? _b : '';
- let src = exceptionThrowSource(stack, trackedFiles);
- if (src === null) {
- const file = getRelativePathFromUrl((_c = test.testStart.test.url) !== null && _c !== void 0 ? _c : '', workDir);
- if (!trackedFiles.includes(file)) {
- return null;
- }
- src = {
- file,
- line: (_d = test.testStart.test.line) !== null && _d !== void 0 ? _d : 0
- };
+ getTestRunResult(tr) {
+ const suites = tr.suites.map(s => {
+ return new test_results_1.TestSuiteResult(s.suite.path, this.getGroups(s));
+ });
+ return new test_results_1.TestRunResult(tr.path, suites, tr.time);
+ }
+ getGroups(suite) {
+ const groups = Object.values(suite.groups).filter(grp => grp.tests.length > 0);
+ groups.sort((a, b) => { var _a, _b; return ((_a = a.group.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.group.line) !== null && _b !== void 0 ? _b : 0); });
+ return groups.map(group => {
+ group.tests.sort((a, b) => { var _a, _b; return ((_a = a.testStart.test.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.testStart.test.line) !== null && _b !== void 0 ? _b : 0); });
+ const tests = group.tests.map(t => this.getTest(t));
+ return new test_results_1.TestGroupResult(group.group.name, tests);
+ });
}
- return {
- annotation_level: 'failure',
- start_line: src.line,
- end_line: src.line,
- path: src.file,
- message: `${markdown_utils_1.fixEol((_e = test.error) === null || _e === void 0 ? void 0 : _e.error)}\n\n${markdown_utils_1.fixEol((_f = test.error) === null || _f === void 0 ? void 0 : _f.stackTrace)}`,
- title: `[${testSuite.suite.path}] ${test.testStart.test.name}`
- };
-}
-function exceptionThrowSource(ex, trackedFiles) {
- // imports from package which is tested are listed in stack traces as 'package:xyz/' which maps to relative path 'lib/'
- const packageRe = /^package:[a-zA-z0-9_$]+\//;
- const lines = ex.split(/\r?\n/).map(str => str.replace(packageRe, 'lib/'));
- // regexp to extract file path and line number from stack trace
- const re = /^(.*)\s+(\d+):\d+\s+/;
- for (const str of lines) {
- const match = str.match(re);
- if (match !== null) {
- const [_, fileStr, lineStr] = match;
- const file = file_utils_1.normalizeFilePath(fileStr);
- if (trackedFiles.includes(file)) {
- const line = parseInt(lineStr);
- return { file, line };
+ getTest(tc) {
+ const error = this.getError(tc);
+ return new test_results_1.TestCaseResult(tc.testStart.test.name, tc.result, tc.time, error);
+ }
+ getError(test) {
+ var _a, _b, _c, _d, _e, _f;
+ if (!this.options.parseErrors || !test.error) {
+ return undefined;
+ }
+ const { workDir, trackedFiles } = this.options;
+ const message = (_b = (_a = test.error) === null || _a === void 0 ? void 0 : _a.error) !== null && _b !== void 0 ? _b : '';
+ const stackTrace = (_d = (_c = test.error) === null || _c === void 0 ? void 0 : _c.stackTrace) !== null && _d !== void 0 ? _d : '';
+ const src = this.exceptionThrowSource(stackTrace, trackedFiles);
+ let path;
+ let line;
+ if (src !== undefined) {
+ ;
+ (path = src.path), (line = src.line);
+ }
+ else {
+ const testStartPath = this.getRelativePathFromUrl((_e = test.testStart.test.url) !== null && _e !== void 0 ? _e : '', workDir);
+ if (trackedFiles.includes(testStartPath)) {
+ path = testStartPath;
}
+ line = (_f = test.testStart.test.line) !== null && _f !== void 0 ? _f : undefined;
}
+ return {
+ path,
+ line,
+ message,
+ stackTrace
+ };
}
- return null;
-}
-function getRelativePathFromUrl(file, workdir) {
- const prefix = 'file:///';
- if (file.startsWith(prefix)) {
- file = file.substr(prefix.length);
+ exceptionThrowSource(ex, trackedFiles) {
+ // imports from package which is tested are listed in stack traces as 'package:xyz/' which maps to relative path 'lib/'
+ const packageRe = /^package:[a-zA-z0-9_$]+\//;
+ const lines = ex.split(/\r?\n/).map(str => str.replace(packageRe, 'lib/'));
+ // regexp to extract file path and line number from stack trace
+ const re = /^(.*)\s+(\d+):\d+\s+/;
+ for (const str of lines) {
+ const match = str.match(re);
+ if (match !== null) {
+ const [_, pathStr, lineStr] = match;
+ const path = file_utils_1.normalizeFilePath(pathStr);
+ if (trackedFiles.includes(path)) {
+ const line = parseInt(lineStr);
+ return { path, line };
+ }
+ }
+ }
}
- if (file.startsWith(workdir)) {
- file = file.substr(workdir.length);
+ getRelativePathFromUrl(file, workDir) {
+ const prefix = 'file:///';
+ if (file.startsWith(prefix)) {
+ file = file.substr(prefix.length);
+ }
+ if (file.startsWith(workDir)) {
+ file = file.substr(workDir.length);
+ }
+ return file;
}
- return file;
}
+exports.DartJsonParser = DartJsonParser;
/***/ }),
@@ -412,18 +432,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod);
return result;
};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.exceptionThrowSource = exports.parseDotnetTrx = void 0;
+exports.DotnetTrxParser = void 0;
const core = __importStar(__nccwpck_require__(2186));
const xml2js_1 = __nccwpck_require__(6189);
const file_utils_1 = __nccwpck_require__(2711);
-const xml_utils_1 = __nccwpck_require__(8653);
-const markdown_utils_1 = __nccwpck_require__(6482);
-const test_results_1 = __nccwpck_require__(8407);
-const get_report_1 = __importDefault(__nccwpck_require__(3737));
+const parse_utils_1 = __nccwpck_require__(7811);
+const test_results_1 = __nccwpck_require__(2768);
class TestClass {
constructor(name) {
this.name = name;
@@ -448,120 +463,109 @@ class Test {
}
}
}
-async function parseDotnetTrx(files, options) {
- const testRuns = [];
- const testClasses = [];
- for (const file of files) {
- const trx = await getTrxReport(file);
- const tc = getTestClasses(trx);
- const tr = getTestRunResult(file.path, trx, tc);
- testRuns.push(tr);
- testClasses.push(...tc);
- }
- const success = testRuns.every(tr => tr.result === 'success');
- const icon = success ? markdown_utils_1.Icon.success : markdown_utils_1.Icon.fail;
- return {
- success,
- output: {
- title: `${options.name.trim()} ${icon}`,
- summary: get_report_1.default(testRuns),
- annotations: options.annotations ? getAnnotations(testClasses, options.workDir, options.trackedFiles) : undefined
- }
- };
-}
-exports.parseDotnetTrx = parseDotnetTrx;
-async function getTrxReport(file) {
- core.info(`Parsing content of '${file.path}'`);
- try {
- return (await xml2js_1.parseStringPromise(file.content, {
- attrValueProcessors: [xml_utils_1.parseAttribute]
- }));
+class DotnetTrxParser {
+ constructor(options) {
+ this.options = options;
}
- catch (e) {
- throw new Error(`Invalid XML at ${file.path}\n\n${e}`);
+ async parse(path, content) {
+ const trx = await this.getTrxReport(path, content);
+ const tc = this.getTestClasses(trx);
+ const tr = this.getTestRunResult(path, trx, tc);
+ return tr;
}
-}
-function getTestRunResult(path, trx, testClasses) {
- const times = trx.TestRun.Times[0].$;
- const totalTime = times.finish.getTime() - times.start.getTime();
- const suites = testClasses.map(tc => {
- const tests = tc.tests.map(t => new test_results_1.TestCaseResult(t.name, t.result, t.duration));
- const group = new test_results_1.TestGroupResult(null, tests);
- return new test_results_1.TestSuiteResult(tc.name, [group]);
- });
- return new test_results_1.TestRunResult(path, suites, totalTime);
-}
-function getTestClasses(trx) {
- var _a;
- const unitTests = {};
- for (const td of trx.TestRun.TestDefinitions) {
- for (const ut of td.UnitTest) {
- unitTests[ut.$.id] = ut.TestMethod[0];
- }
- }
- const unitTestsResults = trx.TestRun.Results.flatMap(r => r.UnitTestResult).flatMap(unitTestResult => ({
- unitTestResult,
- testMethod: unitTests[unitTestResult.$.testId]
- }));
- const testClasses = {};
- for (const r of unitTestsResults) {
- let tc = testClasses[r.testMethod.$.className];
- if (tc === undefined) {
- tc = new TestClass(r.testMethod.$.className);
- testClasses[tc.name] = tc;
- }
- const output = r.unitTestResult.Output;
- const error = (output === null || output === void 0 ? void 0 : output.length) > 0 && ((_a = output[0].ErrorInfo) === null || _a === void 0 ? void 0 : _a.length) > 0 ? output[0].ErrorInfo[0] : undefined;
- const test = new Test(r.testMethod.$.name, r.unitTestResult.$.outcome, r.unitTestResult.$.duration, error);
- tc.tests.push(test);
- }
- const result = Object.values(testClasses);
- result.sort((a, b) => a.name.localeCompare(b.name));
- for (const tc of result) {
- tc.tests.sort((a, b) => a.name.localeCompare(b.name));
+ async getTrxReport(path, content) {
+ core.info(`Parsing content of '${path}'`);
+ try {
+ return (await xml2js_1.parseStringPromise(content));
+ }
+ catch (e) {
+ throw new Error(`Invalid XML at ${path}\n\n${e}`);
+ }
}
- return result;
-}
-function getAnnotations(testClasses, workDir, trackedFiles) {
- const annotations = [];
- for (const tc of testClasses) {
- for (const t of tc.tests) {
- if (t.error) {
- const src = exceptionThrowSource(t.error.StackTrace[0], workDir, trackedFiles);
- if (src === null) {
- continue;
- }
- annotations.push({
- annotation_level: 'failure',
- start_line: src.line,
- end_line: src.line,
- path: src.file,
- message: markdown_utils_1.fixEol(t.error.Message[0]),
- title: `[${tc.name}] ${t.name}`
- });
+ getTestClasses(trx) {
+ var _a;
+ const unitTests = {};
+ for (const td of trx.TestRun.TestDefinitions) {
+ for (const ut of td.UnitTest) {
+ unitTests[ut.$.id] = ut.TestMethod[0];
+ }
+ }
+ const unitTestsResults = trx.TestRun.Results.flatMap(r => r.UnitTestResult).flatMap(unitTestResult => ({
+ unitTestResult,
+ testMethod: unitTests[unitTestResult.$.testId]
+ }));
+ const testClasses = {};
+ for (const r of unitTestsResults) {
+ let tc = testClasses[r.testMethod.$.className];
+ if (tc === undefined) {
+ tc = new TestClass(r.testMethod.$.className);
+ testClasses[tc.name] = tc;
}
+ const output = r.unitTestResult.Output;
+ const error = (output === null || output === void 0 ? void 0 : output.length) > 0 && ((_a = output[0].ErrorInfo) === null || _a === void 0 ? void 0 : _a.length) > 0 ? output[0].ErrorInfo[0] : undefined;
+ const duration = parse_utils_1.parseNetDuration(r.unitTestResult.$.duration);
+ const test = new Test(r.testMethod.$.name, r.unitTestResult.$.outcome, duration, error);
+ tc.tests.push(test);
}
+ const result = Object.values(testClasses);
+ result.sort((a, b) => a.name.localeCompare(b.name));
+ for (const tc of result) {
+ tc.tests.sort((a, b) => a.name.localeCompare(b.name));
+ }
+ return result;
}
- return annotations;
-}
-function exceptionThrowSource(ex, workDir, trackedFiles) {
- const lines = ex.split(/\r*\n/);
- const re = / in (.+):line (\d+)$/;
- for (const str of lines) {
- const match = str.match(re);
- if (match !== null) {
- const [_, fileStr, lineStr] = match;
- const filePath = file_utils_1.normalizeFilePath(fileStr);
- const file = filePath.startsWith(workDir) ? filePath.substr(workDir.length) : filePath;
- if (trackedFiles.includes(file)) {
- const line = parseInt(lineStr);
- return { file, line };
+ getTestRunResult(path, trx, testClasses) {
+ const times = trx.TestRun.Times[0].$;
+ const totalTime = parse_utils_1.parseIsoDate(times.finish).getTime() - parse_utils_1.parseIsoDate(times.start).getTime();
+ const suites = testClasses.map(testClass => {
+ const tests = testClass.tests.map(test => {
+ const error = this.getError(test);
+ return new test_results_1.TestCaseResult(test.name, test.result, test.duration, error);
+ });
+ const group = new test_results_1.TestGroupResult(null, tests);
+ return new test_results_1.TestSuiteResult(testClass.name, [group]);
+ });
+ return new test_results_1.TestRunResult(path, suites, totalTime);
+ }
+ getError(test) {
+ if (!this.options.parseErrors || !test.error) {
+ return undefined;
+ }
+ const message = test.error.Message[0];
+ const stackTrace = test.error.StackTrace[0];
+ let path;
+ let line;
+ const src = this.exceptionThrowSource(stackTrace);
+ if (src) {
+ path = src.path;
+ line = src.line;
+ }
+ return {
+ path,
+ line,
+ message,
+ stackTrace: `${message}\n${stackTrace}`
+ };
+ }
+ exceptionThrowSource(stackTrace) {
+ const lines = stackTrace.split(/\r*\n/);
+ const re = / in (.+):line (\d+)$/;
+ const { workDir, trackedFiles } = this.options;
+ for (const str of lines) {
+ const match = str.match(re);
+ if (match !== null) {
+ const [_, fileStr, lineStr] = match;
+ const filePath = file_utils_1.normalizeFilePath(fileStr);
+ const file = filePath.startsWith(workDir) ? filePath.substr(workDir.length) : filePath;
+ if (trackedFiles.includes(file)) {
+ const line = parseInt(lineStr);
+ return { path: file, line };
+ }
}
}
}
- return null;
}
-exports.exceptionThrowSource = exceptionThrowSource;
+exports.DotnetTrxParser = DotnetTrxParser;
/***/ }),
@@ -590,133 +594,195 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod);
return result;
};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.exceptionThrowSource = exports.parseJestJunit = void 0;
+exports.JestJunitParser = void 0;
const core = __importStar(__nccwpck_require__(2186));
const xml2js_1 = __nccwpck_require__(6189);
-const markdown_utils_1 = __nccwpck_require__(6482);
const file_utils_1 = __nccwpck_require__(2711);
-const xml_utils_1 = __nccwpck_require__(8653);
-const test_results_1 = __nccwpck_require__(8407);
-const get_report_1 = __importDefault(__nccwpck_require__(3737));
-async function parseJestJunit(files, options) {
- const junit = [];
- const testRuns = [];
- for (const file of files) {
- const ju = await getJunitReport(file);
- const tr = getTestRunResult(file.path, ju);
- junit.push(ju);
- testRuns.push(tr);
+const test_results_1 = __nccwpck_require__(2768);
+class JestJunitParser {
+ constructor(options) {
+ this.options = options;
}
- const success = testRuns.every(tr => tr.result === 'success');
- const icon = success ? markdown_utils_1.Icon.success : markdown_utils_1.Icon.fail;
- return {
- success,
- output: {
- title: `${options.name.trim()} ${icon}`,
- summary: get_report_1.default(testRuns),
- annotations: options.annotations ? getAnnotations(junit, options.workDir, options.trackedFiles) : undefined
- }
- };
-}
-exports.parseJestJunit = parseJestJunit;
-async function getJunitReport(file) {
- core.info(`Parsing content of '${file.path}'`);
- try {
- return (await xml2js_1.parseStringPromise(file.content, {
- attrValueProcessors: [xml_utils_1.parseAttribute]
- }));
+ async parse(path, content) {
+ const ju = await this.getJunitReport(path, content);
+ return this.getTestRunResult(path, ju);
}
- catch (e) {
- throw new Error(`Invalid XML at ${file.path}\n\n${e}`);
+ async getJunitReport(path, content) {
+ core.info(`Parsing content of '${path}'`);
+ try {
+ return (await xml2js_1.parseStringPromise(content));
+ }
+ catch (e) {
+ throw new Error(`Invalid XML at ${path}\n\n${e}`);
+ }
}
-}
-function getTestRunResult(path, junit) {
- const suites = junit.testsuites.testsuite.map(ts => {
- const name = ts.$.name.trim();
- const time = ts.$.time * 1000;
- const sr = new test_results_1.TestSuiteResult(name, getGroups(ts), time);
- return sr;
- });
- const time = junit.testsuites.$.time * 1000;
- return new test_results_1.TestRunResult(path, suites, time);
-}
-function getGroups(suite) {
- const groups = [];
- for (const tc of suite.testcase) {
- let grp = groups.find(g => g.describe === tc.$.classname);
- if (grp === undefined) {
- grp = { describe: tc.$.classname, tests: [] };
- groups.push(grp);
- }
- grp.tests.push(tc);
- }
- return groups.map(grp => {
- const tests = grp.tests.map(tc => {
- const name = tc.$.name.trim();
- const result = getTestCaseResult(tc);
- const time = tc.$.time * 1000;
- return new test_results_1.TestCaseResult(name, result, time);
+ getTestRunResult(path, junit) {
+ const suites = junit.testsuites.testsuite.map(ts => {
+ const name = ts.$.name.trim();
+ const time = parseFloat(ts.$.time) * 1000;
+ const sr = new test_results_1.TestSuiteResult(name, this.getGroups(ts), time);
+ return sr;
});
- return new test_results_1.TestGroupResult(grp.describe, tests);
- });
-}
-function getTestCaseResult(test) {
- if (test.failure)
- return 'failed';
- if (test.skipped)
- return 'skipped';
- return 'success';
-}
-function getAnnotations(junitReports, workDir, trackedFiles) {
- const annotations = [];
- for (const junit of junitReports) {
- for (const suite of junit.testsuites.testsuite) {
- for (const tc of suite.testcase) {
- if (!tc.failure) {
- continue;
+ const time = parseFloat(junit.testsuites.$.time) * 1000;
+ return new test_results_1.TestRunResult(path, suites, time);
+ }
+ getGroups(suite) {
+ const groups = [];
+ for (const tc of suite.testcase) {
+ let grp = groups.find(g => g.describe === tc.$.classname);
+ if (grp === undefined) {
+ grp = { describe: tc.$.classname, tests: [] };
+ groups.push(grp);
+ }
+ grp.tests.push(tc);
+ }
+ return groups.map(grp => {
+ const tests = grp.tests.map(tc => {
+ const name = tc.$.name.trim();
+ const result = this.getTestCaseResult(tc);
+ const time = parseFloat(tc.$.time) * 1000;
+ const error = this.getTestCaseError(tc);
+ return new test_results_1.TestCaseResult(name, result, time, error);
+ });
+ return new test_results_1.TestGroupResult(grp.describe, tests);
+ });
+ }
+ getTestCaseResult(test) {
+ if (test.failure)
+ return 'failed';
+ if (test.skipped)
+ return 'skipped';
+ return 'success';
+ }
+ getTestCaseError(tc) {
+ if (!this.options.parseErrors || !tc.failure) {
+ return undefined;
+ }
+ const stackTrace = tc.failure[0];
+ let path;
+ let line;
+ const src = this.exceptionThrowSource(stackTrace);
+ if (src) {
+ path = src.path;
+ line = src.line;
+ }
+ return {
+ path,
+ line,
+ stackTrace
+ };
+ }
+ exceptionThrowSource(stackTrace) {
+ const lines = stackTrace.split(/\r?\n/);
+ const re = /\((.*):(\d+):\d+\)$/;
+ const { workDir, trackedFiles } = this.options;
+ for (const str of lines) {
+ const match = str.match(re);
+ if (match !== null) {
+ const [_, fileStr, lineStr] = match;
+ const filePath = file_utils_1.normalizeFilePath(fileStr);
+ const path = filePath.startsWith(workDir) ? filePath.substr(workDir.length) : filePath;
+ if (trackedFiles.includes(path)) {
+ const line = parseInt(lineStr);
+ return { path, line };
}
- for (const ex of tc.failure) {
- const src = exceptionThrowSource(ex, workDir, trackedFiles);
- if (src === null) {
+ }
+ }
+ }
+}
+exports.JestJunitParser = JestJunitParser;
+
+
+/***/ }),
+
+/***/ 5867:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getAnnotations = void 0;
+const markdown_utils_1 = __nccwpck_require__(6482);
+function getAnnotations(results, maxCount) {
+ var _a, _b, _c, _d;
+ if (maxCount === 0) {
+ return [];
+ }
+ // Collect errors from TestRunResults
+ // Merge duplicates if there are more test results files processed
+ const errors = [];
+ const mergeDup = results.length > 1;
+ for (const tr of results) {
+ for (const ts of tr.suites) {
+ for (const tg of ts.groups) {
+ for (const tc of tg.tests) {
+ const err = tc.error;
+ if (err === undefined) {
continue;
}
- annotations.push({
- annotation_level: 'failure',
- start_line: src.line,
- end_line: src.line,
- path: src.file,
- message: markdown_utils_1.fixEol(ex),
- title: `[${suite.$.name}] ${tc.$.name.trim()}`
+ const path = (_a = err.path) !== null && _a !== void 0 ? _a : tr.path;
+ const line = (_b = err.line) !== null && _b !== void 0 ? _b : 0;
+ if (mergeDup) {
+ const dup = errors.find(e => path === e.path && line === e.line && err.stackTrace === e.stackTrace);
+ if (dup !== undefined) {
+ dup.testRunPaths.push(tr.path);
+ continue;
+ }
+ }
+ errors.push({
+ testRunPaths: [tr.path],
+ suiteName: ts.name,
+ testName: tc.name,
+ stackTrace: err.stackTrace,
+ message: (_d = (_c = err.message) !== null && _c !== void 0 ? _c : getFirstNonEmptyLine(err.stackTrace)) !== null && _d !== void 0 ? _d : 'Test failed',
+ path,
+ line
});
}
}
}
}
+ // Limit number of created annotations
+ errors.splice(maxCount + 1);
+ const annotations = errors.map(e => {
+ const message = [
+ 'Failed test found in:',
+ e.testRunPaths.map(p => ` ${p}`).join('\n'),
+ 'Error:',
+ ident(markdown_utils_1.fixEol(e.message), ' ')
+ ].join('\n');
+ return enforceCheckRunLimits({
+ path: e.path,
+ start_line: e.line,
+ end_line: e.line,
+ annotation_level: 'failure',
+ title: `${e.suiteName} ► ${e.testName}`,
+ raw_details: markdown_utils_1.fixEol(e.stackTrace),
+ message
+ });
+ });
return annotations;
}
-function exceptionThrowSource(ex, workDir, trackedFiles) {
- const lines = ex.split(/\r?\n/);
- const re = /\((.*):(\d+):(\d+)\)$/;
- for (const str of lines) {
- const match = str.match(re);
- if (match !== null) {
- const [_, fileStr, lineStr, colStr] = match;
- const filePath = file_utils_1.normalizeFilePath(fileStr);
- const file = filePath.startsWith(workDir) ? filePath.substr(workDir.length) : filePath;
- if (trackedFiles.includes(file)) {
- const line = parseInt(lineStr);
- const column = parseInt(colStr);
- return { file, line, column };
- }
- }
+exports.getAnnotations = getAnnotations;
+function enforceCheckRunLimits(err) {
+ err.title = markdown_utils_1.ellipsis(err.title || '', 255);
+ err.message = markdown_utils_1.ellipsis(err.message, 65535);
+ if (err.raw_details) {
+ err.raw_details = markdown_utils_1.ellipsis(err.raw_details, 65535);
}
- return null;
+ return err;
+}
+function getFirstNonEmptyLine(stackTrace) {
+ const lines = stackTrace.split(/\r?\n/g);
+ return lines.find(str => !/^\s*$/.test(str));
+}
+function ident(text, prefix) {
+ return text
+ .split(/\n/g)
+ .map(line => prefix + line)
+ .join('\n');
}
-exports.exceptionThrowSource = exceptionThrowSource;
/***/ }),
@@ -746,28 +812,57 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getReport = void 0;
const core = __importStar(__nccwpck_require__(2186));
const markdown_utils_1 = __nccwpck_require__(6482);
const slugger_1 = __nccwpck_require__(3328);
-function getReport(results) {
- const badge = getBadge(results);
- const runsSummary = results.map(getRunSummary).join('\n\n');
- const suites = results
- .flatMap(tr => tr.suites)
- .map((ts, i) => getSuiteSummary(ts, i))
- .join('\n');
- const suitesSection = `# Test Suites\n\n${suites}`;
- return [badge, runsSummary, suitesSection].join('\n\n');
-}
-exports.default = getReport;
-function getBadge(results) {
+function getReport(results, options = {}) {
+ core.info('Generating check run summary');
+ const maxReportLength = 65535;
+ const sections = [];
+ applySort(results);
+ const badge = getReportBadge(results);
+ sections.push(badge);
+ const runs = getTestRunsReport(results, options);
+ sections.push(...runs);
+ const report = sections.join('\n');
+ if (report.length > maxReportLength) {
+ let msg = `**Check Run summary limit of ${maxReportLength} chars was exceed**`;
+ if (options.listTests !== 'all') {
+ msg += '\n- Consider setting `list-tests` option to `only-failed` or `none`';
+ }
+ if (options.listSuites !== 'all') {
+ msg += '\n- Consider setting `list-suites` option to `only-failed`';
+ }
+ return `${badge}\n${msg}`;
+ }
+ return report;
+}
+exports.getReport = getReport;
+function applySort(results) {
+ results.sort((a, b) => a.path.localeCompare(b.path));
+ for (const res of results) {
+ res.suites.sort((a, b) => a.name.localeCompare(b.name));
+ }
+}
+function getReportBadge(results) {
const passed = results.reduce((sum, tr) => sum + tr.passed, 0);
const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0);
const failed = results.reduce((sum, tr) => sum + tr.failed, 0);
- const passedText = passed > 0 ? `${passed} passed` : null;
- const skippedText = skipped > 0 ? `${skipped} skipped` : null;
- const failedText = failed > 0 ? `${failed} failed` : null;
- const message = [passedText, skippedText, failedText].filter(s => s != null).join(', ') || 'none';
+ return getBadge(passed, failed, skipped);
+}
+function getBadge(passed, failed, skipped) {
+ const text = [];
+ if (passed > 0) {
+ text.push(`${passed} passed`);
+ }
+ if (failed > 0) {
+ text.push(`${failed} failed`);
+ }
+ if (skipped > 0) {
+ text.push(`${skipped} skipped`);
+ }
+ const message = text.length > 0 ? text.join(', ') : 'none';
let color = 'success';
if (failed > 0) {
color = 'critical';
@@ -775,48 +870,99 @@ function getBadge(results) {
else if (passed === 0 && failed === 0) {
color = 'yellow';
}
+ const hint = failed > 0 ? 'Tests failed' : 'Tests passed successfully';
const uri = encodeURIComponent(`tests-${message}-${color}`);
- const text = failed > 0 ? 'Tests failed' : 'Tests passed successfully';
- return `![${text}](https://img.shields.io/badge/${uri})`;
-}
-function getRunSummary(tr) {
- core.info('Generating check run summary');
- const time = `${(tr.time / 1000).toFixed(3)}s`;
- const headingLine1 = `### ${tr.path}`;
- const headingLine2 = `**${tr.tests}** tests were completed in **${time}** with **${tr.passed}** passed, **${tr.skipped}** skipped and **${tr.failed}** failed.`;
- const suitesSummary = tr.suites.map((s, i) => {
- const icon = getResultIcon(s.result);
- const tsTime = `${s.time}ms`;
- const tsName = s.name;
- const tsAddr = makeSuiteSlug(i, tsName).link;
- const tsNameLink = markdown_utils_1.link(tsName, tsAddr);
- return [icon, tsNameLink, s.tests, tsTime, s.passed, s.skipped, s.failed];
- });
- const summary = markdown_utils_1.table(['Result', 'Suite', 'Tests', 'Time', `Passed ${markdown_utils_1.Icon.success}`, `Skipped ${markdown_utils_1.Icon.skip}`, `Failed ${markdown_utils_1.Icon.fail}`], [markdown_utils_1.Align.Center, markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...suitesSummary);
- return [headingLine1, headingLine2, summary].join('\n\n');
+ return `![${hint}](https://img.shields.io/badge/${uri})`;
+}
+function getTestRunsReport(testRuns, options) {
+ const sections = [];
+ if (testRuns.length > 1) {
+ const tableData = testRuns.map((tr, runIndex) => {
+ const time = markdown_utils_1.formatTime(tr.time);
+ const name = tr.path;
+ const addr = makeRunSlug(runIndex).link;
+ const nameLink = markdown_utils_1.link(name, addr);
+ const passed = tr.passed > 0 ? `${tr.passed}${markdown_utils_1.Icon.success}` : '';
+ const failed = tr.failed > 0 ? `${tr.failed}${markdown_utils_1.Icon.fail}` : '';
+ const skipped = tr.skipped > 0 ? `${tr.skipped}${markdown_utils_1.Icon.skip}` : '';
+ return [nameLink, passed, failed, skipped, time];
+ });
+ const resultsTable = markdown_utils_1.table(['Report', 'Passed', 'Failed', 'Skipped', 'Time'], [markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...tableData);
+ sections.push(resultsTable);
+ }
+ const suitesReports = testRuns.map((tr, i) => getSuitesReport(tr, i, options)).flat();
+ sections.push(...suitesReports);
+ return sections;
+}
+function getSuitesReport(tr, runIndex, options) {
+ const sections = [];
+ const trSlug = makeRunSlug(runIndex);
+ const nameLink = `${tr.path}`;
+ const icon = getResultIcon(tr.result);
+ sections.push(`## ${nameLink} ${icon}`);
+ const time = markdown_utils_1.formatTime(tr.time);
+ const headingLine2 = `**${tr.tests}** tests were completed in **${time}** with **${tr.passed}** passed, **${tr.failed}** failed and **${tr.skipped}** skipped.`;
+ sections.push(headingLine2);
+ const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites;
+ if (suites.length > 0) {
+ const suitesTable = markdown_utils_1.table(['Test suite', 'Passed', 'Failed', 'Skipped', 'Time'], [markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...suites.map((s, suiteIndex) => {
+ const tsTime = markdown_utils_1.formatTime(s.time);
+ const tsName = s.name;
+ const skipLink = options.listTests === 'none' || (options.listTests === 'failed' && s.result !== 'failed');
+ const tsAddr = makeSuiteSlug(runIndex, suiteIndex).link;
+ const tsNameLink = skipLink ? tsName : markdown_utils_1.link(tsName, tsAddr);
+ const passed = s.passed > 0 ? `${s.passed}${markdown_utils_1.Icon.success}` : '';
+ const failed = s.failed > 0 ? `${s.failed}${markdown_utils_1.Icon.fail}` : '';
+ const skipped = s.skipped > 0 ? `${s.skipped}${markdown_utils_1.Icon.skip}` : '';
+ return [tsNameLink, passed, failed, skipped, tsTime];
+ }));
+ sections.push(suitesTable);
+ }
+ if (options.listTests !== 'none') {
+ const tests = suites.map((ts, suiteIndex) => getTestsReport(ts, runIndex, suiteIndex, options)).flat();
+ if (tests.length > 1) {
+ sections.push(...tests);
+ }
+ }
+ return sections;
}
-function getSuiteSummary(ts, index) {
+function getTestsReport(ts, runIndex, suiteIndex, options) {
+ const groups = options.listTests === 'failed' ? ts.failedGroups : ts.groups;
+ if (groups.length === 0) {
+ return [];
+ }
+ const sections = [];
+ const tsName = ts.name;
+ const tsSlug = makeSuiteSlug(runIndex, suiteIndex);
+ const tsNameLink = `${tsName}`;
const icon = getResultIcon(ts.result);
- const content = ts.groups
- .map(grp => {
- const header = grp.name ? `### ${grp.name}\n\n` : '';
- const tests = markdown_utils_1.table(['Result', 'Test', 'Time'], [markdown_utils_1.Align.Center, markdown_utils_1.Align.Left, markdown_utils_1.Align.Right], ...grp.tests.map(tc => {
+ sections.push(`### ${tsNameLink} ${icon}`);
+ const tsTime = markdown_utils_1.formatTime(ts.time);
+ const headingLine2 = `**${ts.tests}** tests were completed in **${tsTime}** with **${ts.passed}** passed, **${ts.failed}** failed and **${ts.skipped}** skipped.`;
+ sections.push(headingLine2);
+ for (const grp of groups) {
+ const tests = options.listTests === 'failed' ? grp.failedTests : grp.tests;
+ if (tests.length === 0) {
+ continue;
+ }
+ const grpHeader = grp.name ? `\n**${grp.name}**` : '';
+ const testsTable = markdown_utils_1.table(['Result', 'Test', 'Time'], [markdown_utils_1.Align.Center, markdown_utils_1.Align.Left, markdown_utils_1.Align.Right], ...grp.tests.map(tc => {
const name = tc.name;
- const time = `${tc.time}ms`;
+ const time = markdown_utils_1.formatTime(tc.time);
const result = getResultIcon(tc.result);
return [result, name, time];
}));
- return `${header}${tests}\n`;
- })
- .join('\n');
- const tsName = ts.name;
- const tsSlug = makeSuiteSlug(index, tsName);
- const tsNameLink = `${tsName}`;
- return `## ${tsNameLink} ${icon}\n\n${content}`;
+ sections.push(grpHeader, testsTable);
+ }
+ return sections;
}
-function makeSuiteSlug(index, name) {
- // use "ts-$index-" as prefix to avoid slug conflicts after escaping the paths
- return slugger_1.slug(`ts-${index}-${name}`);
+function makeRunSlug(runIndex) {
+ // use prefix to avoid slug conflicts after escaping the paths
+ return slugger_1.slug(`r${runIndex}`);
+}
+function makeSuiteSlug(runIndex, suiteIndex) {
+ // use prefix to avoid slug conflicts after escaping the paths
+ return slugger_1.slug(`r${runIndex}s${suiteIndex}`);
}
function getResultIcon(result) {
switch (result) {
@@ -834,7 +980,7 @@ function getResultIcon(result) {
/***/ }),
-/***/ 8407:
+/***/ 2768:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
@@ -866,6 +1012,9 @@ class TestRunResult {
get result() {
return this.suites.some(t => t.result === 'failed') ? 'failed' : 'success';
}
+ get failedSuites() {
+ return this.suites.filter(s => s.result === 'failed');
+ }
}
exports.TestRunResult = TestRunResult;
class TestSuiteResult {
@@ -893,6 +1042,9 @@ class TestSuiteResult {
get result() {
return this.groups.some(t => t.result === 'failed') ? 'failed' : 'success';
}
+ get failedGroups() {
+ return this.groups.filter(grp => grp.result === 'failed');
+ }
}
exports.TestSuiteResult = TestSuiteResult;
class TestGroupResult {
@@ -915,13 +1067,17 @@ class TestGroupResult {
get result() {
return this.tests.some(t => t.result === 'failed') ? 'failed' : 'success';
}
+ get failedTests() {
+ return this.tests.filter(tc => tc.result === 'failed');
+ }
}
exports.TestGroupResult = TestGroupResult;
class TestCaseResult {
- constructor(name, result, time) {
+ constructor(name, result, time, error) {
this.name = name;
this.result = result;
this.time = time;
+ this.error = error;
}
}
exports.TestCaseResult = TestCaseResult;
@@ -1082,7 +1238,7 @@ exports.getCheckRunSha = getCheckRunSha;
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.fixEol = exports.tableEscape = exports.table = exports.link = exports.details = exports.Icon = exports.Align = void 0;
+exports.formatTime = exports.ellipsis = exports.fixEol = exports.tableEscape = exports.table = exports.link = exports.Icon = exports.Align = void 0;
var Align;
(function (Align) {
Align["Left"] = ":---";
@@ -1095,18 +1251,14 @@ exports.Icon = {
success: '✔️',
fail: '❌' // ':x:'
};
-function details(summary, content) {
- return `${summary}
${content} `;
-}
-exports.details = details;
function link(title, address) {
return `[${title}](${address})`;
}
exports.link = link;
function table(headers, align, ...rows) {
- const headerRow = `| ${headers.map(tableEscape).join(' | ')} |`;
- const alignRow = `| ${align.join(' | ')} |`;
- const contentRows = rows.map(row => `| ${row.map(tableEscape).join(' | ')} |`).join('\n');
+ const headerRow = `|${headers.map(tableEscape).join('|')}|`;
+ const alignRow = `|${align.join('|')}|`;
+ const contentRows = rows.map(row => `|${row.map(tableEscape).join('|')}|`).join('\n');
return [headerRow, alignRow, contentRows].join('\n');
}
exports.table = table;
@@ -1119,6 +1271,50 @@ function fixEol(text) {
return (_a = text === null || text === void 0 ? void 0 : text.replace(/\r/g, '')) !== null && _a !== void 0 ? _a : '';
}
exports.fixEol = fixEol;
+function ellipsis(text, maxLength) {
+ if (text.length <= maxLength) {
+ return text;
+ }
+ return text.substr(0, maxLength - 3) + '...';
+}
+exports.ellipsis = ellipsis;
+function formatTime(ms) {
+ if (ms > 1000) {
+ return `${(ms / 1000).toFixed(3)}s`;
+ }
+ return `${Math.round(ms)}ms`;
+}
+exports.formatTime = formatTime;
+
+
+/***/ }),
+
+/***/ 7811:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseIsoDate = exports.parseNetDuration = void 0;
+function parseNetDuration(str) {
+ // matches dotnet duration: 00:00:00.0010000
+ const durationRe = /^(\d\d):(\d\d):(\d\d\.\d+)$/;
+ const durationMatch = str.match(durationRe);
+ if (durationMatch === null) {
+ throw new Error(`Invalid format: "${str}" is not NET duration`);
+ }
+ const [_, hourStr, minStr, secStr] = durationMatch;
+ return (parseInt(hourStr) * 3600 + parseInt(minStr) * 60 + parseFloat(secStr)) * 1000;
+}
+exports.parseNetDuration = parseNetDuration;
+function parseIsoDate(str) {
+ const isoDateRe = /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)$/;
+ if (str === undefined || !isoDateRe.test(str)) {
+ throw new Error(`Invalid format: "${str}" is not ISO date`);
+ }
+ return new Date(str);
+}
+exports.parseIsoDate = parseIsoDate;
/***/ }),
@@ -1146,39 +1342,6 @@ function slug(name) {
exports.slug = slug;
-/***/ }),
-
-/***/ 8653:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.parseAttribute = void 0;
-const isoDateRe = /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)$/;
-// matches dotnet duration: 00:00:00.0010000
-const durationRe = /^(\d\d):(\d\d):(\d\d\.\d+)$/;
-function parseAttribute(str) {
- if (str === '' || str === undefined) {
- return str;
- }
- if (isoDateRe.test(str)) {
- return new Date(str);
- }
- const durationMatch = str.match(durationRe);
- if (durationMatch !== null) {
- const [_, hourStr, minStr, secStr] = durationMatch;
- return (parseInt(hourStr) * 3600 + parseInt(minStr) * 60 + parseFloat(secStr)) * 1000;
- }
- const num = parseFloat(str);
- if (isNaN(num)) {
- return str;
- }
- return num;
-}
-exports.parseAttribute = parseAttribute;
-
-
/***/ }),
/***/ 7351:
diff --git a/dist/index.js.map b/dist/index.js.map
index 61d77bd0..405a58e4 100644
--- a/dist/index.js.map
+++ b/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["../webpack://test-check/./lib/main.js","../webpack://test-check/./lib/parsers/dart-json/dart-json-parser.js","../webpack://test-check/./lib/parsers/dart-json/dart-json-types.js","../webpack://test-check/./lib/parsers/dotnet-trx/dotnet-trx-parser.js","../webpack://test-check/./lib/parsers/jest-junit/jest-junit-parser.js","../webpack://test-check/./lib/report/get-report.js","../webpack://test-check/./lib/report/test-results.js","../webpack://test-check/./lib/utils/exec.js","../webpack://test-check/./lib/utils/file-utils.js","../webpack://test-check/./lib/utils/git.js","../webpack://test-check/./lib/utils/github-utils.js","../webpack://test-check/./lib/utils/markdown-utils.js","../webpack://test-check/./lib/utils/slugger.js","../webpack://test-check/./lib/utils/xml-utils.js","../webpack://test-check/./node_modules/@actions/core/lib/command.js","../webpack://test-check/./node_modules/@actions/core/lib/core.js","../webpack://test-check/./node_modules/@actions/core/lib/file-command.js","../webpack://test-check/./node_modules/@actions/core/lib/utils.js","../webpack://test-check/./node_modules/@actions/exec/lib/exec.js","../webpack://test-check/./node_modules/@actions/exec/lib/toolrunner.js","../webpack://test-check/./node_modules/@actions/github/lib/context.js","../webpack://test-check/./node_modules/@actions/github/lib/github.js","../webpack://test-check/./node_modules/@actions/github/lib/internal/utils.js","../webpack://test-check/./node_modules/@actions/github/lib/utils.js","../webpack://test-check/./node_modules/@actions/http-client/index.js","../webpack://test-check/./node_modules/@actions/http-client/proxy.js","../webpack://test-check/./node_modules/@actions/io/lib/io-util.js","../webpack://test-check/./node_modules/@actions/io/lib/io.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/constants.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/index.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/providers/async.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/providers/common.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/providers/sync.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/settings.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/utils/fs.js","../webpack://test-check/./node_modules/@nodelib/fs.scandir/out/utils/index.js","../webpack://test-check/./node_modules/@nodelib/fs.stat/out/adapters/fs.js","../webpack://test-check/./node_modules/@nodelib/fs.stat/out/index.js","../webpack://test-check/./node_modules/@nodelib/fs.stat/out/providers/async.js","../webpack://test-check/./node_modules/@nodelib/fs.stat/out/providers/sync.js","../webpack://test-check/./node_modules/@nodelib/fs.stat/out/settings.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/index.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/providers/async.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/providers/stream.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/providers/sync.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/readers/async.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/readers/common.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/readers/reader.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/readers/sync.js","../webpack://test-check/./node_modules/@nodelib/fs.walk/out/settings.js","../webpack://test-check/./node_modules/@octokit/auth-token/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/core/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/endpoint/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/endpoint/node_modules/is-plain-object/dist/is-plain-object.js","../webpack://test-check/./node_modules/@octokit/graphql/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/request-error/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/request/dist-node/index.js","../webpack://test-check/./node_modules/@octokit/request/node_modules/is-plain-object/dist/is-plain-object.js","../webpack://test-check/./node_modules/before-after-hook/index.js","../webpack://test-check/./node_modules/before-after-hook/lib/add.js","../webpack://test-check/./node_modules/before-after-hook/lib/register.js","../webpack://test-check/./node_modules/before-after-hook/lib/remove.js","../webpack://test-check/./node_modules/deprecation/dist-node/index.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/index.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/lib/compile.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/lib/constants.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/lib/expand.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/lib/parse.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/lib/stringify.js","../webpack://test-check/./node_modules/fast-glob/node_modules/braces/lib/utils.js","../webpack://test-check/./node_modules/fast-glob/node_modules/fill-range/index.js","../webpack://test-check/./node_modules/fast-glob/node_modules/is-number/index.js","../webpack://test-check/./node_modules/fast-glob/node_modules/micromatch/index.js","../webpack://test-check/./node_modules/fast-glob/node_modules/to-regex-range/index.js","../webpack://test-check/./node_modules/fast-glob/out/index.js","../webpack://test-check/./node_modules/fast-glob/out/managers/tasks.js","../webpack://test-check/./node_modules/fast-glob/out/providers/async.js","../webpack://test-check/./node_modules/fast-glob/out/providers/filters/deep.js","../webpack://test-check/./node_modules/fast-glob/out/providers/filters/entry.js","../webpack://test-check/./node_modules/fast-glob/out/providers/filters/error.js","../webpack://test-check/./node_modules/fast-glob/out/providers/matchers/matcher.js","../webpack://test-check/./node_modules/fast-glob/out/providers/matchers/partial.js","../webpack://test-check/./node_modules/fast-glob/out/providers/provider.js","../webpack://test-check/./node_modules/fast-glob/out/providers/stream.js","../webpack://test-check/./node_modules/fast-glob/out/providers/sync.js","../webpack://test-check/./node_modules/fast-glob/out/providers/transformers/entry.js","../webpack://test-check/./node_modules/fast-glob/out/readers/reader.js","../webpack://test-check/./node_modules/fast-glob/out/readers/stream.js","../webpack://test-check/./node_modules/fast-glob/out/readers/sync.js","../webpack://test-check/./node_modules/fast-glob/out/settings.js","../webpack://test-check/./node_modules/fast-glob/out/utils/array.js","../webpack://test-check/./node_modules/fast-glob/out/utils/errno.js","../webpack://test-check/./node_modules/fast-glob/out/utils/fs.js","../webpack://test-check/./node_modules/fast-glob/out/utils/index.js","../webpack://test-check/./node_modules/fast-glob/out/utils/path.js","../webpack://test-check/./node_modules/fast-glob/out/utils/pattern.js","../webpack://test-check/./node_modules/fast-glob/out/utils/stream.js","../webpack://test-check/./node_modules/fast-glob/out/utils/string.js","../webpack://test-check/./node_modules/fastq/queue.js","../webpack://test-check/./node_modules/glob-parent/index.js","../webpack://test-check/./node_modules/is-extglob/index.js","../webpack://test-check/./node_modules/is-glob/index.js","../webpack://test-check/./node_modules/merge2/index.js","../webpack://test-check/./node_modules/node-fetch/lib/index.js","../webpack://test-check/./node_modules/once/once.js","../webpack://test-check/./node_modules/picomatch/index.js","../webpack://test-check/./node_modules/picomatch/lib/constants.js","../webpack://test-check/./node_modules/picomatch/lib/parse.js","../webpack://test-check/./node_modules/picomatch/lib/picomatch.js","../webpack://test-check/./node_modules/picomatch/lib/scan.js","../webpack://test-check/./node_modules/picomatch/lib/utils.js","../webpack://test-check/./node_modules/reusify/reusify.js","../webpack://test-check/./node_modules/run-parallel/index.js","../webpack://test-check/./node_modules/sax/lib/sax.js","../webpack://test-check/./node_modules/tunnel/index.js","../webpack://test-check/./node_modules/tunnel/lib/tunnel.js","../webpack://test-check/./node_modules/universal-user-agent/dist-node/index.js","../webpack://test-check/./node_modules/wrappy/wrappy.js","../webpack://test-check/./node_modules/xml2js/lib/bom.js","../webpack://test-check/./node_modules/xml2js/lib/builder.js","../webpack://test-check/./node_modules/xml2js/lib/defaults.js","../webpack://test-check/./node_modules/xml2js/lib/parser.js","../webpack://test-check/./node_modules/xml2js/lib/processors.js","../webpack://test-check/./node_modules/xml2js/lib/xml2js.js","../webpack://test-check/./node_modules/xmlbuilder/lib/DocumentPosition.js","../webpack://test-check/./node_modules/xmlbuilder/lib/NodeType.js","../webpack://test-check/./node_modules/xmlbuilder/lib/Utility.js","../webpack://test-check/./node_modules/xmlbuilder/lib/WriterState.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLAttribute.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLCData.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLCharacterData.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLComment.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDOMConfiguration.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDOMImplementation.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDOMStringList.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDTDAttList.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDTDElement.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDTDEntity.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDTDNotation.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDeclaration.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDocType.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDocument.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDocumentCB.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLDummy.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLElement.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLNamedNodeMap.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLNode.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLNodeList.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLProcessingInstruction.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLRaw.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLStreamWriter.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLStringWriter.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLStringifier.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLText.js","../webpack://test-check/./node_modules/xmlbuilder/lib/XMLWriterBase.js","../webpack://test-check/./node_modules/xmlbuilder/lib/index.js","../webpack://test-check/./node_modules/@vercel/ncc/dist/ncc/@@notfound.js","../webpack://test-check/external \"assert\"","../webpack://test-check/external \"child_process\"","../webpack://test-check/external \"events\"","../webpack://test-check/external \"fs\"","../webpack://test-check/external \"http\"","../webpack://test-check/external \"https\"","../webpack://test-check/external \"net\"","../webpack://test-check/external \"os\"","../webpack://test-check/external \"path\"","../webpack://test-check/external \"stream\"","../webpack://test-check/external \"string_decoder\"","../webpack://test-check/external \"timers\"","../webpack://test-check/external \"tls\"","../webpack://test-check/external \"url\"","../webpack://test-check/external \"util\"","../webpack://test-check/external \"zlib\"","../webpack://test-check/webpack/bootstrap","../webpack://test-check/webpack/runtime/compat","../webpack://test-check/webpack/startup"],"sourcesContent":["\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.getFiles = void 0;\r\nconst core = __importStar(require(\"@actions/core\"));\r\nconst github = __importStar(require(\"@actions/github\"));\r\nconst fs = __importStar(require(\"fs\"));\r\nconst fast_glob_1 = __importDefault(require(\"fast-glob\"));\r\nconst dart_json_parser_1 = require(\"./parsers/dart-json/dart-json-parser\");\r\nconst dotnet_trx_parser_1 = require(\"./parsers/dotnet-trx/dotnet-trx-parser\");\r\nconst jest_junit_parser_1 = require(\"./parsers/jest-junit/jest-junit-parser\");\r\nconst file_utils_1 = require(\"./utils/file-utils\");\r\nconst git_1 = require(\"./utils/git\");\r\nconst github_utils_1 = require(\"./utils/github-utils\");\r\nasync function run() {\r\n try {\r\n await main();\r\n }\r\n catch (error) {\r\n core.setFailed(error.message);\r\n }\r\n}\r\nasync function main() {\r\n const annotations = core.getInput('annotations', { required: true }) === 'true';\r\n const failOnError = core.getInput('fail-on-error', { required: true }) === 'true';\r\n const name = core.getInput('name', { required: true });\r\n const path = core.getInput('path', { required: true });\r\n const reporter = core.getInput('reporter', { required: true });\r\n const token = core.getInput('token', { required: true });\r\n const workDirInput = core.getInput('working-directory', { required: false });\r\n if (workDirInput) {\r\n core.info(`Changing directory to ${workDirInput}`);\r\n process.chdir(workDirInput);\r\n }\r\n const workDir = file_utils_1.normalizeDirPath(process.cwd(), true);\r\n const octokit = github.getOctokit(token);\r\n const sha = github_utils_1.getCheckRunSha();\r\n // We won't need tracked files if we are not going to create annotations\r\n const trackedFiles = annotations ? await git_1.listFiles() : [];\r\n const opts = {\r\n name,\r\n annotations,\r\n trackedFiles,\r\n workDir\r\n };\r\n const parser = getParser(reporter);\r\n const files = await getFiles(path);\r\n if (files.length === 0) {\r\n core.setFailed(`No file matches path '${path}'`);\r\n return;\r\n }\r\n core.info(`Using test report parser '${reporter}'`);\r\n const result = await parser(files, opts);\r\n const conclusion = result.success ? 'success' : 'failure';\r\n core.info(`Creating check run '${name}' with conclusion '${conclusion}'`);\r\n await octokit.checks.create({\r\n head_sha: sha,\r\n name,\r\n conclusion,\r\n status: 'completed',\r\n output: result.output,\r\n ...github.context.repo\r\n });\r\n core.setOutput('conclusion', conclusion);\r\n if (failOnError && !result.success) {\r\n core.setFailed(`Failed test has been found and 'fail-on-error' option is set to ${failOnError}`);\r\n }\r\n}\r\nfunction getParser(reporter) {\r\n switch (reporter) {\r\n case 'dart-json':\r\n return dart_json_parser_1.parseDartJson;\r\n case 'dotnet-trx':\r\n return dotnet_trx_parser_1.parseDotnetTrx;\r\n case 'flutter-machine':\r\n return dart_json_parser_1.parseDartJson;\r\n case 'jest-junit':\r\n return jest_junit_parser_1.parseJestJunit;\r\n default:\r\n throw new Error(`Input variable 'reporter' is set to invalid value '${reporter}'`);\r\n }\r\n}\r\nasync function getFiles(pattern) {\r\n const paths = await fast_glob_1.default(pattern, { dot: true });\r\n return Promise.all(paths.map(async (path) => {\r\n core.info(`Reading test report '${path}'`);\r\n const content = await fs.promises.readFile(path, { encoding: 'utf8' });\r\n return { path, content };\r\n }));\r\n}\r\nexports.getFiles = getFiles;\r\nrun();\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.parseDartJson = void 0;\r\nconst core = __importStar(require(\"@actions/core\"));\r\nconst get_report_1 = __importDefault(require(\"../../report/get-report\"));\r\nconst file_utils_1 = require(\"../../utils/file-utils\");\r\nconst markdown_utils_1 = require(\"../../utils/markdown-utils\");\r\nconst dart_json_types_1 = require(\"./dart-json-types\");\r\nconst test_results_1 = require(\"../../report/test-results\");\r\nclass TestRun {\r\n constructor(path, suites, success, time) {\r\n this.path = path;\r\n this.suites = suites;\r\n this.success = success;\r\n this.time = time;\r\n }\r\n}\r\nclass TestSuite {\r\n constructor(suite) {\r\n this.suite = suite;\r\n this.groups = {};\r\n }\r\n}\r\nclass TestGroup {\r\n constructor(group) {\r\n this.group = group;\r\n this.tests = [];\r\n }\r\n}\r\nclass TestCase {\r\n constructor(testStart) {\r\n this.testStart = testStart;\r\n this.groupId = testStart.test.groupIDs[testStart.test.groupIDs.length - 1];\r\n }\r\n get result() {\r\n var _a, _b, _c, _d;\r\n if ((_a = this.testDone) === null || _a === void 0 ? void 0 : _a.skipped) {\r\n return 'skipped';\r\n }\r\n if (((_b = this.testDone) === null || _b === void 0 ? void 0 : _b.result) === 'success') {\r\n return 'success';\r\n }\r\n if (((_c = this.testDone) === null || _c === void 0 ? void 0 : _c.result) === 'error' || ((_d = this.testDone) === null || _d === void 0 ? void 0 : _d.result) === 'failure') {\r\n return 'failed';\r\n }\r\n return undefined;\r\n }\r\n get time() {\r\n return this.testDone !== undefined ? this.testDone.time - this.testStart.time : 0;\r\n }\r\n}\r\nasync function parseDartJson(files, options) {\r\n const testRuns = files.map(f => getTestRun(f.path, f.content));\r\n const testRunsResults = testRuns.map(getTestRunResult);\r\n const success = testRuns.every(tr => tr.success);\r\n const icon = success ? markdown_utils_1.Icon.success : markdown_utils_1.Icon.fail;\r\n return {\r\n success,\r\n output: {\r\n title: `${options.name.trim()} ${icon}`,\r\n summary: get_report_1.default(testRunsResults),\r\n annotations: options.annotations ? getAnnotations(testRuns, options.workDir, options.trackedFiles) : undefined\r\n }\r\n };\r\n}\r\nexports.parseDartJson = parseDartJson;\r\nfunction getTestRun(path, content) {\r\n core.info(`Parsing content of '${path}'`);\r\n const lines = content.split(/\\n\\r?/g);\r\n const events = lines\r\n .map((str, i) => {\r\n if (str.trim() === '') {\r\n return null;\r\n }\r\n try {\r\n return JSON.parse(str);\r\n }\r\n catch (e) {\r\n const col = e.columnNumber !== undefined ? `:${e.columnNumber}` : '';\r\n new Error(`Invalid JSON at ${path}:${i + 1}${col}\\n\\n${e}`);\r\n }\r\n })\r\n .filter(evt => evt != null);\r\n let success = false;\r\n let totalTime = 0;\r\n const suites = {};\r\n const tests = {};\r\n for (const evt of events) {\r\n if (dart_json_types_1.isSuiteEvent(evt)) {\r\n suites[evt.suite.id] = new TestSuite(evt.suite);\r\n }\r\n else if (dart_json_types_1.isGroupEvent(evt)) {\r\n suites[evt.group.suiteID].groups[evt.group.id] = new TestGroup(evt.group);\r\n }\r\n else if (dart_json_types_1.isTestStartEvent(evt) && evt.test.url !== null) {\r\n const test = new TestCase(evt);\r\n const suite = suites[evt.test.suiteID];\r\n const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]];\r\n group.tests.push(test);\r\n tests[evt.test.id] = test;\r\n }\r\n else if (dart_json_types_1.isTestDoneEvent(evt) && !evt.hidden) {\r\n tests[evt.testID].testDone = evt;\r\n }\r\n else if (dart_json_types_1.isErrorEvent(evt)) {\r\n tests[evt.testID].error = evt;\r\n }\r\n else if (dart_json_types_1.isDoneEvent(evt)) {\r\n success = evt.success;\r\n totalTime = evt.time;\r\n }\r\n }\r\n return new TestRun(path, Object.values(suites), success, totalTime);\r\n}\r\nfunction getTestRunResult(tr) {\r\n const suites = tr.suites.map(s => {\r\n return new test_results_1.TestSuiteResult(s.suite.path, getGroups(s));\r\n });\r\n return new test_results_1.TestRunResult(tr.path, suites, tr.time);\r\n}\r\nfunction getGroups(suite) {\r\n const groups = Object.values(suite.groups).filter(grp => grp.tests.length > 0);\r\n groups.sort((a, b) => { var _a, _b; return ((_a = a.group.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.group.line) !== null && _b !== void 0 ? _b : 0); });\r\n return groups.map(group => {\r\n group.tests.sort((a, b) => { var _a, _b; return ((_a = a.testStart.test.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.testStart.test.line) !== null && _b !== void 0 ? _b : 0); });\r\n const tests = group.tests.map(t => new test_results_1.TestCaseResult(t.testStart.test.name, t.result, t.time));\r\n return new test_results_1.TestGroupResult(group.group.name, tests);\r\n });\r\n}\r\nfunction getAnnotations(testRuns, workDir, trackedFiles) {\r\n const annotations = [];\r\n for (const tr of testRuns) {\r\n for (const suite of tr.suites) {\r\n for (const group of Object.values(suite.groups)) {\r\n for (const test of group.tests) {\r\n if (test.error) {\r\n const err = getAnnotation(test, suite, workDir, trackedFiles);\r\n if (err !== null) {\r\n annotations.push(err);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return annotations;\r\n}\r\nfunction getAnnotation(test, testSuite, workDir, trackedFiles) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const stack = (_b = (_a = test.error) === null || _a === void 0 ? void 0 : _a.stackTrace) !== null && _b !== void 0 ? _b : '';\r\n let src = exceptionThrowSource(stack, trackedFiles);\r\n if (src === null) {\r\n const file = getRelativePathFromUrl((_c = test.testStart.test.url) !== null && _c !== void 0 ? _c : '', workDir);\r\n if (!trackedFiles.includes(file)) {\r\n return null;\r\n }\r\n src = {\r\n file,\r\n line: (_d = test.testStart.test.line) !== null && _d !== void 0 ? _d : 0\r\n };\r\n }\r\n return {\r\n annotation_level: 'failure',\r\n start_line: src.line,\r\n end_line: src.line,\r\n path: src.file,\r\n message: `${markdown_utils_1.fixEol((_e = test.error) === null || _e === void 0 ? void 0 : _e.error)}\\n\\n${markdown_utils_1.fixEol((_f = test.error) === null || _f === void 0 ? void 0 : _f.stackTrace)}`,\r\n title: `[${testSuite.suite.path}] ${test.testStart.test.name}`\r\n };\r\n}\r\nfunction exceptionThrowSource(ex, trackedFiles) {\r\n // imports from package which is tested are listed in stack traces as 'package:xyz/' which maps to relative path 'lib/'\r\n const packageRe = /^package:[a-zA-z0-9_$]+\\//;\r\n const lines = ex.split(/\\r?\\n/).map(str => str.replace(packageRe, 'lib/'));\r\n // regexp to extract file path and line number from stack trace\r\n const re = /^(.*)\\s+(\\d+):\\d+\\s+/;\r\n for (const str of lines) {\r\n const match = str.match(re);\r\n if (match !== null) {\r\n const [_, fileStr, lineStr] = match;\r\n const file = file_utils_1.normalizeFilePath(fileStr);\r\n if (trackedFiles.includes(file)) {\r\n const line = parseInt(lineStr);\r\n return { file, line };\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\nfunction getRelativePathFromUrl(file, workdir) {\r\n const prefix = 'file:///';\r\n if (file.startsWith(prefix)) {\r\n file = file.substr(prefix.length);\r\n }\r\n if (file.startsWith(workdir)) {\r\n file = file.substr(workdir.length);\r\n }\r\n return file;\r\n}\r\n","\"use strict\";\r\n/// reflects documentation at https://github.com/dart-lang/test/blob/master/pkgs/test/doc/json_reporter.md\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isDoneEvent = exports.isErrorEvent = exports.isTestDoneEvent = exports.isTestStartEvent = exports.isGroupEvent = exports.isSuiteEvent = void 0;\r\nfunction isSuiteEvent(event) {\r\n return event.type === 'suite';\r\n}\r\nexports.isSuiteEvent = isSuiteEvent;\r\nfunction isGroupEvent(event) {\r\n return event.type === 'group';\r\n}\r\nexports.isGroupEvent = isGroupEvent;\r\nfunction isTestStartEvent(event) {\r\n return event.type === 'testStart';\r\n}\r\nexports.isTestStartEvent = isTestStartEvent;\r\nfunction isTestDoneEvent(event) {\r\n return event.type === 'testDone';\r\n}\r\nexports.isTestDoneEvent = isTestDoneEvent;\r\nfunction isErrorEvent(event) {\r\n return event.type === 'error';\r\n}\r\nexports.isErrorEvent = isErrorEvent;\r\nfunction isDoneEvent(event) {\r\n return event.type === 'done';\r\n}\r\nexports.isDoneEvent = isDoneEvent;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.exceptionThrowSource = exports.parseDotnetTrx = void 0;\r\nconst core = __importStar(require(\"@actions/core\"));\r\nconst xml2js_1 = require(\"xml2js\");\r\nconst file_utils_1 = require(\"../../utils/file-utils\");\r\nconst xml_utils_1 = require(\"../../utils/xml-utils\");\r\nconst markdown_utils_1 = require(\"../../utils/markdown-utils\");\r\nconst test_results_1 = require(\"../../report/test-results\");\r\nconst get_report_1 = __importDefault(require(\"../../report/get-report\"));\r\nclass TestClass {\r\n constructor(name) {\r\n this.name = name;\r\n this.tests = [];\r\n }\r\n}\r\nclass Test {\r\n constructor(name, outcome, duration, error) {\r\n this.name = name;\r\n this.outcome = outcome;\r\n this.duration = duration;\r\n this.error = error;\r\n }\r\n get result() {\r\n switch (this.outcome) {\r\n case 'Passed':\r\n return 'success';\r\n case 'NotExecuted':\r\n return 'skipped';\r\n case 'Failed':\r\n return 'failed';\r\n }\r\n }\r\n}\r\nasync function parseDotnetTrx(files, options) {\r\n const testRuns = [];\r\n const testClasses = [];\r\n for (const file of files) {\r\n const trx = await getTrxReport(file);\r\n const tc = getTestClasses(trx);\r\n const tr = getTestRunResult(file.path, trx, tc);\r\n testRuns.push(tr);\r\n testClasses.push(...tc);\r\n }\r\n const success = testRuns.every(tr => tr.result === 'success');\r\n const icon = success ? markdown_utils_1.Icon.success : markdown_utils_1.Icon.fail;\r\n return {\r\n success,\r\n output: {\r\n title: `${options.name.trim()} ${icon}`,\r\n summary: get_report_1.default(testRuns),\r\n annotations: options.annotations ? getAnnotations(testClasses, options.workDir, options.trackedFiles) : undefined\r\n }\r\n };\r\n}\r\nexports.parseDotnetTrx = parseDotnetTrx;\r\nasync function getTrxReport(file) {\r\n core.info(`Parsing content of '${file.path}'`);\r\n try {\r\n return (await xml2js_1.parseStringPromise(file.content, {\r\n attrValueProcessors: [xml_utils_1.parseAttribute]\r\n }));\r\n }\r\n catch (e) {\r\n throw new Error(`Invalid XML at ${file.path}\\n\\n${e}`);\r\n }\r\n}\r\nfunction getTestRunResult(path, trx, testClasses) {\r\n const times = trx.TestRun.Times[0].$;\r\n const totalTime = times.finish.getTime() - times.start.getTime();\r\n const suites = testClasses.map(tc => {\r\n const tests = tc.tests.map(t => new test_results_1.TestCaseResult(t.name, t.result, t.duration));\r\n const group = new test_results_1.TestGroupResult(null, tests);\r\n return new test_results_1.TestSuiteResult(tc.name, [group]);\r\n });\r\n return new test_results_1.TestRunResult(path, suites, totalTime);\r\n}\r\nfunction getTestClasses(trx) {\r\n var _a;\r\n const unitTests = {};\r\n for (const td of trx.TestRun.TestDefinitions) {\r\n for (const ut of td.UnitTest) {\r\n unitTests[ut.$.id] = ut.TestMethod[0];\r\n }\r\n }\r\n const unitTestsResults = trx.TestRun.Results.flatMap(r => r.UnitTestResult).flatMap(unitTestResult => ({\r\n unitTestResult,\r\n testMethod: unitTests[unitTestResult.$.testId]\r\n }));\r\n const testClasses = {};\r\n for (const r of unitTestsResults) {\r\n let tc = testClasses[r.testMethod.$.className];\r\n if (tc === undefined) {\r\n tc = new TestClass(r.testMethod.$.className);\r\n testClasses[tc.name] = tc;\r\n }\r\n const output = r.unitTestResult.Output;\r\n const error = (output === null || output === void 0 ? void 0 : output.length) > 0 && ((_a = output[0].ErrorInfo) === null || _a === void 0 ? void 0 : _a.length) > 0 ? output[0].ErrorInfo[0] : undefined;\r\n const test = new Test(r.testMethod.$.name, r.unitTestResult.$.outcome, r.unitTestResult.$.duration, error);\r\n tc.tests.push(test);\r\n }\r\n const result = Object.values(testClasses);\r\n result.sort((a, b) => a.name.localeCompare(b.name));\r\n for (const tc of result) {\r\n tc.tests.sort((a, b) => a.name.localeCompare(b.name));\r\n }\r\n return result;\r\n}\r\nfunction getAnnotations(testClasses, workDir, trackedFiles) {\r\n const annotations = [];\r\n for (const tc of testClasses) {\r\n for (const t of tc.tests) {\r\n if (t.error) {\r\n const src = exceptionThrowSource(t.error.StackTrace[0], workDir, trackedFiles);\r\n if (src === null) {\r\n continue;\r\n }\r\n annotations.push({\r\n annotation_level: 'failure',\r\n start_line: src.line,\r\n end_line: src.line,\r\n path: src.file,\r\n message: markdown_utils_1.fixEol(t.error.Message[0]),\r\n title: `[${tc.name}] ${t.name}`\r\n });\r\n }\r\n }\r\n }\r\n return annotations;\r\n}\r\nfunction exceptionThrowSource(ex, workDir, trackedFiles) {\r\n const lines = ex.split(/\\r*\\n/);\r\n const re = / in (.+):line (\\d+)$/;\r\n for (const str of lines) {\r\n const match = str.match(re);\r\n if (match !== null) {\r\n const [_, fileStr, lineStr] = match;\r\n const filePath = file_utils_1.normalizeFilePath(fileStr);\r\n const file = filePath.startsWith(workDir) ? filePath.substr(workDir.length) : filePath;\r\n if (trackedFiles.includes(file)) {\r\n const line = parseInt(lineStr);\r\n return { file, line };\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\nexports.exceptionThrowSource = exceptionThrowSource;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.exceptionThrowSource = exports.parseJestJunit = void 0;\r\nconst core = __importStar(require(\"@actions/core\"));\r\nconst xml2js_1 = require(\"xml2js\");\r\nconst markdown_utils_1 = require(\"../../utils/markdown-utils\");\r\nconst file_utils_1 = require(\"../../utils/file-utils\");\r\nconst xml_utils_1 = require(\"../../utils/xml-utils\");\r\nconst test_results_1 = require(\"../../report/test-results\");\r\nconst get_report_1 = __importDefault(require(\"../../report/get-report\"));\r\nasync function parseJestJunit(files, options) {\r\n const junit = [];\r\n const testRuns = [];\r\n for (const file of files) {\r\n const ju = await getJunitReport(file);\r\n const tr = getTestRunResult(file.path, ju);\r\n junit.push(ju);\r\n testRuns.push(tr);\r\n }\r\n const success = testRuns.every(tr => tr.result === 'success');\r\n const icon = success ? markdown_utils_1.Icon.success : markdown_utils_1.Icon.fail;\r\n return {\r\n success,\r\n output: {\r\n title: `${options.name.trim()} ${icon}`,\r\n summary: get_report_1.default(testRuns),\r\n annotations: options.annotations ? getAnnotations(junit, options.workDir, options.trackedFiles) : undefined\r\n }\r\n };\r\n}\r\nexports.parseJestJunit = parseJestJunit;\r\nasync function getJunitReport(file) {\r\n core.info(`Parsing content of '${file.path}'`);\r\n try {\r\n return (await xml2js_1.parseStringPromise(file.content, {\r\n attrValueProcessors: [xml_utils_1.parseAttribute]\r\n }));\r\n }\r\n catch (e) {\r\n throw new Error(`Invalid XML at ${file.path}\\n\\n${e}`);\r\n }\r\n}\r\nfunction getTestRunResult(path, junit) {\r\n const suites = junit.testsuites.testsuite.map(ts => {\r\n const name = ts.$.name.trim();\r\n const time = ts.$.time * 1000;\r\n const sr = new test_results_1.TestSuiteResult(name, getGroups(ts), time);\r\n return sr;\r\n });\r\n const time = junit.testsuites.$.time * 1000;\r\n return new test_results_1.TestRunResult(path, suites, time);\r\n}\r\nfunction getGroups(suite) {\r\n const groups = [];\r\n for (const tc of suite.testcase) {\r\n let grp = groups.find(g => g.describe === tc.$.classname);\r\n if (grp === undefined) {\r\n grp = { describe: tc.$.classname, tests: [] };\r\n groups.push(grp);\r\n }\r\n grp.tests.push(tc);\r\n }\r\n return groups.map(grp => {\r\n const tests = grp.tests.map(tc => {\r\n const name = tc.$.name.trim();\r\n const result = getTestCaseResult(tc);\r\n const time = tc.$.time * 1000;\r\n return new test_results_1.TestCaseResult(name, result, time);\r\n });\r\n return new test_results_1.TestGroupResult(grp.describe, tests);\r\n });\r\n}\r\nfunction getTestCaseResult(test) {\r\n if (test.failure)\r\n return 'failed';\r\n if (test.skipped)\r\n return 'skipped';\r\n return 'success';\r\n}\r\nfunction getAnnotations(junitReports, workDir, trackedFiles) {\r\n const annotations = [];\r\n for (const junit of junitReports) {\r\n for (const suite of junit.testsuites.testsuite) {\r\n for (const tc of suite.testcase) {\r\n if (!tc.failure) {\r\n continue;\r\n }\r\n for (const ex of tc.failure) {\r\n const src = exceptionThrowSource(ex, workDir, trackedFiles);\r\n if (src === null) {\r\n continue;\r\n }\r\n annotations.push({\r\n annotation_level: 'failure',\r\n start_line: src.line,\r\n end_line: src.line,\r\n path: src.file,\r\n message: markdown_utils_1.fixEol(ex),\r\n title: `[${suite.$.name}] ${tc.$.name.trim()}`\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return annotations;\r\n}\r\nfunction exceptionThrowSource(ex, workDir, trackedFiles) {\r\n const lines = ex.split(/\\r?\\n/);\r\n const re = /\\((.*):(\\d+):(\\d+)\\)$/;\r\n for (const str of lines) {\r\n const match = str.match(re);\r\n if (match !== null) {\r\n const [_, fileStr, lineStr, colStr] = match;\r\n const filePath = file_utils_1.normalizeFilePath(fileStr);\r\n const file = filePath.startsWith(workDir) ? filePath.substr(workDir.length) : filePath;\r\n if (trackedFiles.includes(file)) {\r\n const line = parseInt(lineStr);\r\n const column = parseInt(colStr);\r\n return { file, line, column };\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\nexports.exceptionThrowSource = exceptionThrowSource;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst core = __importStar(require(\"@actions/core\"));\r\nconst markdown_utils_1 = require(\"../utils/markdown-utils\");\r\nconst slugger_1 = require(\"../utils/slugger\");\r\nfunction getReport(results) {\r\n const badge = getBadge(results);\r\n const runsSummary = results.map(getRunSummary).join('\\n\\n');\r\n const suites = results\r\n .flatMap(tr => tr.suites)\r\n .map((ts, i) => getSuiteSummary(ts, i))\r\n .join('\\n');\r\n const suitesSection = `# Test Suites\\n\\n${suites}`;\r\n return [badge, runsSummary, suitesSection].join('\\n\\n');\r\n}\r\nexports.default = getReport;\r\nfunction getBadge(results) {\r\n const passed = results.reduce((sum, tr) => sum + tr.passed, 0);\r\n const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0);\r\n const failed = results.reduce((sum, tr) => sum + tr.failed, 0);\r\n const passedText = passed > 0 ? `${passed} passed` : null;\r\n const skippedText = skipped > 0 ? `${skipped} skipped` : null;\r\n const failedText = failed > 0 ? `${failed} failed` : null;\r\n const message = [passedText, skippedText, failedText].filter(s => s != null).join(', ') || 'none';\r\n let color = 'success';\r\n if (failed > 0) {\r\n color = 'critical';\r\n }\r\n else if (passed === 0 && failed === 0) {\r\n color = 'yellow';\r\n }\r\n const uri = encodeURIComponent(`tests-${message}-${color}`);\r\n const text = failed > 0 ? 'Tests failed' : 'Tests passed successfully';\r\n return `![${text}](https://img.shields.io/badge/${uri})`;\r\n}\r\nfunction getRunSummary(tr) {\r\n core.info('Generating check run summary');\r\n const time = `${(tr.time / 1000).toFixed(3)}s`;\r\n const headingLine1 = `### ${tr.path}`;\r\n const headingLine2 = `**${tr.tests}** tests were completed in **${time}** with **${tr.passed}** passed, **${tr.skipped}** skipped and **${tr.failed}** failed.`;\r\n const suitesSummary = tr.suites.map((s, i) => {\r\n const icon = getResultIcon(s.result);\r\n const tsTime = `${s.time}ms`;\r\n const tsName = s.name;\r\n const tsAddr = makeSuiteSlug(i, tsName).link;\r\n const tsNameLink = markdown_utils_1.link(tsName, tsAddr);\r\n return [icon, tsNameLink, s.tests, tsTime, s.passed, s.skipped, s.failed];\r\n });\r\n const summary = markdown_utils_1.table(['Result', 'Suite', 'Tests', 'Time', `Passed ${markdown_utils_1.Icon.success}`, `Skipped ${markdown_utils_1.Icon.skip}`, `Failed ${markdown_utils_1.Icon.fail}`], [markdown_utils_1.Align.Center, markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...suitesSummary);\r\n return [headingLine1, headingLine2, summary].join('\\n\\n');\r\n}\r\nfunction getSuiteSummary(ts, index) {\r\n const icon = getResultIcon(ts.result);\r\n const content = ts.groups\r\n .map(grp => {\r\n const header = grp.name ? `### ${grp.name}\\n\\n` : '';\r\n const tests = markdown_utils_1.table(['Result', 'Test', 'Time'], [markdown_utils_1.Align.Center, markdown_utils_1.Align.Left, markdown_utils_1.Align.Right], ...grp.tests.map(tc => {\r\n const name = tc.name;\r\n const time = `${tc.time}ms`;\r\n const result = getResultIcon(tc.result);\r\n return [result, name, time];\r\n }));\r\n return `${header}${tests}\\n`;\r\n })\r\n .join('\\n');\r\n const tsName = ts.name;\r\n const tsSlug = makeSuiteSlug(index, tsName);\r\n const tsNameLink = `${tsName}`;\r\n return `## ${tsNameLink} ${icon}\\n\\n${content}`;\r\n}\r\nfunction makeSuiteSlug(index, name) {\r\n // use \"ts-$index-\" as prefix to avoid slug conflicts after escaping the paths\r\n return slugger_1.slug(`ts-${index}-${name}`);\r\n}\r\nfunction getResultIcon(result) {\r\n switch (result) {\r\n case 'success':\r\n return markdown_utils_1.Icon.success;\r\n case 'skipped':\r\n return markdown_utils_1.Icon.skip;\r\n case 'failed':\r\n return markdown_utils_1.Icon.fail;\r\n default:\r\n return '';\r\n }\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TestCaseResult = exports.TestGroupResult = exports.TestSuiteResult = exports.TestRunResult = void 0;\r\nclass TestRunResult {\r\n constructor(path, suites, totalTime) {\r\n this.path = path;\r\n this.suites = suites;\r\n this.totalTime = totalTime;\r\n }\r\n get tests() {\r\n return this.suites.reduce((sum, g) => sum + g.tests, 0);\r\n }\r\n get passed() {\r\n return this.suites.reduce((sum, g) => sum + g.passed, 0);\r\n }\r\n get failed() {\r\n return this.suites.reduce((sum, g) => sum + g.failed, 0);\r\n }\r\n get skipped() {\r\n return this.suites.reduce((sum, g) => sum + g.skipped, 0);\r\n }\r\n get time() {\r\n var _a;\r\n return (_a = this.totalTime) !== null && _a !== void 0 ? _a : this.suites.reduce((sum, g) => sum + g.time, 0);\r\n }\r\n get result() {\r\n return this.suites.some(t => t.result === 'failed') ? 'failed' : 'success';\r\n }\r\n}\r\nexports.TestRunResult = TestRunResult;\r\nclass TestSuiteResult {\r\n constructor(name, groups, totalTime) {\r\n this.name = name;\r\n this.groups = groups;\r\n this.totalTime = totalTime;\r\n }\r\n get tests() {\r\n return this.groups.reduce((sum, g) => sum + g.tests.length, 0);\r\n }\r\n get passed() {\r\n return this.groups.reduce((sum, g) => sum + g.passed, 0);\r\n }\r\n get failed() {\r\n return this.groups.reduce((sum, g) => sum + g.failed, 0);\r\n }\r\n get skipped() {\r\n return this.groups.reduce((sum, g) => sum + g.skipped, 0);\r\n }\r\n get time() {\r\n var _a;\r\n return (_a = this.totalTime) !== null && _a !== void 0 ? _a : this.groups.reduce((sum, g) => sum + g.time, 0);\r\n }\r\n get result() {\r\n return this.groups.some(t => t.result === 'failed') ? 'failed' : 'success';\r\n }\r\n}\r\nexports.TestSuiteResult = TestSuiteResult;\r\nclass TestGroupResult {\r\n constructor(name, tests) {\r\n this.name = name;\r\n this.tests = tests;\r\n }\r\n get passed() {\r\n return this.tests.reduce((sum, t) => (t.result === 'success' ? sum + 1 : sum), 0);\r\n }\r\n get failed() {\r\n return this.tests.reduce((sum, t) => (t.result === 'failed' ? sum + 1 : sum), 0);\r\n }\r\n get skipped() {\r\n return this.tests.reduce((sum, t) => (t.result === 'skipped' ? sum + 1 : sum), 0);\r\n }\r\n get time() {\r\n return this.tests.reduce((sum, t) => sum + t.time, 0);\r\n }\r\n get result() {\r\n return this.tests.some(t => t.result === 'failed') ? 'failed' : 'success';\r\n }\r\n}\r\nexports.TestGroupResult = TestGroupResult;\r\nclass TestCaseResult {\r\n constructor(name, result, time) {\r\n this.name = name;\r\n this.result = result;\r\n this.time = time;\r\n }\r\n}\r\nexports.TestCaseResult = TestCaseResult;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst exec_1 = require(\"@actions/exec\");\r\n// Wraps original exec() function\r\n// Returns exit code and whole stdout/stderr\r\nasync function exec(commandLine, args, options) {\r\n options = options || {};\r\n let stdout = '';\r\n let stderr = '';\r\n options.listeners = {\r\n stdout: (data) => (stdout += data.toString()),\r\n stderr: (data) => (stderr += data.toString())\r\n };\r\n const code = await exec_1.exec(commandLine, args, options);\r\n return { code, stdout, stderr };\r\n}\r\nexports.default = exec;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.normalizeFilePath = exports.normalizeDirPath = void 0;\r\nfunction normalizeDirPath(path, addTrailingSlash) {\r\n if (!path) {\r\n return path;\r\n }\r\n path = normalizeFilePath(path);\r\n if (addTrailingSlash && !path.endsWith('/')) {\r\n path += '/';\r\n }\r\n return path;\r\n}\r\nexports.normalizeDirPath = normalizeDirPath;\r\nfunction normalizeFilePath(path) {\r\n if (!path) {\r\n return path;\r\n }\r\n return path.trim().replace(/\\\\/g, '/');\r\n}\r\nexports.normalizeFilePath = normalizeFilePath;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.listFiles = void 0;\r\nconst core = __importStar(require(\"@actions/core\"));\r\nconst exec_1 = __importDefault(require(\"./exec\"));\r\nasync function listFiles() {\r\n core.startGroup('Listing all files tracked by git');\r\n let output = '';\r\n try {\r\n output = (await exec_1.default('git', ['ls-files', '-z'])).stdout;\r\n }\r\n finally {\r\n fixStdOutNullTermination();\r\n core.endGroup();\r\n }\r\n return output.split('\\u0000').filter(s => s.length > 0);\r\n}\r\nexports.listFiles = listFiles;\r\nfunction fixStdOutNullTermination() {\r\n // Previous command uses NULL as delimiters and output is printed to stdout.\r\n // We have to make sure next thing written to stdout will start on new line.\r\n // Otherwise things like ::set-output wouldn't work.\r\n core.info('');\r\n}\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.getCheckRunSha = void 0;\r\nconst github = __importStar(require(\"@actions/github\"));\r\nfunction getCheckRunSha() {\r\n if (github.context.payload.pull_request) {\r\n const pr = github.context.payload.pull_request;\r\n return pr.head.sha;\r\n }\r\n return github.context.sha;\r\n}\r\nexports.getCheckRunSha = getCheckRunSha;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fixEol = exports.tableEscape = exports.table = exports.link = exports.details = exports.Icon = exports.Align = void 0;\r\nvar Align;\r\n(function (Align) {\r\n Align[\"Left\"] = \":---\";\r\n Align[\"Center\"] = \":---:\";\r\n Align[\"Right\"] = \"---:\";\r\n Align[\"None\"] = \"---\";\r\n})(Align = exports.Align || (exports.Align = {}));\r\nexports.Icon = {\r\n skip: '✖️',\r\n success: '✔️',\r\n fail: '❌' // ':x:'\r\n};\r\nfunction details(summary, content) {\r\n return `${summary}
${content} `;\r\n}\r\nexports.details = details;\r\nfunction link(title, address) {\r\n return `[${title}](${address})`;\r\n}\r\nexports.link = link;\r\nfunction table(headers, align, ...rows) {\r\n const headerRow = `| ${headers.map(tableEscape).join(' | ')} |`;\r\n const alignRow = `| ${align.join(' | ')} |`;\r\n const contentRows = rows.map(row => `| ${row.map(tableEscape).join(' | ')} |`).join('\\n');\r\n return [headerRow, alignRow, contentRows].join('\\n');\r\n}\r\nexports.table = table;\r\nfunction tableEscape(content) {\r\n return content.toString().replace('|', '\\\\|');\r\n}\r\nexports.tableEscape = tableEscape;\r\nfunction fixEol(text) {\r\n var _a;\r\n return (_a = text === null || text === void 0 ? void 0 : text.replace(/\\r/g, '')) !== null && _a !== void 0 ? _a : '';\r\n}\r\nexports.fixEol = fixEol;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.slug = void 0;\r\n// Returns HTML element id and href link usable as manual anchor links\r\n// This is needed because Github in check run summary doesn't automatically\r\n// create links out of headings as it normally does for other markdown content\r\nfunction slug(name) {\r\n const slugId = name\r\n .trim()\r\n .replace(/_/g, '')\r\n .replace(/[./\\\\]/g, '-')\r\n .replace(/[^\\w-]/g, '');\r\n const id = `user-content-${slugId}`;\r\n const link = `#${slugId}`;\r\n return { id, link };\r\n}\r\nexports.slug = slug;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.parseAttribute = void 0;\r\nconst isoDateRe = /^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)$/;\r\n// matches dotnet duration: 00:00:00.0010000\r\nconst durationRe = /^(\\d\\d):(\\d\\d):(\\d\\d\\.\\d+)$/;\r\nfunction parseAttribute(str) {\r\n if (str === '' || str === undefined) {\r\n return str;\r\n }\r\n if (isoDateRe.test(str)) {\r\n return new Date(str);\r\n }\r\n const durationMatch = str.match(durationRe);\r\n if (durationMatch !== null) {\r\n const [_, hourStr, minStr, secStr] = durationMatch;\r\n return (parseInt(hourStr) * 3600 + parseInt(minStr) * 60 + parseFloat(secStr)) * 1000;\r\n }\r\n const num = parseFloat(str);\r\n if (isNaN(num)) {\r\n return str;\r\n }\r\n return num;\r\n}\r\nexports.parseAttribute = parseAttribute;\r\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n const delimiter = '_GitHubActionsFileCommandDelimeter_';\n const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;\n file_command_1.issueCommand('ENV', commandValue);\n }\n else {\n command_1.issueCommand('set-env', { name }, convertedVal);\n }\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input. The value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n command_1.issueCommand('set-output', { name }, value);\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n */\nfunction error(message) {\n command_1.issue('error', message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds an warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n */\nfunction warning(message) {\n command_1.issue('warning', message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n command_1.issueCommand('save-state', { name }, value);\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\nfunction issueCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueCommand = issueCommand;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tr = __importStar(require(\"./toolrunner\"));\n/**\n * Exec a command.\n * Output will be streamed to the live console.\n * Returns promise with return code\n *\n * @param commandLine command to execute (can include additional args). Must be correctly escaped.\n * @param args optional arguments for tool. Escaping is handled by the lib.\n * @param options optional exec options. See ExecOptions\n * @returns Promise exit code\n */\nfunction exec(commandLine, args, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const commandArgs = tr.argStringToArray(commandLine);\n if (commandArgs.length === 0) {\n throw new Error(`Parameter 'commandLine' cannot be null or empty.`);\n }\n // Path to tool to execute should be first arg\n const toolPath = commandArgs[0];\n args = commandArgs.slice(1).concat(args || []);\n const runner = new tr.ToolRunner(toolPath, args, options);\n return runner.exec();\n });\n}\nexports.exec = exec;\n//# sourceMappingURL=exec.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst os = __importStar(require(\"os\"));\nconst events = __importStar(require(\"events\"));\nconst child = __importStar(require(\"child_process\"));\nconst path = __importStar(require(\"path\"));\nconst io = __importStar(require(\"@actions/io\"));\nconst ioUtil = __importStar(require(\"@actions/io/lib/io-util\"));\n/* eslint-disable @typescript-eslint/unbound-method */\nconst IS_WINDOWS = process.platform === 'win32';\n/*\n * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.\n */\nclass ToolRunner extends events.EventEmitter {\n constructor(toolPath, args, options) {\n super();\n if (!toolPath) {\n throw new Error(\"Parameter 'toolPath' cannot be null or empty.\");\n }\n this.toolPath = toolPath;\n this.args = args || [];\n this.options = options || {};\n }\n _debug(message) {\n if (this.options.listeners && this.options.listeners.debug) {\n this.options.listeners.debug(message);\n }\n }\n _getCommandString(options, noPrefix) {\n const toolPath = this._getSpawnFileName();\n const args = this._getSpawnArgs(options);\n let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool\n if (IS_WINDOWS) {\n // Windows + cmd file\n if (this._isCmdFile()) {\n cmd += toolPath;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n // Windows + verbatim\n else if (options.windowsVerbatimArguments) {\n cmd += `\"${toolPath}\"`;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n // Windows (regular)\n else {\n cmd += this._windowsQuoteCmdArg(toolPath);\n for (const a of args) {\n cmd += ` ${this._windowsQuoteCmdArg(a)}`;\n }\n }\n }\n else {\n // OSX/Linux - this can likely be improved with some form of quoting.\n // creating processes on Unix is fundamentally different than Windows.\n // on Unix, execvp() takes an arg array.\n cmd += toolPath;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n return cmd;\n }\n _processLineBuffer(data, strBuffer, onLine) {\n try {\n let s = strBuffer + data.toString();\n let n = s.indexOf(os.EOL);\n while (n > -1) {\n const line = s.substring(0, n);\n onLine(line);\n // the rest of the string ...\n s = s.substring(n + os.EOL.length);\n n = s.indexOf(os.EOL);\n }\n strBuffer = s;\n }\n catch (err) {\n // streaming lines to console is best effort. Don't fail a build.\n this._debug(`error processing line. Failed with error ${err}`);\n }\n }\n _getSpawnFileName() {\n if (IS_WINDOWS) {\n if (this._isCmdFile()) {\n return process.env['COMSPEC'] || 'cmd.exe';\n }\n }\n return this.toolPath;\n }\n _getSpawnArgs(options) {\n if (IS_WINDOWS) {\n if (this._isCmdFile()) {\n let argline = `/D /S /C \"${this._windowsQuoteCmdArg(this.toolPath)}`;\n for (const a of this.args) {\n argline += ' ';\n argline += options.windowsVerbatimArguments\n ? a\n : this._windowsQuoteCmdArg(a);\n }\n argline += '\"';\n return [argline];\n }\n }\n return this.args;\n }\n _endsWith(str, end) {\n return str.endsWith(end);\n }\n _isCmdFile() {\n const upperToolPath = this.toolPath.toUpperCase();\n return (this._endsWith(upperToolPath, '.CMD') ||\n this._endsWith(upperToolPath, '.BAT'));\n }\n _windowsQuoteCmdArg(arg) {\n // for .exe, apply the normal quoting rules that libuv applies\n if (!this._isCmdFile()) {\n return this._uvQuoteCmdArg(arg);\n }\n // otherwise apply quoting rules specific to the cmd.exe command line parser.\n // the libuv rules are generic and are not designed specifically for cmd.exe\n // command line parser.\n //\n // for a detailed description of the cmd.exe command line parser, refer to\n // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912\n // need quotes for empty arg\n if (!arg) {\n return '\"\"';\n }\n // determine whether the arg needs to be quoted\n const cmdSpecialChars = [\n ' ',\n '\\t',\n '&',\n '(',\n ')',\n '[',\n ']',\n '{',\n '}',\n '^',\n '=',\n ';',\n '!',\n \"'\",\n '+',\n ',',\n '`',\n '~',\n '|',\n '<',\n '>',\n '\"'\n ];\n let needsQuotes = false;\n for (const char of arg) {\n if (cmdSpecialChars.some(x => x === char)) {\n needsQuotes = true;\n break;\n }\n }\n // short-circuit if quotes not needed\n if (!needsQuotes) {\n return arg;\n }\n // the following quoting rules are very similar to the rules that by libuv applies.\n //\n // 1) wrap the string in quotes\n //\n // 2) double-up quotes - i.e. \" => \"\"\n //\n // this is different from the libuv quoting rules. libuv replaces \" with \\\", which unfortunately\n // doesn't work well with a cmd.exe command line.\n //\n // note, replacing \" with \"\" also works well if the arg is passed to a downstream .NET console app.\n // for example, the command line:\n // foo.exe \"myarg:\"\"my val\"\"\"\n // is parsed by a .NET console app into an arg array:\n // [ \"myarg:\\\"my val\\\"\" ]\n // which is the same end result when applying libuv quoting rules. although the actual\n // command line from libuv quoting rules would look like:\n // foo.exe \"myarg:\\\"my val\\\"\"\n //\n // 3) double-up slashes that precede a quote,\n // e.g. hello \\world => \"hello \\world\"\n // hello\\\"world => \"hello\\\\\"\"world\"\n // hello\\\\\"world => \"hello\\\\\\\\\"\"world\"\n // hello world\\ => \"hello world\\\\\"\n //\n // technically this is not required for a cmd.exe command line, or the batch argument parser.\n // the reasons for including this as a .cmd quoting rule are:\n //\n // a) this is optimized for the scenario where the argument is passed from the .cmd file to an\n // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.\n //\n // b) it's what we've been doing previously (by deferring to node default behavior) and we\n // haven't heard any complaints about that aspect.\n //\n // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be\n // escaped when used on the command line directly - even though within a .cmd file % can be escaped\n // by using %%.\n //\n // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts\n // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.\n //\n // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would\n // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the\n // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args\n // to an external program.\n //\n // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.\n // % can be escaped within a .cmd file.\n let reverse = '\"';\n let quoteHit = true;\n for (let i = arg.length; i > 0; i--) {\n // walk the string in reverse\n reverse += arg[i - 1];\n if (quoteHit && arg[i - 1] === '\\\\') {\n reverse += '\\\\'; // double the slash\n }\n else if (arg[i - 1] === '\"') {\n quoteHit = true;\n reverse += '\"'; // double the quote\n }\n else {\n quoteHit = false;\n }\n }\n reverse += '\"';\n return reverse\n .split('')\n .reverse()\n .join('');\n }\n _uvQuoteCmdArg(arg) {\n // Tool runner wraps child_process.spawn() and needs to apply the same quoting as\n // Node in certain cases where the undocumented spawn option windowsVerbatimArguments\n // is used.\n //\n // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,\n // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),\n // pasting copyright notice from Node within this function:\n //\n // Copyright Joyent, Inc. and other Node contributors. All rights reserved.\n //\n // Permission is hereby granted, free of charge, to any person obtaining a copy\n // of this software and associated documentation files (the \"Software\"), to\n // deal in the Software without restriction, including without limitation the\n // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n // sell copies of the Software, and to permit persons to whom the Software is\n // furnished to do so, subject to the following conditions:\n //\n // The above copyright notice and this permission notice shall be included in\n // all copies or substantial portions of the Software.\n //\n // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n // IN THE SOFTWARE.\n if (!arg) {\n // Need double quotation for empty argument\n return '\"\"';\n }\n if (!arg.includes(' ') && !arg.includes('\\t') && !arg.includes('\"')) {\n // No quotation needed\n return arg;\n }\n if (!arg.includes('\"') && !arg.includes('\\\\')) {\n // No embedded double quotes or backslashes, so I can just wrap\n // quote marks around the whole thing.\n return `\"${arg}\"`;\n }\n // Expected input/output:\n // input : hello\"world\n // output: \"hello\\\"world\"\n // input : hello\"\"world\n // output: \"hello\\\"\\\"world\"\n // input : hello\\world\n // output: hello\\world\n // input : hello\\\\world\n // output: hello\\\\world\n // input : hello\\\"world\n // output: \"hello\\\\\\\"world\"\n // input : hello\\\\\"world\n // output: \"hello\\\\\\\\\\\"world\"\n // input : hello world\\\n // output: \"hello world\\\\\" - note the comment in libuv actually reads \"hello world\\\"\n // but it appears the comment is wrong, it should be \"hello world\\\\\"\n let reverse = '\"';\n let quoteHit = true;\n for (let i = arg.length; i > 0; i--) {\n // walk the string in reverse\n reverse += arg[i - 1];\n if (quoteHit && arg[i - 1] === '\\\\') {\n reverse += '\\\\';\n }\n else if (arg[i - 1] === '\"') {\n quoteHit = true;\n reverse += '\\\\';\n }\n else {\n quoteHit = false;\n }\n }\n reverse += '\"';\n return reverse\n .split('')\n .reverse()\n .join('');\n }\n _cloneExecOptions(options) {\n options = options || {};\n const result = {\n cwd: options.cwd || process.cwd(),\n env: options.env || process.env,\n silent: options.silent || false,\n windowsVerbatimArguments: options.windowsVerbatimArguments || false,\n failOnStdErr: options.failOnStdErr || false,\n ignoreReturnCode: options.ignoreReturnCode || false,\n delay: options.delay || 10000\n };\n result.outStream = options.outStream || process.stdout;\n result.errStream = options.errStream || process.stderr;\n return result;\n }\n _getSpawnOptions(options, toolPath) {\n options = options || {};\n const result = {};\n result.cwd = options.cwd;\n result.env = options.env;\n result['windowsVerbatimArguments'] =\n options.windowsVerbatimArguments || this._isCmdFile();\n if (options.windowsVerbatimArguments) {\n result.argv0 = `\"${toolPath}\"`;\n }\n return result;\n }\n /**\n * Exec a tool.\n * Output will be streamed to the live console.\n * Returns promise with return code\n *\n * @param tool path to tool to exec\n * @param options optional exec options. See ExecOptions\n * @returns number\n */\n exec() {\n return __awaiter(this, void 0, void 0, function* () {\n // root the tool path if it is unrooted and contains relative pathing\n if (!ioUtil.isRooted(this.toolPath) &&\n (this.toolPath.includes('/') ||\n (IS_WINDOWS && this.toolPath.includes('\\\\')))) {\n // prefer options.cwd if it is specified, however options.cwd may also need to be rooted\n this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);\n }\n // if the tool is only a file name, then resolve it from the PATH\n // otherwise verify it exists (add extension on Windows if necessary)\n this.toolPath = yield io.which(this.toolPath, true);\n return new Promise((resolve, reject) => {\n this._debug(`exec tool: ${this.toolPath}`);\n this._debug('arguments:');\n for (const arg of this.args) {\n this._debug(` ${arg}`);\n }\n const optionsNonNull = this._cloneExecOptions(this.options);\n if (!optionsNonNull.silent && optionsNonNull.outStream) {\n optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);\n }\n const state = new ExecState(optionsNonNull, this.toolPath);\n state.on('debug', (message) => {\n this._debug(message);\n });\n const fileName = this._getSpawnFileName();\n const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));\n const stdbuffer = '';\n if (cp.stdout) {\n cp.stdout.on('data', (data) => {\n if (this.options.listeners && this.options.listeners.stdout) {\n this.options.listeners.stdout(data);\n }\n if (!optionsNonNull.silent && optionsNonNull.outStream) {\n optionsNonNull.outStream.write(data);\n }\n this._processLineBuffer(data, stdbuffer, (line) => {\n if (this.options.listeners && this.options.listeners.stdline) {\n this.options.listeners.stdline(line);\n }\n });\n });\n }\n const errbuffer = '';\n if (cp.stderr) {\n cp.stderr.on('data', (data) => {\n state.processStderr = true;\n if (this.options.listeners && this.options.listeners.stderr) {\n this.options.listeners.stderr(data);\n }\n if (!optionsNonNull.silent &&\n optionsNonNull.errStream &&\n optionsNonNull.outStream) {\n const s = optionsNonNull.failOnStdErr\n ? optionsNonNull.errStream\n : optionsNonNull.outStream;\n s.write(data);\n }\n this._processLineBuffer(data, errbuffer, (line) => {\n if (this.options.listeners && this.options.listeners.errline) {\n this.options.listeners.errline(line);\n }\n });\n });\n }\n cp.on('error', (err) => {\n state.processError = err.message;\n state.processExited = true;\n state.processClosed = true;\n state.CheckComplete();\n });\n cp.on('exit', (code) => {\n state.processExitCode = code;\n state.processExited = true;\n this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);\n state.CheckComplete();\n });\n cp.on('close', (code) => {\n state.processExitCode = code;\n state.processExited = true;\n state.processClosed = true;\n this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);\n state.CheckComplete();\n });\n state.on('done', (error, exitCode) => {\n if (stdbuffer.length > 0) {\n this.emit('stdline', stdbuffer);\n }\n if (errbuffer.length > 0) {\n this.emit('errline', errbuffer);\n }\n cp.removeAllListeners();\n if (error) {\n reject(error);\n }\n else {\n resolve(exitCode);\n }\n });\n if (this.options.input) {\n if (!cp.stdin) {\n throw new Error('child process missing stdin');\n }\n cp.stdin.end(this.options.input);\n }\n });\n });\n }\n}\nexports.ToolRunner = ToolRunner;\n/**\n * Convert an arg string to an array of args. Handles escaping\n *\n * @param argString string of arguments\n * @returns string[] array of arguments\n */\nfunction argStringToArray(argString) {\n const args = [];\n let inQuotes = false;\n let escaped = false;\n let arg = '';\n function append(c) {\n // we only escape double quotes.\n if (escaped && c !== '\"') {\n arg += '\\\\';\n }\n arg += c;\n escaped = false;\n }\n for (let i = 0; i < argString.length; i++) {\n const c = argString.charAt(i);\n if (c === '\"') {\n if (!escaped) {\n inQuotes = !inQuotes;\n }\n else {\n append(c);\n }\n continue;\n }\n if (c === '\\\\' && escaped) {\n append(c);\n continue;\n }\n if (c === '\\\\' && inQuotes) {\n escaped = true;\n continue;\n }\n if (c === ' ' && !inQuotes) {\n if (arg.length > 0) {\n args.push(arg);\n arg = '';\n }\n continue;\n }\n append(c);\n }\n if (arg.length > 0) {\n args.push(arg.trim());\n }\n return args;\n}\nexports.argStringToArray = argStringToArray;\nclass ExecState extends events.EventEmitter {\n constructor(options, toolPath) {\n super();\n this.processClosed = false; // tracks whether the process has exited and stdio is closed\n this.processError = '';\n this.processExitCode = 0;\n this.processExited = false; // tracks whether the process has exited\n this.processStderr = false; // tracks whether stderr was written to\n this.delay = 10000; // 10 seconds\n this.done = false;\n this.timeout = null;\n if (!toolPath) {\n throw new Error('toolPath must not be empty');\n }\n this.options = options;\n this.toolPath = toolPath;\n if (options.delay) {\n this.delay = options.delay;\n }\n }\n CheckComplete() {\n if (this.done) {\n return;\n }\n if (this.processClosed) {\n this._setResult();\n }\n else if (this.processExited) {\n this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);\n }\n }\n _debug(message) {\n this.emit('debug', message);\n }\n _setResult() {\n // determine whether there is an error\n let error;\n if (this.processExited) {\n if (this.processError) {\n error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);\n }\n else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {\n error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);\n }\n else if (this.processStderr && this.options.failOnStdErr) {\n error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);\n }\n }\n // clear the timeout\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.done = true;\n this.emit('done', error, this.processExitCode);\n }\n static HandleTimeout(state) {\n if (state.done) {\n return;\n }\n if (!state.processClosed && state.processExited) {\n const message = `The STDIO streams did not close within ${state.delay /\n 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;\n state._debug(message);\n }\n state._setResult();\n }\n}\n//# sourceMappingURL=toolrunner.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst fs_1 = require(\"fs\");\nconst os_1 = require(\"os\");\nclass Context {\n /**\n * Hydrate the context from the environment\n */\n constructor() {\n this.payload = {};\n if (process.env.GITHUB_EVENT_PATH) {\n if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {\n this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));\n }\n else {\n const path = process.env.GITHUB_EVENT_PATH;\n process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);\n }\n }\n this.eventName = process.env.GITHUB_EVENT_NAME;\n this.sha = process.env.GITHUB_SHA;\n this.ref = process.env.GITHUB_REF;\n this.workflow = process.env.GITHUB_WORKFLOW;\n this.action = process.env.GITHUB_ACTION;\n this.actor = process.env.GITHUB_ACTOR;\n this.job = process.env.GITHUB_JOB;\n this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);\n this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);\n }\n get issue() {\n const payload = this.payload;\n return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });\n }\n get repo() {\n if (process.env.GITHUB_REPOSITORY) {\n const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');\n return { owner, repo };\n }\n if (this.payload.repository) {\n return {\n owner: this.payload.repository.owner.login,\n repo: this.payload.repository.name\n };\n }\n throw new Error(\"context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'\");\n }\n}\nexports.Context = Context;\n//# sourceMappingURL=context.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOctokit = exports.context = void 0;\nconst Context = __importStar(require(\"./context\"));\nconst utils_1 = require(\"./utils\");\nexports.context = new Context.Context();\n/**\n * Returns a hydrated octokit ready to use for GitHub Actions\n *\n * @param token the repo PAT or GITHUB_TOKEN\n * @param options other options to set\n */\nfunction getOctokit(token, options) {\n return new utils_1.GitHub(utils_1.getOctokitOptions(token, options));\n}\nexports.getOctokit = getOctokit;\n//# sourceMappingURL=github.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0;\nconst httpClient = __importStar(require(\"@actions/http-client\"));\nfunction getAuthString(token, options) {\n if (!token && !options.auth) {\n throw new Error('Parameter token or opts.auth is required');\n }\n else if (token && options.auth) {\n throw new Error('Parameters token and opts.auth may not both be specified');\n }\n return typeof options.auth === 'string' ? options.auth : `token ${token}`;\n}\nexports.getAuthString = getAuthString;\nfunction getProxyAgent(destinationUrl) {\n const hc = new httpClient.HttpClient();\n return hc.getAgent(destinationUrl);\n}\nexports.getProxyAgent = getProxyAgent;\nfunction getApiBaseUrl() {\n return process.env['GITHUB_API_URL'] || 'https://api.github.com';\n}\nexports.getApiBaseUrl = getApiBaseUrl;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOctokitOptions = exports.GitHub = exports.context = void 0;\nconst Context = __importStar(require(\"./context\"));\nconst Utils = __importStar(require(\"./internal/utils\"));\n// octokit + plugins\nconst core_1 = require(\"@octokit/core\");\nconst plugin_rest_endpoint_methods_1 = require(\"@octokit/plugin-rest-endpoint-methods\");\nconst plugin_paginate_rest_1 = require(\"@octokit/plugin-paginate-rest\");\nexports.context = new Context.Context();\nconst baseUrl = Utils.getApiBaseUrl();\nconst defaults = {\n baseUrl,\n request: {\n agent: Utils.getProxyAgent(baseUrl)\n }\n};\nexports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(defaults);\n/**\n * Convience function to correctly format Octokit Options to pass into the constructor.\n *\n * @param token the repo PAT or GITHUB_TOKEN\n * @param options other options to set\n */\nfunction getOctokitOptions(token, options) {\n const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller\n // Auth\n const auth = Utils.getAuthString(token, opts);\n if (auth) {\n opts.auth = auth;\n }\n return opts;\n}\nexports.getOctokitOptions = getOctokitOptions;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst https = require(\"https\");\nconst pm = require(\"./proxy\");\nlet tunnel;\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n let proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return new Promise(async (resolve, reject) => {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n let parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n }\n get(requestUrl, additionalHeaders) {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n }\n del(requestUrl, additionalHeaders) {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n }\n post(requestUrl, data, additionalHeaders) {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n }\n patch(requestUrl, data, additionalHeaders) {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n }\n put(requestUrl, data, additionalHeaders) {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n }\n head(requestUrl, additionalHeaders) {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n async getJson(requestUrl, additionalHeaders = {}) {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n let res = await this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async postJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async putJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n async patchJson(requestUrl, obj, additionalHeaders = {}) {\n let data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n let res = await this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n async request(verb, requestUrl, data, headers) {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n let parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n while (numTries < maxTries) {\n response = await this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (let i = 0; i < this.handlers.length; i++) {\n if (this.handlers[i].canHandleAuthentication(response)) {\n authenticationHandler = this.handlers[i];\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n let parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol == 'https:' &&\n parsedUrl.protocol != parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n await response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (let header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = await this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n await response.readBody();\n await this._performExponentialBackoff(numTries);\n }\n }\n return response;\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return new Promise((resolve, reject) => {\n let callbackForResult = function (err, res) {\n if (err) {\n reject(err);\n }\n resolve(res);\n };\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n let socket;\n if (typeof data === 'string') {\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n let handleResult = (err, res) => {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n };\n let req = info.httpModule.request(info.options, (msg) => {\n let res = new HttpClientResponse(msg);\n handleResult(null, res);\n });\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error('Request timeout: ' + info.options.path), null);\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err, null);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n let parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n this.handlers.forEach(handler => {\n handler.prepareRequest(info.options);\n });\n }\n return info;\n }\n _mergeHeaders(headers) {\n const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n let proxyUrl = pm.getProxyUrl(parsedUrl);\n let useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (!!agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (!!this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n if (useProxy) {\n // If using proxy, need tunnel\n if (!tunnel) {\n tunnel = require('tunnel');\n }\n const agentOptions = {\n maxSockets: maxSockets,\n keepAlive: this._keepAlive,\n proxy: {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`,\n host: proxyUrl.hostname,\n port: proxyUrl.port\n }\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n }\n static dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n let a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n async _processResponse(res, options) {\n return new Promise(async (resolve, reject) => {\n const statusCode = res.message.statusCode;\n const response = {\n statusCode: statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode == HttpCodes.NotFound) {\n resolve(response);\n }\n let obj;\n let contents;\n // get the result from the body\n try {\n contents = await res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = 'Failed request: (' + statusCode + ')';\n }\n let err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n });\n }\n}\nexports.HttpClient = HttpClient;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction getProxyUrl(reqUrl) {\n let usingSsl = reqUrl.protocol === 'https:';\n let proxyUrl;\n if (checkBypass(reqUrl)) {\n return proxyUrl;\n }\n let proxyVar;\n if (usingSsl) {\n proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n if (proxyVar) {\n proxyUrl = new URL(proxyVar);\n }\n return proxyUrl;\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n let upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (let upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperReqHosts.some(x => x === upperNoProxyItem)) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert_1 = require(\"assert\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;\nexports.IS_WINDOWS = process.platform === 'win32';\nfunction exists(fsPath) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield exports.stat(fsPath);\n }\n catch (err) {\n if (err.code === 'ENOENT') {\n return false;\n }\n throw err;\n }\n return true;\n });\n}\nexports.exists = exists;\nfunction isDirectory(fsPath, useStat = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);\n return stats.isDirectory();\n });\n}\nexports.isDirectory = isDirectory;\n/**\n * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:\n * \\, \\hello, \\\\hello\\share, C:, and C:\\hello (and corresponding alternate separator cases).\n */\nfunction isRooted(p) {\n p = normalizeSeparators(p);\n if (!p) {\n throw new Error('isRooted() parameter \"p\" cannot be empty');\n }\n if (exports.IS_WINDOWS) {\n return (p.startsWith('\\\\') || /^[A-Z]:/i.test(p) // e.g. \\ or \\hello or \\\\hello\n ); // e.g. C: or C:\\hello\n }\n return p.startsWith('/');\n}\nexports.isRooted = isRooted;\n/**\n * Recursively create a directory at `fsPath`.\n *\n * This implementation is optimistic, meaning it attempts to create the full\n * path first, and backs up the path stack from there.\n *\n * @param fsPath The path to create\n * @param maxDepth The maximum recursion depth\n * @param depth The current recursion depth\n */\nfunction mkdirP(fsPath, maxDepth = 1000, depth = 1) {\n return __awaiter(this, void 0, void 0, function* () {\n assert_1.ok(fsPath, 'a path argument must be provided');\n fsPath = path.resolve(fsPath);\n if (depth >= maxDepth)\n return exports.mkdir(fsPath);\n try {\n yield exports.mkdir(fsPath);\n return;\n }\n catch (err) {\n switch (err.code) {\n case 'ENOENT': {\n yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);\n yield exports.mkdir(fsPath);\n return;\n }\n default: {\n let stats;\n try {\n stats = yield exports.stat(fsPath);\n }\n catch (err2) {\n throw err;\n }\n if (!stats.isDirectory())\n throw err;\n }\n }\n }\n });\n}\nexports.mkdirP = mkdirP;\n/**\n * Best effort attempt to determine whether a file exists and is executable.\n * @param filePath file path to check\n * @param extensions additional file extensions to try\n * @return if file exists and is executable, returns the file path. otherwise empty string.\n */\nfunction tryGetExecutablePath(filePath, extensions) {\n return __awaiter(this, void 0, void 0, function* () {\n let stats = undefined;\n try {\n // test file exists\n stats = yield exports.stat(filePath);\n }\n catch (err) {\n if (err.code !== 'ENOENT') {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);\n }\n }\n if (stats && stats.isFile()) {\n if (exports.IS_WINDOWS) {\n // on Windows, test for valid extension\n const upperExt = path.extname(filePath).toUpperCase();\n if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {\n return filePath;\n }\n }\n else {\n if (isUnixExecutable(stats)) {\n return filePath;\n }\n }\n }\n // try each extension\n const originalFilePath = filePath;\n for (const extension of extensions) {\n filePath = originalFilePath + extension;\n stats = undefined;\n try {\n stats = yield exports.stat(filePath);\n }\n catch (err) {\n if (err.code !== 'ENOENT') {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);\n }\n }\n if (stats && stats.isFile()) {\n if (exports.IS_WINDOWS) {\n // preserve the case of the actual file (since an extension was appended)\n try {\n const directory = path.dirname(filePath);\n const upperName = path.basename(filePath).toUpperCase();\n for (const actualName of yield exports.readdir(directory)) {\n if (upperName === actualName.toUpperCase()) {\n filePath = path.join(directory, actualName);\n break;\n }\n }\n }\n catch (err) {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);\n }\n return filePath;\n }\n else {\n if (isUnixExecutable(stats)) {\n return filePath;\n }\n }\n }\n }\n return '';\n });\n}\nexports.tryGetExecutablePath = tryGetExecutablePath;\nfunction normalizeSeparators(p) {\n p = p || '';\n if (exports.IS_WINDOWS) {\n // convert slashes on Windows\n p = p.replace(/\\//g, '\\\\');\n // remove redundant slashes\n return p.replace(/\\\\\\\\+/g, '\\\\');\n }\n // remove redundant slashes\n return p.replace(/\\/\\/+/g, '/');\n}\n// on Mac/Linux, test the execute bit\n// R W X R W X R W X\n// 256 128 64 32 16 8 4 2 1\nfunction isUnixExecutable(stats) {\n return ((stats.mode & 1) > 0 ||\n ((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||\n ((stats.mode & 64) > 0 && stats.uid === process.getuid()));\n}\n//# sourceMappingURL=io-util.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst childProcess = require(\"child_process\");\nconst path = require(\"path\");\nconst util_1 = require(\"util\");\nconst ioUtil = require(\"./io-util\");\nconst exec = util_1.promisify(childProcess.exec);\n/**\n * Copies a file or folder.\n * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js\n *\n * @param source source path\n * @param dest destination path\n * @param options optional. See CopyOptions.\n */\nfunction cp(source, dest, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const { force, recursive } = readCopyOptions(options);\n const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;\n // Dest is an existing file, but not forcing\n if (destStat && destStat.isFile() && !force) {\n return;\n }\n // If dest is an existing directory, should copy inside.\n const newDest = destStat && destStat.isDirectory()\n ? path.join(dest, path.basename(source))\n : dest;\n if (!(yield ioUtil.exists(source))) {\n throw new Error(`no such file or directory: ${source}`);\n }\n const sourceStat = yield ioUtil.stat(source);\n if (sourceStat.isDirectory()) {\n if (!recursive) {\n throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);\n }\n else {\n yield cpDirRecursive(source, newDest, 0, force);\n }\n }\n else {\n if (path.relative(source, newDest) === '') {\n // a file cannot be copied to itself\n throw new Error(`'${newDest}' and '${source}' are the same file`);\n }\n yield copyFile(source, newDest, force);\n }\n });\n}\nexports.cp = cp;\n/**\n * Moves a path.\n *\n * @param source source path\n * @param dest destination path\n * @param options optional. See MoveOptions.\n */\nfunction mv(source, dest, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n if (yield ioUtil.exists(dest)) {\n let destExists = true;\n if (yield ioUtil.isDirectory(dest)) {\n // If dest is directory copy src into dest\n dest = path.join(dest, path.basename(source));\n destExists = yield ioUtil.exists(dest);\n }\n if (destExists) {\n if (options.force == null || options.force) {\n yield rmRF(dest);\n }\n else {\n throw new Error('Destination already exists');\n }\n }\n }\n yield mkdirP(path.dirname(dest));\n yield ioUtil.rename(source, dest);\n });\n}\nexports.mv = mv;\n/**\n * Remove a path recursively with force\n *\n * @param inputPath path to remove\n */\nfunction rmRF(inputPath) {\n return __awaiter(this, void 0, void 0, function* () {\n if (ioUtil.IS_WINDOWS) {\n // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another\n // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.\n try {\n if (yield ioUtil.isDirectory(inputPath, true)) {\n yield exec(`rd /s /q \"${inputPath}\"`);\n }\n else {\n yield exec(`del /f /a \"${inputPath}\"`);\n }\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n }\n // Shelling out fails to remove a symlink folder with missing source, this unlink catches that\n try {\n yield ioUtil.unlink(inputPath);\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n }\n }\n else {\n let isDir = false;\n try {\n isDir = yield ioUtil.isDirectory(inputPath);\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n return;\n }\n if (isDir) {\n yield exec(`rm -rf \"${inputPath}\"`);\n }\n else {\n yield ioUtil.unlink(inputPath);\n }\n }\n });\n}\nexports.rmRF = rmRF;\n/**\n * Make a directory. Creates the full path with folders in between\n * Will throw if it fails\n *\n * @param fsPath path to create\n * @returns Promise\n */\nfunction mkdirP(fsPath) {\n return __awaiter(this, void 0, void 0, function* () {\n yield ioUtil.mkdirP(fsPath);\n });\n}\nexports.mkdirP = mkdirP;\n/**\n * Returns path of a tool had the tool actually been invoked. Resolves via paths.\n * If you check and the tool does not exist, it will throw.\n *\n * @param tool name of the tool\n * @param check whether to check if tool exists\n * @returns Promise path to tool\n */\nfunction which(tool, check) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!tool) {\n throw new Error(\"parameter 'tool' is required\");\n }\n // recursive when check=true\n if (check) {\n const result = yield which(tool, false);\n if (!result) {\n if (ioUtil.IS_WINDOWS) {\n throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);\n }\n else {\n throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);\n }\n }\n }\n try {\n // build the list of extensions to try\n const extensions = [];\n if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {\n for (const extension of process.env.PATHEXT.split(path.delimiter)) {\n if (extension) {\n extensions.push(extension);\n }\n }\n }\n // if it's rooted, return it if exists. otherwise return empty.\n if (ioUtil.isRooted(tool)) {\n const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);\n if (filePath) {\n return filePath;\n }\n return '';\n }\n // if any path separators, return empty\n if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\\\'))) {\n return '';\n }\n // build the list of directories\n //\n // Note, technically \"where\" checks the current directory on Windows. From a toolkit perspective,\n // it feels like we should not do this. Checking the current directory seems like more of a use\n // case of a shell, and the which() function exposed by the toolkit should strive for consistency\n // across platforms.\n const directories = [];\n if (process.env.PATH) {\n for (const p of process.env.PATH.split(path.delimiter)) {\n if (p) {\n directories.push(p);\n }\n }\n }\n // return the first match\n for (const directory of directories) {\n const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);\n if (filePath) {\n return filePath;\n }\n }\n return '';\n }\n catch (err) {\n throw new Error(`which failed with message ${err.message}`);\n }\n });\n}\nexports.which = which;\nfunction readCopyOptions(options) {\n const force = options.force == null ? true : options.force;\n const recursive = Boolean(options.recursive);\n return { force, recursive };\n}\nfunction cpDirRecursive(sourceDir, destDir, currentDepth, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // Ensure there is not a run away recursive copy\n if (currentDepth >= 255)\n return;\n currentDepth++;\n yield mkdirP(destDir);\n const files = yield ioUtil.readdir(sourceDir);\n for (const fileName of files) {\n const srcFile = `${sourceDir}/${fileName}`;\n const destFile = `${destDir}/${fileName}`;\n const srcFileStat = yield ioUtil.lstat(srcFile);\n if (srcFileStat.isDirectory()) {\n // Recurse\n yield cpDirRecursive(srcFile, destFile, currentDepth, force);\n }\n else {\n yield copyFile(srcFile, destFile, force);\n }\n }\n // Change the mode for the newly created directory\n yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);\n });\n}\n// Buffered file copy\nfunction copyFile(srcFile, destFile, force) {\n return __awaiter(this, void 0, void 0, function* () {\n if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {\n // unlink/re-link it\n try {\n yield ioUtil.lstat(destFile);\n yield ioUtil.unlink(destFile);\n }\n catch (e) {\n // Try to override file permission\n if (e.code === 'EPERM') {\n yield ioUtil.chmod(destFile, '0666');\n yield ioUtil.unlink(destFile);\n }\n // other errors = it doesn't exist, no work to do\n }\n // Copy over symlink\n const symlinkFull = yield ioUtil.readlink(srcFile);\n yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);\n }\n else if (!(yield ioUtil.exists(destFile)) || force) {\n yield ioUtil.copyFile(srcFile, destFile);\n }\n });\n}\n//# sourceMappingURL=io.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\r\nconst fs = require(\"fs\");\r\nexports.FILE_SYSTEM_ADAPTER = {\r\n lstat: fs.lstat,\r\n stat: fs.stat,\r\n lstatSync: fs.lstatSync,\r\n statSync: fs.statSync,\r\n readdir: fs.readdir,\r\n readdirSync: fs.readdirSync\r\n};\r\nfunction createFileSystemAdapter(fsMethods) {\r\n if (fsMethods === undefined) {\r\n return exports.FILE_SYSTEM_ADAPTER;\r\n }\r\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\r\n}\r\nexports.createFileSystemAdapter = createFileSystemAdapter;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\r\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\r\nconst MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\r\nconst MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\r\nconst SUPPORTED_MAJOR_VERSION = 10;\r\nconst SUPPORTED_MINOR_VERSION = 10;\r\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\r\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\r\n/**\r\n * IS `true` for Node.js 10.10 and greater.\r\n */\r\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\r\nconst async = require(\"./providers/async\");\r\nconst sync = require(\"./providers/sync\");\r\nconst settings_1 = require(\"./settings\");\r\nexports.Settings = settings_1.default;\r\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\r\n if (typeof optionsOrSettingsOrCallback === 'function') {\r\n return async.read(path, getSettings(), optionsOrSettingsOrCallback);\r\n }\r\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\r\n}\r\nexports.scandir = scandir;\r\nfunction scandirSync(path, optionsOrSettings) {\r\n const settings = getSettings(optionsOrSettings);\r\n return sync.read(path, settings);\r\n}\r\nexports.scandirSync = scandirSync;\r\nfunction getSettings(settingsOrOptions = {}) {\r\n if (settingsOrOptions instanceof settings_1.default) {\r\n return settingsOrOptions;\r\n }\r\n return new settings_1.default(settingsOrOptions);\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\r\nconst fsStat = require(\"@nodelib/fs.stat\");\r\nconst rpl = require(\"run-parallel\");\r\nconst constants_1 = require(\"../constants\");\r\nconst utils = require(\"../utils\");\r\nconst common = require(\"./common\");\r\nfunction read(directory, settings, callback) {\r\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\r\n return readdirWithFileTypes(directory, settings, callback);\r\n }\r\n return readdir(directory, settings, callback);\r\n}\r\nexports.read = read;\r\nfunction readdirWithFileTypes(directory, settings, callback) {\r\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\r\n if (readdirError !== null) {\r\n return callFailureCallback(callback, readdirError);\r\n }\r\n const entries = dirents.map((dirent) => ({\r\n dirent,\r\n name: dirent.name,\r\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\r\n }));\r\n if (!settings.followSymbolicLinks) {\r\n return callSuccessCallback(callback, entries);\r\n }\r\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\r\n rpl(tasks, (rplError, rplEntries) => {\r\n if (rplError !== null) {\r\n return callFailureCallback(callback, rplError);\r\n }\r\n callSuccessCallback(callback, rplEntries);\r\n });\r\n });\r\n}\r\nexports.readdirWithFileTypes = readdirWithFileTypes;\r\nfunction makeRplTaskEntry(entry, settings) {\r\n return (done) => {\r\n if (!entry.dirent.isSymbolicLink()) {\r\n return done(null, entry);\r\n }\r\n settings.fs.stat(entry.path, (statError, stats) => {\r\n if (statError !== null) {\r\n if (settings.throwErrorOnBrokenSymbolicLink) {\r\n return done(statError);\r\n }\r\n return done(null, entry);\r\n }\r\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\r\n return done(null, entry);\r\n });\r\n };\r\n}\r\nfunction readdir(directory, settings, callback) {\r\n settings.fs.readdir(directory, (readdirError, names) => {\r\n if (readdirError !== null) {\r\n return callFailureCallback(callback, readdirError);\r\n }\r\n const filepaths = names.map((name) => common.joinPathSegments(directory, name, settings.pathSegmentSeparator));\r\n const tasks = filepaths.map((filepath) => {\r\n return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);\r\n });\r\n rpl(tasks, (rplError, results) => {\r\n if (rplError !== null) {\r\n return callFailureCallback(callback, rplError);\r\n }\r\n const entries = [];\r\n names.forEach((name, index) => {\r\n const stats = results[index];\r\n const entry = {\r\n name,\r\n path: filepaths[index],\r\n dirent: utils.fs.createDirentFromStats(name, stats)\r\n };\r\n if (settings.stats) {\r\n entry.stats = stats;\r\n }\r\n entries.push(entry);\r\n });\r\n callSuccessCallback(callback, entries);\r\n });\r\n });\r\n}\r\nexports.readdir = readdir;\r\nfunction callFailureCallback(callback, error) {\r\n callback(error);\r\n}\r\nfunction callSuccessCallback(callback, result) {\r\n callback(null, result);\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.joinPathSegments = void 0;\r\nfunction joinPathSegments(a, b, separator) {\r\n /**\r\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\r\n */\r\n if (a.endsWith(separator)) {\r\n return a + b;\r\n }\r\n return a + separator + b;\r\n}\r\nexports.joinPathSegments = joinPathSegments;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\r\nconst fsStat = require(\"@nodelib/fs.stat\");\r\nconst constants_1 = require(\"../constants\");\r\nconst utils = require(\"../utils\");\r\nconst common = require(\"./common\");\r\nfunction read(directory, settings) {\r\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\r\n return readdirWithFileTypes(directory, settings);\r\n }\r\n return readdir(directory, settings);\r\n}\r\nexports.read = read;\r\nfunction readdirWithFileTypes(directory, settings) {\r\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\r\n return dirents.map((dirent) => {\r\n const entry = {\r\n dirent,\r\n name: dirent.name,\r\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\r\n };\r\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\r\n try {\r\n const stats = settings.fs.statSync(entry.path);\r\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\r\n }\r\n catch (error) {\r\n if (settings.throwErrorOnBrokenSymbolicLink) {\r\n throw error;\r\n }\r\n }\r\n }\r\n return entry;\r\n });\r\n}\r\nexports.readdirWithFileTypes = readdirWithFileTypes;\r\nfunction readdir(directory, settings) {\r\n const names = settings.fs.readdirSync(directory);\r\n return names.map((name) => {\r\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\r\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\r\n const entry = {\r\n name,\r\n path: entryPath,\r\n dirent: utils.fs.createDirentFromStats(name, stats)\r\n };\r\n if (settings.stats) {\r\n entry.stats = stats;\r\n }\r\n return entry;\r\n });\r\n}\r\nexports.readdir = readdir;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst path = require(\"path\");\r\nconst fsStat = require(\"@nodelib/fs.stat\");\r\nconst fs = require(\"./adapters/fs\");\r\nclass Settings {\r\n constructor(_options = {}) {\r\n this._options = _options;\r\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\r\n this.fs = fs.createFileSystemAdapter(this._options.fs);\r\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\r\n this.stats = this._getValue(this._options.stats, false);\r\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\r\n this.fsStatSettings = new fsStat.Settings({\r\n followSymbolicLink: this.followSymbolicLinks,\r\n fs: this.fs,\r\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\r\n });\r\n }\r\n _getValue(option, value) {\r\n return option !== null && option !== void 0 ? option : value;\r\n }\r\n}\r\nexports.default = Settings;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.createDirentFromStats = void 0;\r\nclass DirentFromStats {\r\n constructor(name, stats) {\r\n this.name = name;\r\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\r\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\r\n this.isDirectory = stats.isDirectory.bind(stats);\r\n this.isFIFO = stats.isFIFO.bind(stats);\r\n this.isFile = stats.isFile.bind(stats);\r\n this.isSocket = stats.isSocket.bind(stats);\r\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\r\n }\r\n}\r\nfunction createDirentFromStats(name, stats) {\r\n return new DirentFromStats(name, stats);\r\n}\r\nexports.createDirentFromStats = createDirentFromStats;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fs = void 0;\r\nconst fs = require(\"./fs\");\r\nexports.fs = fs;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\r\nconst fs = require(\"fs\");\r\nexports.FILE_SYSTEM_ADAPTER = {\r\n lstat: fs.lstat,\r\n stat: fs.stat,\r\n lstatSync: fs.lstatSync,\r\n statSync: fs.statSync\r\n};\r\nfunction createFileSystemAdapter(fsMethods) {\r\n if (fsMethods === undefined) {\r\n return exports.FILE_SYSTEM_ADAPTER;\r\n }\r\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\r\n}\r\nexports.createFileSystemAdapter = createFileSystemAdapter;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.statSync = exports.stat = exports.Settings = void 0;\r\nconst async = require(\"./providers/async\");\r\nconst sync = require(\"./providers/sync\");\r\nconst settings_1 = require(\"./settings\");\r\nexports.Settings = settings_1.default;\r\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\r\n if (typeof optionsOrSettingsOrCallback === 'function') {\r\n return async.read(path, getSettings(), optionsOrSettingsOrCallback);\r\n }\r\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\r\n}\r\nexports.stat = stat;\r\nfunction statSync(path, optionsOrSettings) {\r\n const settings = getSettings(optionsOrSettings);\r\n return sync.read(path, settings);\r\n}\r\nexports.statSync = statSync;\r\nfunction getSettings(settingsOrOptions = {}) {\r\n if (settingsOrOptions instanceof settings_1.default) {\r\n return settingsOrOptions;\r\n }\r\n return new settings_1.default(settingsOrOptions);\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.read = void 0;\r\nfunction read(path, settings, callback) {\r\n settings.fs.lstat(path, (lstatError, lstat) => {\r\n if (lstatError !== null) {\r\n return callFailureCallback(callback, lstatError);\r\n }\r\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\r\n return callSuccessCallback(callback, lstat);\r\n }\r\n settings.fs.stat(path, (statError, stat) => {\r\n if (statError !== null) {\r\n if (settings.throwErrorOnBrokenSymbolicLink) {\r\n return callFailureCallback(callback, statError);\r\n }\r\n return callSuccessCallback(callback, lstat);\r\n }\r\n if (settings.markSymbolicLink) {\r\n stat.isSymbolicLink = () => true;\r\n }\r\n callSuccessCallback(callback, stat);\r\n });\r\n });\r\n}\r\nexports.read = read;\r\nfunction callFailureCallback(callback, error) {\r\n callback(error);\r\n}\r\nfunction callSuccessCallback(callback, result) {\r\n callback(null, result);\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.read = void 0;\r\nfunction read(path, settings) {\r\n const lstat = settings.fs.lstatSync(path);\r\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\r\n return lstat;\r\n }\r\n try {\r\n const stat = settings.fs.statSync(path);\r\n if (settings.markSymbolicLink) {\r\n stat.isSymbolicLink = () => true;\r\n }\r\n return stat;\r\n }\r\n catch (error) {\r\n if (!settings.throwErrorOnBrokenSymbolicLink) {\r\n return lstat;\r\n }\r\n throw error;\r\n }\r\n}\r\nexports.read = read;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst fs = require(\"./adapters/fs\");\r\nclass Settings {\r\n constructor(_options = {}) {\r\n this._options = _options;\r\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\r\n this.fs = fs.createFileSystemAdapter(this._options.fs);\r\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\r\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\r\n }\r\n _getValue(option, value) {\r\n return option !== null && option !== void 0 ? option : value;\r\n }\r\n}\r\nexports.default = Settings;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\r\nconst async_1 = require(\"./providers/async\");\r\nconst stream_1 = require(\"./providers/stream\");\r\nconst sync_1 = require(\"./providers/sync\");\r\nconst settings_1 = require(\"./settings\");\r\nexports.Settings = settings_1.default;\r\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\r\n if (typeof optionsOrSettingsOrCallback === 'function') {\r\n return new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\r\n }\r\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\r\n}\r\nexports.walk = walk;\r\nfunction walkSync(directory, optionsOrSettings) {\r\n const settings = getSettings(optionsOrSettings);\r\n const provider = new sync_1.default(directory, settings);\r\n return provider.read();\r\n}\r\nexports.walkSync = walkSync;\r\nfunction walkStream(directory, optionsOrSettings) {\r\n const settings = getSettings(optionsOrSettings);\r\n const provider = new stream_1.default(directory, settings);\r\n return provider.read();\r\n}\r\nexports.walkStream = walkStream;\r\nfunction getSettings(settingsOrOptions = {}) {\r\n if (settingsOrOptions instanceof settings_1.default) {\r\n return settingsOrOptions;\r\n }\r\n return new settings_1.default(settingsOrOptions);\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst async_1 = require(\"../readers/async\");\r\nclass AsyncProvider {\r\n constructor(_root, _settings) {\r\n this._root = _root;\r\n this._settings = _settings;\r\n this._reader = new async_1.default(this._root, this._settings);\r\n this._storage = new Set();\r\n }\r\n read(callback) {\r\n this._reader.onError((error) => {\r\n callFailureCallback(callback, error);\r\n });\r\n this._reader.onEntry((entry) => {\r\n this._storage.add(entry);\r\n });\r\n this._reader.onEnd(() => {\r\n callSuccessCallback(callback, [...this._storage]);\r\n });\r\n this._reader.read();\r\n }\r\n}\r\nexports.default = AsyncProvider;\r\nfunction callFailureCallback(callback, error) {\r\n callback(error);\r\n}\r\nfunction callSuccessCallback(callback, entries) {\r\n callback(null, entries);\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst stream_1 = require(\"stream\");\r\nconst async_1 = require(\"../readers/async\");\r\nclass StreamProvider {\r\n constructor(_root, _settings) {\r\n this._root = _root;\r\n this._settings = _settings;\r\n this._reader = new async_1.default(this._root, this._settings);\r\n this._stream = new stream_1.Readable({\r\n objectMode: true,\r\n read: () => { },\r\n destroy: () => {\r\n if (!this._reader.isDestroyed) {\r\n this._reader.destroy();\r\n }\r\n }\r\n });\r\n }\r\n read() {\r\n this._reader.onError((error) => {\r\n this._stream.emit('error', error);\r\n });\r\n this._reader.onEntry((entry) => {\r\n this._stream.push(entry);\r\n });\r\n this._reader.onEnd(() => {\r\n this._stream.push(null);\r\n });\r\n this._reader.read();\r\n return this._stream;\r\n }\r\n}\r\nexports.default = StreamProvider;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst sync_1 = require(\"../readers/sync\");\r\nclass SyncProvider {\r\n constructor(_root, _settings) {\r\n this._root = _root;\r\n this._settings = _settings;\r\n this._reader = new sync_1.default(this._root, this._settings);\r\n }\r\n read() {\r\n return this._reader.read();\r\n }\r\n}\r\nexports.default = SyncProvider;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"events\");\r\nconst fsScandir = require(\"@nodelib/fs.scandir\");\r\nconst fastq = require(\"fastq\");\r\nconst common = require(\"./common\");\r\nconst reader_1 = require(\"./reader\");\r\nclass AsyncReader extends reader_1.default {\r\n constructor(_root, _settings) {\r\n super(_root, _settings);\r\n this._settings = _settings;\r\n this._scandir = fsScandir.scandir;\r\n this._emitter = new events_1.EventEmitter();\r\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\r\n this._isFatalError = false;\r\n this._isDestroyed = false;\r\n this._queue.drain = () => {\r\n if (!this._isFatalError) {\r\n this._emitter.emit('end');\r\n }\r\n };\r\n }\r\n read() {\r\n this._isFatalError = false;\r\n this._isDestroyed = false;\r\n setImmediate(() => {\r\n this._pushToQueue(this._root, this._settings.basePath);\r\n });\r\n return this._emitter;\r\n }\r\n get isDestroyed() {\r\n return this._isDestroyed;\r\n }\r\n destroy() {\r\n if (this._isDestroyed) {\r\n throw new Error('The reader is already destroyed');\r\n }\r\n this._isDestroyed = true;\r\n this._queue.killAndDrain();\r\n }\r\n onEntry(callback) {\r\n this._emitter.on('entry', callback);\r\n }\r\n onError(callback) {\r\n this._emitter.once('error', callback);\r\n }\r\n onEnd(callback) {\r\n this._emitter.once('end', callback);\r\n }\r\n _pushToQueue(directory, base) {\r\n const queueItem = { directory, base };\r\n this._queue.push(queueItem, (error) => {\r\n if (error !== null) {\r\n this._handleError(error);\r\n }\r\n });\r\n }\r\n _worker(item, done) {\r\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\r\n if (error !== null) {\r\n return done(error, undefined);\r\n }\r\n for (const entry of entries) {\r\n this._handleEntry(entry, item.base);\r\n }\r\n done(null, undefined);\r\n });\r\n }\r\n _handleError(error) {\r\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\r\n return;\r\n }\r\n this._isFatalError = true;\r\n this._isDestroyed = true;\r\n this._emitter.emit('error', error);\r\n }\r\n _handleEntry(entry, base) {\r\n if (this._isDestroyed || this._isFatalError) {\r\n return;\r\n }\r\n const fullpath = entry.path;\r\n if (base !== undefined) {\r\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\r\n }\r\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\r\n this._emitEntry(entry);\r\n }\r\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\r\n this._pushToQueue(fullpath, entry.path);\r\n }\r\n }\r\n _emitEntry(entry) {\r\n this._emitter.emit('entry', entry);\r\n }\r\n}\r\nexports.default = AsyncReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\r\nfunction isFatalError(settings, error) {\r\n if (settings.errorFilter === null) {\r\n return true;\r\n }\r\n return !settings.errorFilter(error);\r\n}\r\nexports.isFatalError = isFatalError;\r\nfunction isAppliedFilter(filter, value) {\r\n return filter === null || filter(value);\r\n}\r\nexports.isAppliedFilter = isAppliedFilter;\r\nfunction replacePathSegmentSeparator(filepath, separator) {\r\n return filepath.split(/[/\\\\]/).join(separator);\r\n}\r\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\r\nfunction joinPathSegments(a, b, separator) {\r\n if (a === '') {\r\n return b;\r\n }\r\n /**\r\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\r\n */\r\n if (a.endsWith(separator)) {\r\n return a + b;\r\n }\r\n return a + separator + b;\r\n}\r\nexports.joinPathSegments = joinPathSegments;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst common = require(\"./common\");\r\nclass Reader {\r\n constructor(_root, _settings) {\r\n this._root = _root;\r\n this._settings = _settings;\r\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\r\n }\r\n}\r\nexports.default = Reader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst fsScandir = require(\"@nodelib/fs.scandir\");\r\nconst common = require(\"./common\");\r\nconst reader_1 = require(\"./reader\");\r\nclass SyncReader extends reader_1.default {\r\n constructor() {\r\n super(...arguments);\r\n this._scandir = fsScandir.scandirSync;\r\n this._storage = new Set();\r\n this._queue = new Set();\r\n }\r\n read() {\r\n this._pushToQueue(this._root, this._settings.basePath);\r\n this._handleQueue();\r\n return [...this._storage];\r\n }\r\n _pushToQueue(directory, base) {\r\n this._queue.add({ directory, base });\r\n }\r\n _handleQueue() {\r\n for (const item of this._queue.values()) {\r\n this._handleDirectory(item.directory, item.base);\r\n }\r\n }\r\n _handleDirectory(directory, base) {\r\n try {\r\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\r\n for (const entry of entries) {\r\n this._handleEntry(entry, base);\r\n }\r\n }\r\n catch (error) {\r\n this._handleError(error);\r\n }\r\n }\r\n _handleError(error) {\r\n if (!common.isFatalError(this._settings, error)) {\r\n return;\r\n }\r\n throw error;\r\n }\r\n _handleEntry(entry, base) {\r\n const fullpath = entry.path;\r\n if (base !== undefined) {\r\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\r\n }\r\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\r\n this._pushToStorage(entry);\r\n }\r\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\r\n this._pushToQueue(fullpath, entry.path);\r\n }\r\n }\r\n _pushToStorage(entry) {\r\n this._storage.add(entry);\r\n }\r\n}\r\nexports.default = SyncReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst path = require(\"path\");\r\nconst fsScandir = require(\"@nodelib/fs.scandir\");\r\nclass Settings {\r\n constructor(_options = {}) {\r\n this._options = _options;\r\n this.basePath = this._getValue(this._options.basePath, undefined);\r\n this.concurrency = this._getValue(this._options.concurrency, Infinity);\r\n this.deepFilter = this._getValue(this._options.deepFilter, null);\r\n this.entryFilter = this._getValue(this._options.entryFilter, null);\r\n this.errorFilter = this._getValue(this._options.errorFilter, null);\r\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\r\n this.fsScandirSettings = new fsScandir.Settings({\r\n followSymbolicLinks: this._options.followSymbolicLinks,\r\n fs: this._options.fs,\r\n pathSegmentSeparator: this._options.pathSegmentSeparator,\r\n stats: this._options.stats,\r\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\r\n });\r\n }\r\n _getValue(option, value) {\r\n return option !== null && option !== void 0 ? option : value;\r\n }\r\n}\r\nexports.default = Settings;\r\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nasync function auth(token) {\n const tokenType = token.split(/\\./).length === 3 ? \"app\" : /^v\\d+\\./.test(token) ? \"installation\" : \"oauth\";\n return {\n type: \"token\",\n token: token,\n tokenType\n };\n}\n\n/**\n * Prefix token for usage in the Authorization header\n *\n * @param token OAuth token or JSON Web Token\n */\nfunction withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n\n return `token ${token}`;\n}\n\nasync function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(route, parameters);\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n\nconst createTokenAuth = function createTokenAuth(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n\n if (typeof token !== \"string\") {\n throw new Error(\"[@octokit/auth-token] Token passed to createTokenAuth is not a string\");\n }\n\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\n\nexports.createTokenAuth = createTokenAuth;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar universalUserAgent = require('universal-user-agent');\nvar beforeAfterHook = require('before-after-hook');\nvar request = require('@octokit/request');\nvar graphql = require('@octokit/graphql');\nvar authToken = require('@octokit/auth-token');\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nconst VERSION = \"3.2.1\";\n\nclass Octokit {\n constructor(options = {}) {\n const hook = new beforeAfterHook.Collection();\n const requestDefaults = {\n baseUrl: request.request.endpoint.DEFAULTS.baseUrl,\n headers: {},\n request: Object.assign({}, options.request, {\n hook: hook.bind(null, \"request\")\n }),\n mediaType: {\n previews: [],\n format: \"\"\n }\n }; // prepend default user agent with `options.userAgent` if set\n\n requestDefaults.headers[\"user-agent\"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(\" \");\n\n if (options.baseUrl) {\n requestDefaults.baseUrl = options.baseUrl;\n }\n\n if (options.previews) {\n requestDefaults.mediaType.previews = options.previews;\n }\n\n if (options.timeZone) {\n requestDefaults.headers[\"time-zone\"] = options.timeZone;\n }\n\n this.request = request.request.defaults(requestDefaults);\n this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults);\n this.log = Object.assign({\n debug: () => {},\n info: () => {},\n warn: console.warn.bind(console),\n error: console.error.bind(console)\n }, options.log);\n this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance\n // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered.\n // (2) If only `options.auth` is set, use the default token authentication strategy.\n // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance.\n // TODO: type `options.auth` based on `options.authStrategy`.\n\n if (!options.authStrategy) {\n if (!options.auth) {\n // (1)\n this.auth = async () => ({\n type: \"unauthenticated\"\n });\n } else {\n // (2)\n const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\\_(ツ)_/¯\n\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n }\n } else {\n const {\n authStrategy\n } = options,\n otherOptions = _objectWithoutProperties(options, [\"authStrategy\"]);\n\n const auth = authStrategy(Object.assign({\n request: this.request,\n log: this.log,\n // we pass the current octokit instance as well as its constructor options\n // to allow for authentication strategies that return a new octokit instance\n // that shares the same internal state as the current one. The original\n // requirement for this was the \"event-octokit\" authentication strategy\n // of https://github.com/probot/octokit-auth-probot.\n octokit: this,\n octokitOptions: otherOptions\n }, options.auth)); // @ts-ignore ¯\\_(ツ)_/¯\n\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n } // apply plugins\n // https://stackoverflow.com/a/16345172\n\n\n const classConstructor = this.constructor;\n classConstructor.plugins.forEach(plugin => {\n Object.assign(this, plugin(this, options));\n });\n }\n\n static defaults(defaults) {\n const OctokitWithDefaults = class extends this {\n constructor(...args) {\n const options = args[0] || {};\n\n if (typeof defaults === \"function\") {\n super(defaults(options));\n return;\n }\n\n super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {\n userAgent: `${options.userAgent} ${defaults.userAgent}`\n } : null));\n }\n\n };\n return OctokitWithDefaults;\n }\n /**\n * Attach a plugin (or many) to your Octokit instance.\n *\n * @example\n * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)\n */\n\n\n static plugin(...newPlugins) {\n var _a;\n\n const currentPlugins = this.plugins;\n const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a);\n return NewOctokit;\n }\n\n}\nOctokit.VERSION = VERSION;\nOctokit.plugins = [];\n\nexports.Octokit = Octokit;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isPlainObject = require('is-plain-object');\nvar universalUserAgent = require('universal-user-agent');\n\nfunction lowercaseKeys(object) {\n if (!object) {\n return {};\n }\n\n return Object.keys(object).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = object[key];\n return newObj;\n }, {});\n}\n\nfunction mergeDeep(defaults, options) {\n const result = Object.assign({}, defaults);\n Object.keys(options).forEach(key => {\n if (isPlainObject.isPlainObject(options[key])) {\n if (!(key in defaults)) Object.assign(result, {\n [key]: options[key]\n });else result[key] = mergeDeep(defaults[key], options[key]);\n } else {\n Object.assign(result, {\n [key]: options[key]\n });\n }\n });\n return result;\n}\n\nfunction removeUndefinedProperties(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n\n return obj;\n}\n\nfunction merge(defaults, route, options) {\n if (typeof route === \"string\") {\n let [method, url] = route.split(\" \");\n options = Object.assign(url ? {\n method,\n url\n } : {\n url: method\n }, options);\n } else {\n options = Object.assign({}, route);\n } // lowercase header names before merging with defaults to avoid duplicates\n\n\n options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging\n\n removeUndefinedProperties(options);\n removeUndefinedProperties(options.headers);\n const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten\n\n if (defaults && defaults.mediaType.previews.length) {\n mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);\n }\n\n mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, \"\"));\n return mergedOptions;\n}\n\nfunction addQueryParameters(url, parameters) {\n const separator = /\\?/.test(url) ? \"&\" : \"?\";\n const names = Object.keys(parameters);\n\n if (names.length === 0) {\n return url;\n }\n\n return url + separator + names.map(name => {\n if (name === \"q\") {\n return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n }\n\n return `${name}=${encodeURIComponent(parameters[name])}`;\n }).join(\"&\");\n}\n\nconst urlVariableRegex = /\\{[^}]+\\}/g;\n\nfunction removeNonChars(variableName) {\n return variableName.replace(/^\\W+|\\W+$/g, \"\").split(/,/);\n}\n\nfunction extractUrlVariableNames(url) {\n const matches = url.match(urlVariableRegex);\n\n if (!matches) {\n return [];\n }\n\n return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\nfunction omit(object, keysToOmit) {\n return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {\n obj[key] = object[key];\n return obj;\n }, {});\n}\n\n// Based on https://github.com/bramstein/url-template, licensed under BSD\n// TODO: create separate package.\n//\n// Copyright (c) 2012-2014, Bram Stein\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n// 1. Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// 3. The name of the author may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/* istanbul ignore file */\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n }\n\n return part;\n }).join(\"\");\n}\n\nfunction encodeUnreserved(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\nfunction encodeValue(operator, value, key) {\n value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n\n if (key) {\n return encodeUnreserved(key) + \"=\" + value;\n } else {\n return value;\n }\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nfunction isKeyOperator(operator) {\n return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\n\nfunction getValues(context, operator, key, modifier) {\n var value = context[key],\n result = [];\n\n if (isDefined(value) && value !== \"\") {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n value = value.toString();\n\n if (modifier && modifier !== \"*\") {\n value = value.substring(0, parseInt(modifier, 10));\n }\n\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n } else {\n if (modifier === \"*\") {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n const tmp = [];\n\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n tmp.push(encodeValue(operator, value));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n tmp.push(encodeUnreserved(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n\n if (isKeyOperator(operator)) {\n result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(\",\"));\n }\n }\n }\n } else {\n if (operator === \";\") {\n if (isDefined(value)) {\n result.push(encodeUnreserved(key));\n }\n } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n result.push(encodeUnreserved(key) + \"=\");\n } else if (value === \"\") {\n result.push(\"\");\n }\n }\n\n return result;\n}\n\nfunction parseUrl(template) {\n return {\n expand: expand.bind(null, template)\n };\n}\n\nfunction expand(template, context) {\n var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n return template.replace(/\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g, function (_, expression, literal) {\n if (expression) {\n let operator = \"\";\n const values = [];\n\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n\n expression.split(/,/g).forEach(function (variable) {\n var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n });\n\n if (operator && operator !== \"+\") {\n var separator = \",\";\n\n if (operator === \"?\") {\n separator = \"&\";\n } else if (operator !== \"#\") {\n separator = operator;\n }\n\n return (values.length !== 0 ? operator : \"\") + values.join(separator);\n } else {\n return values.join(\",\");\n }\n } else {\n return encodeReserved(literal);\n }\n });\n}\n\nfunction parse(options) {\n // https://fetch.spec.whatwg.org/#methods\n let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible\n\n let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n let headers = Object.assign({}, options.headers);\n let body;\n let parameters = omit(options, [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"mediaType\"]); // extract variable names from URL to calculate remaining variables later\n\n const urlVariableNames = extractUrlVariableNames(url);\n url = parseUrl(url).expand(parameters);\n\n if (!/^http/.test(url)) {\n url = options.baseUrl + url;\n }\n\n const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat(\"baseUrl\");\n const remainingParameters = omit(parameters, omittedParameters);\n const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n\n if (!isBinaryRequest) {\n if (options.mediaType.format) {\n // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw\n headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(\",\");\n }\n\n if (options.mediaType.previews.length) {\n const previewsFromAcceptHeader = headers.accept.match(/[\\w-]+(?=-preview)/g) || [];\n headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {\n const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n return `application/vnd.github.${preview}-preview${format}`;\n }).join(\",\");\n }\n } // for GET/HEAD requests, set URL query parameters from remaining parameters\n // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters\n\n\n if ([\"GET\", \"HEAD\"].includes(method)) {\n url = addQueryParameters(url, remainingParameters);\n } else {\n if (\"data\" in remainingParameters) {\n body = remainingParameters.data;\n } else {\n if (Object.keys(remainingParameters).length) {\n body = remainingParameters;\n } else {\n headers[\"content-length\"] = 0;\n }\n }\n } // default content-type for JSON if body is set\n\n\n if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json; charset=utf-8\";\n } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.\n // fetch does not allow to set `content-length` header, but we can set body to an empty string\n\n\n if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n body = \"\";\n } // Only return body/request keys if present\n\n\n return Object.assign({\n method,\n url,\n headers\n }, typeof body !== \"undefined\" ? {\n body\n } : null, options.request ? {\n request: options.request\n } : null);\n}\n\nfunction endpointWithDefaults(defaults, route, options) {\n return parse(merge(defaults, route, options));\n}\n\nfunction withDefaults(oldDefaults, newDefaults) {\n const DEFAULTS = merge(oldDefaults, newDefaults);\n const endpoint = endpointWithDefaults.bind(null, DEFAULTS);\n return Object.assign(endpoint, {\n DEFAULTS,\n defaults: withDefaults.bind(null, DEFAULTS),\n merge: merge.bind(null, DEFAULTS),\n parse\n });\n}\n\nconst VERSION = \"6.0.9\";\n\nconst userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.\n// So we use RequestParameters and add method as additional required property.\n\nconst DEFAULTS = {\n method: \"GET\",\n baseUrl: \"https://api.github.com\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"user-agent\": userAgent\n },\n mediaType: {\n format: \"\",\n previews: []\n }\n};\n\nconst endpoint = withDefaults(null, DEFAULTS);\n\nexports.endpoint = endpoint;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar request = require('@octokit/request');\nvar universalUserAgent = require('universal-user-agent');\n\nconst VERSION = \"4.5.7\";\n\nclass GraphqlError extends Error {\n constructor(request, response) {\n const message = response.data.errors[0].message;\n super(message);\n Object.assign(this, response.data);\n Object.assign(this, {\n headers: response.headers\n });\n this.name = \"GraphqlError\";\n this.request = request; // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n}\n\nconst NON_VARIABLE_OPTIONS = [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"query\", \"mediaType\"];\nconst GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request, query, options) {\n if (typeof query === \"string\" && options && \"query\" in options) {\n return Promise.reject(new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`));\n }\n\n const parsedOptions = typeof query === \"string\" ? Object.assign({\n query\n }, options) : query;\n const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {\n if (NON_VARIABLE_OPTIONS.includes(key)) {\n result[key] = parsedOptions[key];\n return result;\n }\n\n if (!result.variables) {\n result.variables = {};\n }\n\n result.variables[key] = parsedOptions[key];\n return result;\n }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix\n // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451\n\n const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;\n\n if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n }\n\n return request(requestOptions).then(response => {\n if (response.data.errors) {\n const headers = {};\n\n for (const key of Object.keys(response.headers)) {\n headers[key] = response.headers[key];\n }\n\n throw new GraphqlError(requestOptions, {\n headers,\n data: response.data\n });\n }\n\n return response.data.data;\n });\n}\n\nfunction withDefaults(request$1, newDefaults) {\n const newRequest = request$1.defaults(newDefaults);\n\n const newApi = (query, options) => {\n return graphql(newRequest, query, options);\n };\n\n return Object.assign(newApi, {\n defaults: withDefaults.bind(null, newRequest),\n endpoint: request.request.endpoint\n });\n}\n\nconst graphql$1 = withDefaults(request.request, {\n headers: {\n \"user-agent\": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n },\n method: \"POST\",\n url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n return withDefaults(customRequest, {\n method: \"POST\",\n url: \"/graphql\"\n });\n}\n\nexports.graphql = graphql$1;\nexports.withCustomRequest = withCustomRequest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst VERSION = \"2.6.0\";\n\n/**\n * Some “list” response that can be paginated have a different response structure\n *\n * They have a `total_count` key in the response (search also has `incomplete_results`,\n * /installation/repositories also has `repository_selection`), as well as a key with\n * the list of the items which name varies from endpoint to endpoint.\n *\n * Octokit normalizes these responses so that paginated results are always returned following\n * the same structure. One challenge is that if the list response has only one page, no Link\n * header is provided, so this header alone is not sufficient to check wether a response is\n * paginated or not.\n *\n * We check if a \"total_count\" key is present in the response data, but also make sure that\n * a \"url\" property is not, as the \"Get the combined status for a specific ref\" endpoint would\n * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref\n */\nfunction normalizePaginatedListResponse(response) {\n const responseNeedsNormalization = \"total_count\" in response.data && !(\"url\" in response.data);\n if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way\n // to retrieve the same information.\n\n const incompleteResults = response.data.incomplete_results;\n const repositorySelection = response.data.repository_selection;\n const totalCount = response.data.total_count;\n delete response.data.incomplete_results;\n delete response.data.repository_selection;\n delete response.data.total_count;\n const namespaceKey = Object.keys(response.data)[0];\n const data = response.data[namespaceKey];\n response.data = data;\n\n if (typeof incompleteResults !== \"undefined\") {\n response.data.incomplete_results = incompleteResults;\n }\n\n if (typeof repositorySelection !== \"undefined\") {\n response.data.repository_selection = repositorySelection;\n }\n\n response.data.total_count = totalCount;\n return response;\n}\n\nfunction iterator(octokit, route, parameters) {\n const options = typeof route === \"function\" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);\n const requestMethod = typeof route === \"function\" ? route : octokit.request;\n const method = options.method;\n const headers = options.headers;\n let url = options.url;\n return {\n [Symbol.asyncIterator]: () => ({\n async next() {\n if (!url) return {\n done: true\n };\n const response = await requestMethod({\n method,\n url,\n headers\n });\n const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format:\n // '; rel=\"next\", ; rel=\"last\"'\n // sets `url` to undefined if \"next\" URL is not present or `link` header is not set\n\n url = ((normalizedResponse.headers.link || \"\").match(/<([^>]+)>;\\s*rel=\"next\"/) || [])[1];\n return {\n value: normalizedResponse\n };\n }\n\n })\n };\n}\n\nfunction paginate(octokit, route, parameters, mapFn) {\n if (typeof parameters === \"function\") {\n mapFn = parameters;\n parameters = undefined;\n }\n\n return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);\n}\n\nfunction gather(octokit, results, iterator, mapFn) {\n return iterator.next().then(result => {\n if (result.done) {\n return results;\n }\n\n let earlyExit = false;\n\n function done() {\n earlyExit = true;\n }\n\n results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);\n\n if (earlyExit) {\n return results;\n }\n\n return gather(octokit, results, iterator, mapFn);\n });\n}\n\nconst composePaginateRest = Object.assign(paginate, {\n iterator\n});\n\n/**\n * @param octokit Octokit instance\n * @param options Options passed to Octokit constructor\n */\n\nfunction paginateRest(octokit) {\n return {\n paginate: Object.assign(paginate.bind(null, octokit), {\n iterator: iterator.bind(null, octokit)\n })\n };\n}\npaginateRest.VERSION = VERSION;\n\nexports.composePaginateRest = composePaginateRest;\nexports.paginateRest = paginateRest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst Endpoints = {\n actions: {\n addSelectedRepoToOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"],\n cancelWorkflowRun: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\"],\n createOrUpdateOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}\"],\n createOrUpdateRepoSecret: [\"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n createRegistrationTokenForOrg: [\"POST /orgs/{org}/actions/runners/registration-token\"],\n createRegistrationTokenForRepo: [\"POST /repos/{owner}/{repo}/actions/runners/registration-token\"],\n createRemoveTokenForOrg: [\"POST /orgs/{org}/actions/runners/remove-token\"],\n createRemoveTokenForRepo: [\"POST /repos/{owner}/{repo}/actions/runners/remove-token\"],\n createWorkflowDispatch: [\"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\"],\n deleteArtifact: [\"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n deleteOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}\"],\n deleteRepoSecret: [\"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n deleteSelfHostedRunnerFromOrg: [\"DELETE /orgs/{org}/actions/runners/{runner_id}\"],\n deleteSelfHostedRunnerFromRepo: [\"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\"],\n deleteWorkflowRun: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n deleteWorkflowRunLogs: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"],\n downloadArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\"],\n downloadJobLogsForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\"],\n downloadWorkflowRunLogs: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"],\n getArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n getJobForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/actions/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}\"],\n getRepoPublicKey: [\"GET /repos/{owner}/{repo}/actions/secrets/public-key\"],\n getRepoSecret: [\"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n getSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}\"],\n getSelfHostedRunnerForRepo: [\"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\"],\n getWorkflow: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\"],\n getWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n getWorkflowRunUsage: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\"],\n getWorkflowUsage: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\"],\n listArtifactsForRepo: [\"GET /repos/{owner}/{repo}/actions/artifacts\"],\n listJobsForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\"],\n listOrgSecrets: [\"GET /orgs/{org}/actions/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/actions/secrets\"],\n listRepoWorkflows: [\"GET /repos/{owner}/{repo}/actions/workflows\"],\n listRunnerApplicationsForOrg: [\"GET /orgs/{org}/actions/runners/downloads\"],\n listRunnerApplicationsForRepo: [\"GET /repos/{owner}/{repo}/actions/runners/downloads\"],\n listSelectedReposForOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\"],\n listSelfHostedRunnersForOrg: [\"GET /orgs/{org}/actions/runners\"],\n listSelfHostedRunnersForRepo: [\"GET /repos/{owner}/{repo}/actions/runners\"],\n listWorkflowRunArtifacts: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\"],\n listWorkflowRuns: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\"],\n listWorkflowRunsForRepo: [\"GET /repos/{owner}/{repo}/actions/runs\"],\n reRunWorkflow: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\"],\n removeSelectedRepoFromOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"],\n setSelectedReposForOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\"]\n },\n activity: {\n checkRepoIsStarredByAuthenticatedUser: [\"GET /user/starred/{owner}/{repo}\"],\n deleteRepoSubscription: [\"DELETE /repos/{owner}/{repo}/subscription\"],\n deleteThreadSubscription: [\"DELETE /notifications/threads/{thread_id}/subscription\"],\n getFeeds: [\"GET /feeds\"],\n getRepoSubscription: [\"GET /repos/{owner}/{repo}/subscription\"],\n getThread: [\"GET /notifications/threads/{thread_id}\"],\n getThreadSubscriptionForAuthenticatedUser: [\"GET /notifications/threads/{thread_id}/subscription\"],\n listEventsForAuthenticatedUser: [\"GET /users/{username}/events\"],\n listNotificationsForAuthenticatedUser: [\"GET /notifications\"],\n listOrgEventsForAuthenticatedUser: [\"GET /users/{username}/events/orgs/{org}\"],\n listPublicEvents: [\"GET /events\"],\n listPublicEventsForRepoNetwork: [\"GET /networks/{owner}/{repo}/events\"],\n listPublicEventsForUser: [\"GET /users/{username}/events/public\"],\n listPublicOrgEvents: [\"GET /orgs/{org}/events\"],\n listReceivedEventsForUser: [\"GET /users/{username}/received_events\"],\n listReceivedPublicEventsForUser: [\"GET /users/{username}/received_events/public\"],\n listRepoEvents: [\"GET /repos/{owner}/{repo}/events\"],\n listRepoNotificationsForAuthenticatedUser: [\"GET /repos/{owner}/{repo}/notifications\"],\n listReposStarredByAuthenticatedUser: [\"GET /user/starred\"],\n listReposStarredByUser: [\"GET /users/{username}/starred\"],\n listReposWatchedByUser: [\"GET /users/{username}/subscriptions\"],\n listStargazersForRepo: [\"GET /repos/{owner}/{repo}/stargazers\"],\n listWatchedReposForAuthenticatedUser: [\"GET /user/subscriptions\"],\n listWatchersForRepo: [\"GET /repos/{owner}/{repo}/subscribers\"],\n markNotificationsAsRead: [\"PUT /notifications\"],\n markRepoNotificationsAsRead: [\"PUT /repos/{owner}/{repo}/notifications\"],\n markThreadAsRead: [\"PATCH /notifications/threads/{thread_id}\"],\n setRepoSubscription: [\"PUT /repos/{owner}/{repo}/subscription\"],\n setThreadSubscription: [\"PUT /notifications/threads/{thread_id}/subscription\"],\n starRepoForAuthenticatedUser: [\"PUT /user/starred/{owner}/{repo}\"],\n unstarRepoForAuthenticatedUser: [\"DELETE /user/starred/{owner}/{repo}\"]\n },\n apps: {\n addRepoToInstallation: [\"PUT /user/installations/{installation_id}/repositories/{repository_id}\"],\n checkToken: [\"POST /applications/{client_id}/token\"],\n createContentAttachment: [\"POST /content_references/{content_reference_id}/attachments\", {\n mediaType: {\n previews: [\"corsair\"]\n }\n }],\n createFromManifest: [\"POST /app-manifests/{code}/conversions\"],\n createInstallationAccessToken: [\"POST /app/installations/{installation_id}/access_tokens\"],\n deleteAuthorization: [\"DELETE /applications/{client_id}/grant\"],\n deleteInstallation: [\"DELETE /app/installations/{installation_id}\"],\n deleteToken: [\"DELETE /applications/{client_id}/token\"],\n getAuthenticated: [\"GET /app\"],\n getBySlug: [\"GET /apps/{app_slug}\"],\n getInstallation: [\"GET /app/installations/{installation_id}\"],\n getOrgInstallation: [\"GET /orgs/{org}/installation\"],\n getRepoInstallation: [\"GET /repos/{owner}/{repo}/installation\"],\n getSubscriptionPlanForAccount: [\"GET /marketplace_listing/accounts/{account_id}\"],\n getSubscriptionPlanForAccountStubbed: [\"GET /marketplace_listing/stubbed/accounts/{account_id}\"],\n getUserInstallation: [\"GET /users/{username}/installation\"],\n listAccountsForPlan: [\"GET /marketplace_listing/plans/{plan_id}/accounts\"],\n listAccountsForPlanStubbed: [\"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\"],\n listInstallationReposForAuthenticatedUser: [\"GET /user/installations/{installation_id}/repositories\"],\n listInstallations: [\"GET /app/installations\"],\n listInstallationsForAuthenticatedUser: [\"GET /user/installations\"],\n listPlans: [\"GET /marketplace_listing/plans\"],\n listPlansStubbed: [\"GET /marketplace_listing/stubbed/plans\"],\n listReposAccessibleToInstallation: [\"GET /installation/repositories\"],\n listSubscriptionsForAuthenticatedUser: [\"GET /user/marketplace_purchases\"],\n listSubscriptionsForAuthenticatedUserStubbed: [\"GET /user/marketplace_purchases/stubbed\"],\n removeRepoFromInstallation: [\"DELETE /user/installations/{installation_id}/repositories/{repository_id}\"],\n resetToken: [\"PATCH /applications/{client_id}/token\"],\n revokeInstallationAccessToken: [\"DELETE /installation/token\"],\n suspendInstallation: [\"PUT /app/installations/{installation_id}/suspended\"],\n unsuspendInstallation: [\"DELETE /app/installations/{installation_id}/suspended\"]\n },\n billing: {\n getGithubActionsBillingOrg: [\"GET /orgs/{org}/settings/billing/actions\"],\n getGithubActionsBillingUser: [\"GET /users/{username}/settings/billing/actions\"],\n getGithubPackagesBillingOrg: [\"GET /orgs/{org}/settings/billing/packages\"],\n getGithubPackagesBillingUser: [\"GET /users/{username}/settings/billing/packages\"],\n getSharedStorageBillingOrg: [\"GET /orgs/{org}/settings/billing/shared-storage\"],\n getSharedStorageBillingUser: [\"GET /users/{username}/settings/billing/shared-storage\"]\n },\n checks: {\n create: [\"POST /repos/{owner}/{repo}/check-runs\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n createSuite: [\"POST /repos/{owner}/{repo}/check-suites\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n get: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n getSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n listAnnotations: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n listForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n listForSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n listSuitesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n rerequestSuite: [\"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n setSuitesPreferences: [\"PATCH /repos/{owner}/{repo}/check-suites/preferences\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }],\n update: [\"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\", {\n mediaType: {\n previews: [\"antiope\"]\n }\n }]\n },\n codeScanning: {\n getAlert: [\"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\", {}, {\n renamedParameters: {\n alert_id: \"alert_number\"\n }\n }],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/code-scanning/alerts\"],\n listRecentAnalyses: [\"GET /repos/{owner}/{repo}/code-scanning/analyses\"],\n updateAlert: [\"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\"],\n uploadSarif: [\"POST /repos/{owner}/{repo}/code-scanning/sarifs\"]\n },\n codesOfConduct: {\n getAllCodesOfConduct: [\"GET /codes_of_conduct\", {\n mediaType: {\n previews: [\"scarlet-witch\"]\n }\n }],\n getConductCode: [\"GET /codes_of_conduct/{key}\", {\n mediaType: {\n previews: [\"scarlet-witch\"]\n }\n }],\n getForRepo: [\"GET /repos/{owner}/{repo}/community/code_of_conduct\", {\n mediaType: {\n previews: [\"scarlet-witch\"]\n }\n }]\n },\n emojis: {\n get: [\"GET /emojis\"]\n },\n gists: {\n checkIsStarred: [\"GET /gists/{gist_id}/star\"],\n create: [\"POST /gists\"],\n createComment: [\"POST /gists/{gist_id}/comments\"],\n delete: [\"DELETE /gists/{gist_id}\"],\n deleteComment: [\"DELETE /gists/{gist_id}/comments/{comment_id}\"],\n fork: [\"POST /gists/{gist_id}/forks\"],\n get: [\"GET /gists/{gist_id}\"],\n getComment: [\"GET /gists/{gist_id}/comments/{comment_id}\"],\n getRevision: [\"GET /gists/{gist_id}/{sha}\"],\n list: [\"GET /gists\"],\n listComments: [\"GET /gists/{gist_id}/comments\"],\n listCommits: [\"GET /gists/{gist_id}/commits\"],\n listForUser: [\"GET /users/{username}/gists\"],\n listForks: [\"GET /gists/{gist_id}/forks\"],\n listPublic: [\"GET /gists/public\"],\n listStarred: [\"GET /gists/starred\"],\n star: [\"PUT /gists/{gist_id}/star\"],\n unstar: [\"DELETE /gists/{gist_id}/star\"],\n update: [\"PATCH /gists/{gist_id}\"],\n updateComment: [\"PATCH /gists/{gist_id}/comments/{comment_id}\"]\n },\n git: {\n createBlob: [\"POST /repos/{owner}/{repo}/git/blobs\"],\n createCommit: [\"POST /repos/{owner}/{repo}/git/commits\"],\n createRef: [\"POST /repos/{owner}/{repo}/git/refs\"],\n createTag: [\"POST /repos/{owner}/{repo}/git/tags\"],\n createTree: [\"POST /repos/{owner}/{repo}/git/trees\"],\n deleteRef: [\"DELETE /repos/{owner}/{repo}/git/refs/{ref}\"],\n getBlob: [\"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\"],\n getCommit: [\"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\"],\n getRef: [\"GET /repos/{owner}/{repo}/git/ref/{ref}\"],\n getTag: [\"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\"],\n getTree: [\"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\"],\n listMatchingRefs: [\"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\"],\n updateRef: [\"PATCH /repos/{owner}/{repo}/git/refs/{ref}\"]\n },\n gitignore: {\n getAllTemplates: [\"GET /gitignore/templates\"],\n getTemplate: [\"GET /gitignore/templates/{name}\"]\n },\n interactions: {\n getRestrictionsForOrg: [\"GET /orgs/{org}/interaction-limits\", {\n mediaType: {\n previews: [\"sombra\"]\n }\n }],\n getRestrictionsForRepo: [\"GET /repos/{owner}/{repo}/interaction-limits\", {\n mediaType: {\n previews: [\"sombra\"]\n }\n }],\n removeRestrictionsForOrg: [\"DELETE /orgs/{org}/interaction-limits\", {\n mediaType: {\n previews: [\"sombra\"]\n }\n }],\n removeRestrictionsForRepo: [\"DELETE /repos/{owner}/{repo}/interaction-limits\", {\n mediaType: {\n previews: [\"sombra\"]\n }\n }],\n setRestrictionsForOrg: [\"PUT /orgs/{org}/interaction-limits\", {\n mediaType: {\n previews: [\"sombra\"]\n }\n }],\n setRestrictionsForRepo: [\"PUT /repos/{owner}/{repo}/interaction-limits\", {\n mediaType: {\n previews: [\"sombra\"]\n }\n }]\n },\n issues: {\n addAssignees: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\"],\n addLabels: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n checkUserCanBeAssigned: [\"GET /repos/{owner}/{repo}/assignees/{assignee}\"],\n create: [\"POST /repos/{owner}/{repo}/issues\"],\n createComment: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n createLabel: [\"POST /repos/{owner}/{repo}/labels\"],\n createMilestone: [\"POST /repos/{owner}/{repo}/milestones\"],\n deleteComment: [\"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n deleteLabel: [\"DELETE /repos/{owner}/{repo}/labels/{name}\"],\n deleteMilestone: [\"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n get: [\"GET /repos/{owner}/{repo}/issues/{issue_number}\"],\n getComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n getEvent: [\"GET /repos/{owner}/{repo}/issues/events/{event_id}\"],\n getLabel: [\"GET /repos/{owner}/{repo}/labels/{name}\"],\n getMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n list: [\"GET /issues\"],\n listAssignees: [\"GET /repos/{owner}/{repo}/assignees\"],\n listComments: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n listCommentsForRepo: [\"GET /repos/{owner}/{repo}/issues/comments\"],\n listEvents: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/events\"],\n listEventsForRepo: [\"GET /repos/{owner}/{repo}/issues/events\"],\n listEventsForTimeline: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\", {\n mediaType: {\n previews: [\"mockingbird\"]\n }\n }],\n listForAuthenticatedUser: [\"GET /user/issues\"],\n listForOrg: [\"GET /orgs/{org}/issues\"],\n listForRepo: [\"GET /repos/{owner}/{repo}/issues\"],\n listLabelsForMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\"],\n listLabelsForRepo: [\"GET /repos/{owner}/{repo}/labels\"],\n listLabelsOnIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n listMilestones: [\"GET /repos/{owner}/{repo}/milestones\"],\n lock: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n removeAllLabels: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n removeAssignees: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\"],\n removeLabel: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\"],\n setLabels: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n unlock: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n update: [\"PATCH /repos/{owner}/{repo}/issues/{issue_number}\"],\n updateComment: [\"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n updateLabel: [\"PATCH /repos/{owner}/{repo}/labels/{name}\"],\n updateMilestone: [\"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\"]\n },\n licenses: {\n get: [\"GET /licenses/{license}\"],\n getAllCommonlyUsed: [\"GET /licenses\"],\n getForRepo: [\"GET /repos/{owner}/{repo}/license\"]\n },\n markdown: {\n render: [\"POST /markdown\"],\n renderRaw: [\"POST /markdown/raw\", {\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\"\n }\n }]\n },\n meta: {\n get: [\"GET /meta\"]\n },\n migrations: {\n cancelImport: [\"DELETE /repos/{owner}/{repo}/import\"],\n deleteArchiveForAuthenticatedUser: [\"DELETE /user/migrations/{migration_id}/archive\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n deleteArchiveForOrg: [\"DELETE /orgs/{org}/migrations/{migration_id}/archive\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n downloadArchiveForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/archive\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n getArchiveForAuthenticatedUser: [\"GET /user/migrations/{migration_id}/archive\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n getCommitAuthors: [\"GET /repos/{owner}/{repo}/import/authors\"],\n getImportStatus: [\"GET /repos/{owner}/{repo}/import\"],\n getLargeFiles: [\"GET /repos/{owner}/{repo}/import/large_files\"],\n getStatusForAuthenticatedUser: [\"GET /user/migrations/{migration_id}\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n getStatusForOrg: [\"GET /orgs/{org}/migrations/{migration_id}\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n listForAuthenticatedUser: [\"GET /user/migrations\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n listForOrg: [\"GET /orgs/{org}/migrations\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n listReposForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/repositories\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n listReposForUser: [\"GET /user/migrations/{migration_id}/repositories\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n mapCommitAuthor: [\"PATCH /repos/{owner}/{repo}/import/authors/{author_id}\"],\n setLfsPreference: [\"PATCH /repos/{owner}/{repo}/import/lfs\"],\n startForAuthenticatedUser: [\"POST /user/migrations\"],\n startForOrg: [\"POST /orgs/{org}/migrations\"],\n startImport: [\"PUT /repos/{owner}/{repo}/import\"],\n unlockRepoForAuthenticatedUser: [\"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n unlockRepoForOrg: [\"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock\", {\n mediaType: {\n previews: [\"wyandotte\"]\n }\n }],\n updateImport: [\"PATCH /repos/{owner}/{repo}/import\"]\n },\n orgs: {\n blockUser: [\"PUT /orgs/{org}/blocks/{username}\"],\n checkBlockedUser: [\"GET /orgs/{org}/blocks/{username}\"],\n checkMembershipForUser: [\"GET /orgs/{org}/members/{username}\"],\n checkPublicMembershipForUser: [\"GET /orgs/{org}/public_members/{username}\"],\n convertMemberToOutsideCollaborator: [\"PUT /orgs/{org}/outside_collaborators/{username}\"],\n createInvitation: [\"POST /orgs/{org}/invitations\"],\n createWebhook: [\"POST /orgs/{org}/hooks\"],\n deleteWebhook: [\"DELETE /orgs/{org}/hooks/{hook_id}\"],\n get: [\"GET /orgs/{org}\"],\n getMembershipForAuthenticatedUser: [\"GET /user/memberships/orgs/{org}\"],\n getMembershipForUser: [\"GET /orgs/{org}/memberships/{username}\"],\n getWebhook: [\"GET /orgs/{org}/hooks/{hook_id}\"],\n list: [\"GET /organizations\"],\n listAppInstallations: [\"GET /orgs/{org}/installations\"],\n listBlockedUsers: [\"GET /orgs/{org}/blocks\"],\n listForAuthenticatedUser: [\"GET /user/orgs\"],\n listForUser: [\"GET /users/{username}/orgs\"],\n listInvitationTeams: [\"GET /orgs/{org}/invitations/{invitation_id}/teams\"],\n listMembers: [\"GET /orgs/{org}/members\"],\n listMembershipsForAuthenticatedUser: [\"GET /user/memberships/orgs\"],\n listOutsideCollaborators: [\"GET /orgs/{org}/outside_collaborators\"],\n listPendingInvitations: [\"GET /orgs/{org}/invitations\"],\n listPublicMembers: [\"GET /orgs/{org}/public_members\"],\n listWebhooks: [\"GET /orgs/{org}/hooks\"],\n pingWebhook: [\"POST /orgs/{org}/hooks/{hook_id}/pings\"],\n removeMember: [\"DELETE /orgs/{org}/members/{username}\"],\n removeMembershipForUser: [\"DELETE /orgs/{org}/memberships/{username}\"],\n removeOutsideCollaborator: [\"DELETE /orgs/{org}/outside_collaborators/{username}\"],\n removePublicMembershipForAuthenticatedUser: [\"DELETE /orgs/{org}/public_members/{username}\"],\n setMembershipForUser: [\"PUT /orgs/{org}/memberships/{username}\"],\n setPublicMembershipForAuthenticatedUser: [\"PUT /orgs/{org}/public_members/{username}\"],\n unblockUser: [\"DELETE /orgs/{org}/blocks/{username}\"],\n update: [\"PATCH /orgs/{org}\"],\n updateMembershipForAuthenticatedUser: [\"PATCH /user/memberships/orgs/{org}\"],\n updateWebhook: [\"PATCH /orgs/{org}/hooks/{hook_id}\"]\n },\n projects: {\n addCollaborator: [\"PUT /projects/{project_id}/collaborators/{username}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n createCard: [\"POST /projects/columns/{column_id}/cards\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n createColumn: [\"POST /projects/{project_id}/columns\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n createForAuthenticatedUser: [\"POST /user/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n createForOrg: [\"POST /orgs/{org}/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n createForRepo: [\"POST /repos/{owner}/{repo}/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n delete: [\"DELETE /projects/{project_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n deleteCard: [\"DELETE /projects/columns/cards/{card_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n deleteColumn: [\"DELETE /projects/columns/{column_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n get: [\"GET /projects/{project_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n getCard: [\"GET /projects/columns/cards/{card_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n getColumn: [\"GET /projects/columns/{column_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n getPermissionForUser: [\"GET /projects/{project_id}/collaborators/{username}/permission\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listCards: [\"GET /projects/columns/{column_id}/cards\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listCollaborators: [\"GET /projects/{project_id}/collaborators\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listColumns: [\"GET /projects/{project_id}/columns\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listForOrg: [\"GET /orgs/{org}/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listForRepo: [\"GET /repos/{owner}/{repo}/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listForUser: [\"GET /users/{username}/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n moveCard: [\"POST /projects/columns/cards/{card_id}/moves\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n moveColumn: [\"POST /projects/columns/{column_id}/moves\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n removeCollaborator: [\"DELETE /projects/{project_id}/collaborators/{username}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n update: [\"PATCH /projects/{project_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n updateCard: [\"PATCH /projects/columns/cards/{card_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n updateColumn: [\"PATCH /projects/columns/{column_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }]\n },\n pulls: {\n checkIfMerged: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n create: [\"POST /repos/{owner}/{repo}/pulls\"],\n createReplyForReviewComment: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\"],\n createReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n createReviewComment: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\"],\n deletePendingReview: [\"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"],\n deleteReviewComment: [\"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n dismissReview: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\"],\n get: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}\"],\n getReview: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"],\n getReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n list: [\"GET /repos/{owner}/{repo}/pulls\"],\n listCommentsForReview: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\"],\n listCommits: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\"],\n listFiles: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\"],\n listRequestedReviewers: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"],\n listReviewComments: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\"],\n listReviewCommentsForRepo: [\"GET /repos/{owner}/{repo}/pulls/comments\"],\n listReviews: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n merge: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n removeRequestedReviewers: [\"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"],\n requestReviewers: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"],\n submitReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\"],\n update: [\"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\"],\n updateBranch: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\", {\n mediaType: {\n previews: [\"lydian\"]\n }\n }],\n updateReview: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"],\n updateReviewComment: [\"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\"]\n },\n rateLimit: {\n get: [\"GET /rate_limit\"]\n },\n reactions: {\n createForCommitComment: [\"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n createForIssue: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n createForIssueComment: [\"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n createForPullRequestReviewComment: [\"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n createForTeamDiscussionCommentInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n createForTeamDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteForCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteForIssue: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteForIssueComment: [\"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteForPullRequestComment: [\"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteForTeamDiscussion: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteForTeamDiscussionComment: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n deleteLegacy: [\"DELETE /reactions/{reaction_id}\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }, {\n deprecated: \"octokit.reactions.deleteLegacy() is deprecated, see https://developer.github.com/v3/reactions/#delete-a-reaction-legacy\"\n }],\n listForCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n listForIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n listForIssueComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n listForPullRequestReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n listForTeamDiscussionCommentInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }],\n listForTeamDiscussionInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\", {\n mediaType: {\n previews: [\"squirrel-girl\"]\n }\n }]\n },\n repos: {\n acceptInvitation: [\"PATCH /user/repository_invitations/{invitation_id}\"],\n addAppAccessRestrictions: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\", {}, {\n mapToData: \"apps\"\n }],\n addCollaborator: [\"PUT /repos/{owner}/{repo}/collaborators/{username}\"],\n addStatusCheckContexts: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\", {}, {\n mapToData: \"contexts\"\n }],\n addTeamAccessRestrictions: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\", {}, {\n mapToData: \"teams\"\n }],\n addUserAccessRestrictions: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\", {}, {\n mapToData: \"users\"\n }],\n checkCollaborator: [\"GET /repos/{owner}/{repo}/collaborators/{username}\"],\n checkVulnerabilityAlerts: [\"GET /repos/{owner}/{repo}/vulnerability-alerts\", {\n mediaType: {\n previews: [\"dorian\"]\n }\n }],\n compareCommits: [\"GET /repos/{owner}/{repo}/compare/{base}...{head}\"],\n createCommitComment: [\"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\"],\n createCommitSignatureProtection: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\", {\n mediaType: {\n previews: [\"zzzax\"]\n }\n }],\n createCommitStatus: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n createDeployKey: [\"POST /repos/{owner}/{repo}/keys\"],\n createDeployment: [\"POST /repos/{owner}/{repo}/deployments\"],\n createDeploymentStatus: [\"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"],\n createDispatchEvent: [\"POST /repos/{owner}/{repo}/dispatches\"],\n createForAuthenticatedUser: [\"POST /user/repos\"],\n createFork: [\"POST /repos/{owner}/{repo}/forks\"],\n createInOrg: [\"POST /orgs/{org}/repos\"],\n createOrUpdateFileContents: [\"PUT /repos/{owner}/{repo}/contents/{path}\"],\n createPagesSite: [\"POST /repos/{owner}/{repo}/pages\", {\n mediaType: {\n previews: [\"switcheroo\"]\n }\n }],\n createRelease: [\"POST /repos/{owner}/{repo}/releases\"],\n createUsingTemplate: [\"POST /repos/{template_owner}/{template_repo}/generate\", {\n mediaType: {\n previews: [\"baptiste\"]\n }\n }],\n createWebhook: [\"POST /repos/{owner}/{repo}/hooks\"],\n declineInvitation: [\"DELETE /user/repository_invitations/{invitation_id}\"],\n delete: [\"DELETE /repos/{owner}/{repo}\"],\n deleteAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"],\n deleteAdminBranchProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"],\n deleteBranchProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\"],\n deleteCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}\"],\n deleteCommitSignatureProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\", {\n mediaType: {\n previews: [\"zzzax\"]\n }\n }],\n deleteDeployKey: [\"DELETE /repos/{owner}/{repo}/keys/{key_id}\"],\n deleteDeployment: [\"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n deleteFile: [\"DELETE /repos/{owner}/{repo}/contents/{path}\"],\n deleteInvitation: [\"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\"],\n deletePagesSite: [\"DELETE /repos/{owner}/{repo}/pages\", {\n mediaType: {\n previews: [\"switcheroo\"]\n }\n }],\n deletePullRequestReviewProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"],\n deleteRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}\"],\n deleteReleaseAsset: [\"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n deleteWebhook: [\"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\"],\n disableAutomatedSecurityFixes: [\"DELETE /repos/{owner}/{repo}/automated-security-fixes\", {\n mediaType: {\n previews: [\"london\"]\n }\n }],\n disableVulnerabilityAlerts: [\"DELETE /repos/{owner}/{repo}/vulnerability-alerts\", {\n mediaType: {\n previews: [\"dorian\"]\n }\n }],\n downloadArchive: [\"GET /repos/{owner}/{repo}/{archive_format}/{ref}\"],\n enableAutomatedSecurityFixes: [\"PUT /repos/{owner}/{repo}/automated-security-fixes\", {\n mediaType: {\n previews: [\"london\"]\n }\n }],\n enableVulnerabilityAlerts: [\"PUT /repos/{owner}/{repo}/vulnerability-alerts\", {\n mediaType: {\n previews: [\"dorian\"]\n }\n }],\n get: [\"GET /repos/{owner}/{repo}\"],\n getAccessRestrictions: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"],\n getAdminBranchProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"],\n getAllStatusCheckContexts: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\"],\n getAllTopics: [\"GET /repos/{owner}/{repo}/topics\", {\n mediaType: {\n previews: [\"mercy\"]\n }\n }],\n getAppsWithAccessToProtectedBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\"],\n getBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}\"],\n getBranchProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection\"],\n getClones: [\"GET /repos/{owner}/{repo}/traffic/clones\"],\n getCodeFrequencyStats: [\"GET /repos/{owner}/{repo}/stats/code_frequency\"],\n getCollaboratorPermissionLevel: [\"GET /repos/{owner}/{repo}/collaborators/{username}/permission\"],\n getCombinedStatusForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/status\"],\n getCommit: [\"GET /repos/{owner}/{repo}/commits/{ref}\"],\n getCommitActivityStats: [\"GET /repos/{owner}/{repo}/stats/commit_activity\"],\n getCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}\"],\n getCommitSignatureProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\", {\n mediaType: {\n previews: [\"zzzax\"]\n }\n }],\n getCommunityProfileMetrics: [\"GET /repos/{owner}/{repo}/community/profile\", {\n mediaType: {\n previews: [\"black-panther\"]\n }\n }],\n getContent: [\"GET /repos/{owner}/{repo}/contents/{path}\"],\n getContributorsStats: [\"GET /repos/{owner}/{repo}/stats/contributors\"],\n getDeployKey: [\"GET /repos/{owner}/{repo}/keys/{key_id}\"],\n getDeployment: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n getDeploymentStatus: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\"],\n getLatestPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/latest\"],\n getLatestRelease: [\"GET /repos/{owner}/{repo}/releases/latest\"],\n getPages: [\"GET /repos/{owner}/{repo}/pages\"],\n getPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/{build_id}\"],\n getParticipationStats: [\"GET /repos/{owner}/{repo}/stats/participation\"],\n getPullRequestReviewProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"],\n getPunchCardStats: [\"GET /repos/{owner}/{repo}/stats/punch_card\"],\n getReadme: [\"GET /repos/{owner}/{repo}/readme\"],\n getRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}\"],\n getReleaseAsset: [\"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n getReleaseByTag: [\"GET /repos/{owner}/{repo}/releases/tags/{tag}\"],\n getStatusChecksProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"],\n getTeamsWithAccessToProtectedBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\"],\n getTopPaths: [\"GET /repos/{owner}/{repo}/traffic/popular/paths\"],\n getTopReferrers: [\"GET /repos/{owner}/{repo}/traffic/popular/referrers\"],\n getUsersWithAccessToProtectedBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\"],\n getViews: [\"GET /repos/{owner}/{repo}/traffic/views\"],\n getWebhook: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}\"],\n listBranches: [\"GET /repos/{owner}/{repo}/branches\"],\n listBranchesForHeadCommit: [\"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\", {\n mediaType: {\n previews: [\"groot\"]\n }\n }],\n listCollaborators: [\"GET /repos/{owner}/{repo}/collaborators\"],\n listCommentsForCommit: [\"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\"],\n listCommitCommentsForRepo: [\"GET /repos/{owner}/{repo}/comments\"],\n listCommitStatusesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/statuses\"],\n listCommits: [\"GET /repos/{owner}/{repo}/commits\"],\n listContributors: [\"GET /repos/{owner}/{repo}/contributors\"],\n listDeployKeys: [\"GET /repos/{owner}/{repo}/keys\"],\n listDeploymentStatuses: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"],\n listDeployments: [\"GET /repos/{owner}/{repo}/deployments\"],\n listForAuthenticatedUser: [\"GET /user/repos\"],\n listForOrg: [\"GET /orgs/{org}/repos\"],\n listForUser: [\"GET /users/{username}/repos\"],\n listForks: [\"GET /repos/{owner}/{repo}/forks\"],\n listInvitations: [\"GET /repos/{owner}/{repo}/invitations\"],\n listInvitationsForAuthenticatedUser: [\"GET /user/repository_invitations\"],\n listLanguages: [\"GET /repos/{owner}/{repo}/languages\"],\n listPagesBuilds: [\"GET /repos/{owner}/{repo}/pages/builds\"],\n listPublic: [\"GET /repositories\"],\n listPullRequestsAssociatedWithCommit: [\"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\", {\n mediaType: {\n previews: [\"groot\"]\n }\n }],\n listReleaseAssets: [\"GET /repos/{owner}/{repo}/releases/{release_id}/assets\"],\n listReleases: [\"GET /repos/{owner}/{repo}/releases\"],\n listTags: [\"GET /repos/{owner}/{repo}/tags\"],\n listTeams: [\"GET /repos/{owner}/{repo}/teams\"],\n listWebhooks: [\"GET /repos/{owner}/{repo}/hooks\"],\n merge: [\"POST /repos/{owner}/{repo}/merges\"],\n pingWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\"],\n removeAppAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\", {}, {\n mapToData: \"apps\"\n }],\n removeCollaborator: [\"DELETE /repos/{owner}/{repo}/collaborators/{username}\"],\n removeStatusCheckContexts: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\", {}, {\n mapToData: \"contexts\"\n }],\n removeStatusCheckProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"],\n removeTeamAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\", {}, {\n mapToData: \"teams\"\n }],\n removeUserAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\", {}, {\n mapToData: \"users\"\n }],\n replaceAllTopics: [\"PUT /repos/{owner}/{repo}/topics\", {\n mediaType: {\n previews: [\"mercy\"]\n }\n }],\n requestPagesBuild: [\"POST /repos/{owner}/{repo}/pages/builds\"],\n setAdminBranchProtection: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"],\n setAppAccessRestrictions: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\", {}, {\n mapToData: \"apps\"\n }],\n setStatusCheckContexts: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\", {}, {\n mapToData: \"contexts\"\n }],\n setTeamAccessRestrictions: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\", {}, {\n mapToData: \"teams\"\n }],\n setUserAccessRestrictions: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\", {}, {\n mapToData: \"users\"\n }],\n testPushWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\"],\n transfer: [\"POST /repos/{owner}/{repo}/transfer\"],\n update: [\"PATCH /repos/{owner}/{repo}\"],\n updateBranchProtection: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection\"],\n updateCommitComment: [\"PATCH /repos/{owner}/{repo}/comments/{comment_id}\"],\n updateInformationAboutPagesSite: [\"PUT /repos/{owner}/{repo}/pages\"],\n updateInvitation: [\"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\"],\n updatePullRequestReviewProtection: [\"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"],\n updateRelease: [\"PATCH /repos/{owner}/{repo}/releases/{release_id}\"],\n updateReleaseAsset: [\"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n updateStatusCheckPotection: [\"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"],\n updateWebhook: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\"],\n uploadReleaseAsset: [\"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}\", {\n baseUrl: \"https://uploads.github.com\"\n }]\n },\n search: {\n code: [\"GET /search/code\"],\n commits: [\"GET /search/commits\", {\n mediaType: {\n previews: [\"cloak\"]\n }\n }],\n issuesAndPullRequests: [\"GET /search/issues\"],\n labels: [\"GET /search/labels\"],\n repos: [\"GET /search/repositories\"],\n topics: [\"GET /search/topics\", {\n mediaType: {\n previews: [\"mercy\"]\n }\n }],\n users: [\"GET /search/users\"]\n },\n teams: {\n addOrUpdateMembershipForUserInOrg: [\"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\"],\n addOrUpdateProjectPermissionsInOrg: [\"PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n addOrUpdateRepoPermissionsInOrg: [\"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"],\n checkPermissionsForProjectInOrg: [\"GET /orgs/{org}/teams/{team_slug}/projects/{project_id}\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n checkPermissionsForRepoInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"],\n create: [\"POST /orgs/{org}/teams\"],\n createDiscussionCommentInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"],\n createDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions\"],\n deleteDiscussionCommentInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"],\n deleteDiscussionInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"],\n deleteInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}\"],\n getByName: [\"GET /orgs/{org}/teams/{team_slug}\"],\n getDiscussionCommentInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"],\n getDiscussionInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"],\n getMembershipForUserInOrg: [\"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\"],\n list: [\"GET /orgs/{org}/teams\"],\n listChildInOrg: [\"GET /orgs/{org}/teams/{team_slug}/teams\"],\n listDiscussionCommentsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"],\n listDiscussionsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions\"],\n listForAuthenticatedUser: [\"GET /user/teams\"],\n listMembersInOrg: [\"GET /orgs/{org}/teams/{team_slug}/members\"],\n listPendingInvitationsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/invitations\"],\n listProjectsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/projects\", {\n mediaType: {\n previews: [\"inertia\"]\n }\n }],\n listReposInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos\"],\n removeMembershipForUserInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\"],\n removeProjectInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}\"],\n removeRepoInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"],\n updateDiscussionCommentInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"],\n updateDiscussionInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"],\n updateInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}\"]\n },\n users: {\n addEmailForAuthenticated: [\"POST /user/emails\"],\n block: [\"PUT /user/blocks/{username}\"],\n checkBlocked: [\"GET /user/blocks/{username}\"],\n checkFollowingForUser: [\"GET /users/{username}/following/{target_user}\"],\n checkPersonIsFollowedByAuthenticated: [\"GET /user/following/{username}\"],\n createGpgKeyForAuthenticated: [\"POST /user/gpg_keys\"],\n createPublicSshKeyForAuthenticated: [\"POST /user/keys\"],\n deleteEmailForAuthenticated: [\"DELETE /user/emails\"],\n deleteGpgKeyForAuthenticated: [\"DELETE /user/gpg_keys/{gpg_key_id}\"],\n deletePublicSshKeyForAuthenticated: [\"DELETE /user/keys/{key_id}\"],\n follow: [\"PUT /user/following/{username}\"],\n getAuthenticated: [\"GET /user\"],\n getByUsername: [\"GET /users/{username}\"],\n getContextForUser: [\"GET /users/{username}/hovercard\"],\n getGpgKeyForAuthenticated: [\"GET /user/gpg_keys/{gpg_key_id}\"],\n getPublicSshKeyForAuthenticated: [\"GET /user/keys/{key_id}\"],\n list: [\"GET /users\"],\n listBlockedByAuthenticated: [\"GET /user/blocks\"],\n listEmailsForAuthenticated: [\"GET /user/emails\"],\n listFollowedByAuthenticated: [\"GET /user/following\"],\n listFollowersForAuthenticatedUser: [\"GET /user/followers\"],\n listFollowersForUser: [\"GET /users/{username}/followers\"],\n listFollowingForUser: [\"GET /users/{username}/following\"],\n listGpgKeysForAuthenticated: [\"GET /user/gpg_keys\"],\n listGpgKeysForUser: [\"GET /users/{username}/gpg_keys\"],\n listPublicEmailsForAuthenticated: [\"GET /user/public_emails\"],\n listPublicKeysForUser: [\"GET /users/{username}/keys\"],\n listPublicSshKeysForAuthenticated: [\"GET /user/keys\"],\n setPrimaryEmailVisibilityForAuthenticated: [\"PATCH /user/email/visibility\"],\n unblock: [\"DELETE /user/blocks/{username}\"],\n unfollow: [\"DELETE /user/following/{username}\"],\n updateAuthenticated: [\"PATCH /user\"]\n }\n};\n\nconst VERSION = \"4.2.1\";\n\nfunction endpointsToMethods(octokit, endpointsMap) {\n const newMethods = {};\n\n for (const [scope, endpoints] of Object.entries(endpointsMap)) {\n for (const [methodName, endpoint] of Object.entries(endpoints)) {\n const [route, defaults, decorations] = endpoint;\n const [method, url] = route.split(/ /);\n const endpointDefaults = Object.assign({\n method,\n url\n }, defaults);\n\n if (!newMethods[scope]) {\n newMethods[scope] = {};\n }\n\n const scopeMethods = newMethods[scope];\n\n if (decorations) {\n scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);\n continue;\n }\n\n scopeMethods[methodName] = octokit.request.defaults(endpointDefaults);\n }\n }\n\n return newMethods;\n}\n\nfunction decorate(octokit, scope, methodName, defaults, decorations) {\n const requestWithDefaults = octokit.request.defaults(defaults);\n /* istanbul ignore next */\n\n function withDecorations(...args) {\n // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData`\n\n if (decorations.mapToData) {\n options = Object.assign({}, options, {\n data: options[decorations.mapToData],\n [decorations.mapToData]: undefined\n });\n return requestWithDefaults(options);\n }\n\n if (decorations.renamed) {\n const [newScope, newMethodName] = decorations.renamed;\n octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);\n }\n\n if (decorations.deprecated) {\n octokit.log.warn(decorations.deprecated);\n }\n\n if (decorations.renamedParameters) {\n // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n const options = requestWithDefaults.endpoint.merge(...args);\n\n for (const [name, alias] of Object.entries(decorations.renamedParameters)) {\n if (name in options) {\n octokit.log.warn(`\"${name}\" parameter is deprecated for \"octokit.${scope}.${methodName}()\". Use \"${alias}\" instead`);\n\n if (!(alias in options)) {\n options[alias] = options[name];\n }\n\n delete options[name];\n }\n }\n\n return requestWithDefaults(options);\n } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n\n\n return requestWithDefaults(...args);\n }\n\n return Object.assign(withDecorations, requestWithDefaults);\n}\n\n/**\n * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary\n * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is\n * done, we will remove the registerEndpoints methods and return the methods\n * directly as with the other plugins. At that point we will also remove the\n * legacy workarounds and deprecations.\n *\n * See the plan at\n * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1\n */\n\nfunction restEndpointMethods(octokit) {\n return endpointsToMethods(octokit, Endpoints);\n}\nrestEndpointMethods.VERSION = VERSION;\n\nexports.restEndpointMethods = restEndpointMethods;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar deprecation = require('deprecation');\nvar once = _interopDefault(require('once'));\n\nconst logOnce = once(deprecation => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\n\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.status = statusCode;\n Object.defineProperty(this, \"code\", {\n get() {\n logOnce(new deprecation.Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n return statusCode;\n }\n\n });\n this.headers = options.headers || {}; // redact request credentials without mutating original request options\n\n const requestCopy = Object.assign({}, options.request);\n\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n });\n }\n\n requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit\n // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\") // OAuth tokens can be passed as URL query parameters, although it is not recommended\n // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy;\n }\n\n}\n\nexports.RequestError = RequestError;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar endpoint = require('@octokit/endpoint');\nvar universalUserAgent = require('universal-user-agent');\nvar isPlainObject = require('is-plain-object');\nvar nodeFetch = _interopDefault(require('node-fetch'));\nvar requestError = require('@octokit/request-error');\n\nconst VERSION = \"5.4.10\";\n\nfunction getBufferResponse(response) {\n return response.arrayBuffer();\n}\n\nfunction fetchWrapper(requestOptions) {\n if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {\n requestOptions.body = JSON.stringify(requestOptions.body);\n }\n\n let headers = {};\n let status;\n let url;\n const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;\n return fetch(requestOptions.url, Object.assign({\n method: requestOptions.method,\n body: requestOptions.body,\n headers: requestOptions.headers,\n redirect: requestOptions.redirect\n }, requestOptions.request)).then(response => {\n url = response.url;\n status = response.status;\n\n for (const keyAndValue of response.headers) {\n headers[keyAndValue[0]] = keyAndValue[1];\n }\n\n if (status === 204 || status === 205) {\n return;\n } // GitHub API returns 200 for HEAD requests\n\n\n if (requestOptions.method === \"HEAD\") {\n if (status < 400) {\n return;\n }\n\n throw new requestError.RequestError(response.statusText, status, {\n headers,\n request: requestOptions\n });\n }\n\n if (status === 304) {\n throw new requestError.RequestError(\"Not modified\", status, {\n headers,\n request: requestOptions\n });\n }\n\n if (status >= 400) {\n return response.text().then(message => {\n const error = new requestError.RequestError(message, status, {\n headers,\n request: requestOptions\n });\n\n try {\n let responseBody = JSON.parse(error.message);\n Object.assign(error, responseBody);\n let errors = responseBody.errors; // Assumption `errors` would always be in Array format\n\n error.message = error.message + \": \" + errors.map(JSON.stringify).join(\", \");\n } catch (e) {// ignore, see octokit/rest.js#684\n }\n\n throw error;\n });\n }\n\n const contentType = response.headers.get(\"content-type\");\n\n if (/application\\/json/.test(contentType)) {\n return response.json();\n }\n\n if (!contentType || /^text\\/|charset=utf-8$/.test(contentType)) {\n return response.text();\n }\n\n return getBufferResponse(response);\n }).then(data => {\n return {\n status,\n url,\n headers,\n data\n };\n }).catch(error => {\n if (error instanceof requestError.RequestError) {\n throw error;\n }\n\n throw new requestError.RequestError(error.message, 500, {\n headers,\n request: requestOptions\n });\n });\n}\n\nfunction withDefaults(oldEndpoint, newDefaults) {\n const endpoint = oldEndpoint.defaults(newDefaults);\n\n const newApi = function (route, parameters) {\n const endpointOptions = endpoint.merge(route, parameters);\n\n if (!endpointOptions.request || !endpointOptions.request.hook) {\n return fetchWrapper(endpoint.parse(endpointOptions));\n }\n\n const request = (route, parameters) => {\n return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));\n };\n\n Object.assign(request, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n return endpointOptions.request.hook(request, endpointOptions);\n };\n\n return Object.assign(newApi, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n}\n\nconst request = withDefaults(endpoint.endpoint, {\n headers: {\n \"user-agent\": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n }\n});\n\nexports.request = request;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","var register = require('./lib/register')\nvar addHook = require('./lib/add')\nvar removeHook = require('./lib/remove')\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nvar bind = Function.bind\nvar bindable = bind.bind(bind)\n\nfunction bindApi (hook, state, name) {\n var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])\n hook.api = { remove: removeHookRef }\n hook.remove = removeHookRef\n\n ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {\n var args = name ? [state, kind, name] : [state, kind]\n hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)\n })\n}\n\nfunction HookSingular () {\n var singularHookName = 'h'\n var singularHookState = {\n registry: {}\n }\n var singularHook = register.bind(null, singularHookState, singularHookName)\n bindApi(singularHook, singularHookState, singularHookName)\n return singularHook\n}\n\nfunction HookCollection () {\n var state = {\n registry: {}\n }\n\n var hook = register.bind(null, state)\n bindApi(hook, state)\n\n return hook\n}\n\nvar collectionHookDeprecationMessageDisplayed = false\nfunction Hook () {\n if (!collectionHookDeprecationMessageDisplayed) {\n console.warn('[before-after-hook]: \"Hook()\" repurposing warning, use \"Hook.Collection()\". Read more: https://git.io/upgrade-before-after-hook-to-1.4')\n collectionHookDeprecationMessageDisplayed = true\n }\n return HookCollection()\n}\n\nHook.Singular = HookSingular.bind()\nHook.Collection = HookCollection.bind()\n\nmodule.exports = Hook\n// expose constructors as a named property for TypeScript\nmodule.exports.Hook = Hook\nmodule.exports.Singular = Hook.Singular\nmodule.exports.Collection = Hook.Collection\n","module.exports = addHook\n\nfunction addHook (state, kind, name, hook) {\n var orig = hook\n if (!state.registry[name]) {\n state.registry[name] = []\n }\n\n if (kind === 'before') {\n hook = function (method, options) {\n return Promise.resolve()\n .then(orig.bind(null, options))\n .then(method.bind(null, options))\n }\n }\n\n if (kind === 'after') {\n hook = function (method, options) {\n var result\n return Promise.resolve()\n .then(method.bind(null, options))\n .then(function (result_) {\n result = result_\n return orig(result, options)\n })\n .then(function () {\n return result\n })\n }\n }\n\n if (kind === 'error') {\n hook = function (method, options) {\n return Promise.resolve()\n .then(method.bind(null, options))\n .catch(function (error) {\n return orig(error, options)\n })\n }\n }\n\n state.registry[name].push({\n hook: hook,\n orig: orig\n })\n}\n","module.exports = register\n\nfunction register (state, name, method, options) {\n if (typeof method !== 'function') {\n throw new Error('method for before hook must be a function')\n }\n\n if (!options) {\n options = {}\n }\n\n if (Array.isArray(name)) {\n return name.reverse().reduce(function (callback, name) {\n return register.bind(null, state, name, callback, options)\n }, method)()\n }\n\n return Promise.resolve()\n .then(function () {\n if (!state.registry[name]) {\n return method(options)\n }\n\n return (state.registry[name]).reduce(function (method, registered) {\n return registered.hook.bind(null, method, options)\n }, method)()\n })\n}\n","module.exports = removeHook\n\nfunction removeHook (state, name, method) {\n if (!state.registry[name]) {\n return\n }\n\n var index = state.registry[name]\n .map(function (registered) { return registered.orig })\n .indexOf(method)\n\n if (index === -1) {\n return\n }\n\n state.registry[name].splice(index, 1)\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass Deprecation extends Error {\n constructor(message) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = 'Deprecation';\n }\n\n}\n\nexports.Deprecation = Deprecation;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (let pattern of input) {\n let result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n let walk = (node, parent = {}) => {\n let invalidBlock = utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let invalid = invalidBlock === true || invalidNode === true;\n let prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n if (node.isClose === true) {\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? (prefix + node.value) : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? (prefix + node.value) : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n let range = fill(...args, { ...options, wrap: false, toRegex: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += walk(child, node);\n }\n }\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n let result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (let item of queue) {\n if (Array.isArray(item)) {\n for (let value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;\n\n let walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n let enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n let opts = options || {};\n let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n let ast = { type: 'root', input, nodes: [] };\n let stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n let length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n let memo = {};\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let closed = true;\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n let open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n let brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n let type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n let open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n let siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n let before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n let parent = stack[stack.length - 1];\n let index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n let stringify = (node, parent = {}) => {\n let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n let node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n let ele = arr[i];\n Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);\n }\n return result;\n };\n flat(args);\n return result;\n};\n","/*!\n * fill-range \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","/*!\n * is-number \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\nconst isEmptyString = val => typeof val === 'string' && (val === '' || val === './');\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array} list List of strings to match.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} options See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = micromatch(list, patterns, { ...options, onResult });\n\n for (let item of items) {\n if (!matches.includes(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if the patter matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !/\\{.*\\}/.test(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\nmodule.exports = micromatch;\n","/*!\n * to-regex-range \n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","\"use strict\";\r\nconst taskManager = require(\"./managers/tasks\");\r\nconst async_1 = require(\"./providers/async\");\r\nconst stream_1 = require(\"./providers/stream\");\r\nconst sync_1 = require(\"./providers/sync\");\r\nconst settings_1 = require(\"./settings\");\r\nconst utils = require(\"./utils\");\r\nasync function FastGlob(source, options) {\r\n assertPatternsInput(source);\r\n const works = getWorks(source, async_1.default, options);\r\n const result = await Promise.all(works);\r\n return utils.array.flatten(result);\r\n}\r\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\r\n// eslint-disable-next-line no-redeclare\r\n(function (FastGlob) {\r\n function sync(source, options) {\r\n assertPatternsInput(source);\r\n const works = getWorks(source, sync_1.default, options);\r\n return utils.array.flatten(works);\r\n }\r\n FastGlob.sync = sync;\r\n function stream(source, options) {\r\n assertPatternsInput(source);\r\n const works = getWorks(source, stream_1.default, options);\r\n /**\r\n * The stream returned by the provider cannot work with an asynchronous iterator.\r\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\r\n * This affects performance (+25%). I don't see best solution right now.\r\n */\r\n return utils.stream.merge(works);\r\n }\r\n FastGlob.stream = stream;\r\n function generateTasks(source, options) {\r\n assertPatternsInput(source);\r\n const patterns = [].concat(source);\r\n const settings = new settings_1.default(options);\r\n return taskManager.generate(patterns, settings);\r\n }\r\n FastGlob.generateTasks = generateTasks;\r\n function isDynamicPattern(source, options) {\r\n assertPatternsInput(source);\r\n const settings = new settings_1.default(options);\r\n return utils.pattern.isDynamicPattern(source, settings);\r\n }\r\n FastGlob.isDynamicPattern = isDynamicPattern;\r\n function escapePath(source) {\r\n assertPatternsInput(source);\r\n return utils.path.escape(source);\r\n }\r\n FastGlob.escapePath = escapePath;\r\n})(FastGlob || (FastGlob = {}));\r\nfunction getWorks(source, _Provider, options) {\r\n const patterns = [].concat(source);\r\n const settings = new settings_1.default(options);\r\n const tasks = taskManager.generate(patterns, settings);\r\n const provider = new _Provider(settings);\r\n return tasks.map(provider.read, provider);\r\n}\r\nfunction assertPatternsInput(input) {\r\n const source = [].concat(input);\r\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\r\n if (!isValidSource) {\r\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\r\n }\r\n}\r\nmodule.exports = FastGlob;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\r\nconst utils = require(\"../utils\");\r\nfunction generate(patterns, settings) {\r\n const positivePatterns = getPositivePatterns(patterns);\r\n const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);\r\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\r\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\r\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\r\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\r\n return staticTasks.concat(dynamicTasks);\r\n}\r\nexports.generate = generate;\r\nfunction convertPatternsToTasks(positive, negative, dynamic) {\r\n const positivePatternsGroup = groupPatternsByBaseDirectory(positive);\r\n // When we have a global group – there is no reason to divide the patterns into independent tasks.\r\n // In this case, the global task covers the rest.\r\n if ('.' in positivePatternsGroup) {\r\n const task = convertPatternGroupToTask('.', positive, negative, dynamic);\r\n return [task];\r\n }\r\n return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);\r\n}\r\nexports.convertPatternsToTasks = convertPatternsToTasks;\r\nfunction getPositivePatterns(patterns) {\r\n return utils.pattern.getPositivePatterns(patterns);\r\n}\r\nexports.getPositivePatterns = getPositivePatterns;\r\nfunction getNegativePatternsAsPositive(patterns, ignore) {\r\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\r\n const positive = negative.map(utils.pattern.convertToPositivePattern);\r\n return positive;\r\n}\r\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\r\nfunction groupPatternsByBaseDirectory(patterns) {\r\n const group = {};\r\n return patterns.reduce((collection, pattern) => {\r\n const base = utils.pattern.getBaseDirectory(pattern);\r\n if (base in collection) {\r\n collection[base].push(pattern);\r\n }\r\n else {\r\n collection[base] = [pattern];\r\n }\r\n return collection;\r\n }, group);\r\n}\r\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\r\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\r\n return Object.keys(positive).map((base) => {\r\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\r\n });\r\n}\r\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\r\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\r\n return {\r\n dynamic,\r\n positive,\r\n negative,\r\n base,\r\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\r\n };\r\n}\r\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst stream_1 = require(\"../readers/stream\");\r\nconst provider_1 = require(\"./provider\");\r\nclass ProviderAsync extends provider_1.default {\r\n constructor() {\r\n super(...arguments);\r\n this._reader = new stream_1.default(this._settings);\r\n }\r\n read(task) {\r\n const root = this._getRootDirectory(task);\r\n const options = this._getReaderOptions(task);\r\n const entries = [];\r\n return new Promise((resolve, reject) => {\r\n const stream = this.api(root, task, options);\r\n stream.once('error', reject);\r\n stream.on('data', (entry) => entries.push(options.transform(entry)));\r\n stream.once('end', () => resolve(entries));\r\n });\r\n }\r\n api(root, task, options) {\r\n if (task.dynamic) {\r\n return this._reader.dynamic(root, options);\r\n }\r\n return this._reader.static(task.patterns, options);\r\n }\r\n}\r\nexports.default = ProviderAsync;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst utils = require(\"../../utils\");\r\nconst partial_1 = require(\"../matchers/partial\");\r\nclass DeepFilter {\r\n constructor(_settings, _micromatchOptions) {\r\n this._settings = _settings;\r\n this._micromatchOptions = _micromatchOptions;\r\n }\r\n getFilter(basePath, positive, negative) {\r\n const matcher = this._getMatcher(positive);\r\n const negativeRe = this._getNegativePatternsRe(negative);\r\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\r\n }\r\n _getMatcher(patterns) {\r\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\r\n }\r\n _getNegativePatternsRe(patterns) {\r\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\r\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\r\n }\r\n _filter(basePath, entry, matcher, negativeRe) {\r\n if (this._isSkippedByDeep(basePath, entry.path)) {\r\n return false;\r\n }\r\n if (this._isSkippedSymbolicLink(entry)) {\r\n return false;\r\n }\r\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\r\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\r\n return false;\r\n }\r\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\r\n }\r\n _isSkippedByDeep(basePath, entryPath) {\r\n /**\r\n * Avoid unnecessary depth calculations when it doesn't matter.\r\n */\r\n if (this._settings.deep === Infinity) {\r\n return false;\r\n }\r\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\r\n }\r\n _getEntryLevel(basePath, entryPath) {\r\n const entryPathDepth = entryPath.split('/').length;\r\n if (basePath === '') {\r\n return entryPathDepth;\r\n }\r\n const basePathDepth = basePath.split('/').length;\r\n return entryPathDepth - basePathDepth;\r\n }\r\n _isSkippedSymbolicLink(entry) {\r\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\r\n }\r\n _isSkippedByPositivePatterns(entryPath, matcher) {\r\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\r\n }\r\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\r\n return !utils.pattern.matchAny(entryPath, patternsRe);\r\n }\r\n}\r\nexports.default = DeepFilter;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst utils = require(\"../../utils\");\r\nclass EntryFilter {\r\n constructor(_settings, _micromatchOptions) {\r\n this._settings = _settings;\r\n this._micromatchOptions = _micromatchOptions;\r\n this.index = new Map();\r\n }\r\n getFilter(positive, negative) {\r\n const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);\r\n const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);\r\n return (entry) => this._filter(entry, positiveRe, negativeRe);\r\n }\r\n _filter(entry, positiveRe, negativeRe) {\r\n if (this._settings.unique && this._isDuplicateEntry(entry)) {\r\n return false;\r\n }\r\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\r\n return false;\r\n }\r\n if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {\r\n return false;\r\n }\r\n const filepath = this._settings.baseNameMatch ? entry.name : entry.path;\r\n const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);\r\n if (this._settings.unique && isMatched) {\r\n this._createIndexRecord(entry);\r\n }\r\n return isMatched;\r\n }\r\n _isDuplicateEntry(entry) {\r\n return this.index.has(entry.path);\r\n }\r\n _createIndexRecord(entry) {\r\n this.index.set(entry.path, undefined);\r\n }\r\n _onlyFileFilter(entry) {\r\n return this._settings.onlyFiles && !entry.dirent.isFile();\r\n }\r\n _onlyDirectoryFilter(entry) {\r\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\r\n }\r\n _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {\r\n if (!this._settings.absolute) {\r\n return false;\r\n }\r\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);\r\n return utils.pattern.matchAny(fullpath, patternsRe);\r\n }\r\n _isMatchToPatterns(entryPath, patternsRe) {\r\n const filepath = utils.path.removeLeadingDotSegment(entryPath);\r\n return utils.pattern.matchAny(filepath, patternsRe);\r\n }\r\n}\r\nexports.default = EntryFilter;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst utils = require(\"../../utils\");\r\nclass ErrorFilter {\r\n constructor(_settings) {\r\n this._settings = _settings;\r\n }\r\n getFilter() {\r\n return (error) => this._isNonFatalError(error);\r\n }\r\n _isNonFatalError(error) {\r\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\r\n }\r\n}\r\nexports.default = ErrorFilter;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst utils = require(\"../../utils\");\r\nclass Matcher {\r\n constructor(_patterns, _settings, _micromatchOptions) {\r\n this._patterns = _patterns;\r\n this._settings = _settings;\r\n this._micromatchOptions = _micromatchOptions;\r\n this._storage = [];\r\n this._fillStorage();\r\n }\r\n _fillStorage() {\r\n /**\r\n * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).\r\n * So, before expand patterns with brace expansion into separated patterns.\r\n */\r\n const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);\r\n for (const pattern of patterns) {\r\n const segments = this._getPatternSegments(pattern);\r\n const sections = this._splitSegmentsIntoSections(segments);\r\n this._storage.push({\r\n complete: sections.length <= 1,\r\n pattern,\r\n segments,\r\n sections\r\n });\r\n }\r\n }\r\n _getPatternSegments(pattern) {\r\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\r\n return parts.map((part) => {\r\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\r\n if (!dynamic) {\r\n return {\r\n dynamic: false,\r\n pattern: part\r\n };\r\n }\r\n return {\r\n dynamic: true,\r\n pattern: part,\r\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\r\n };\r\n });\r\n }\r\n _splitSegmentsIntoSections(segments) {\r\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\r\n }\r\n}\r\nexports.default = Matcher;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst matcher_1 = require(\"./matcher\");\r\nclass PartialMatcher extends matcher_1.default {\r\n match(filepath) {\r\n const parts = filepath.split('/');\r\n const levels = parts.length;\r\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\r\n for (const pattern of patterns) {\r\n const section = pattern.sections[0];\r\n /**\r\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\r\n * but only if the level has reached the end of the first group.\r\n *\r\n * fixtures/{a,b}/**\r\n * ^ true/false ^ always true\r\n */\r\n if (!pattern.complete && levels > section.length) {\r\n return true;\r\n }\r\n const match = parts.every((part, index) => {\r\n const segment = pattern.segments[index];\r\n if (segment.dynamic && segment.patternRe.test(part)) {\r\n return true;\r\n }\r\n if (!segment.dynamic && segment.pattern === part) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (match) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\nexports.default = PartialMatcher;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst path = require(\"path\");\r\nconst deep_1 = require(\"./filters/deep\");\r\nconst entry_1 = require(\"./filters/entry\");\r\nconst error_1 = require(\"./filters/error\");\r\nconst entry_2 = require(\"./transformers/entry\");\r\nclass Provider {\r\n constructor(_settings) {\r\n this._settings = _settings;\r\n this.errorFilter = new error_1.default(this._settings);\r\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\r\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\r\n this.entryTransformer = new entry_2.default(this._settings);\r\n }\r\n _getRootDirectory(task) {\r\n return path.resolve(this._settings.cwd, task.base);\r\n }\r\n _getReaderOptions(task) {\r\n const basePath = task.base === '.' ? '' : task.base;\r\n return {\r\n basePath,\r\n pathSegmentSeparator: '/',\r\n concurrency: this._settings.concurrency,\r\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\r\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\r\n errorFilter: this.errorFilter.getFilter(),\r\n followSymbolicLinks: this._settings.followSymbolicLinks,\r\n fs: this._settings.fs,\r\n stats: this._settings.stats,\r\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\r\n transform: this.entryTransformer.getTransformer()\r\n };\r\n }\r\n _getMicromatchOptions() {\r\n return {\r\n dot: this._settings.dot,\r\n matchBase: this._settings.baseNameMatch,\r\n nobrace: !this._settings.braceExpansion,\r\n nocase: !this._settings.caseSensitiveMatch,\r\n noext: !this._settings.extglob,\r\n noglobstar: !this._settings.globstar,\r\n posix: true,\r\n strictSlashes: false\r\n };\r\n }\r\n}\r\nexports.default = Provider;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst stream_1 = require(\"stream\");\r\nconst stream_2 = require(\"../readers/stream\");\r\nconst provider_1 = require(\"./provider\");\r\nclass ProviderStream extends provider_1.default {\r\n constructor() {\r\n super(...arguments);\r\n this._reader = new stream_2.default(this._settings);\r\n }\r\n read(task) {\r\n const root = this._getRootDirectory(task);\r\n const options = this._getReaderOptions(task);\r\n const source = this.api(root, task, options);\r\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\r\n source\r\n .once('error', (error) => destination.emit('error', error))\r\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\r\n .once('end', () => destination.emit('end'));\r\n destination\r\n .once('close', () => source.destroy());\r\n return destination;\r\n }\r\n api(root, task, options) {\r\n if (task.dynamic) {\r\n return this._reader.dynamic(root, options);\r\n }\r\n return this._reader.static(task.patterns, options);\r\n }\r\n}\r\nexports.default = ProviderStream;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst sync_1 = require(\"../readers/sync\");\r\nconst provider_1 = require(\"./provider\");\r\nclass ProviderSync extends provider_1.default {\r\n constructor() {\r\n super(...arguments);\r\n this._reader = new sync_1.default(this._settings);\r\n }\r\n read(task) {\r\n const root = this._getRootDirectory(task);\r\n const options = this._getReaderOptions(task);\r\n const entries = this.api(root, task, options);\r\n return entries.map(options.transform);\r\n }\r\n api(root, task, options) {\r\n if (task.dynamic) {\r\n return this._reader.dynamic(root, options);\r\n }\r\n return this._reader.static(task.patterns, options);\r\n }\r\n}\r\nexports.default = ProviderSync;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst utils = require(\"../../utils\");\r\nclass EntryTransformer {\r\n constructor(_settings) {\r\n this._settings = _settings;\r\n }\r\n getTransformer() {\r\n return (entry) => this._transform(entry);\r\n }\r\n _transform(entry) {\r\n let filepath = entry.path;\r\n if (this._settings.absolute) {\r\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\r\n filepath = utils.path.unixify(filepath);\r\n }\r\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\r\n filepath += '/';\r\n }\r\n if (!this._settings.objectMode) {\r\n return filepath;\r\n }\r\n return Object.assign(Object.assign({}, entry), { path: filepath });\r\n }\r\n}\r\nexports.default = EntryTransformer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst path = require(\"path\");\r\nconst fsStat = require(\"@nodelib/fs.stat\");\r\nconst utils = require(\"../utils\");\r\nclass Reader {\r\n constructor(_settings) {\r\n this._settings = _settings;\r\n this._fsStatSettings = new fsStat.Settings({\r\n followSymbolicLink: this._settings.followSymbolicLinks,\r\n fs: this._settings.fs,\r\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\r\n });\r\n }\r\n _getFullEntryPath(filepath) {\r\n return path.resolve(this._settings.cwd, filepath);\r\n }\r\n _makeEntry(stats, pattern) {\r\n const entry = {\r\n name: pattern,\r\n path: pattern,\r\n dirent: utils.fs.createDirentFromStats(pattern, stats)\r\n };\r\n if (this._settings.stats) {\r\n entry.stats = stats;\r\n }\r\n return entry;\r\n }\r\n _isFatalError(error) {\r\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\r\n }\r\n}\r\nexports.default = Reader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst stream_1 = require(\"stream\");\r\nconst fsStat = require(\"@nodelib/fs.stat\");\r\nconst fsWalk = require(\"@nodelib/fs.walk\");\r\nconst reader_1 = require(\"./reader\");\r\nclass ReaderStream extends reader_1.default {\r\n constructor() {\r\n super(...arguments);\r\n this._walkStream = fsWalk.walkStream;\r\n this._stat = fsStat.stat;\r\n }\r\n dynamic(root, options) {\r\n return this._walkStream(root, options);\r\n }\r\n static(patterns, options) {\r\n const filepaths = patterns.map(this._getFullEntryPath, this);\r\n const stream = new stream_1.PassThrough({ objectMode: true });\r\n stream._write = (index, _enc, done) => {\r\n return this._getEntry(filepaths[index], patterns[index], options)\r\n .then((entry) => {\r\n if (entry !== null && options.entryFilter(entry)) {\r\n stream.push(entry);\r\n }\r\n if (index === filepaths.length - 1) {\r\n stream.end();\r\n }\r\n done();\r\n })\r\n .catch(done);\r\n };\r\n for (let i = 0; i < filepaths.length; i++) {\r\n stream.write(i);\r\n }\r\n return stream;\r\n }\r\n _getEntry(filepath, pattern, options) {\r\n return this._getStat(filepath)\r\n .then((stats) => this._makeEntry(stats, pattern))\r\n .catch((error) => {\r\n if (options.errorFilter(error)) {\r\n return null;\r\n }\r\n throw error;\r\n });\r\n }\r\n _getStat(filepath) {\r\n return new Promise((resolve, reject) => {\r\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\r\n return error === null ? resolve(stats) : reject(error);\r\n });\r\n });\r\n }\r\n}\r\nexports.default = ReaderStream;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst fsStat = require(\"@nodelib/fs.stat\");\r\nconst fsWalk = require(\"@nodelib/fs.walk\");\r\nconst reader_1 = require(\"./reader\");\r\nclass ReaderSync extends reader_1.default {\r\n constructor() {\r\n super(...arguments);\r\n this._walkSync = fsWalk.walkSync;\r\n this._statSync = fsStat.statSync;\r\n }\r\n dynamic(root, options) {\r\n return this._walkSync(root, options);\r\n }\r\n static(patterns, options) {\r\n const entries = [];\r\n for (const pattern of patterns) {\r\n const filepath = this._getFullEntryPath(pattern);\r\n const entry = this._getEntry(filepath, pattern, options);\r\n if (entry === null || !options.entryFilter(entry)) {\r\n continue;\r\n }\r\n entries.push(entry);\r\n }\r\n return entries;\r\n }\r\n _getEntry(filepath, pattern, options) {\r\n try {\r\n const stats = this._getStat(filepath);\r\n return this._makeEntry(stats, pattern);\r\n }\r\n catch (error) {\r\n if (options.errorFilter(error)) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n _getStat(filepath) {\r\n return this._statSync(filepath, this._fsStatSettings);\r\n }\r\n}\r\nexports.default = ReaderSync;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\r\nconst fs = require(\"fs\");\r\nconst os = require(\"os\");\r\n/**\r\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\r\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\r\n */\r\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\r\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\r\n lstat: fs.lstat,\r\n lstatSync: fs.lstatSync,\r\n stat: fs.stat,\r\n statSync: fs.statSync,\r\n readdir: fs.readdir,\r\n readdirSync: fs.readdirSync\r\n};\r\nclass Settings {\r\n constructor(_options = {}) {\r\n this._options = _options;\r\n this.absolute = this._getValue(this._options.absolute, false);\r\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\r\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\r\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\r\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\r\n this.cwd = this._getValue(this._options.cwd, process.cwd());\r\n this.deep = this._getValue(this._options.deep, Infinity);\r\n this.dot = this._getValue(this._options.dot, false);\r\n this.extglob = this._getValue(this._options.extglob, true);\r\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\r\n this.fs = this._getFileSystemMethods(this._options.fs);\r\n this.globstar = this._getValue(this._options.globstar, true);\r\n this.ignore = this._getValue(this._options.ignore, []);\r\n this.markDirectories = this._getValue(this._options.markDirectories, false);\r\n this.objectMode = this._getValue(this._options.objectMode, false);\r\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\r\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\r\n this.stats = this._getValue(this._options.stats, false);\r\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\r\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\r\n this.unique = this._getValue(this._options.unique, true);\r\n if (this.onlyDirectories) {\r\n this.onlyFiles = false;\r\n }\r\n if (this.stats) {\r\n this.objectMode = true;\r\n }\r\n }\r\n _getValue(option, value) {\r\n return option === undefined ? value : option;\r\n }\r\n _getFileSystemMethods(methods = {}) {\r\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\r\n }\r\n}\r\nexports.default = Settings;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.splitWhen = exports.flatten = void 0;\r\nfunction flatten(items) {\r\n return items.reduce((collection, item) => [].concat(collection, item), []);\r\n}\r\nexports.flatten = flatten;\r\nfunction splitWhen(items, predicate) {\r\n const result = [[]];\r\n let groupIndex = 0;\r\n for (const item of items) {\r\n if (predicate(item)) {\r\n groupIndex++;\r\n result[groupIndex] = [];\r\n }\r\n else {\r\n result[groupIndex].push(item);\r\n }\r\n }\r\n return result;\r\n}\r\nexports.splitWhen = splitWhen;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isEnoentCodeError = void 0;\r\nfunction isEnoentCodeError(error) {\r\n return error.code === 'ENOENT';\r\n}\r\nexports.isEnoentCodeError = isEnoentCodeError;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.createDirentFromStats = void 0;\r\nclass DirentFromStats {\r\n constructor(name, stats) {\r\n this.name = name;\r\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\r\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\r\n this.isDirectory = stats.isDirectory.bind(stats);\r\n this.isFIFO = stats.isFIFO.bind(stats);\r\n this.isFile = stats.isFile.bind(stats);\r\n this.isSocket = stats.isSocket.bind(stats);\r\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\r\n }\r\n}\r\nfunction createDirentFromStats(name, stats) {\r\n return new DirentFromStats(name, stats);\r\n}\r\nexports.createDirentFromStats = createDirentFromStats;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\r\nconst array = require(\"./array\");\r\nexports.array = array;\r\nconst errno = require(\"./errno\");\r\nexports.errno = errno;\r\nconst fs = require(\"./fs\");\r\nexports.fs = fs;\r\nconst path = require(\"./path\");\r\nexports.path = path;\r\nconst pattern = require(\"./pattern\");\r\nexports.pattern = pattern;\r\nconst stream = require(\"./stream\");\r\nexports.stream = stream;\r\nconst string = require(\"./string\");\r\nexports.string = string;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;\r\nconst path = require(\"path\");\r\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\r\nconst UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;\r\n/**\r\n * Designed to work only with simple paths: `dir\\\\file`.\r\n */\r\nfunction unixify(filepath) {\r\n return filepath.replace(/\\\\/g, '/');\r\n}\r\nexports.unixify = unixify;\r\nfunction makeAbsolute(cwd, filepath) {\r\n return path.resolve(cwd, filepath);\r\n}\r\nexports.makeAbsolute = makeAbsolute;\r\nfunction escape(pattern) {\r\n return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\r\n}\r\nexports.escape = escape;\r\nfunction removeLeadingDotSegment(entry) {\r\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\r\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\r\n if (entry.charAt(0) === '.') {\r\n const secondCharactery = entry.charAt(1);\r\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\r\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\r\n }\r\n }\r\n return entry;\r\n}\r\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\r\nconst path = require(\"path\");\r\nconst globParent = require(\"glob-parent\");\r\nconst micromatch = require(\"micromatch\");\r\nconst picomatch = require(\"picomatch\");\r\nconst GLOBSTAR = '**';\r\nconst ESCAPE_SYMBOL = '\\\\';\r\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\r\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[.*]/;\r\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\(.*\\|.*\\)/;\r\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\(.*\\)/;\r\nconst BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\\.\\.).*}/;\r\nfunction isStaticPattern(pattern, options = {}) {\r\n return !isDynamicPattern(pattern, options);\r\n}\r\nexports.isStaticPattern = isStaticPattern;\r\nfunction isDynamicPattern(pattern, options = {}) {\r\n /**\r\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\r\n * An empty string cannot be a dynamic pattern.\r\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\r\n */\r\n if (pattern === '') {\r\n return false;\r\n }\r\n /**\r\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\r\n * filepath directly (without read directory).\r\n */\r\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\r\n return true;\r\n }\r\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\r\n return true;\r\n }\r\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\r\n return true;\r\n }\r\n if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexports.isDynamicPattern = isDynamicPattern;\r\nfunction convertToPositivePattern(pattern) {\r\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\r\n}\r\nexports.convertToPositivePattern = convertToPositivePattern;\r\nfunction convertToNegativePattern(pattern) {\r\n return '!' + pattern;\r\n}\r\nexports.convertToNegativePattern = convertToNegativePattern;\r\nfunction isNegativePattern(pattern) {\r\n return pattern.startsWith('!') && pattern[1] !== '(';\r\n}\r\nexports.isNegativePattern = isNegativePattern;\r\nfunction isPositivePattern(pattern) {\r\n return !isNegativePattern(pattern);\r\n}\r\nexports.isPositivePattern = isPositivePattern;\r\nfunction getNegativePatterns(patterns) {\r\n return patterns.filter(isNegativePattern);\r\n}\r\nexports.getNegativePatterns = getNegativePatterns;\r\nfunction getPositivePatterns(patterns) {\r\n return patterns.filter(isPositivePattern);\r\n}\r\nexports.getPositivePatterns = getPositivePatterns;\r\nfunction getBaseDirectory(pattern) {\r\n return globParent(pattern, { flipBackslashes: false });\r\n}\r\nexports.getBaseDirectory = getBaseDirectory;\r\nfunction hasGlobStar(pattern) {\r\n return pattern.includes(GLOBSTAR);\r\n}\r\nexports.hasGlobStar = hasGlobStar;\r\nfunction endsWithSlashGlobStar(pattern) {\r\n return pattern.endsWith('/' + GLOBSTAR);\r\n}\r\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\r\nfunction isAffectDepthOfReadingPattern(pattern) {\r\n const basename = path.basename(pattern);\r\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\r\n}\r\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\r\nfunction expandPatternsWithBraceExpansion(patterns) {\r\n return patterns.reduce((collection, pattern) => {\r\n return collection.concat(expandBraceExpansion(pattern));\r\n }, []);\r\n}\r\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\r\nfunction expandBraceExpansion(pattern) {\r\n return micromatch.braces(pattern, {\r\n expand: true,\r\n nodupes: true\r\n });\r\n}\r\nexports.expandBraceExpansion = expandBraceExpansion;\r\nfunction getPatternParts(pattern, options) {\r\n let { parts } = picomatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\r\n /**\r\n * The scan method returns an empty array in some cases.\r\n * See micromatch/picomatch#58 for more details.\r\n */\r\n if (parts.length === 0) {\r\n parts = [pattern];\r\n }\r\n /**\r\n * The scan method does not return an empty part for the pattern with a forward slash.\r\n * This is another part of micromatch/picomatch#58.\r\n */\r\n if (parts[0].startsWith('/')) {\r\n parts[0] = parts[0].slice(1);\r\n parts.unshift('');\r\n }\r\n return parts;\r\n}\r\nexports.getPatternParts = getPatternParts;\r\nfunction makeRe(pattern, options) {\r\n return micromatch.makeRe(pattern, options);\r\n}\r\nexports.makeRe = makeRe;\r\nfunction convertPatternsToRe(patterns, options) {\r\n return patterns.map((pattern) => makeRe(pattern, options));\r\n}\r\nexports.convertPatternsToRe = convertPatternsToRe;\r\nfunction matchAny(entry, patternsRe) {\r\n return patternsRe.some((patternRe) => patternRe.test(entry));\r\n}\r\nexports.matchAny = matchAny;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.merge = void 0;\r\nconst merge2 = require(\"merge2\");\r\nfunction merge(streams) {\r\n const mergedStream = merge2(streams);\r\n streams.forEach((stream) => {\r\n stream.once('error', (error) => mergedStream.emit('error', error));\r\n });\r\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\r\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\r\n return mergedStream;\r\n}\r\nexports.merge = merge;\r\nfunction propagateCloseEventToSources(streams) {\r\n streams.forEach((stream) => stream.emit('close'));\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isEmpty = exports.isString = void 0;\r\nfunction isString(input) {\r\n return typeof input === 'string';\r\n}\r\nexports.isString = isString;\r\nfunction isEmpty(input) {\r\n return input === '';\r\n}\r\nexports.isEmpty = isEmpty;\r\n","'use strict'\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, concurrency) {\n if (typeof context === 'function') {\n concurrency = worker\n worker = context\n context = null\n }\n\n if (concurrency < 1) {\n throw new Error('fastqueue concurrency must be greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n concurrency: concurrency,\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n for (var i = 0; i < self.concurrency; i++) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running === self.concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n\n if (_running === self.concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nmodule.exports = fastqueue\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\/]*.*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n","/*!\n * is-extglob \n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictRegex = /\\\\(.)|(^!|\\*|[\\].+)]\\?|\\[[^\\\\\\]]+\\]|\\{[^\\\\}]+\\}|\\(\\?[:!=][^\\\\)]+\\)|\\([^|]+\\|[^\\\\)]+\\))/;\nvar relaxedRegex = /\\\\(.)|(^!|[*?{}()[\\]]|\\(\\?)/;\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var regex = strictRegex;\n var match;\n\n // optionally relax regex\n if (options && options.strict === false) {\n regex = relaxedRegex;\n }\n\n while ((match = regex.exec(str))) {\n if (match[2]) return true;\n var idx = match.index + match[0].length;\n\n // if an open bracket/brace/paren is escaped,\n // set the index to the next closing character\n var open = match[1];\n var close = open ? chars[open] : null;\n if (open && close) {\n var n = str.indexOf(close, idx);\n if (n !== -1) {\n idx = n + 1;\n }\n }\n\n str = str.slice(idx);\n }\n return false;\n};\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parse_url(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parse_url(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parse_url(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\nconst resolve_url = Url.resolve;\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tconst locationURL = location === null ? null : resolve_url(request.url, location);\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = (opts) => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index];\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.prev.type === 'bos' && eos()) {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance() || '';\n } else {\n value += advance() || '';\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = (opts) => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return parsed.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${parsed.output})${append}`;\n if (parsed && parsed.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = parsed;\n }\n\n return regex;\n};\n\npicomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n const opts = options || {};\n let parsed = { negated: false, fastpaths: true };\n let prefix = '';\n let output;\n\n if (input.startsWith('./')) {\n input = input.slice(2);\n prefix = parsed.prefix = './';\n }\n\n if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n output = parse.fastpaths(input, options);\n }\n\n if (output === undefined) {\n parsed = parse(input, options);\n parsed.prefix = prefix + (parsed.prefix || '');\n } else {\n parsed.output = output;\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n }\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n","/*! run-parallel. MIT License. Feross Aboukhadijeh */\nmodule.exports = runParallel\n\nfunction runParallel (tasks, cb) {\n var results, pending, keys\n var isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) process.nextTick(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace (c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote (c) {\n return c === '\"' || c === '\\''\n }\n\n function isAttribEnd (c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch (regex, c) {\n return regex.test(c)\n }\n\n function notMatch (regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // \n SCRIPT: S++, //