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.2837788] Discovering: FluentValidation.Tests +[xUnit.net 00:00:00.5914704] Discovered: FluentValidation.Tests +[xUnit.net 00:00:00.7008540] Starting: FluentValidation.Tests +[xUnit.net 00:00:00.8623084] Manual benchmark +Test 'FluentValidation.Tests.AccessorCacheTests.Benchmark' was skipped in the test run. +[xUnit.net 00:00:04.0635438] Finished: FluentValidation.Tests + + + + + [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++, //