From 7b8393e5ce073ac954027bb767bed846672aac97 Mon Sep 17 00:00:00 2001 From: Giorgi Rostomashvili Date: Thu, 22 Aug 2019 12:24:23 +0200 Subject: [PATCH 01/97] Fix `mockReturnValue` overriding `mockImplementationOnce` (#8398) --- CHANGELOG.md | 1 + .../jest-mock/src/__tests__/index.test.ts | 9 +++ packages/jest-mock/src/index.ts | 59 ++++--------------- 3 files changed, 23 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a69936a8fb79..8c608af9c29d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - `[expect]` Display expectedDiff more carefully in toBeCloseTo ([#8389](https://github.com/facebook/jest/pull/8389)) - `[jest-fake-timers]` `getTimerCount` will not include cancelled immediates ([#8764](https://github.com/facebook/jest/pull/8764)) - `[jest-leak-detector]` [**BREAKING**] Use `weak-napi` instead of `weak` package ([#8686](https://github.com/facebook/jest/pull/8686)) +- `[jest-mock]` Fix for mockReturnValue overriding mockImplementationOnce ([#8398](https://github.com/facebook/jest/pull/8398)) - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) ### Chore & Maintenance diff --git a/packages/jest-mock/src/__tests__/index.test.ts b/packages/jest-mock/src/__tests__/index.test.ts index f665def33ea6..2a3b83c9d323 100644 --- a/packages/jest-mock/src/__tests__/index.test.ts +++ b/packages/jest-mock/src/__tests__/index.test.ts @@ -1020,6 +1020,15 @@ describe('moduleMocker', () => { }); }); + test('mockReturnValue does not override mockImplementationOnce', () => { + const mockFn = jest + .fn() + .mockReturnValue(1) + .mockImplementationOnce(() => 2); + expect(mockFn()).toBe(2); + expect(mockFn()).toBe(1); + }); + test('mockImplementation resets the mock', () => { const fn = jest.fn(); expect(fn()).toBeUndefined(); diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index be19de0df52f..8afcd60b6a56 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -71,8 +71,6 @@ type MockFunctionState> = { }; type MockFunctionConfig = { - isReturnValueLastSet: boolean; - defaultReturnValue: unknown; mockImpl: Function | undefined; mockName: string; specificReturnValues: Array; @@ -456,8 +454,6 @@ class ModuleMockerClass { private _defaultMockConfig(): MockFunctionConfig { return { - defaultReturnValue: undefined, - isReturnValueLastSet: false, mockImpl: undefined, mockName: 'jest.fn()', specificMockImpls: [], @@ -586,40 +582,21 @@ class ModuleMockerClass { return mockImpl && mockImpl.apply(this, arguments); } - const returnValue = mockConfig.defaultReturnValue; - // If return value is last set, either specific or default, i.e. - // mockReturnValueOnce()/mockReturnValue() is called and no - // mockImplementationOnce()/mockImplementation() is called after - // that. - // use the set return value. - if (mockConfig.specificReturnValues.length) { - return mockConfig.specificReturnValues.shift(); - } - - if (mockConfig.isReturnValueLastSet) { - return mockConfig.defaultReturnValue; - } - // If mockImplementationOnce()/mockImplementation() is last set, - // or specific return values are used up, use the mock - // implementation. - let specificMockImpl; - if (returnValue === undefined) { - specificMockImpl = mockConfig.specificMockImpls.shift(); - if (specificMockImpl === undefined) { - specificMockImpl = mockConfig.mockImpl; - } - if (specificMockImpl) { - return specificMockImpl.apply(this, arguments); - } + // implementation use the mock + let specificMockImpl = mockConfig.specificMockImpls.shift(); + if (specificMockImpl === undefined) { + specificMockImpl = mockConfig.mockImpl; + } + if (specificMockImpl) { + return specificMockImpl.apply(this, arguments); } - // Otherwise use prototype implementation - if (returnValue === undefined && f._protoImpl) { + if (f._protoImpl) { return f._protoImpl.apply(this, arguments); } - return returnValue; + return undefined; })(); } catch (error) { // Store the thrown error so we can record it, then re-throw it. @@ -675,12 +652,9 @@ class ModuleMockerClass { return restore ? restore() : undefined; }; - f.mockReturnValueOnce = (value: T) => { + f.mockReturnValueOnce = (value: T) => // next function call will return this value or default return value - const mockConfig = this._ensureMockConfig(f); - mockConfig.specificReturnValues.push(value); - return f; - }; + f.mockImplementationOnce(() => value); f.mockResolvedValueOnce = (value: T) => f.mockImplementationOnce(() => Promise.resolve(value)); @@ -688,13 +662,9 @@ class ModuleMockerClass { f.mockRejectedValueOnce = (value: T) => f.mockImplementationOnce(() => Promise.reject(value)); - f.mockReturnValue = (value: T) => { + f.mockReturnValue = (value: T) => // next function call will return specified return value or this one - const mockConfig = this._ensureMockConfig(f); - mockConfig.isReturnValueLastSet = true; - mockConfig.defaultReturnValue = value; - return f; - }; + f.mockImplementation(() => value); f.mockResolvedValue = (value: T) => f.mockImplementation(() => Promise.resolve(value)); @@ -708,7 +678,6 @@ class ModuleMockerClass { // next function call will use this mock implementation return value // or default mock implementation return value const mockConfig = this._ensureMockConfig(f); - mockConfig.isReturnValueLastSet = false; mockConfig.specificMockImpls.push(fn); return f; }; @@ -718,8 +687,6 @@ class ModuleMockerClass { ): Mock => { // next function call will use mock implementation return value const mockConfig = this._ensureMockConfig(f); - mockConfig.isReturnValueLastSet = false; - mockConfig.defaultReturnValue = undefined; mockConfig.mockImpl = fn; return f; }; From b8a4a8559977a60b24b92036ab7eabf50c6f89ac Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 22 Aug 2019 15:47:08 +0200 Subject: [PATCH 02/97] chore: remove deprecated exports from jest-util (#8863) --- CHANGELOG.md | 1 + packages/jest-core/src/runJest.ts | 3 +- packages/jest-fake-timers/package.json | 3 +- .../jest-fake-timers/src/jestFakeTimers.ts | 11 +-- packages/jest-fake-timers/tsconfig.json | 3 +- packages/jest-jasmine2/package.json | 1 + packages/jest-jasmine2/src/index.ts | 2 +- packages/jest-jasmine2/tsconfig.json | 1 + packages/jest-reporters/package.json | 1 + .../src/__tests__/default_reporter.test.js | 17 ++--- .../jest-reporters/src/default_reporter.ts | 3 +- packages/jest-reporters/tsconfig.json | 1 + packages/jest-util/package.json | 10 +-- .../src/__tests__/getFailedSnapshot.test.ts | 72 ------------------- .../jest-util/src/getFailedSnapshotTests.ts | 26 ------- packages/jest-util/src/index.ts | 21 +----- packages/jest-util/tsconfig.json | 4 -- 17 files changed, 24 insertions(+), 156 deletions(-) delete mode 100644 packages/jest-util/src/__tests__/getFailedSnapshot.test.ts delete mode 100644 packages/jest-util/src/getFailedSnapshotTests.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c608af9c29d..80091cab6d3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - `[*]` [**BREAKING**] Upgrade to Micromatch v4 ([#8852](https://github.com/facebook/jest/pull/8852)) - `[docs]` Fix broken link pointing to legacy JS file in "Snapshot Testing". - `[jest-environment-jsdom]` [**BREAKING**] Upgrade JSDOM from v11 to v15 ([#8851](https://github.com/facebook/jest/pull/8851)) +- `[jest-util]` [**BREAKING**] Remove deprecated exports ([#8863](https://github.com/facebook/jest/pull/8863)) ### Performance diff --git a/packages/jest-core/src/runJest.ts b/packages/jest-core/src/runJest.ts index 8082d52cd99c..3a9d293b127b 100644 --- a/packages/jest-core/src/runJest.ts +++ b/packages/jest-core/src/runJest.ts @@ -9,7 +9,7 @@ import * as path from 'path'; import chalk from 'chalk'; import {sync as realpath} from 'realpath-native'; import {CustomConsole} from '@jest/console'; -import {formatTestResults, interopRequireDefault} from 'jest-util'; +import {interopRequireDefault} from 'jest-util'; import exit = require('exit'); import * as fs from 'graceful-fs'; import {JestHook, JestHookEmitter} from 'jest-watcher'; @@ -18,6 +18,7 @@ import {Test} from 'jest-runner'; import {Config} from '@jest/types'; import { AggregatedResult, + formatTestResults, makeEmptyAggregatedTestResult, } from '@jest/test-result'; // eslint-disable-next-line import/no-extraneous-dependencies diff --git a/packages/jest-fake-timers/package.json b/packages/jest-fake-timers/package.json index 03719109627f..52c246bbf7c0 100644 --- a/packages/jest-fake-timers/package.json +++ b/packages/jest-fake-timers/package.json @@ -12,7 +12,8 @@ "dependencies": { "@jest/types": "^24.9.0", "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" }, "engines": { "node": ">= 8" diff --git a/packages/jest-fake-timers/src/jestFakeTimers.ts b/packages/jest-fake-timers/src/jestFakeTimers.ts index 457d85fdf166..804320848897 100644 --- a/packages/jest-fake-timers/src/jestFakeTimers.ts +++ b/packages/jest-fake-timers/src/jestFakeTimers.ts @@ -7,6 +7,7 @@ import {ModuleMocker} from 'jest-mock'; import {StackTraceConfig, formatStackTrace} from 'jest-message-util'; +import {setGlobal} from 'jest-util'; type Callback = (...args: Array) => void; @@ -42,16 +43,6 @@ type TimerConfig = { const MS_IN_A_YEAR = 31536000000; -// TODO: Copied from `jest-util` to avoid cyclic dependency. Import from `jest-util` in the next major -const setGlobal = ( - globalToMutate: NodeJS.Global | Window, - key: string, - value: unknown, -) => { - // @ts-ignore: no index - globalToMutate[key] = value; -}; - export default class FakeTimers { private _cancelledTicks!: Record; private _config: StackTraceConfig; diff --git a/packages/jest-fake-timers/tsconfig.json b/packages/jest-fake-timers/tsconfig.json index 335b1e9c373a..7105524da628 100644 --- a/packages/jest-fake-timers/tsconfig.json +++ b/packages/jest-fake-timers/tsconfig.json @@ -6,6 +6,7 @@ }, "references": [ {"path": "../jest-message-util"}, - {"path": "../jest-mock"} + {"path": "../jest-mock"}, + {"path": "../jest-util"} ] } diff --git a/packages/jest-jasmine2/package.json b/packages/jest-jasmine2/package.json index ada9c9ed4394..e2c82903825c 100644 --- a/packages/jest-jasmine2/package.json +++ b/packages/jest-jasmine2/package.json @@ -12,6 +12,7 @@ "dependencies": { "@babel/traverse": "^7.1.0", "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.9.0", "@jest/test-result": "^24.9.0", "@jest/types": "^24.9.0", "chalk": "^2.0.1", diff --git a/packages/jest-jasmine2/src/index.ts b/packages/jest-jasmine2/src/index.ts index af9bd39281dd..6122832f8fe4 100644 --- a/packages/jest-jasmine2/src/index.ts +++ b/packages/jest-jasmine2/src/index.ts @@ -12,7 +12,7 @@ import {JestEnvironment} from '@jest/environment'; import {SnapshotStateType} from 'jest-snapshot'; import Runtime = require('jest-runtime'); -import {getCallsite} from 'jest-util'; +import {getCallsite} from '@jest/source-map'; import installEach from './each'; import {installErrorOnPrivate} from './errorOnPrivate'; import JasmineReporter from './reporter'; diff --git a/packages/jest-jasmine2/tsconfig.json b/packages/jest-jasmine2/tsconfig.json index 9cad84ed04af..a52d122e4792 100644 --- a/packages/jest-jasmine2/tsconfig.json +++ b/packages/jest-jasmine2/tsconfig.json @@ -12,6 +12,7 @@ {"path": "../jest-message-util"}, {"path": "../jest-runtime"}, {"path": "../jest-snapshot"}, + {"path": "../jest-source-map"}, {"path": "../jest-test-result"}, {"path": "../jest-types"}, {"path": "../jest-util"}, diff --git a/packages/jest-reporters/package.json b/packages/jest-reporters/package.json index aa3431cc7e26..d6f3cb2f3eb8 100644 --- a/packages/jest-reporters/package.json +++ b/packages/jest-reporters/package.json @@ -5,6 +5,7 @@ "main": "build/index.js", "types": "build/index.d.ts", "dependencies": { + "@jest/console": "^24.9.0", "@jest/environment": "^24.9.0", "@jest/test-result": "^24.9.0", "@jest/transform": "^24.9.0", diff --git a/packages/jest-reporters/src/__tests__/default_reporter.test.js b/packages/jest-reporters/src/__tests__/default_reporter.test.js index 060e817fa37b..c714842eb3a9 100644 --- a/packages/jest-reporters/src/__tests__/default_reporter.test.js +++ b/packages/jest-reporters/src/__tests__/default_reporter.test.js @@ -5,7 +5,13 @@ * LICENSE file in the root directory of this source tree. */ -'use strict'; +import DefaultReporter from '../default_reporter'; + +jest.mock('jest-util', () => ({ + ...jest.requireActual('jest-util'), + // This is not a CI environment, which removes all output by default. + isInteractive: true, +})); const aggregatedResults = {}; const options = {}; @@ -26,7 +32,6 @@ const testResult = { testFilePath: '/foo', }; -let DefaultReporter; let stdout; let oldIsTTY; @@ -34,14 +39,8 @@ let oldStderr; let oldStdout; beforeEach(() => { - jest.resetModules(); jest.useFakeTimers(); - // This is not a CI environment, which removes all output by default. - jest.unmock('jest-util'); - const util = require('jest-util'); - util.isInteractive = true; - oldIsTTY = process.stdin.isTTY; oldStdout = process.stdout.write; oldStderr = process.stderr.write; @@ -52,8 +51,6 @@ beforeEach(() => { process.stdin.isTTY = true; process.stderr.write = jest.fn(); stdout = process.stdout.write = jest.fn(); - - DefaultReporter = require('../default_reporter').default; }); afterEach(() => { diff --git a/packages/jest-reporters/src/default_reporter.ts b/packages/jest-reporters/src/default_reporter.ts index c141434d5776..9f9f613ac001 100644 --- a/packages/jest-reporters/src/default_reporter.ts +++ b/packages/jest-reporters/src/default_reporter.ts @@ -7,7 +7,8 @@ import {Config} from '@jest/types'; import {AggregatedResult, TestResult} from '@jest/test-result'; -import {clearLine, getConsoleOutput, isInteractive} from 'jest-util'; +import {clearLine, isInteractive} from 'jest-util'; +import {getConsoleOutput} from '@jest/console'; import chalk from 'chalk'; import {ReporterOnStartOptions, Test} from './types'; import BaseReporter from './base_reporter'; diff --git a/packages/jest-reporters/tsconfig.json b/packages/jest-reporters/tsconfig.json index 00dffcebc22f..bdf1b1cdc9ee 100644 --- a/packages/jest-reporters/tsconfig.json +++ b/packages/jest-reporters/tsconfig.json @@ -5,6 +5,7 @@ "outDir": "build" }, "references": [ + {"path": "../jest-console"}, {"path": "../jest-environment"}, {"path": "../jest-haste-map"}, {"path": "../jest-resolve"}, diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index 9860ef69b91e..e2d3e4c6bb4c 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -10,18 +10,10 @@ "main": "build/index.js", "types": "build/index.d.ts", "dependencies": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", "@jest/types": "^24.9.0", - "callsites": "^3.0.0", "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0" + "mkdirp": "^0.5.1" }, "devDependencies": { "@types/graceful-fs": "^4.1.2", diff --git a/packages/jest-util/src/__tests__/getFailedSnapshot.test.ts b/packages/jest-util/src/__tests__/getFailedSnapshot.test.ts deleted file mode 100644 index d1dbcd19d10b..000000000000 --- a/packages/jest-util/src/__tests__/getFailedSnapshot.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import getFailedSnapshotTests from '../getFailedSnapshotTests'; - -test('return a list of path', () => { - const targetFilename = 'somewhere.js'; - const param = { - numFailedTests: 1, - testResults: [ - { - snapshot: { - unmatched: 1, - }, - testFilePath: targetFilename, - }, - ], - }; - // @ts-ignore - expect(getFailedSnapshotTests(param)).toEqual([targetFilename]); -}); - -test('handle missing snapshot object', () => { - const targetFilename = 'somewhere.js'; - const param = { - numFailedTests: 1, - testResults: [ - { - testFilePath: targetFilename, - }, - ], - }; - // @ts-ignore - expect(getFailedSnapshotTests(param)).toEqual([]); -}); - -test('handle missing testResults object', () => { - const param = { - numFailedTests: 1, - }; - // @ts-ignore - expect(getFailedSnapshotTests(param)).toEqual([]); -}); - -test('return empty if not failed tests', () => { - const param = { - numFailedTests: 0, - }; - // @ts-ignore - expect(getFailedSnapshotTests(param)).toEqual([]); -}); - -test('return empty if not failed snapshot tests', () => { - const targetFilename = 'somewhere.js'; - const param = { - numFailedTests: 0, - testResults: [ - { - snapshot: { - unmatched: 0, - }, - testFilePath: targetFilename, - }, - ], - }; - // @ts-ignore - expect(getFailedSnapshotTests(param)).toEqual([]); -}); diff --git a/packages/jest-util/src/getFailedSnapshotTests.ts b/packages/jest-util/src/getFailedSnapshotTests.ts deleted file mode 100644 index 913c954440b4..000000000000 --- a/packages/jest-util/src/getFailedSnapshotTests.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import {Config} from '@jest/types'; -import {AggregatedResult} from '@jest/test-result'; - -function getFailedSnapshotTests(testResults: AggregatedResult) { - const failedTestPaths: Array = []; - if (testResults.numFailedTests === 0 || !testResults.testResults) { - return failedTestPaths; - } - - testResults.testResults.forEach(testResult => { - if (testResult.snapshot && testResult.snapshot.unmatched) { - failedTestPaths.push(testResult.testFilePath); - } - }); - - return failedTestPaths; -} - -export default getFailedSnapshotTests; diff --git a/packages/jest-util/src/index.ts b/packages/jest-util/src/index.ts index 6f1f6cf92d19..db8872b0df36 100644 --- a/packages/jest-util/src/index.ts +++ b/packages/jest-util/src/index.ts @@ -5,20 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -// TODO: Remove these exports in the next major -import {JestFakeTimers as FakeTimers} from '@jest/fake-timers'; -import {getCallsite} from '@jest/source-map'; -import { - BufferedConsole, - CustomConsole, - NullConsole, - getConsoleOutput, -} from '@jest/console'; -import {formatTestResults} from '@jest/test-result'; import clearLine from './clearLine'; import createDirectory from './createDirectory'; import ErrorWithStack from './ErrorWithStack'; -import getFailedSnapshotTests from './getFailedSnapshotTests'; import installCommonGlobals from './installCommonGlobals'; import interopRequireDefault from './interopRequireDefault'; import isInteractive from './isInteractive'; @@ -32,20 +21,12 @@ import testPathPatternToRegExp from './testPathPatternToRegExp'; import * as preRunMessage from './preRunMessage'; import pluralize from './pluralize'; -export = { - BufferedConsole, - Console: CustomConsole, +export { ErrorWithStack, - FakeTimers, - NullConsole, clearLine, convertDescriptorToString, createDirectory, deepCyclicCopy, - formatTestResults, - getCallsite, - getConsoleOutput, - getFailedSnapshotTests, installCommonGlobals, interopRequireDefault, isInteractive, diff --git a/packages/jest-util/tsconfig.json b/packages/jest-util/tsconfig.json index f40d52b2fb32..b802dbf5ce24 100644 --- a/packages/jest-util/tsconfig.json +++ b/packages/jest-util/tsconfig.json @@ -5,10 +5,6 @@ "outDir": "build" }, "references": [ - {"path": "../jest-console"}, - {"path": "../jest-fake-timers"}, - {"path": "../jest-source-map"}, - {"path": "../jest-test-result"}, {"path": "../jest-types"} ] } From 93555aad71466ac6f8aff38c61e6b5d01da2d4df Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 22 Aug 2019 16:10:29 +0200 Subject: [PATCH 03/97] feat: show better errors from babel-plugin-jest-hoist (#8865) --- CHANGELOG.md | 1 + packages/babel-plugin-jest-hoist/src/index.ts | 183 +++++++++--------- 2 files changed, 92 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80091cab6d3c..f2322ac2735e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features +- `[babel-plugin-jest-hoist]` Show codeframe on static hoisting issues ([#8865](https://github.com/facebook/jest/pull/8865)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) ### Fixes diff --git a/packages/babel-plugin-jest-hoist/src/index.ts b/packages/babel-plugin-jest-hoist/src/index.ts index 81d0a4cefc65..d321b13af59a 100644 --- a/packages/babel-plugin-jest-hoist/src/index.ts +++ b/packages/babel-plugin-jest-hoist/src/index.ts @@ -7,76 +7,70 @@ */ // Only used for types -// eslint-disable-next-line +/* eslint-disable import/no-extraneous-dependencies */ import {NodePath, Visitor} from '@babel/traverse'; -// eslint-disable-next-line import {Identifier} from '@babel/types'; - -const invariant = (condition: unknown, message: string) => { - if (!condition) { - throw new Error('babel-plugin-jest-hoist: ' + message); - } -}; +/* eslint-enable */ // We allow `jest`, `expect`, `require`, all default Node.js globals and all // ES2015 built-ins to be used inside of a `jest.mock` factory. // We also allow variables prefixed with `mock` as an escape-hatch. -const WHITELISTED_IDENTIFIERS: Set = new Set([ - 'Array', - 'ArrayBuffer', - 'Boolean', - 'DataView', - 'Date', - 'Error', - 'EvalError', - 'Float32Array', - 'Float64Array', - 'Function', - 'Generator', - 'GeneratorFunction', - 'Infinity', - 'Int16Array', - 'Int32Array', - 'Int8Array', - 'InternalError', - 'Intl', - 'JSON', - 'Map', - 'Math', - 'NaN', - 'Number', - 'Object', - 'Promise', - 'Proxy', - 'RangeError', - 'ReferenceError', - 'Reflect', - 'RegExp', - 'Set', - 'String', - 'Symbol', - 'SyntaxError', - 'TypeError', - 'URIError', - 'Uint16Array', - 'Uint32Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'WeakMap', - 'WeakSet', - 'arguments', - 'console', - 'expect', - 'isNaN', - 'jest', - 'parseFloat', - 'parseInt', - 'require', - 'undefined', -]); -Object.getOwnPropertyNames(global).forEach(name => { - WHITELISTED_IDENTIFIERS.add(name); -}); +const WHITELISTED_IDENTIFIERS = new Set( + [ + 'Array', + 'ArrayBuffer', + 'Boolean', + 'DataView', + 'Date', + 'Error', + 'EvalError', + 'Float32Array', + 'Float64Array', + 'Function', + 'Generator', + 'GeneratorFunction', + 'Infinity', + 'Int16Array', + 'Int32Array', + 'Int8Array', + 'InternalError', + 'Intl', + 'JSON', + 'Map', + 'Math', + 'NaN', + 'Number', + 'Object', + 'Promise', + 'Proxy', + 'RangeError', + 'ReferenceError', + 'Reflect', + 'RegExp', + 'Set', + 'String', + 'Symbol', + 'SyntaxError', + 'TypeError', + 'URIError', + 'Uint16Array', + 'Uint32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'WeakMap', + 'WeakSet', + 'arguments', + 'console', + 'expect', + 'isNaN', + 'jest', + 'parseFloat', + 'parseInt', + 'require', + 'undefined', + ...Object.getOwnPropertyNames(global), + ].sort(), +); const JEST_GLOBAL = {name: 'jest'}; // TODO: Should be Visitor<{ids: Set>}>, but `ReferencedIdentifier` doesn't exist @@ -93,15 +87,18 @@ const FUNCTIONS: Record< (args: Array) => boolean > = Object.create(null); -FUNCTIONS.mock = (args: Array) => { +FUNCTIONS.mock = args => { if (args.length === 1) { return args[0].isStringLiteral() || args[0].isLiteral(); } else if (args.length === 2 || args.length === 3) { const moduleFactory = args[1]; - invariant( - moduleFactory.isFunction(), - 'The second argument of `jest.mock` must be an inline function.', - ); + + if (!moduleFactory.isFunction()) { + throw moduleFactory.buildCodeFrameError( + 'The second argument of `jest.mock` must be an inline function.\n', + TypeError, + ); + } const ids: Set> = new Set(); const parentScope = moduleFactory.parentPath.scope; @@ -122,23 +119,28 @@ FUNCTIONS.mock = (args: Array) => { } if (!found) { - invariant( + const isAllowedIdentifier = (scope.hasGlobal(name) && WHITELISTED_IDENTIFIERS.has(name)) || - /^mock/i.test(name) || - // Allow istanbul's coverage variable to pass. - /^(?:__)?cov/.test(name), - 'The module factory of `jest.mock()` is not allowed to ' + - 'reference any out-of-scope variables.\n' + - 'Invalid variable access: ' + - name + - '\n' + - 'Whitelisted objects: ' + - Array.from(WHITELISTED_IDENTIFIERS).join(', ') + - '.\n' + - 'Note: This is a precaution to guard against uninitialized mock ' + - 'variables. If it is ensured that the mock is required lazily, ' + - 'variable names prefixed with `mock` (case insensitive) are permitted.', - ); + /^mock/i.test(name) || + // Allow istanbul's coverage variable to pass. + /^(?:__)?cov/.test(name); + + if (!isAllowedIdentifier) { + throw id.buildCodeFrameError( + 'The module factory of `jest.mock()` is not allowed to ' + + 'reference any out-of-scope variables.\n' + + 'Invalid variable access: ' + + name + + '\n' + + 'Whitelisted objects: ' + + Array.from(WHITELISTED_IDENTIFIERS).join(', ') + + '.\n' + + 'Note: This is a precaution to guard against uninitialized mock ' + + 'variables. If it is ensured that the mock is required lazily, ' + + 'variable names prefixed with `mock` (case insensitive) are permitted.\n', + ReferenceError, + ); + } } } @@ -147,13 +149,10 @@ FUNCTIONS.mock = (args: Array) => { return false; }; -FUNCTIONS.unmock = (args: Array) => - args.length === 1 && args[0].isStringLiteral(); -FUNCTIONS.deepUnmock = (args: Array) => - args.length === 1 && args[0].isStringLiteral(); -FUNCTIONS.disableAutomock = FUNCTIONS.enableAutomock = ( - args: Array, -) => args.length === 0; +FUNCTIONS.unmock = args => args.length === 1 && args[0].isStringLiteral(); +FUNCTIONS.deepUnmock = args => args.length === 1 && args[0].isStringLiteral(); +FUNCTIONS.disableAutomock = FUNCTIONS.enableAutomock = args => + args.length === 0; export = () => { const shouldHoistExpression = (expr: NodePath): boolean => { From 16f7385a115658687308bcb5119d7aec12efbe14 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 22 Aug 2019 16:17:12 +0200 Subject: [PATCH 04/97] chore: make `weak-napi` optional (#8869) --- packages/jest-leak-detector/package.json | 6 +++--- packages/jest-leak-detector/src/index.ts | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/jest-leak-detector/package.json b/packages/jest-leak-detector/package.json index 7ada18f6b592..70770c44c90d 100644 --- a/packages/jest-leak-detector/package.json +++ b/packages/jest-leak-detector/package.json @@ -11,11 +11,11 @@ "types": "build/index.d.ts", "dependencies": { "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0", - "weak-napi": "^1.0.3" + "pretty-format": "^24.9.0" }, "devDependencies": { - "@types/weak-napi": "^1.0.0" + "@types/weak-napi": "^1.0.0", + "weak-napi": "^1.0.3" }, "engines": { "node": ">= 8" diff --git a/packages/jest-leak-detector/src/index.ts b/packages/jest-leak-detector/src/index.ts index d8152476dec8..2d068275e68a 100644 --- a/packages/jest-leak-detector/src/index.ts +++ b/packages/jest-leak-detector/src/index.ts @@ -7,7 +7,6 @@ import {setFlagsFromString} from 'v8'; import {runInNewContext} from 'vm'; -import weak = require('weak-napi'); import prettyFormat = require('pretty-format'); import {isPrimitive} from 'jest-get-type'; @@ -24,6 +23,22 @@ export default class { ); } + let weak: typeof import('weak-napi'); + + try { + // eslint-disable-next-line import/no-extraneous-dependencies + weak = require('weak-napi'); + } catch (err) { + if (!err || err.code !== 'MODULE_NOT_FOUND') { + throw err; + } + + throw new Error( + 'The leaking detection mechanism requires the "weak-napi" package to be installed and work. ' + + 'Please install it as a dependency on your main project', + ); + } + weak(value as object, () => (this._isReferenceBeingHeld = false)); this._isReferenceBeingHeld = true; From 588f93a0da588d51ea573cbf96a6b664f47232e7 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 22 Aug 2019 20:33:47 +0530 Subject: [PATCH 05/97] Add util to create empty testResult (#8867) --- CHANGELOG.md | 1 + .../jestAdapterInit.ts | 25 ++++++------------- packages/jest-jasmine2/src/reporter.ts | 11 ++++---- packages/jest-test-result/src/helpers.ts | 25 +++++++++++++++++++ packages/jest-test-result/src/index.ts | 1 + 5 files changed, 40 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2322ac2735e..aff3ad9d7cf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - `[babel-plugin-jest-hoist]` Show codeframe on static hoisting issues ([#8865](https://github.com/facebook/jest/pull/8865)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) +- `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) ### Fixes diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts index 2380e616dd68..0b0f92095ba3 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts @@ -7,7 +7,12 @@ import {Circus, Config, Global} from '@jest/types'; import {JestEnvironment} from '@jest/environment'; -import {AssertionResult, Status, TestResult} from '@jest/test-result'; +import { + AssertionResult, + Status, + TestResult, + createEmptyTestResult, +} from '@jest/test-result'; import {extractExpectedAssertionsErrors, getState, setState} from 'expect'; import {formatExecError, formatResultsErrors} from 'jest-message-util'; import { @@ -215,30 +220,14 @@ export const runAndTransformResultsToJestFormat = async ({ dispatch({name: 'teardown'}); return { + ...createEmptyTestResult(), console: undefined, displayName: config.displayName, failureMessage, - leaks: false, // That's legacy code, just adding it so Flow is happy. numFailingTests, numPassingTests, numPendingTests, numTodoTests, - openHandles: [], - perfStats: { - // populated outside - end: 0, - start: 0, - }, - skipped: false, - snapshot: { - added: 0, - fileDeleted: false, - matched: 0, - unchecked: 0, - uncheckedKeys: [], - unmatched: 0, - updated: 0, - }, sourceMaps: {}, testExecError, testFilePath: testPath, diff --git a/packages/jest-jasmine2/src/reporter.ts b/packages/jest-jasmine2/src/reporter.ts index 7354a8b42208..7970c045a738 100644 --- a/packages/jest-jasmine2/src/reporter.ts +++ b/packages/jest-jasmine2/src/reporter.ts @@ -6,7 +6,11 @@ */ import {Config} from '@jest/types'; -import {AssertionResult, TestResult} from '@jest/test-result'; +import { + AssertionResult, + TestResult, + createEmptyTestResult, +} from '@jest/test-result'; import {formatResultsErrors} from 'jest-message-util'; import {SpecResult} from './jasmine/Spec'; import {SuiteResult} from './jasmine/Suite'; @@ -78,6 +82,7 @@ export default class Jasmine2Reporter implements Reporter { }); const testResult = { + ...createEmptyTestResult(), console: null, failureMessage: formatResultsErrors( testResults, @@ -89,10 +94,6 @@ export default class Jasmine2Reporter implements Reporter { numPassingTests, numPendingTests, numTodoTests, - perfStats: { - end: 0, - start: 0, - }, snapshot: { added: 0, fileDeleted: false, diff --git a/packages/jest-test-result/src/helpers.ts b/packages/jest-test-result/src/helpers.ts index 6020142861bc..07bc0e6e2226 100644 --- a/packages/jest-test-result/src/helpers.ts +++ b/packages/jest-test-result/src/helpers.ts @@ -145,3 +145,28 @@ export const addResult = ( testResult.snapshot.unmatched + testResult.snapshot.updated; }; + +export const createEmptyTestResult = (): TestResult => ({ + leaks: false, // That's legacy code, just adding it as needed for typing + numFailingTests: 0, + numPassingTests: 0, + numPendingTests: 0, + numTodoTests: 0, + openHandles: [], + perfStats: { + end: 0, + start: 0, + }, + skipped: false, + snapshot: { + added: 0, + fileDeleted: false, + matched: 0, + unchecked: 0, + uncheckedKeys: [], + unmatched: 0, + updated: 0, + }, + testFilePath: '', + testResults: [], +}); diff --git a/packages/jest-test-result/src/index.ts b/packages/jest-test-result/src/index.ts index aa51fb4b4024..d942f144e519 100644 --- a/packages/jest-test-result/src/index.ts +++ b/packages/jest-test-result/src/index.ts @@ -9,6 +9,7 @@ export {default as formatTestResults} from './formatTestResults'; export { addResult, buildFailureTestResult, + createEmptyTestResult, makeEmptyAggregatedTestResult, } from './helpers'; export { From 522ed17dcebf988450b93ddb8bf748249c75de82 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Thu, 22 Aug 2019 11:39:27 -0400 Subject: [PATCH 06/97] jest-diff: Add options for colors and symbols (#8841) --- CHANGELOG.md | 1 + packages/jest-diff/README.md | 291 ++++++++++++++++++ .../__tests__/__snapshots__/diff.test.ts.snap | 119 ++++++- packages/jest-diff/src/__tests__/diff.test.ts | 126 +++++++- .../src/__tests__/getAlignedDiffs.test.ts | 8 +- .../src/__tests__/joinAlignedDiffs.test.ts | 31 +- packages/jest-diff/src/diffLines.ts | 118 ++++--- packages/jest-diff/src/getAlignedDiffs.ts | 8 +- packages/jest-diff/src/index.ts | 33 +- packages/jest-diff/src/joinAlignedDiffs.ts | 27 +- .../jest-diff/src/normalizeDiffOptions.ts | 42 +++ packages/jest-diff/src/printDiffs.ts | 223 ++++++++------ packages/jest-diff/src/types.ts | 25 +- .../printDiffOrStringify.test.ts.snap | 15 + .../__tests__/printDiffOrStringify.test.ts | 12 + packages/jest-matcher-utils/src/index.ts | 82 ++++- .../printDiffOrStringified.test.ts.snap | 42 ++- .../__tests__/printDiffOrStringified.test.ts | 30 ++ packages/jest-snapshot/src/print.ts | 43 +-- 19 files changed, 1046 insertions(+), 230 deletions(-) create mode 100644 packages/jest-diff/README.md create mode 100644 packages/jest-diff/src/normalizeDiffOptions.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index aff3ad9d7cf0..a95862c27536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - `[babel-plugin-jest-hoist]` Show codeframe on static hoisting issues ([#8865](https://github.com/facebook/jest/pull/8865)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) +- `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) ### Fixes diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md new file mode 100644 index 000000000000..d60e630be761 --- /dev/null +++ b/packages/jest-diff/README.md @@ -0,0 +1,291 @@ +# jest-diff + +Display differences clearly so people can review changes confidently. + +The default export serializes JavaScript **values** and compares them line-by-line. + +Two named exports compare **strings** character-by-character: + +- `diffStringsUnified` returns a string which includes comparison lines. +- `diffStringsRaw` returns an array of `Diff` objects. + +## Installation + +To add this package as a dependency of a project, run either of the following commands: + +- `npm install jest-diff` +- `yarn add jest-diff` + +## Usage of default export + +Given values and optional options, `diffLinesUnified(a, b, options?)` does the following: + +- **serialize** the values as strings using the `pretty-format` package +- **compare** the strings line-by-line using the `diff-sequences` package +- **format** the changed or common lines using the `chalk` package + +To use this function, write either of the following: + +- `const diffLinesUnified = require('jest-diff');` in a CommonJS module +- `import diffLinesUnified from 'jest-diff';` in an ECMAScript module + +### Example of default export + +```js +const a = ['delete', 'change from', 'common']; +const b = ['change to', 'insert', 'common']; + +const difference = diffLinesUnified(a, b); +``` + +The returned **string** consists of: + +- annotation lines which describe the change symbols with labels +- blank line +- comparison lines: similar to “unified” view on GitHub, but `Expected` lines are green, `Received` lines are red, and common lines are dim (by default, see Options) + +```diff +- Expected ++ Received + + Array [ +- "delete", +- "change from", ++ "change to", ++ "insert", + "common", + ] +``` + +### Edge cases of default export + +Here are edge cases for the return value: + +- `' Comparing two different types of values. …'` if the arguments have **different types** according to the `jest-get-type` package (instances of different classes have the same `'object'` type) +- `'Compared values have no visual difference.'` if the arguments have either **referential identity** according to `Object.is` method or **same serialization** according to the `pretty-format` package +- `null` if either argument is a so-called **asymmetric matcher** in Jasmine or Jest + +## Usage of diffStringsUnified + +Given strings and optional options, `diffStringsUnified(a, b, options?)` does the following: + +- **compare** the strings character-by-character using the `diff-sequences` package +- **clean up** small (often coincidental) common substrings, also known as chaff +- **format** the changed or common lines using the `chalk` package + +Although the function is mainly for **multiline** strings, it compares any strings. + +Write either of the following: + +- `const {diffStringsUnified} = require('jest-diff');` in a CommonJS module +- `import {diffStringsUnified} from 'jest-diff';` in an ECMAScript module + +### Example of diffStringsUnified + +```js +const a = 'change from\ncommon'; +const b = 'change to\ncommon'; + +const difference = diffStringsUnified(a, b); +``` + +The returned **string** consists of: + +- annotation lines which describe the change symbols with labels +- blank line +- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverted** foreground and background colors + +```diff +- Expected ++ Received + +- change from ++ change to + common +``` + +### Edge cases of diffStringsUnified + +Here are edge cases for the return value: + +- both `a` and `b` are empty strings: no comparison lines +- only `a` is empty string: all comparison lines have `bColor` and `bSymbol` (see Options) +- only `b` is empty string: all comparison lines have `aColor` and `aSymbol` (see Options) +- `a` and `b` are equal non-empty strings: all comparison lines have `commonColor` and `commonSymbol` (see Options) + +### Performance of diffStringsUnified + +To get the benefit of **changed substrings** within the comparison lines, a character-by-character comparison has a higher computational cost (in time and space) than a line-by-line comparison. + +If the input strings can have **arbitrary length**, we recommend that the calling code set a limit, beyond which it calls the default export instead. For example, Jest falls back to line-by-line comparison if either string has length greater than 20K characters. + +## Usage of diffStringsRaw + +Given strings, `diffStringsRaw(a, b, cleanup)` does the following: + +- **compare** the strings character-by-character using the `diff-sequences` package +- optionally **clean up** small (often coincidental) common substrings, also known as chaff + +Write one of the following: + +- `const {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diffStringsRaw} = require('jest-diff');` in a CommonJS module +- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diffStringsRaw} from 'jest-diff';` in an ECMAScript module +- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from 'jest-diff';` in a TypeScript module + +The returned **array** describes substrings as instances of the `Diff` class (which calling code can access like array tuples). + +| value | named export | description | +| ----: | :------------ | :-------------------- | +| `0` | `DIFF_EQUAL` | in `a` and in `b` | +| `-1` | `DIFF_DELETE` | in `a` but not in `b` | +| `1` | `DIFF_INSERT` | in `b` but not in `a` | + +Because `diffStringsRaw` returns the difference as **data** instead of a string, you are free to format it as your application requires (for example, enclosed in HTML markup for browser instead of escape sequences for console). + +### Example of diffStringsRaw with cleanup + +```js +const diffs = diffStringsRaw('change from', 'change to', true); + +// diffs[0][0] === DIFF_EQUAL +// diffs[0][1] === 'change ' + +// diffs[1][0] === DIFF_DELETE +// diffs[1][1] === 'from' + +// diffs[2][0] === DIFF_INSERT +// diffs[2][1] === 'to' +``` + +### Example of diffStringsRaw without cleanup + +```js +const diffs = diffStringsRaw('change from', 'change to', false); + +// diffs[0][0] === DIFF_EQUAL +// diffs[0][1] === 'change ' + +// diffs[1][0] === DIFF_DELETE +// diffs[1][1] === 'fr' + +// diffs[2][0] === DIFF_INSERT +// diffs[2][1] === 't' + +// Here is a small coincidental common substring: +// diffs[3][0] === DIFF_EQUAL +// diffs[3][1] === 'o' + +// diffs[4][0] === DIFF_DELETE +// diffs[4][1] === 'm' +``` + +## Options + +The default options are for the report when an assertion fails from the `expect` package used by Jest. + +For other applications, you can provide an options object as a third argument: + +- `diffLinesUnified(a, b, options)` +- `diffStringsUnified(a, b, options)` + +### Properties of options object + +| name | default | +| :-------------------- | :------------ | +| `aAnnotation` | `'Expected'` | +| `aColor` | `chalk.green` | +| `aSymbol` | `'-'` | +| `bAnnotation` | `'Received'` | +| `bColor` | `chalk.red` | +| `bSymbol` | `'+'` | +| `commonColor` | `chalk.dim` | +| `commonSymbol` | `' '` | +| `contextLines` | `5` | +| `expand` | `true` | +| `omitAnnotationLines` | `false` | + +### Example of options for labels + +If the application is code modification, you might replace the labels: + +```js +const options = { + aAnnotation: 'Original', + bAnnotation: 'Modified', +}; +``` + +The `jest-diff` package does not assume that the 2 labels have equal length. + +### Example of options for colors + +For consistency with most diff tools, you might exchange the colors: + +```js +import chalk from 'chalk'; + +const options = { + aColor: chalk.red, + bColor: chalk.green, +}; +``` + +### Example of option to keep the default color + +The value of a color option is a function, which given a string, returns a string. + +For common lines to keep the default (usually black) color, you might provide an identity function: + +```js +const options = { + commonColor: line => line, +}; +``` + +### Example of options for symbols + +For consistency with the `diff` command, you might replace the symbols: + +```js +const options = { + aSymbol: '<', + bSymbol: '>', +}; +``` + +The `jest-diff` package assumes (but does not enforce) that the 3 symbols have equal length. + +### Example of options to limit common lines + +By default, the output includes all common lines. + +To emphasize the changes, you might limit the number of common “context” lines: + +```js +const options = { + contextLines: 1, + expand: false, +}; +``` + +A patch mark like `@@ -12,7 +12,9 @@` accounts for omitted common lines. + +### Example of option to omit annotation lines + +To display only the comparison lines: + +```js +const a = 'change from\ncommon'; +const b = 'change to\ncommon'; +const options = { + omitAnnotationLines: true, +}; + +const difference = diffStringsUnified(a, b, options); +``` + +```diff +- change from ++ change to + common +``` diff --git a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap index d02b263a2476..c7e1b19669fc 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap @@ -152,7 +152,7 @@ exports[`context number of lines: 2 1`] = ` }" `; -exports[`context number of lines: null (5 default) 1`] = ` +exports[`context number of lines: 3.1 (5 default) 1`] = ` "- Expected + Received @@ -169,6 +169,69 @@ exports[`context number of lines: null (5 default) 1`] = ` }" `; +exports[`context number of lines: undefined (5 default) 1`] = ` +"- Expected ++ Received + +@@ -6,9 +6,9 @@ + 4, + 5, + 6, + 7, + 8, +- 9, + 10, ++ 9, + ], + }" +`; + +exports[`diffStringsUnified edge cases empty both a and b 1`] = ` +"- Expected ++ Received + +" +`; + +exports[`diffStringsUnified edge cases empty only a 1`] = ` +"- Expected ++ Received + ++ one-line string" +`; + +exports[`diffStringsUnified edge cases empty only b 1`] = ` +"- Expected ++ Received + +- one-line string" +`; + +exports[`diffStringsUnified edge cases equal both non-empty 1`] = ` +"- Expected ++ Received + + one-line string" +`; + +exports[`diffStringsUnified edge cases multiline has no common after clean up chaff 1`] = ` +"- Expected ++ Received + +- delete +- two ++ insert ++ 2" +`; + +exports[`diffStringsUnified edge cases one-line has no common after clean up chaff 1`] = ` +"- Expected ++ Received + +- delete ++ insert" +`; + exports[`falls back to not call toJSON if it throws and then objects have differences 1`] = ` "- Expected + Received @@ -242,3 +305,57 @@ exports[`oneline strings 4`] = ` - line + oneline" `; + +exports[`options 7980 diff 1`] = ` +"- Original ++ Modified + +- \`\${Ti.App.name} \${Ti.App.version} \${Ti.Platform.name} \${Ti.Platform.version}\` ++ \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\`" +`; + +exports[`options 7980 diffStringsUnified 1`] = ` +"- Original ++ Modified + +- \`\${Ti.App.name} \${Ti.App.version} \${Ti.Platform.name} \${Ti.Platform.version}\` ++ \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\`" +`; + +exports[`options change symbols diff 1`] = ` +"< Expected +> Received + + Array [ +< \\"delete\\", +< \\"change from\\", +> \\"change to\\", +> \\"insert\\", + \\"common\\", + ]" +`; + +exports[`options common diff 1`] = ` +"- Expected ++ Received + += Array [ +- \\"delete\\", +- \\"change from\\", ++ \\"change to\\", ++ \\"insert\\", += \\"common\\", += ]" +`; + +exports[`options omitAnnotationLines diff 1`] = ` +" Array [ +- \\"delete\\", +- \\"change from\\", ++ \\"change to\\", ++ \\"insert\\", + \\"common\\", + ]" +`; + +exports[`options omitAnnotationLines diffStringsUnified empty strings 1`] = `""`; diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index 090813e61f70..32d1b4f6d714 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -5,9 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import chalk from 'chalk'; import stripAnsi from 'strip-ansi'; import diff from '../'; +import {diffStringsUnified} from '../printDiffs'; import {DiffOptions} from '../types'; const NO_DIFF_MESSAGE = 'Compared values have no visual difference.'; @@ -833,9 +835,13 @@ test('collapses big diffs to patch format', () => { describe('context', () => { const testDiffContextLines = (contextLines?: number) => { test(`number of lines: ${ - typeof contextLines === 'number' ? contextLines : 'null' + typeof contextLines === 'number' ? contextLines : 'undefined' } ${ - typeof contextLines !== 'number' || contextLines < 0 ? '(5 default)' : '' + typeof contextLines === 'number' && + Number.isSafeInteger(contextLines) && + contextLines >= 0 + ? '' + : '(5 default)' }`, () => { const result = diff( {test: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, @@ -849,9 +855,117 @@ describe('context', () => { }); }; - testDiffContextLines(); // 5 by default - testDiffContextLines(2); - testDiffContextLines(1); + testDiffContextLines(-1); // (5 default) testDiffContextLines(0); - testDiffContextLines(-1); // Will use default + testDiffContextLines(1); + testDiffContextLines(2); + testDiffContextLines(3.1); // (5 default) + testDiffContextLines(); // (5 default) +}); + +describe('diffStringsUnified edge cases', () => { + test('empty both a and b', () => { + const a = ''; + const b = ''; + + expect(diffStringsUnified(a, b)).toMatchSnapshot(); + }); + + test('empty only a', () => { + const a = ''; + const b = 'one-line string'; + + expect(diffStringsUnified(a, b)).toMatchSnapshot(); + }); + + test('empty only b', () => { + const a = 'one-line string'; + const b = ''; + + expect(diffStringsUnified(a, b)).toMatchSnapshot(); + }); + + test('equal both non-empty', () => { + const a = 'one-line string'; + const b = 'one-line string'; + + expect(diffStringsUnified(a, b)).toMatchSnapshot(); + }); + + test('multiline has no common after clean up chaff', () => { + const a = 'delete\ntwo'; + const b = 'insert\n2'; + + expect(diffStringsUnified(a, b)).toMatchSnapshot(); + }); + + test('one-line has no common after clean up chaff', () => { + const a = 'delete'; + const b = 'insert'; + + expect(diffStringsUnified(a, b)).toMatchSnapshot(); + }); +}); + +describe('options 7980', () => { + const a = + '`${Ti.App.name} ${Ti.App.version} ${Ti.Platform.name} ${Ti.Platform.version}`'; + const b = + '`${Ti.App.getName()} ${Ti.App.getVersion()} ${Ti.Platform.getName()} ${Ti.Platform.getVersion()}`'; + + const options = { + aAnnotation: 'Original', + aColor: chalk.red, + bAnnotation: 'Modified', + bColor: chalk.green, + }; + + test('diff', () => { + expect(diff(a, b, options)).toMatchSnapshot(); + }); + + test('diffStringsUnified', () => { + expect(diffStringsUnified(a, b, options)).toMatchSnapshot(); + }); +}); + +describe('options', () => { + const a = ['delete', 'change from', 'common']; + const b = ['change to', 'insert', 'common']; + + describe('change symbols', () => { + const options = { + aSymbol: '<', + bSymbol: '>', + }; + + test('diff', () => { + expect(diff(a, b, options)).toMatchSnapshot(); + }); + }); + + describe('common', () => { + const options = { + commonColor: line => line, + commonSymbol: '=', + }; + + test('diff', () => { + expect(diff(a, b, options)).toMatchSnapshot(); + }); + }); + + describe('omitAnnotationLines', () => { + const options = { + omitAnnotationLines: true, + }; + + test('diff', () => { + expect(diff(a, b, options)).toMatchSnapshot(); + }); + + test('diffStringsUnified empty strings', () => { + expect(diffStringsUnified('', '', options)).toMatchSnapshot(); + }); + }); }); diff --git a/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts b/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts index 3eb197f45be3..df825a822c6a 100644 --- a/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts +++ b/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts @@ -5,12 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -import {computeStringDiffs, printMultilineStringDiffs} from '../printDiffs'; +import {diffStringsUnified} from '../printDiffs'; -const testAlignedDiffs = (a: string, b: string): string => { - const {diffs} = computeStringDiffs(a, b); - return printMultilineStringDiffs(diffs, true); -}; +const testAlignedDiffs = (a: string, b: string): string => + diffStringsUnified(a, b, {omitAnnotationLines: true}); describe('getAlignedDiffs', () => { describe('lines', () => { diff --git a/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts b/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts index f763b5f9de3e..51ceeb874390 100644 --- a/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts +++ b/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts @@ -11,6 +11,7 @@ import { joinAlignedDiffsExpand, joinAlignedDiffsNoExpand, } from '../joinAlignedDiffs'; +import {normalizeDiffOptions} from '../normalizeDiffOptions'; const diffsCommonStartEnd = [ new Diff(DIFF_EQUAL, ''), @@ -53,28 +54,46 @@ const diffsChangeStartEnd = [ describe('joinAlignedDiffsExpand', () => { test('first line is empty common', () => { - expect(joinAlignedDiffsExpand(diffsCommonStartEnd)).toMatchSnapshot(); + const options = normalizeDiffOptions(); + expect( + joinAlignedDiffsExpand(diffsCommonStartEnd, options), + ).toMatchSnapshot(); }); }); describe('joinAlignedDiffsNoExpand', () => { test('patch 0 with context 1 and change at start and end', () => { - expect(joinAlignedDiffsNoExpand(diffsChangeStartEnd, 1)).toMatchSnapshot(); + const options = normalizeDiffOptions({contextLines: 1, expand: false}); + expect( + joinAlignedDiffsNoExpand(diffsChangeStartEnd, options), + ).toMatchSnapshot(); }); test('patch 0 with context 5 and first line is empty common', () => { - expect(joinAlignedDiffsNoExpand(diffsCommonStartEnd)).toMatchSnapshot(); + const options = normalizeDiffOptions({expand: false}); + expect( + joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), + ).toMatchSnapshot(); }); test('patch 1 with context 4 and last line is empty common', () => { - expect(joinAlignedDiffsNoExpand(diffsCommonStartEnd, 4)).toMatchSnapshot(); + const options = normalizeDiffOptions({contextLines: 4, expand: false}); + expect( + joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), + ).toMatchSnapshot(); }); test('patch 2 with context 3', () => { - expect(joinAlignedDiffsNoExpand(diffsCommonStartEnd, 3)).toMatchSnapshot(); + const options = normalizeDiffOptions({contextLines: 3, expand: false}); + expect( + joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), + ).toMatchSnapshot(); }); test('patch 3 with context 2 and omit excess common at start', () => { - expect(joinAlignedDiffsNoExpand(diffsCommonStartEnd, 2)).toMatchSnapshot(); + const options = normalizeDiffOptions({contextLines: 2, expand: false}); + expect( + joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), + ).toMatchSnapshot(); }); }); diff --git a/packages/jest-diff/src/diffLines.ts b/packages/jest-diff/src/diffLines.ts index 155fef041c19..a718470caf65 100644 --- a/packages/jest-diff/src/diffLines.ts +++ b/packages/jest-diff/src/diffLines.ts @@ -9,18 +9,13 @@ import chalk, {Chalk} from 'chalk'; import diff, {Callbacks} from 'diff-sequences'; import {NO_DIFF_MESSAGE} from './constants'; import {createPatchMark, printAnnotation} from './printDiffs'; -import {DiffOptions} from './types'; - -const DIFF_CONTEXT_DEFAULT = 5; +import {DiffOptionsNormalized} from './types'; type Original = { a: string; b: string; }; -const fgDelete = chalk.green; -const fgInsert = chalk.red; -const fgCommon = chalk.dim; // common lines (even indentation same) const fgIndent = chalk.cyan; // common lines (only indentation different) const bgCommon = chalk.bgYellow; // edge spaces in common line (even indentation same) const bgInverse = chalk.inverse; // edge spaces in any other lines @@ -51,6 +46,7 @@ const formatDelete = ( aEnd: number, aLinesUn: Array, aLinesIn: Array, + {aColor, aSymbol}: DiffOptionsNormalized, put: Put, ) => { const highlightSpaces = getHighlightSpaces(aLinesUn !== aLinesIn); @@ -59,7 +55,9 @@ const formatDelete = ( const aLineIn = aLinesIn[aIndex]; const indentation = aLineIn.slice(0, aLineIn.length - aLineUn.length); - put(fgDelete('- ' + indentation + highlightSpaces(aLineUn, bgInverse))); + put( + aColor(aSymbol + ' ' + indentation + highlightSpaces(aLineUn, bgInverse)), + ); } }; @@ -69,6 +67,7 @@ const formatInsert = ( bEnd: number, bLinesUn: Array, bLinesIn: Array, + {bColor, bSymbol}: DiffOptionsNormalized, put: Put, ) => { const highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); @@ -77,7 +76,9 @@ const formatInsert = ( const bLineIn = bLinesIn[bIndex]; const indentation = bLineIn.slice(0, bLineIn.length - bLineUn.length); - put(fgInsert('+ ' + indentation + highlightSpaces(bLineUn, bgInverse))); + put( + bColor(bSymbol + ' ' + indentation + highlightSpaces(bLineUn, bgInverse)), + ); } }; @@ -91,6 +92,7 @@ const formatCommon = ( aLinesIn: Array, bLinesUn: Array, bLinesIn: Array, + {commonColor, commonSymbol}: DiffOptionsNormalized, put: Put, ) => { const highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); @@ -104,10 +106,10 @@ const formatCommon = ( // Color shows whether expected and received line has same indentation. const hasSameIndentation = aLinesIn[aCommon].length === bLineInLength; - const fg = hasSameIndentation ? fgCommon : fgIndent; + const fg = hasSameIndentation ? commonColor : fgIndent; const bg = hasSameIndentation ? bgCommon : bgInverse; - put(fg(' ' + indentation + highlightSpaces(bLineUn, bg))); + put(fg(commonSymbol + ' ' + indentation + highlightSpaces(bLineUn, bg))); } }; @@ -118,6 +120,7 @@ const diffExpand = ( bLinesUn: Array, aLinesIn: Array, bLinesIn: Array, + options: DiffOptionsNormalized, ): string => { const isCommon: Callbacks['isCommon'] = (aIndex, bIndex) => aLinesUn[aIndex] === bLinesUn[bIndex]; @@ -135,9 +138,18 @@ const diffExpand = ( aCommon, bCommon, ) => { - formatDelete(aStart, aCommon, aLinesUn, aLinesIn, put); - formatInsert(bStart, bCommon, bLinesUn, bLinesIn, put); - formatCommon(nCommon, aCommon, bCommon, aLinesIn, bLinesUn, bLinesIn, put); + formatDelete(aStart, aCommon, aLinesUn, aLinesIn, options, put); + formatInsert(bStart, bCommon, bLinesUn, bLinesIn, options, put); + formatCommon( + nCommon, + aCommon, + bCommon, + aLinesIn, + bLinesUn, + bLinesIn, + options, + put, + ); aStart = aCommon + nCommon; bStart = bCommon + nCommon; }; @@ -148,19 +160,12 @@ const diffExpand = ( diff(aLength, bLength, isCommon, foundSubsequence); // After the last common subsequence, format remaining change lines. - formatDelete(aStart, aLength, aLinesUn, aLinesIn, put); - formatInsert(bStart, bLength, bLinesUn, bLinesIn, put); + formatDelete(aStart, aLength, aLinesUn, aLinesIn, options, put); + formatInsert(bStart, bLength, bLinesUn, bLinesIn, options, put); return array.join('\n'); }; -const getContextLines = (options?: DiffOptions): number => - options && - typeof options.contextLines === 'number' && - options.contextLines >= 0 - ? options.contextLines - : DIFF_CONTEXT_DEFAULT; - // jest --no-expand // Return joined string of formatted diff for all change lines, // but if some common lines are omitted because there are more than the context, @@ -170,7 +175,7 @@ const diffNoExpand = ( bLinesUn: Array, aLinesIn: Array, bLinesIn: Array, - nContextLines: number, + options: DiffOptionsNormalized, ): string => { const isCommon: Callbacks['isCommon'] = (aIndex, bIndex) => aLinesUn[aIndex] === bLinesUn[bIndex]; @@ -184,6 +189,7 @@ const diffNoExpand = ( let isAtEnd = false; const aLength = aLinesUn.length; const bLength = bLinesUn.length; + const nContextLines = options.contextLines; const nContextLines2 = nContextLines + nContextLines; // Initialize the first patch for changes at the start, @@ -210,15 +216,24 @@ const diffNoExpand = ( aStart = aEndCommon - nLines; bStart = bEndCommon - nLines; - formatCommon(nLines, aStart, bStart, aLinesIn, bLinesUn, bLinesIn, put); + formatCommon( + nLines, + aStart, + bStart, + aLinesIn, + bLinesUn, + bLinesIn, + options, + put, + ); aEnd = aEndCommon; bEnd = bEndCommon; return; } // Format preceding change lines. - formatDelete(aEnd, aStartCommon, aLinesUn, aLinesIn, put); - formatInsert(bEnd, bStartCommon, bLinesUn, bLinesIn, put); + formatDelete(aEnd, aStartCommon, aLinesUn, aLinesIn, options, put); + formatInsert(bEnd, bStartCommon, bLinesUn, bLinesIn, options, put); aEnd = aStartCommon; bEnd = bStartCommon; @@ -228,14 +243,32 @@ const diffNoExpand = ( if (nCommon <= maxContextLines) { // The patch includes all lines in the common subsequence. - formatCommon(nCommon, aEnd, bEnd, aLinesIn, bLinesUn, bLinesIn, put); + formatCommon( + nCommon, + aEnd, + bEnd, + aLinesIn, + bLinesUn, + bLinesIn, + options, + put, + ); aEnd += nCommon; bEnd += nCommon; return; } // The patch ends because context is less than number of common lines. - formatCommon(nContextLines, aEnd, bEnd, aLinesIn, bLinesUn, bLinesIn, put); + formatCommon( + nContextLines, + aEnd, + bEnd, + aLinesIn, + bLinesUn, + bLinesIn, + options, + put, + ); aEnd += nContextLines; bEnd += nContextLines; @@ -250,7 +283,16 @@ const diffNoExpand = ( aStart = aEndCommon - nLines; bStart = bEndCommon - nLines; - formatCommon(nLines, aStart, bStart, aLinesIn, bLinesUn, bLinesIn, put); + formatCommon( + nLines, + aStart, + bStart, + aLinesIn, + bLinesUn, + bLinesIn, + options, + put, + ); aEnd = aEndCommon; bEnd = bEndCommon; } @@ -260,8 +302,8 @@ const diffNoExpand = ( // If no common subsequence or last was not at end, format remaining change lines. if (!isAtEnd) { - formatDelete(aEnd, aLength, aLinesUn, aLinesIn, put); - formatInsert(bEnd, bLength, bLinesUn, bLinesIn, put); + formatDelete(aEnd, aLength, aLinesUn, aLinesIn, options, put); + formatInsert(bEnd, bLength, bLinesUn, bLinesIn, options, put); aEnd = aLength; bEnd = bLength; } @@ -278,7 +320,7 @@ const diffNoExpand = ( export default ( a: string, b: string, - options?: DiffOptions, + options: DiffOptionsNormalized, original?: Original, ): string => { if (a === b) { @@ -310,14 +352,8 @@ export default ( return ( printAnnotation(options) + - (options && options.expand === false - ? diffNoExpand( - aLinesUn, - bLinesUn, - aLinesIn, - bLinesIn, - getContextLines(options), - ) - : diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn)) + (options.expand + ? diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options) + : diffNoExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options)) ); }; diff --git a/packages/jest-diff/src/getAlignedDiffs.ts b/packages/jest-diff/src/getAlignedDiffs.ts index e653482e3880..19421ae5e06a 100644 --- a/packages/jest-diff/src/getAlignedDiffs.ts +++ b/packages/jest-diff/src/getAlignedDiffs.ts @@ -6,7 +6,7 @@ */ import {DIFF_DELETE, DIFF_INSERT, Diff} from './cleanupSemantic'; -import {MULTILINE_REGEXP, getHighlightedString} from './printDiffs'; +import {invertChangedSubstrings} from './printDiffs'; // Encapsulate change lines until either a common newline or the end. class ChangeBuffer { @@ -28,7 +28,7 @@ class ChangeBuffer { // Assume call only if line has at least one diff, // therefore an empty line must have a diff which has an empty string. this.lines.push( - new Diff(this.op, getHighlightedString(this.op, this.line)), + new Diff(this.op, invertChangedSubstrings(this.op, this.line)), ); this.line.length = 0; } @@ -46,7 +46,7 @@ class ChangeBuffer { align(diff: Diff): void { const string = diff[1]; - if (MULTILINE_REGEXP.test(string)) { + if (string.includes('\n')) { const substrings = string.split('\n'); const iLast = substrings.length - 1; substrings.forEach((substring, i) => { @@ -117,7 +117,7 @@ class CommonBuffer { const op = diff[0]; const string = diff[1]; - if (MULTILINE_REGEXP.test(string)) { + if (string.includes('\n')) { const substrings = string.split('\n'); const iLast = substrings.length - 1; substrings.forEach((substring, i) => { diff --git a/packages/jest-diff/src/index.ts b/packages/jest-diff/src/index.ts index 1391894ad135..df6cd5a140a9 100644 --- a/packages/jest-diff/src/index.ts +++ b/packages/jest-diff/src/index.ts @@ -8,10 +8,17 @@ import prettyFormat = require('pretty-format'); import chalk from 'chalk'; import getType = require('jest-get-type'); +import { + DIFF_DELETE, + DIFF_EQUAL, + DIFF_INSERT, + Diff as DiffClass, +} from './cleanupSemantic'; import diffLines from './diffLines'; -import {getStringDiff} from './printDiffs'; +import {normalizeDiffOptions} from './normalizeDiffOptions'; +import {diffStringsRaw, diffStringsUnified} from './printDiffs'; import {NO_DIFF_MESSAGE, SIMILAR_MESSAGE} from './constants'; -import {DiffOptions as JestDiffOptions} from './types'; +import {DiffOptionsNormalized, DiffOptions as JestDiffOptions} from './types'; const { AsymmetricMatcher, @@ -78,25 +85,26 @@ function diff(a: any, b: any, options?: JestDiffOptions): string | null { return null; } + const optionsNormalized = normalizeDiffOptions(options); switch (aType) { case 'string': - return diffLines(a, b, options); + return diffLines(a, b, optionsNormalized); case 'boolean': case 'number': - return comparePrimitive(a, b, options); + return comparePrimitive(a, b, optionsNormalized); case 'map': - return compareObjects(sortMap(a), sortMap(b), options); + return compareObjects(sortMap(a), sortMap(b), optionsNormalized); case 'set': - return compareObjects(sortSet(a), sortSet(b), options); + return compareObjects(sortSet(a), sortSet(b), optionsNormalized); default: - return compareObjects(a, b, options); + return compareObjects(a, b, optionsNormalized); } } function comparePrimitive( a: number | boolean, b: number | boolean, - options?: JestDiffOptions, + options: DiffOptionsNormalized, ) { return diffLines( prettyFormat(a, FORMAT_OPTIONS), @@ -116,7 +124,7 @@ function sortSet(set: Set) { function compareObjects( a: Record, b: Record, - options?: JestDiffOptions, + options: DiffOptionsNormalized, ) { let diffMessage; let hasThrown = false; @@ -157,9 +165,14 @@ function compareObjects( // eslint-disable-next-line no-redeclare namespace diff { + export type Diff = DiffClass; export type DiffOptions = JestDiffOptions; } -diff.getStringDiff = getStringDiff; +diff.diffStringsUnified = diffStringsUnified; +diff.diffStringsRaw = diffStringsRaw; +diff.DIFF_DELETE = DIFF_DELETE; +diff.DIFF_EQUAL = DIFF_EQUAL; +diff.DIFF_INSERT = DIFF_INSERT; export = diff; diff --git a/packages/jest-diff/src/joinAlignedDiffs.ts b/packages/jest-diff/src/joinAlignedDiffs.ts index 186f3c393e0b..db00e5720bc5 100644 --- a/packages/jest-diff/src/joinAlignedDiffs.ts +++ b/packages/jest-diff/src/joinAlignedDiffs.ts @@ -12,8 +12,7 @@ import { printDeleteLine, printInsertLine, } from './printDiffs'; - -const DIFF_CONTEXT_DEFAULT = 5; // same as diffLines +import {DiffOptionsNormalized} from './types'; // jest --no-expand // @@ -21,9 +20,10 @@ const DIFF_CONTEXT_DEFAULT = 5; // same as diffLines // return joined lines with diff formatting (and patch marks, if needed). export const joinAlignedDiffsNoExpand = ( diffs: Array, - nContextLines: number = DIFF_CONTEXT_DEFAULT, + options: DiffOptionsNormalized, ): string => { const iLength = diffs.length; + const nContextLines = options.contextLines; const nContextLines2 = nContextLines + nContextLines; // First pass: count output lines and see if it has patches. @@ -89,18 +89,18 @@ export const joinAlignedDiffsNoExpand = ( const pushCommonLine = (line: string): void => { const j = lines.length; - lines.push(printCommonLine(line, j === 0 || j === jLast)); + lines.push(printCommonLine(line, j === 0 || j === jLast, options)); aEnd += 1; bEnd += 1; }; const pushDeleteLine = (line: string): void => { - lines.push(printDeleteLine(line)); + lines.push(printDeleteLine(line, options)); aEnd += 1; }; const pushInsertLine = (line: string): void => { - lines.push(printInsertLine(line)); + lines.push(printInsertLine(line, options)); bEnd += 1; }; @@ -187,20 +187,27 @@ export const joinAlignedDiffsNoExpand = ( // // Given array of aligned strings with inverse highlight formatting, // return joined lines with diff formatting. -export const joinAlignedDiffsExpand = (diffs: Array) => +export const joinAlignedDiffsExpand = ( + diffs: Array, + options: DiffOptionsNormalized, +) => diffs .map((diff: Diff, i: number, diffs: Array): string => { const line = diff[1]; switch (diff[0]) { case DIFF_DELETE: - return printDeleteLine(line); + return printDeleteLine(line, options); case DIFF_INSERT: - return printInsertLine(line); + return printInsertLine(line, options); default: - return printCommonLine(line, i === 0 || i === diffs.length - 1); + return printCommonLine( + line, + i === 0 || i === diffs.length - 1, + options, + ); } }) .join('\n'); diff --git a/packages/jest-diff/src/normalizeDiffOptions.ts b/packages/jest-diff/src/normalizeDiffOptions.ts new file mode 100644 index 000000000000..1430d7041d73 --- /dev/null +++ b/packages/jest-diff/src/normalizeDiffOptions.ts @@ -0,0 +1,42 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import chalk from 'chalk'; + +import {DiffOptions, DiffOptionsNormalized} from './types'; + +const DIFF_CONTEXT_DEFAULT = 5; + +const OPTIONS_DEFAULT: DiffOptionsNormalized = { + aAnnotation: 'Expected', + aColor: chalk.green, + aSymbol: '-', + bAnnotation: 'Received', + bColor: chalk.red, + bSymbol: '+', + commonColor: chalk.dim, + commonSymbol: ' ', + contextLines: DIFF_CONTEXT_DEFAULT, + expand: true, + omitAnnotationLines: false, +}; + +const getContextLines = (contextLines?: number): number => + typeof contextLines === 'number' && + Number.isSafeInteger(contextLines) && + contextLines >= 0 + ? contextLines + : DIFF_CONTEXT_DEFAULT; + +// Pure function returns options with all properties. +export const normalizeDiffOptions = ( + options: DiffOptions = {}, +): DiffOptionsNormalized => ({ + ...OPTIONS_DEFAULT, + ...options, + contextLines: getContextLines(options.contextLines), +}); diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index de210cf950a5..07d6c4d2ad4f 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -7,32 +7,28 @@ import chalk from 'chalk'; -import { - DIFF_DELETE, - DIFF_EQUAL, - DIFF_INSERT, - Diff, - cleanupSemantic, -} from './cleanupSemantic'; +import {DIFF_EQUAL, Diff, cleanupSemantic} from './cleanupSemantic'; +import diffLines from './diffLines'; import diffStrings from './diffStrings'; import getAlignedDiffs from './getAlignedDiffs'; import { joinAlignedDiffsExpand, joinAlignedDiffsNoExpand, } from './joinAlignedDiffs'; -import {DiffOptions} from './types'; +import {normalizeDiffOptions} from './normalizeDiffOptions'; +import {DiffOptions, DiffOptionsNormalized} from './types'; -export const DIM_COLOR = chalk.dim; -export const EXPECTED_COLOR = chalk.green; -export const INVERTED_COLOR = chalk.inverse; -export const RECEIVED_COLOR = chalk.red; +export const INVERTED_COLOR = chalk.inverse; // export for joinAlignedDiffs test const PATCH_COLOR = chalk.yellow; // Given change op and array of diffs, return concatenated string: // * include common strings // * include change strings which have argument op (inverse highlight) // * exclude change strings which have opposite op -export const getHighlightedString = (op: number, diffs: Array): string => +export const invertChangedSubstrings = ( + op: number, + diffs: Array, +): string => diffs.reduce( (reduced: string, diff: Diff): string => reduced + @@ -44,14 +40,6 @@ export const getHighlightedString = (op: number, diffs: Array): string => '', ); -export const getExpectedString = (diffs: Array): string => - getHighlightedString(DIFF_DELETE, diffs); - -export const getReceivedString = (diffs: Array): string => - getHighlightedString(DIFF_INSERT, diffs); - -export const MULTILINE_REGEXP = /\n/; - const NEWLINE_SYMBOL = '\u{21B5}'; // downwards arrow with corner leftwards const SPACE_SYMBOL = '\u{00B7}'; // middle dot @@ -60,36 +48,34 @@ const SPACE_SYMBOL = '\u{00B7}'; // middle dot const replaceSpacesAtEnd = (line: string): string => line.replace(/\s+$/, spaces => SPACE_SYMBOL.repeat(spaces.length)); -export const printDeleteLine = (line: string) => - EXPECTED_COLOR(line.length !== 0 ? '- ' + replaceSpacesAtEnd(line) : '-'); +export const printDeleteLine = ( + line: string, + {aColor, aSymbol}: DiffOptionsNormalized, +): string => + aColor( + line.length !== 0 ? aSymbol + ' ' + replaceSpacesAtEnd(line) : aSymbol, + ); -export const printInsertLine = (line: string) => - RECEIVED_COLOR(line.length !== 0 ? '+ ' + replaceSpacesAtEnd(line) : '+'); +export const printInsertLine = ( + line: string, + {bColor, bSymbol}: DiffOptionsNormalized, +): string => + bColor( + line.length !== 0 ? bSymbol + ' ' + replaceSpacesAtEnd(line) : bSymbol, + ); // Prevent visually ambiguous empty line as the first or the last. -export const printCommonLine = (line: string, isFirstOrLast: boolean = false) => +export const printCommonLine = ( + line: string, + isFirstOrLast: boolean, + {commonColor, commonSymbol}: DiffOptionsNormalized, +): string => line.length !== 0 - ? DIM_COLOR(' ' + replaceSpacesAtEnd(line)) + ? commonColor(commonSymbol + ' ' + replaceSpacesAtEnd(line)) : isFirstOrLast - ? DIM_COLOR(' ' + NEWLINE_SYMBOL) + ? commonColor(commonSymbol + ' ' + NEWLINE_SYMBOL) : ''; -export const computeStringDiffs = (expected: string, received: string) => { - const isMultiline = - MULTILINE_REGEXP.test(expected) || MULTILINE_REGEXP.test(received); - - // getAlignedDiffs assumes that a newline was appended to the strings. - if (isMultiline) { - expected += '\n'; - received += '\n'; - } - - const diffs = diffStrings(expected, received); - cleanupSemantic(diffs); // impure function - - return {diffs, isMultiline}; -}; - export const hasCommonDiff = (diffs: Array, isMultiline: boolean) => { if (isMultiline) { // Important: Ignore common newline that was appended to multiline strings! @@ -102,11 +88,21 @@ export const hasCommonDiff = (diffs: Array, isMultiline: boolean) => { return diffs.some(diff => diff[0] === DIFF_EQUAL); }; -export const printAnnotation = (options?: DiffOptions): string => - EXPECTED_COLOR('- ' + ((options && options.aAnnotation) || 'Expected')) + - '\n' + - RECEIVED_COLOR('+ ' + ((options && options.bAnnotation) || 'Received')) + - '\n\n'; +export const printAnnotation = ({ + aAnnotation, + aColor, + aSymbol, + bAnnotation, + bColor, + bSymbol, + omitAnnotationLines, +}: DiffOptionsNormalized): string => + omitAnnotationLines + ? '' + : aColor(aSymbol + ' ' + aAnnotation) + + '\n' + + bColor(bSymbol + ' ' + bAnnotation) + + '\n\n'; // In GNU diff format, indexes are one-based instead of zero-based. export const createPatchMark = ( @@ -119,63 +115,88 @@ export const createPatchMark = ( `@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`, ); -// Return formatted diff lines without labels. -export const printMultilineStringDiffs = ( - diffs: Array, - expand: boolean, +// Given two string arguments, compare them character-by-character. +// Format as comparison lines in which changed substrings have inverse colors. +export const diffStringsUnified = ( + a: string, + b: string, + options?: DiffOptions, ): string => { - const lines = getAlignedDiffs(diffs); - return expand - ? joinAlignedDiffsExpand(lines) - : joinAlignedDiffsNoExpand(lines); -}; + const optionsNormalized = normalizeDiffOptions(options); + + if (a.length === 0 || b.length === 0) { + const lines: Array = []; + + // All comparison lines have aColor and aSymbol. + if (a.length !== 0) { + a.split('\n').forEach(line => { + lines.push(printDeleteLine(line, optionsNormalized)); + }); + } + + // All comparison lines have bColor and bSymbol. + if (b.length !== 0) { + b.split('\n').forEach(line => { + lines.push(printInsertLine(line, optionsNormalized)); + }); + } + + // If both are empty strings, there are no comparison lines. + return printAnnotation(optionsNormalized) + lines.join('\n'); + } -const MAX_DIFF_STRING_LENGTH = 20000; - -type StringDiffResult = - | {isMultiline: true; annotatedDiff: string} - | {isMultiline: false; a: string; b: string} - | null; - -// Print specific substring diff for strings only: -// * if strings are not equal -// * if neither string is empty -// * if neither string is too long -// * if there is a common string after semantic cleanup -export const getStringDiff = ( - expected: string, - received: string, - options?: DiffOptions, -): StringDiffResult => { - if ( - expected === received || - expected.length === 0 || - received.length === 0 || - expected.length > MAX_DIFF_STRING_LENGTH || - received.length > MAX_DIFF_STRING_LENGTH - ) { - return null; + if (a === b) { + const lines = a.split('\n'); + const iLast = lines.length - 1; + + // All comparison lines have commonColor and commonSymbol. + return ( + printAnnotation(optionsNormalized) + + lines + .map((line, i) => + printCommonLine(line, i === 0 || i === iLast, optionsNormalized), + ) + .join('\n') + ); } - const {diffs, isMultiline} = computeStringDiffs(expected, received); + const isMultiline = a.includes('\n') || b.includes('\n'); + + // getAlignedDiffs assumes that a newline was appended to the strings. + const diffs = diffStringsRaw( + isMultiline ? a + '\n' : a, + isMultiline ? b + '\n' : b, + true, // cleanupSemantic + ); + + if (hasCommonDiff(diffs, isMultiline)) { + const lines = getAlignedDiffs(diffs); + return ( + printAnnotation(optionsNormalized) + + (optionsNormalized.expand + ? joinAlignedDiffsExpand(lines, optionsNormalized) + : joinAlignedDiffsNoExpand(lines, optionsNormalized)) + ); + } + + // Fall back to line-by-line diff. + // Given strings, it returns a string, not null. + return diffLines(a, b, optionsNormalized) as string; +}; - if (!hasCommonDiff(diffs, isMultiline)) { - return null; +// Given two string arguments, compare them character-by-character. +// Optionally clean up small common substrings, also known as chaff. +// Return an array of diff objects. +export const diffStringsRaw = ( + a: string, + b: string, + cleanup: boolean, +): Array => { + const diffs = diffStrings(a, b); + + if (cleanup) { + cleanupSemantic(diffs); // impure function } - return isMultiline - ? { - annotatedDiff: - printAnnotation(options) + - printMultilineStringDiffs( - diffs, - options === undefined || options.expand !== false, - ), - isMultiline, - } - : { - a: getExpectedString(diffs), - b: getReceivedString(diffs), - isMultiline, - }; + return diffs; }; diff --git a/packages/jest-diff/src/types.ts b/packages/jest-diff/src/types.ts index 66edf604d0c0..2ffd17280fdd 100644 --- a/packages/jest-diff/src/types.ts +++ b/packages/jest-diff/src/types.ts @@ -5,9 +5,32 @@ * LICENSE file in the root directory of this source tree. */ +type DiffOptionsColor = (arg: string) => string; // subset of Chalk type + export type DiffOptions = { aAnnotation?: string; + aColor?: DiffOptionsColor; + aSymbol?: string; bAnnotation?: string; - expand?: boolean; + bColor?: DiffOptionsColor; + bSymbol?: string; + commonColor?: DiffOptionsColor; + commonSymbol?: string; contextLines?: number; + expand?: boolean; + omitAnnotationLines?: boolean; +}; + +export type DiffOptionsNormalized = { + aAnnotation: string; + aColor: DiffOptionsColor; + aSymbol: string; + bAnnotation: string; + bColor: DiffOptionsColor; + bSymbol: string; + commonColor: DiffOptionsColor; + commonSymbol: string; + contextLines: number; + expand: boolean; + omitAnnotationLines: boolean; }; diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap index 4a197fa3dce2..ccb387fcd85c 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap @@ -27,3 +27,18 @@ exports[`printDiffOrStringify expected is multi line and received is empty 1`] = line\\" Received: \\"\\"" `; + +exports[`printDiffOrStringify has no common after clean up chaff multiline 1`] = ` +"- Expected ++ Received + +- delete +- two ++ insert ++ 2" +`; + +exports[`printDiffOrStringify has no common after clean up chaff one-line 1`] = ` +"Expected: \\"delete\\" +Received: \\"insert\\"" +`; diff --git a/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts b/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts index a5c513405301..a8e985dd5329 100644 --- a/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts +++ b/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts @@ -35,6 +35,18 @@ describe('printDiffOrStringify', () => { expect(testDiffOrStringify(expected, received)).toMatchSnapshot(); }); + test('has no common after clean up chaff multiline', () => { + const expected = 'delete\ntwo'; + const received = 'insert\n2'; + expect(testDiffOrStringify(expected, received)).toMatchSnapshot(); + }); + + test('has no common after clean up chaff one-line', () => { + const expected = 'delete'; + const received = 'insert'; + expect(testDiffOrStringify(expected, received)).toMatchSnapshot(); + }); + test('received is multiline longer than max', () => { const expected = 'multi\nline'; const received = 'multi' + '\n123456789'.repeat(2000); // 5 + 20K chars diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index 81e4ef31cabb..aba7ff29812e 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -10,6 +10,14 @@ import jestDiff = require('jest-diff'); import getType = require('jest-get-type'); import prettyFormat = require('pretty-format'); +const { + DIFF_DELETE, + DIFF_EQUAL, + DIFF_INSERT, + diffStringsRaw, + diffStringsUnified, +} = jestDiff; + const { AsymmetricMatcher, DOMCollection, @@ -212,6 +220,29 @@ export const ensureExpectedIsNonNegativeInteger = ( } }; +// Given array of diffs, return concatenated string: +// * include common substrings +// * exclude change substrings which have opposite op +// * include change substrings which have argument op +// with inverse highlight only if there is a common substring +const getCommonAndChangedSubstrings = ( + diffs: Array, + op: number, + hasCommonDiff: boolean, +): string => + diffs.reduce( + (reduced: string, diff: jestDiff.Diff): string => + reduced + + (diff[0] === DIFF_EQUAL + ? diff[1] + : diff[0] !== op + ? '' + : hasCommonDiff + ? INVERTED_COLOR(diff[1]) + : diff[1]), + '', + ); + const isLineDiffable = (expected: unknown, received: unknown): boolean => { const expectedType = getType(expected); const receivedType = getType(received); @@ -262,6 +293,8 @@ const isLineDiffable = (expected: unknown, received: unknown): boolean => { return true; }; +const MAX_DIFF_STRING_LENGTH = 20000; + export const printDiffOrStringify = ( expected: unknown, received: unknown, @@ -269,24 +302,39 @@ export const printDiffOrStringify = ( receivedLabel: string, expand: boolean, // CLI options: true if `--expand` or false if `--no-expand` ): string => { - if (typeof expected === 'string' && typeof received === 'string') { - const result = jestDiff.getStringDiff(expected, received, { - aAnnotation: expectedLabel, - bAnnotation: receivedLabel, - expand, - }); - - if (result !== null) { - if (result.isMultiline) { - return result.annotatedDiff; - } - - const printLabel = getLabelPrinter(expectedLabel, receivedLabel); - const expectedLine = printLabel(expectedLabel) + printExpected(result.a); - const receivedLine = printLabel(receivedLabel) + printReceived(result.b); - - return expectedLine + '\n' + receivedLine; + if ( + typeof expected === 'string' && + typeof received === 'string' && + expected.length !== 0 && + received.length !== 0 && + expected.length <= MAX_DIFF_STRING_LENGTH && + received.length <= MAX_DIFF_STRING_LENGTH && + expected !== received + ) { + if (expected.includes('\n') || received.includes('\n')) { + return diffStringsUnified(expected, received, { + aAnnotation: expectedLabel, + bAnnotation: receivedLabel, + expand, + }); } + + const diffs = diffStringsRaw(expected, received, true); + const hasCommonDiff = diffs.some(diff => diff[0] === DIFF_EQUAL); + + const printLabel = getLabelPrinter(expectedLabel, receivedLabel); + const expectedLine = + printLabel(expectedLabel) + + printExpected( + getCommonAndChangedSubstrings(diffs, DIFF_DELETE, hasCommonDiff), + ); + const receivedLine = + printLabel(receivedLabel) + + printReceived( + getCommonAndChangedSubstrings(diffs, DIFF_INSERT, hasCommonDiff), + ); + + return expectedLine + '\n' + receivedLine; } if (isLineDiffable(expected, received)) { diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap index 8c7ff72d1c25..7c00b08fe37b 100644 --- a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap +++ b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap @@ -105,6 +105,23 @@ exports[`fallback to line diff 1`] = ` + ================================================================================ `; +exports[`has no common after clean up chaff array 1`] = ` +- Snapshot ++ Received + + Array [ +- "delete", +- "two", ++ "insert", ++ "2", + ] +`; + +exports[`has no common after clean up chaff string single line 1`] = ` +Snapshot: "delete" +Received: "insert" +`; + exports[`isLineDiffable false boolean 1`] = ` Snapshot: true Received: false @@ -209,8 +226,29 @@ exports[`without serialize backtick single line expected and multi line received `; exports[`without serialize backtick single line expected and received 1`] = ` -Snapshot: var foo = \`backtick\`; -Received: var foo = \`back\${x}tick\`; +- Snapshot ++ Received + +- var foo = \`backtick\`; ++ var foo = \`back\${x}tick\`; +`; + +exports[`without serialize has no common after clean up chaff multi line 1`] = ` +- Snapshot ++ Received + +- delete +- two ++ insert ++ 2 +`; + +exports[`without serialize has no common after clean up chaff single line 1`] = ` +- Snapshot ++ Received + +- delete ++ insert `; exports[`without serialize prettier/pull/5590 1`] = ` diff --git a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts index b7c17d30990c..e9bcfc5caab9 100644 --- a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts +++ b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts @@ -231,6 +231,22 @@ test('fallback to line diff', () => { expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); }); +describe('has no common after clean up chaff', () => { + test('array', () => { + const expected = ['delete', 'two']; + const received = ['insert', '2']; + + expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + }); + + test('string single line', () => { + const expected = 'delete'; + const received = 'insert'; + + expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + }); +}); + describe('isLineDiffable', () => { describe('false', () => { test('boolean', () => { @@ -361,6 +377,20 @@ describe('without serialize', () => { expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); }); + test('has no common after clean up chaff multi line', () => { + const expected = 'delete\ntwo'; + const received = 'insert\n2'; + + expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + }); + + test('has no common after clean up chaff single line', () => { + const expected = 'delete'; + const received = 'insert'; + + expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + }); + test('prettier/pull/5590', () => { const expected = [ '====================================options=====================================', diff --git a/packages/jest-snapshot/src/print.ts b/packages/jest-snapshot/src/print.ts index fce9ad2c7f3a..4f0516f91bf2 100644 --- a/packages/jest-snapshot/src/print.ts +++ b/packages/jest-snapshot/src/print.ts @@ -45,6 +45,8 @@ const isLineDiffable = (received: any): boolean => { return true; }; +const MAX_DIFF_STRING_LENGTH = 20000; + export const printDiffOrStringified = ( expectedSerializedTrimmed: string, receivedSerializedTrimmed: string, @@ -77,32 +79,21 @@ export const printDiffOrStringified = ( } // Display substring highlight even when strings have custom serialization. - const result = diff.getStringDiff( - expectedSerializedTrimmed, - receivedSerializedTrimmed, - { - aAnnotation: expectedLabel, - bAnnotation: receivedLabel, - expand, - }, - ); - - if (result !== null) { - if (result.isMultiline) { - return result.annotatedDiff; - } - - // Because not default stringify, call EXPECTED_COLOR and RECEIVED_COLOR - // This is reason to call getStringDiff instead of printDiffOrStringify - // Because there is no closing double quote mark at end of single lines, - // future improvement is to call replaceSpacesAtEnd if it becomes public. - const printLabel = getLabelPrinter(expectedLabel, receivedLabel); - return ( - printLabel(expectedLabel) + - EXPECTED_COLOR(result.a) + - '\n' + - printLabel(receivedLabel) + - RECEIVED_COLOR(result.b) + if ( + expectedSerializedTrimmed.length !== 0 && + receivedSerializedTrimmed.length !== 0 && + expectedSerializedTrimmed.length <= MAX_DIFF_STRING_LENGTH && + receivedSerializedTrimmed.length <= MAX_DIFF_STRING_LENGTH && + expectedSerializedTrimmed !== receivedSerializedTrimmed + ) { + return diff.diffStringsUnified( + expectedSerializedTrimmed, + receivedSerializedTrimmed, + { + aAnnotation: expectedLabel, + bAnnotation: receivedLabel, + expand, + }, ); } } From fa8ef2269ceb52ee1bec2e77ba4358dd4ade85b2 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Fri, 23 Aug 2019 11:59:58 +0200 Subject: [PATCH 07/97] exit workers gracefully (#8206) --- CHANGELOG.md | 2 + e2e/Utils.ts | 15 +++ e2e/__tests__/fatalWorkerError.test.ts | 15 +-- e2e/__tests__/workerForceExit.test.ts | 69 ++++++++++++ package.json | 1 + .../src/__tests__/testRunner.test.ts | 2 +- packages/jest-runner/src/index.ts | 14 ++- packages/jest-worker/README.md | 12 +- .../jest-worker/src/__tests__/index.test.js | 6 +- .../jest-worker/src/base/BaseWorkerPool.ts | 39 +++++-- .../src/base/__tests__/BaseWorkerPool.test.js | 103 ++++++++++++++---- packages/jest-worker/src/index.ts | 14 ++- packages/jest-worker/src/types.ts | 19 ++-- .../src/workers/ChildProcessWorker.ts | 59 ++++++++-- .../src/workers/NodeThreadsWorker.ts | 46 ++++++-- .../__tests__/ChildProcessWorker.test.js | 65 ++++++++++- .../__tests__/NodeThreadsWorker.test.js | 64 +++++++---- .../workers/__tests__/processChild.test.js | 10 +- .../src/workers/__tests__/threadChild.test.js | 8 +- .../jest-worker/src/workers/processChild.ts | 8 +- .../jest-worker/src/workers/threadChild.ts | 8 +- yarn.lock | 9 ++ 22 files changed, 464 insertions(+), 124 deletions(-) create mode 100644 e2e/__tests__/workerForceExit.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index a95862c27536..49322624ffe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,9 @@ - `[babel-plugin-jest-hoist]` Show codeframe on static hoisting issues ([#8865](https://github.com/facebook/jest/pull/8865)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) +- `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) +- `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) ### Fixes diff --git a/e2e/Utils.ts b/e2e/Utils.ts index 07523a1401c1..573bf3d3fd2a 100644 --- a/e2e/Utils.ts +++ b/e2e/Utils.ts @@ -90,6 +90,21 @@ export const writeFiles = ( }); }; +const NUMBER_OF_TESTS_TO_FORCE_USING_WORKERS = 25; +/** + * Forces Jest to use workers by generating many test files to run. + * Slow and modifies the test output. Use sparingly. + */ +export const generateTestFilesToForceUsingWorkers = () => { + const testFiles = {}; + for (let i = 0; i <= NUMBER_OF_TESTS_TO_FORCE_USING_WORKERS; i++) { + testFiles[`__tests__/test${i}.test.js`] = ` + test.todo('test ${i}'); + `; + } + return testFiles; +}; + export const copyDir = (src: string, dest: string) => { const srcStat = fs.lstatSync(src); if (srcStat.isDirectory()) { diff --git a/e2e/__tests__/fatalWorkerError.test.ts b/e2e/__tests__/fatalWorkerError.test.ts index 59f1ed080c04..4085a9192e97 100644 --- a/e2e/__tests__/fatalWorkerError.test.ts +++ b/e2e/__tests__/fatalWorkerError.test.ts @@ -7,7 +7,11 @@ import * as path from 'path'; import {tmpdir} from 'os'; -import {cleanup, writeFiles} from '../Utils'; +import { + cleanup, + generateTestFilesToForceUsingWorkers, + writeFiles, +} from '../Utils'; import runJest from '../runJest'; const DIR = path.resolve(tmpdir(), 'fatal-worker-error'); @@ -15,10 +19,9 @@ const DIR = path.resolve(tmpdir(), 'fatal-worker-error'); beforeEach(() => cleanup(DIR)); afterAll(() => cleanup(DIR)); -const NUMBER_OF_TESTS_TO_FORCE_USING_WORKERS = 25; - test('fails a test that terminates the worker with a fatal error', () => { const testFiles = { + ...generateTestFilesToForceUsingWorkers(), '__tests__/fatalWorkerError.test.js': ` test('fatal worker error', () => { process.exit(134); @@ -26,12 +29,6 @@ test('fails a test that terminates the worker with a fatal error', () => { `, }; - for (let i = 0; i <= NUMBER_OF_TESTS_TO_FORCE_USING_WORKERS; i++) { - testFiles[`__tests__/test${i}.test.js`] = ` - test('test ${i}', () => {}); - `; - } - writeFiles(DIR, { ...testFiles, 'package.json': '{}', diff --git a/e2e/__tests__/workerForceExit.test.ts b/e2e/__tests__/workerForceExit.test.ts new file mode 100644 index 000000000000..87bc44c09598 --- /dev/null +++ b/e2e/__tests__/workerForceExit.test.ts @@ -0,0 +1,69 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {tmpdir} from 'os'; +import {resolve} from 'path'; +import findProcess from 'find-process'; + +import { + cleanup, + generateTestFilesToForceUsingWorkers, + writeFiles, +} from '../Utils'; +import runJest from '../runJest'; + +const DIR = resolve(tmpdir(), 'worker-force-exit'); + +beforeEach(() => cleanup(DIR)); +afterEach(() => cleanup(DIR)); +const testFiles = { + ...generateTestFilesToForceUsingWorkers(), + 'package.json': `{ + "testEnvironment": "node" + }`, +}; + +const verifyNumPassed = stderr => { + const numberOfTestsPassed = (stderr.match(/\bPASS\b/g) || []).length; + // assuming -1 because of package.json, but +1 because of the individual test file + expect(numberOfTestsPassed).toBe(Object.keys(testFiles).length); +}; + +test('prints a warning if a worker is force exited', () => { + writeFiles(DIR, { + ...testFiles, + '__tests__/simple.test.js': ` + test('t', () => { + require('http').createServer().listen(0); + }); + `, + }); + const {status, stderr, stdout} = runJest(DIR, ['--maxWorkers=2']); + + expect(status).toBe(0); + verifyNumPassed(stderr); + expect(stdout).toContain('A worker process has failed to exit gracefully'); +}); + +test('force exits a worker that fails to exit gracefully', async () => { + writeFiles(DIR, { + ...testFiles, + '__tests__/timeoutKilled.test.js': ` + test('t', () => { + require('http').createServer().listen(0); + console.error('pid: ' + process.pid); + }); + `, + }); + const {status, stderr} = runJest(DIR, ['--maxWorkers=2']); + + expect(status).toBe(0); + verifyNumPassed(stderr); + + const [pid] = /pid: \d+/.exec(stderr); + expect(await findProcess('pid', pid)).toHaveLength(0); +}); diff --git a/package.json b/package.json index c595179799a3..2fff8137dc90 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "eslint-plugin-react": "^7.1.0", "execa": "^2.0.4", "fast-check": "^1.13.0", + "find-process": "^1.4.1", "glob": "^7.1.1", "graceful-fs": "^4.1.15", "isbinaryfile": "^4.0.0", diff --git a/packages/jest-runner/src/__tests__/testRunner.test.ts b/packages/jest-runner/src/__tests__/testRunner.test.ts index 6a13db1b9c09..8853a1c8b9bd 100644 --- a/packages/jest-runner/src/__tests__/testRunner.test.ts +++ b/packages/jest-runner/src/__tests__/testRunner.test.ts @@ -15,7 +15,7 @@ jest.mock('jest-worker', () => jest.fn( worker => (mockWorkerFarm = { - end: jest.fn(), + end: jest.fn().mockResolvedValue({forceExited: false}), getStderr: jest.fn(), getStdout: jest.fn(), worker: jest.fn((data, callback) => require(worker)(data, callback)), diff --git a/packages/jest-runner/src/index.ts b/packages/jest-runner/src/index.ts index b57ad2ab3204..e838e63e06b6 100644 --- a/packages/jest-runner/src/index.ts +++ b/packages/jest-runner/src/index.ts @@ -8,6 +8,7 @@ import {Config} from '@jest/types'; import {SerializableError} from '@jest/test-result'; import exit = require('exit'); +import chalk from 'chalk'; import throat from 'throat'; import Worker from 'jest-worker'; import runTest from './runTest'; @@ -189,7 +190,18 @@ class TestRunner { ), ); - const cleanup = () => worker.end(); + const cleanup = async () => { + const {forceExited} = await worker.end(); + if (forceExited) { + console.log( + chalk.yellow( + 'A worker process has failed to exit gracefully and has been force exited. ' + + 'This is likely caused by tests leaking due to improper teardown. ' + + 'Try running with --runInBand --detectOpenHandles to find leaks.', + ), + ); + } + }; return Promise.race([runAllTests, onInterrupt]).then(cleanup, cleanup); } } diff --git a/packages/jest-worker/README.md b/packages/jest-worker/README.md index e6ca3a798d10..932326202edb 100644 --- a/packages/jest-worker/README.md +++ b/packages/jest-worker/README.md @@ -109,6 +109,8 @@ Returns a `ReadableStream` where the standard error of all workers is piped. Not Finishes the workers by killing all workers. No further calls can be done to the `Worker` instance. +Returns a Promise that resolves with `{ forceExited: boolean }` once all workers are dead. If `forceExited` is `true`, at least one of the workers did not exit gracefully, which likely happened because it executed a leaky task that left handles open. This should be avoided, force exiting workers is a last resort to prevent creating lots of orphans. + **Note:** Each worker has a unique id (index that starts with `1`) which is available on `process.env.JEST_WORKER_ID` ## Setting up and tearing down the child process @@ -139,7 +141,10 @@ async function main() { console.log(await myWorker.bar('Bob')); // "Hello from bar: Bob" console.log(await myWorker.getWorkerId()); // "3" -> this message has sent from the 3rd worker - myWorker.end(); + const {forceExited} = await myWorker.end(); + if (forceExited) { + console.error('Workers failed to exit gracefully'); + } } main(); @@ -186,7 +191,10 @@ async function main() { // the same worker that processed the file the first time will process it now. console.log(await myWorker.transform('/tmp/foo.js')); - myWorker.end(); + const {forceExited} = await myWorker.end(); + if (forceExited) { + console.error('Workers failed to exit gracefully'); + } } main(); diff --git a/packages/jest-worker/src/__tests__/index.test.js b/packages/jest-worker/src/__tests__/index.test.js index eae8116f2e1f..5fbd5293fef5 100644 --- a/packages/jest-worker/src/__tests__/index.test.js +++ b/packages/jest-worker/src/__tests__/index.test.js @@ -133,7 +133,7 @@ it('does not let make calls after the farm is ended', () => { ); }); -it('does not let end the farm after it is ended', () => { +it('does not let end the farm after it is ended', async () => { const farm = new Farm('/tmp/baz.js', { exposedMethods: ['foo', 'bar'], numWorkers: 4, @@ -141,10 +141,10 @@ it('does not let end the farm after it is ended', () => { farm.end(); expect(farm._workerPool.end).toHaveBeenCalledTimes(1); - expect(() => farm.end()).toThrow( + await expect(farm.end()).rejects.toThrow( 'Farm is ended, no more calls can be done to it', ); - expect(() => farm.end()).toThrow( + await expect(farm.end()).rejects.toThrow( 'Farm is ended, no more calls can be done to it', ); expect(farm._workerPool.end).toHaveBeenCalledTimes(1); diff --git a/packages/jest-worker/src/base/BaseWorkerPool.ts b/packages/jest-worker/src/base/BaseWorkerPool.ts index 62fa3427ed3d..5eec43c0214c 100644 --- a/packages/jest-worker/src/base/BaseWorkerPool.ts +++ b/packages/jest-worker/src/base/BaseWorkerPool.ts @@ -10,11 +10,16 @@ import mergeStream = require('merge-stream'); import { CHILD_MESSAGE_END, + PoolExitResult, WorkerInterface, WorkerOptions, WorkerPoolOptions, } from '../types'; +// How long to wait for the child process to terminate +// after CHILD_MESSAGE_END before sending force exiting. +const FORCE_EXIT_DELAY = 500; + /* istanbul ignore next */ const emptyMethod = () => {}; @@ -85,15 +90,33 @@ export default class BaseWorkerPool { throw Error('Missing method createWorker in WorkerPool'); } - end(): void { + async end(): Promise { // We do not cache the request object here. If so, it would only be only // processed by one of the workers, and we want them all to close. - for (let i = 0; i < this._workers.length; i++) { - this._workers[i].send( - [CHILD_MESSAGE_END, false], - emptyMethod, - emptyMethod, - ); - } + const workerExitPromises = this._workers.map(async worker => { + worker.send([CHILD_MESSAGE_END, false], emptyMethod, emptyMethod); + + // Schedule a force exit in case worker fails to exit gracefully so + // await worker.waitForExit() never takes longer than FORCE_EXIT_DELAY + let forceExited = false; + const forceExitTimeout = setTimeout(() => { + worker.forceExit(); + forceExited = true; + }, FORCE_EXIT_DELAY); + + await worker.waitForExit(); + // Worker ideally exited gracefully, don't send force exit then + clearTimeout(forceExitTimeout); + + return forceExited; + }); + + const workerExits = await Promise.all(workerExitPromises); + return workerExits.reduce( + (result, forceExited) => ({ + forceExited: result.forceExited || forceExited, + }), + {forceExited: false}, + ); } } diff --git a/packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js b/packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js index ef034b5de8c7..c249c0a2bd2c 100644 --- a/packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js +++ b/packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js @@ -11,11 +11,7 @@ import {CHILD_MESSAGE_END} from '../../types'; import BaseWorkerPool from '../BaseWorkerPool'; -const Worker = jest.fn(() => ({ - getStderr: () => ({once() {}, pipe() {}}), - getStdout: () => ({once() {}, pipe() {}}), - send: jest.fn(), -})); +const Worker = jest.fn(); const mockSend = jest.fn(); @@ -31,6 +27,13 @@ class MockWorkerPool extends BaseWorkerPool { describe('BaseWorkerPool', () => { beforeEach(() => { Worker.mockClear(); + Worker.mockImplementation(() => ({ + forceExit: jest.fn(), + getStderr: () => ({once() {}, pipe() {}}), + getStdout: () => ({once() {}, pipe() {}}), + send: jest.fn(), + waitForExit: () => Promise.resolve(), + })); }); it('throws error when createWorker is not defined', () => { @@ -60,24 +63,6 @@ describe('BaseWorkerPool', () => { expect(pool.getWorkerById(3)).toBeDefined(); }); - it('ends all workers', () => { - const pool = new MockWorkerPool('/tmp/baz.js', { - forkOptions: {execArgv: []}, - maxRetries: 6, - numWorkers: 4, - setupArgs: [], - }); - - const workers = pool.getWorkers(); - pool.end(); - - const endMessage = [CHILD_MESSAGE_END, false]; - expect(workers[0].send.mock.calls[0][0]).toEqual(endMessage); - expect(workers[1].send.mock.calls[0][0]).toEqual(endMessage); - expect(workers[2].send.mock.calls[0][0]).toEqual(endMessage); - expect(workers[3].send.mock.calls[0][0]).toEqual(endMessage); - }); - it('creates and expoeses n workers', () => { const pool = new MockWorkerPool('/tmp/baz.js', { forkOptions: {execArgv: []}, @@ -221,4 +206,76 @@ describe('BaseWorkerPool', () => { expect(() => farm.send()).not.toThrow(); expect(() => farm.send()).not.toThrow(); }); + + describe('end', () => { + it('ends all workers', async () => { + const pool = new MockWorkerPool('/tmp/baz.js', { + forkOptions: {execArgv: []}, + maxRetries: 6, + numWorkers: 4, + setupArgs: [], + }); + + const workers = pool.getWorkers(); + await pool.end(); + + const endMessage = [CHILD_MESSAGE_END, false]; + expect(workers[0].send.mock.calls[0][0]).toEqual(endMessage); + expect(workers[1].send.mock.calls[0][0]).toEqual(endMessage); + expect(workers[2].send.mock.calls[0][0]).toEqual(endMessage); + expect(workers[3].send.mock.calls[0][0]).toEqual(endMessage); + }); + + it('resolves with forceExited=false if workers exited gracefully', async () => { + Worker.mockImplementation(() => ({ + forceExit: jest.fn(), + getStderr: () => null, + getStdout: () => null, + send: jest.fn(), + waitForExit: () => Promise.resolve(), + })); + + const pool = new MockWorkerPool('/tmp/baz.js', { + forkOptions: {execArgv: []}, + maxRetries: 6, + numWorkers: 4, + setupArgs: [], + }); + + expect(await pool.end()).toEqual({forceExited: false}); + }); + + it('force exits workers that do not exit gracefully and resolves with forceExited=true', async () => { + // Set it up so that the first worker does not resolve waitForExit immediately, + // but only when forceExit() is called + let worker0Exited; + Worker.mockImplementationOnce(() => ({ + forceExit: () => { + worker0Exited(); + }, + getStderr: () => null, + getStdout: () => null, + send: jest.fn(), + waitForExit: () => new Promise(resolve => (worker0Exited = resolve)), + })).mockImplementation(() => ({ + forceExit: jest.fn(), + getStderr: () => null, + getStdout: () => null, + send: jest.fn(), + waitForExit: () => Promise.resolve(), + })); + + const pool = new MockWorkerPool('/tmp/baz.js', { + forkOptions: {execArgv: []}, + maxRetries: 6, + numWorkers: 2, + setupArgs: [], + }); + + const workers = pool.getWorkers(); + expect(await pool.end()).toEqual({forceExited: true}); + + expect(workers[1].forceExit).not.toHaveBeenCalled(); + }); + }); }); diff --git a/packages/jest-worker/src/index.ts b/packages/jest-worker/src/index.ts index 114d884eb16e..a253e0b489c6 100644 --- a/packages/jest-worker/src/index.ts +++ b/packages/jest-worker/src/index.ts @@ -8,7 +8,12 @@ import {cpus} from 'os'; import WorkerPool from './WorkerPool'; import Farm from './Farm'; -import {FarmOptions, WorkerPoolInterface, WorkerPoolOptions} from './types'; +import { + FarmOptions, + PoolExitResult, + WorkerPoolInterface, + WorkerPoolOptions, +} from './types'; function getExposedMethods( workerPath: string, @@ -132,13 +137,12 @@ export default class JestWorker { return this._workerPool.getStdout(); } - end(): void { + async end(): Promise { if (this._ending) { throw new Error('Farm is ended, no more calls can be done to it'); } - - this._workerPool.end(); - this._ending = true; + + return this._workerPool.end(); } } diff --git a/packages/jest-worker/src/types.ts b/packages/jest-worker/src/types.ts index dc5bafc23835..c61b6303247b 100644 --- a/packages/jest-worker/src/types.ts +++ b/packages/jest-worker/src/types.ts @@ -24,10 +24,6 @@ export type PARENT_MESSAGE_ERROR = | typeof PARENT_MESSAGE_CLIENT_ERROR | typeof PARENT_MESSAGE_SETUP_ERROR; -// Option objects. - -export {ForkOptions}; - export interface WorkerPoolInterface { getStderr(): NodeJS.ReadableStream; getStdout(): NodeJS.ReadableStream; @@ -39,7 +35,7 @@ export interface WorkerPoolInterface { onStart: OnStart, onEnd: OnEnd, ): void; - end(): void; + end(): Promise; } export interface WorkerInterface { @@ -48,13 +44,22 @@ export interface WorkerInterface { onProcessStart: OnStart, onProcessEnd: OnEnd, ): void; + waitForExit(): Promise; + forceExit(): void; + getWorkerId(): number; getStderr(): NodeJS.ReadableStream | null; getStdout(): NodeJS.ReadableStream | null; - onExit(exitCode: number): void; - onMessage(message: ParentMessage): void; } +export type PoolExitResult = { + forceExited: boolean; +}; + +// Option objects. + +export {ForkOptions}; + export type FarmOptions = { computeWorkerKey?: (method: string, ...args: Array) => string | null; exposedMethods?: ReadonlyArray; diff --git a/packages/jest-worker/src/workers/ChildProcessWorker.ts b/packages/jest-worker/src/workers/ChildProcessWorker.ts index ce712771042c..a6b3e3ac02f2 100644 --- a/packages/jest-worker/src/workers/ChildProcessWorker.ts +++ b/packages/jest-worker/src/workers/ChildProcessWorker.ts @@ -23,6 +23,13 @@ import { WorkerOptions, } from '../types'; +const SIGNAL_BASE_EXIT_CODE = 128; +const SIGKILL_EXIT_CODE = SIGNAL_BASE_EXIT_CODE + 9; +const SIGTERM_EXIT_CODE = SIGNAL_BASE_EXIT_CODE + 15; + +// How long to wait after SIGTERM before sending SIGKILL +const SIGKILL_DELAY = 500; + /** * This class wraps the child process and provides a nice interface to * communicate with. It takes care of: @@ -44,19 +51,30 @@ import { export default class ChildProcessWorker implements WorkerInterface { private _child!: ChildProcess; private _options: WorkerOptions; - private _onProcessEnd!: OnEnd; - private _fakeStream: PassThrough | null; + private _request: ChildMessage | null; private _retries!: number; - private _stderr: ReturnType | null; + private _onProcessEnd!: OnEnd; + + private _fakeStream: PassThrough | null; private _stdout: ReturnType | null; + private _stderr: ReturnType | null; + + private _exitPromise: Promise; + private _resolveExitPromise!: () => void; constructor(options: WorkerOptions) { this._options = options; - this._fakeStream = null; + this._request = null; - this._stderr = null; + + this._fakeStream = null; this._stdout = null; + this._stderr = null; + + this._exitPromise = new Promise(resolve => { + this._resolveExitPromise = resolve; + }); this.initialize(); } @@ -96,8 +114,8 @@ export default class ChildProcessWorker implements WorkerInterface { this._stderr.add(child.stderr); } - child.on('message', this.onMessage.bind(this)); - child.on('exit', this.onExit.bind(this)); + child.on('message', this._onMessage.bind(this)); + child.on('exit', this._onExit.bind(this)); child.send([ CHILD_MESSAGE_INITIALIZE, @@ -116,7 +134,7 @@ export default class ChildProcessWorker implements WorkerInterface { if (this._retries > this._options.maxRetries) { const error = new Error('Call retries were exceeded'); - this.onMessage([ + this._onMessage([ PARENT_MESSAGE_CLIENT_ERROR, error.name, error.message, @@ -132,9 +150,11 @@ export default class ChildProcessWorker implements WorkerInterface { this._fakeStream.end(); this._fakeStream = null; } + + this._resolveExitPromise(); } - onMessage(response: ParentMessage) { + private _onMessage(response: ParentMessage) { let error; switch (response[0]) { @@ -179,8 +199,12 @@ export default class ChildProcessWorker implements WorkerInterface { } } - onExit(exitCode: number) { - if (exitCode !== 0) { + private _onExit(exitCode: number) { + if ( + exitCode !== 0 && + exitCode !== SIGTERM_EXIT_CODE && + exitCode !== SIGKILL_EXIT_CODE + ) { this.initialize(); if (this._request) { @@ -205,6 +229,19 @@ export default class ChildProcessWorker implements WorkerInterface { this._child.send(request); } + waitForExit() { + return this._exitPromise; + } + + forceExit() { + this._child.kill('SIGTERM'); + const sigkillTimeout = setTimeout( + () => this._child.kill('SIGKILL'), + SIGKILL_DELAY, + ); + this._exitPromise.then(() => clearTimeout(sigkillTimeout)); + } + getWorkerId() { return this._options.workerId; } diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index 071fe3b208d4..f33181f9f874 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -28,19 +28,32 @@ import { export default class ExperimentalWorker implements WorkerInterface { private _worker!: Worker; private _options: WorkerOptions; - private _onProcessEnd!: OnEnd; + private _request: ChildMessage | null; private _retries!: number; - private _stderr: ReturnType | null; - private _stdout: ReturnType | null; + private _onProcessEnd!: OnEnd; + private _fakeStream: PassThrough | null; + private _stdout: ReturnType | null; + private _stderr: ReturnType | null; + + private _exitPromise: Promise; + private _resolveExitPromise!: () => void; + private _forceExited: boolean; constructor(options: WorkerOptions) { this._options = options; + this._request = null; - this._stderr = null; - this._stdout = null; + this._fakeStream = null; + this._stdout = null; + this._stderr = null; + + this._exitPromise = new Promise(resolve => { + this._resolveExitPromise = resolve; + }); + this._forceExited = false; this.initialize(); } @@ -83,8 +96,8 @@ export default class ExperimentalWorker implements WorkerInterface { this._stderr.add(this._worker.stderr); } - this._worker.on('message', this.onMessage.bind(this)); - this._worker.on('exit', this.onExit.bind(this)); + this._worker.on('message', this._onMessage.bind(this)); + this._worker.on('exit', this._onExit.bind(this)); this._worker.postMessage([ CHILD_MESSAGE_INITIALIZE, @@ -101,7 +114,7 @@ export default class ExperimentalWorker implements WorkerInterface { if (this._retries > this._options.maxRetries) { const error = new Error('Call retries were exceeded'); - this.onMessage([ + this._onMessage([ PARENT_MESSAGE_CLIENT_ERROR, error.name, error.message, @@ -117,9 +130,11 @@ export default class ExperimentalWorker implements WorkerInterface { this._fakeStream.end(); this._fakeStream = null; } + + this._resolveExitPromise(); } - onMessage(response: ParentMessage) { + private _onMessage(response: ParentMessage) { let error; switch (response[0]) { @@ -162,8 +177,8 @@ export default class ExperimentalWorker implements WorkerInterface { } } - onExit(exitCode: number) { - if (exitCode !== 0) { + private _onExit(exitCode: number) { + if (exitCode !== 0 && !this._forceExited) { this.initialize(); if (this._request) { @@ -174,6 +189,15 @@ export default class ExperimentalWorker implements WorkerInterface { } } + waitForExit() { + return this._exitPromise; + } + + forceExit() { + this._forceExited = true; + this._worker.terminate(); + } + send(request: ChildMessage, onProcessStart: OnStart, onProcessEnd: OnEnd) { onProcessStart(this); this._onProcessEnd = (...args) => { diff --git a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js index 72de719e409d..4c4462bb3b52 100644 --- a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js +++ b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js @@ -20,6 +20,8 @@ import { PARENT_MESSAGE_OK, } from '../../types'; +jest.useFakeTimers(); + let Worker; let forkInterface; let childProcess; @@ -32,6 +34,7 @@ beforeEach(() => { childProcess = require('child_process'); childProcess.fork.mockImplementation(() => { forkInterface = Object.assign(new EventEmitter(), { + kill: jest.fn(), send: jest.fn(), stderr: new PassThrough(), stdout: new PassThrough(), @@ -114,10 +117,10 @@ it('stops initializing the worker after the amount of retries is exceeded', () = worker.send(request, onProcessStart, onProcessEnd); // We fail four times (initial + three retries). - forkInterface.emit('exit'); - forkInterface.emit('exit'); - forkInterface.emit('exit'); - forkInterface.emit('exit'); + forkInterface.emit('exit', 1); + forkInterface.emit('exit', 1); + forkInterface.emit('exit', 1); + forkInterface.emit('exit', 1); expect(childProcess.fork).toHaveBeenCalledTimes(5); expect(onProcessStart).toBeCalledWith(worker); @@ -139,7 +142,7 @@ it('provides stdout and stderr from the child processes', async () => { forkInterface.stdout.end('Hello ', {encoding: 'utf8'}); forkInterface.stderr.end('Jest ', {encoding: 'utf8'}); - forkInterface.emit('exit'); + forkInterface.emit('exit', 1); forkInterface.stdout.end('World!', {encoding: 'utf8'}); forkInterface.stderr.end('Workers!', {encoding: 'utf8'}); forkInterface.emit('exit', 0); @@ -179,7 +182,7 @@ it('resends the task to the child process after a retry', () => { expect(forkInterface.send.mock.calls[1][0]).toEqual(request); const previousForkInterface = forkInterface; - forkInterface.emit('exit'); + forkInterface.emit('exit', 1); expect(forkInterface).not.toBe(previousForkInterface); @@ -298,6 +301,18 @@ it('does not restart the child if it cleanly exited', () => { expect(childProcess.fork).toHaveBeenCalledTimes(1); }); +it('resolves waitForExit() after the child process cleanly exited', async () => { + const worker = new Worker({ + forkOptions: {}, + maxRetries: 3, + workerPath: '/tmp/foo', + }); + + expect(childProcess.fork).toHaveBeenCalledTimes(1); + forkInterface.emit('exit', 0); + await worker.waitForExit(); // should not timeout +}); + it('restarts the child when the child process dies', () => { new Worker({ workerPath: '/tmp/foo', @@ -307,3 +322,41 @@ it('restarts the child when the child process dies', () => { forkInterface.emit('exit', 1); expect(childProcess.fork).toHaveBeenCalledTimes(2); }); + +it('sends SIGTERM when forceExit() is called', async () => { + const worker = new Worker({ + forkOptions: {}, + maxRetries: 3, + workerPath: '/tmp/foo', + }); + + worker.forceExit(); + expect(forkInterface.kill.mock.calls).toEqual([['SIGTERM']]); +}); + +it('sends SIGKILL some time after SIGTERM', async () => { + const worker = new Worker({ + forkOptions: {}, + maxRetries: 3, + workerPath: '/tmp/foo', + }); + + worker.forceExit(); + jest.runAllTimers(); + expect(forkInterface.kill.mock.calls).toEqual([['SIGTERM'], ['SIGKILL']]); +}); + +it('does not send SIGKILL if SIGTERM exited the process', async () => { + const worker = new Worker({ + forkOptions: {}, + maxRetries: 3, + workerPath: '/tmp/foo', + }); + + worker.forceExit(); + forkInterface.emit('exit', 143 /* SIGTERM exit code */); + await Promise.resolve(); + + jest.runAllTimers(); + expect(forkInterface.kill.mock.calls).toEqual([['SIGTERM']]); +}); diff --git a/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js b/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js index c603b7f913cc..281b3baae34b 100644 --- a/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js +++ b/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js @@ -20,7 +20,7 @@ import { } from '../../types'; let Worker; -let childProcess; +let workerThreads; let originalExecArgv; beforeEach(() => { @@ -31,6 +31,7 @@ beforeEach(() => { const thread = new EventEmitter(); thread.postMessage = jest.fn(); + thread.terminate = jest.fn(); thread.stdout = new PassThrough(); thread.stderr = new PassThrough(); return thread; @@ -42,8 +43,8 @@ beforeEach(() => { }); originalExecArgv = process.execArgv; - childProcess = require('worker_threads').Worker; - childProcess.postMessage = jest.fn(); + workerThreads = require('worker_threads').Worker; + workerThreads.postMessage = jest.fn(); Worker = require('../NodeThreadsWorker').default; }); @@ -54,7 +55,7 @@ afterEach(() => { }); it('passes fork options down to child_process.fork, adding the defaults', () => { - const child = require.resolve('../threadChild'); + const thread = require.resolve('../threadChild'); process.execArgv = ['--inspect', '-p']; @@ -68,8 +69,8 @@ it('passes fork options down to child_process.fork, adding the defaults', () => workerPath: '/tmp/foo/bar/baz.js', }); - expect(childProcess.mock.calls[0][0]).toBe(child.replace(/\.ts$/, '.js')); - expect(childProcess.mock.calls[0][1]).toEqual({ + expect(workerThreads.mock.calls[0][0]).toBe(thread.replace(/\.ts$/, '.js')); + expect(workerThreads.mock.calls[0][1]).toEqual({ eval: false, stderr: true, stdout: true, @@ -83,7 +84,7 @@ it('passes fork options down to child_process.fork, adding the defaults', () => }); }); -it('passes workerId to the child process and assign it to env.JEST_WORKER_ID', () => { +it('passes workerId to the thread and assign it to env.JEST_WORKER_ID', () => { new Worker({ forkOptions: {}, maxRetries: 3, @@ -91,12 +92,12 @@ it('passes workerId to the child process and assign it to env.JEST_WORKER_ID', ( workerPath: '/tmp/foo', }); - expect(childProcess.mock.calls[0][1].workerData.env.JEST_WORKER_ID).toEqual( + expect(workerThreads.mock.calls[0][1].workerData.env.JEST_WORKER_ID).toEqual( '3', ); }); -it('initializes the child process with the given workerPath', () => { +it('initializes the thread with the given workerPath', () => { const worker = new Worker({ forkOptions: {}, maxRetries: 3, @@ -131,7 +132,7 @@ it('stops initializing the worker after the amount of retries is exceeded', () = worker._worker.emit('exit'); worker._worker.emit('exit'); - expect(childProcess).toHaveBeenCalledTimes(5); + expect(workerThreads).toHaveBeenCalledTimes(5); expect(onProcessStart).toBeCalledWith(worker); expect(onProcessEnd).toHaveBeenCalledTimes(1); expect(onProcessEnd.mock.calls[0][0]).toBeInstanceOf(Error); @@ -139,7 +140,7 @@ it('stops initializing the worker after the amount of retries is exceeded', () = expect(onProcessEnd.mock.calls[0][1]).toBe(null); }); -it('provides stdout and stderr from the child processes', async () => { +it('provides stdout and stderr from the threads', async () => { const worker = new Worker({ forkOptions: {}, maxRetries: 3, @@ -160,7 +161,7 @@ it('provides stdout and stderr from the child processes', async () => { await expect(getStream(stderr)).resolves.toEqual('Jest Workers!'); }); -it('sends the task to the child process', () => { +it('sends the task to the thread', () => { const worker = new Worker({ forkOptions: {}, maxRetries: 3, @@ -175,7 +176,7 @@ it('sends the task to the child process', () => { expect(worker._worker.postMessage.mock.calls[1][0]).toEqual(request); }); -it('resends the task to the child process after a retry', () => { +it('resends the task to the thread after a retry', () => { const worker = new Worker({ forkOptions: {}, maxRetries: 3, @@ -282,7 +283,7 @@ it('creates error instances for known errors', () => { expect(callback3.mock.calls[0][0]).toBe(412); }); -it('throws when the child process returns a strange message', () => { +it('throws when the thread returns a strange message', () => { const worker = new Worker({ forkOptions: {}, maxRetries: 3, @@ -297,24 +298,47 @@ it('throws when the child process returns a strange message', () => { }).toThrow(TypeError); }); -it('does not restart the child if it cleanly exited', () => { +it('does not restart the thread if it cleanly exited', () => { const worker = new Worker({ forkOptions: {}, maxRetries: 3, workerPath: '/tmp/foo', }); - expect(childProcess).toHaveBeenCalledTimes(1); + expect(workerThreads).toHaveBeenCalledTimes(1); worker._worker.emit('exit', 0); - expect(childProcess).toHaveBeenCalledTimes(1); + expect(workerThreads).toHaveBeenCalledTimes(1); }); -it('restarts the child when the child process dies', () => { +it('resolves waitForExit() after the thread cleanly exited', async () => { + const worker = new Worker({ + forkOptions: {}, + maxRetries: 3, + workerPath: '/tmp/foo', + }); + + expect(workerThreads).toHaveBeenCalledTimes(1); + worker._worker.emit('exit', 0); + await worker.waitForExit(); // should not timeout +}); + +it('restarts the thread when the thread dies', () => { const worker = new Worker({ workerPath: '/tmp/foo', }); - expect(childProcess).toHaveBeenCalledTimes(1); + expect(workerThreads).toHaveBeenCalledTimes(1); worker._worker.emit('exit', 1); - expect(childProcess).toHaveBeenCalledTimes(2); + expect(workerThreads).toHaveBeenCalledTimes(2); +}); + +it('terminates the thread when forceExit() is called', () => { + const worker = new Worker({ + forkOptions: {}, + maxRetries: 3, + workerPath: '/tmp/foo', + }); + + worker.forceExit(); + expect(worker._worker.terminate).toHaveBeenCalled(); }); diff --git a/packages/jest-worker/src/workers/__tests__/processChild.test.js b/packages/jest-worker/src/workers/__tests__/processChild.test.js index df71b9b20144..c1dd240d525c 100644 --- a/packages/jest-worker/src/workers/__tests__/processChild.test.js +++ b/packages/jest-worker/src/workers/__tests__/processChild.test.js @@ -314,19 +314,17 @@ it('calls the main export if the method call is "default" and it is a Babel tran expect(process.send.mock.calls[0][0]).toEqual([PARENT_MESSAGE_OK, 67890]); }); -it('finishes the process with exit code 0 if requested', () => { +it('removes the message listener on END message', () => { + // So that there are no more open handles preventing Node from exiting process.emit('message', [ CHILD_MESSAGE_INITIALIZE, true, // Not really used here, but for flow type purity. './my-fancy-worker', ]); - process.emit('message', [ - CHILD_MESSAGE_END, - true, // Not really used here, but for flow type purity. - ]); + process.emit('message', [CHILD_MESSAGE_END]); - expect(process.exit.mock.calls[0]).toEqual([0]); + expect(process.listenerCount('message')).toBe(0); }); it('calls the teardown method ', () => { diff --git a/packages/jest-worker/src/workers/__tests__/threadChild.test.js b/packages/jest-worker/src/workers/__tests__/threadChild.test.js index 5e8431b8df66..d62fedffc084 100644 --- a/packages/jest-worker/src/workers/__tests__/threadChild.test.js +++ b/packages/jest-worker/src/workers/__tests__/threadChild.test.js @@ -114,14 +114,11 @@ beforeEach(() => { thread = require('worker_threads').parentPort; - process.exit = jest.fn(); - // Require the child! require('../threadChild'); }); beforeEach(() => { - process.exit.mockClear(); thread.postMessage.mockClear(); }); @@ -341,7 +338,8 @@ it('calls the main export if the method call is "default" and it is a Babel tran ]); }); -it('finishes the process with exit code 0 if requested', () => { +it('removes the message listener on END message', () => { + // So that there are no more open handles preventing Node from exiting thread.emit('message', [ CHILD_MESSAGE_INITIALIZE, true, // Not really used here, but for flow type purity. @@ -353,7 +351,7 @@ it('finishes the process with exit code 0 if requested', () => { true, // Not really used here, but for flow type purity. ]); - expect(process.exit).toHaveBeenCalledWith(0); + expect(thread.listenerCount('message')).toBe(0); }); it('calls the teardown method ', () => { diff --git a/packages/jest-worker/src/workers/processChild.ts b/packages/jest-worker/src/workers/processChild.ts index fd964fc349d5..96a298cf33e9 100644 --- a/packages/jest-worker/src/workers/processChild.ts +++ b/packages/jest-worker/src/workers/processChild.ts @@ -34,7 +34,7 @@ let initialized = false; * If an invalid message is detected, the child will exit (by throwing) with a * non-zero exit code. */ -process.on('message', (request: any) => { +const messageListener = (request: any) => { switch (request[0]) { case CHILD_MESSAGE_INITIALIZE: const init: ChildMessageInitialize = request; @@ -56,7 +56,8 @@ process.on('message', (request: any) => { 'Unexpected request from parent process: ' + request[0], ); } -}); +}; +process.on('message', messageListener); function reportSuccess(result: any) { if (!process || !process.send) { @@ -105,7 +106,8 @@ function end(): void { } function exitProcess(): void { - process.exit(0); + // Clean up open handles so the process ideally exits gracefully + process.removeListener('message', messageListener); } function execMethod(method: string, args: Array): void { diff --git a/packages/jest-worker/src/workers/threadChild.ts b/packages/jest-worker/src/workers/threadChild.ts index 4e81c394b7d0..bab076dce2c1 100644 --- a/packages/jest-worker/src/workers/threadChild.ts +++ b/packages/jest-worker/src/workers/threadChild.ts @@ -38,7 +38,7 @@ let initialized = false; * If an invalid message is detected, the child will exit (by throwing) with a * non-zero exit code. */ -parentPort!.on('message', (request: any) => { +const messageListener = (request: any) => { switch (request[0]) { case CHILD_MESSAGE_INITIALIZE: const init: ChildMessageInitialize = request; @@ -60,7 +60,8 @@ parentPort!.on('message', (request: any) => { 'Unexpected request from parent process: ' + request[0], ); } -}); +}; +parentPort!.on('message', messageListener); function reportSuccess(result: any) { if (isMainThread) { @@ -109,7 +110,8 @@ function end(): void { } function exitProcess(): void { - process.exit(0); + // Clean up open handles so the worker ideally exits gracefully + parentPort!.removeListener('message', messageListener); } function execMethod(method: string, args: Array): void { diff --git a/yarn.lock b/yarn.lock index 382b862831b2..3253802a3faa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6227,6 +6227,15 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-process@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.1.tgz#628c576a494d1525a27673fb26c77af90db5db02" + integrity sha512-RkYWDeukxEoDKUyocqMGKAYuwhSwq77zL99gCqhX9czWon3otdlzihJ0MSZ6YWNKHyvS/MN2YR4+RGYOuIEANg== + dependencies: + chalk "^2.0.1" + commander "^2.11.0" + debug "^2.6.8" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" From 6e6a8e827bdf392790ac60eb4d4226af3844cb15 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 23 Aug 2019 13:27:44 +0200 Subject: [PATCH 08/97] chore: wait 100ms before checking for leaks Ref #8686 --- packages/jest-runner/src/runTest.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/jest-runner/src/runTest.ts b/packages/jest-runner/src/runTest.ts index a238c743bfaf..b0892c948168 100644 --- a/packages/jest-runner/src/runTest.ts +++ b/packages/jest-runner/src/runTest.ts @@ -295,6 +295,9 @@ export default async function runTest( ); if (leakDetector) { + // We wanna allow a tiny but time to pass to allow last-minute cleanup + await new Promise(resolve => setTimeout(resolve, 100)); + // Resolve leak detector, outside the "runTestInternal" closure. result.leaks = await leakDetector.isLeaking(); } else { From 438118a8024cd76852affa7198936111df2f7cc0 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 26 Aug 2019 09:26:22 +0200 Subject: [PATCH 09/97] chore: convert jest-cli and jest-validate to esm (#8874) --- CHANGELOG.md | 5 +++++ e2e/run-programmatically/cjs.js | 2 -- e2e/run-programmatically/esm.js | 6 ++---- packages/babel-plugin-jest-hoist/src/index.ts | 2 +- packages/jest-cli/src/index.ts | 19 +------------------ packages/jest-jasmine2/src/index.ts | 2 +- .../jest-jasmine2/src/jasmine/jasmineLight.ts | 8 +++----- packages/jest-validate/src/index.ts | 18 ++++-------------- packages/jest/package.json | 1 + packages/jest/src/jest.ts | 10 ++++++++-- packages/jest/tsconfig.json | 3 ++- 11 files changed, 28 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49322624ffe0..ce698c98f80e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,9 +22,14 @@ - `[*]` [**BREAKING**] Drop support for Node 6 ([#8455](https://github.com/facebook/jest/pull/8455)) - `[*]` Add Node 12 to CI ([#8411](https://github.com/facebook/jest/pull/8411)) - `[*]` [**BREAKING**] Upgrade to Micromatch v4 ([#8852](https://github.com/facebook/jest/pull/8852)) +- `[babel-plugin-jest-hoist]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) - `[docs]` Fix broken link pointing to legacy JS file in "Snapshot Testing". +- `[jest]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) +- `[jest-cli]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) +- `[jest-cli]` [**BREAKING**] Remove re-exports from `@jest/core` ([#8874](https://github.com/facebook/jest/pull/8874)) - `[jest-environment-jsdom]` [**BREAKING**] Upgrade JSDOM from v11 to v15 ([#8851](https://github.com/facebook/jest/pull/8851)) - `[jest-util]` [**BREAKING**] Remove deprecated exports ([#8863](https://github.com/facebook/jest/pull/8863)) +- `[jest-validate]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) ### Performance diff --git a/e2e/run-programmatically/cjs.js b/e2e/run-programmatically/cjs.js index 2366de690bc4..c5fbf6340307 100644 --- a/e2e/run-programmatically/cjs.js +++ b/e2e/run-programmatically/cjs.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ // Running Jest like this is not officially supported, diff --git a/e2e/run-programmatically/esm.js b/e2e/run-programmatically/esm.js index f9120cd5599e..6ee4ddcaaf24 100644 --- a/e2e/run-programmatically/esm.js +++ b/e2e/run-programmatically/esm.js @@ -3,12 +3,10 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ -import myJestImport from 'jest'; +import {run} from 'jest'; // Running Jest like this is not officially supported, // but it is common practice until there is a proper API as a substitute. -myJestImport.run(process.argv); +run(process.argv); diff --git a/packages/babel-plugin-jest-hoist/src/index.ts b/packages/babel-plugin-jest-hoist/src/index.ts index d321b13af59a..5a5d51b99fc3 100644 --- a/packages/babel-plugin-jest-hoist/src/index.ts +++ b/packages/babel-plugin-jest-hoist/src/index.ts @@ -154,7 +154,7 @@ FUNCTIONS.deepUnmock = args => args.length === 1 && args[0].isStringLiteral(); FUNCTIONS.disableAutomock = FUNCTIONS.enableAutomock = args => args.length === 0; -export = () => { +export default () => { const shouldHoistExpression = (expr: NodePath): boolean => { if (!expr.isCallExpression()) { return false; diff --git a/packages/jest-cli/src/index.ts b/packages/jest-cli/src/index.ts index a03c03018a7a..67f1ad99ff3f 100644 --- a/packages/jest-cli/src/index.ts +++ b/packages/jest-cli/src/index.ts @@ -5,21 +5,4 @@ * LICENSE file in the root directory of this source tree. */ -// TODO: remove @jest/core exports for the next major -import { - SearchSource, - TestScheduler, - TestWatcher, - getVersion, - runCLI, -} from '@jest/core'; -import {run} from './cli'; - -export = { - SearchSource, - TestScheduler, - TestWatcher, - getVersion, - run, - runCLI, -}; +export {run} from './cli'; diff --git a/packages/jest-jasmine2/src/index.ts b/packages/jest-jasmine2/src/index.ts index 6122832f8fe4..53598542b031 100644 --- a/packages/jest-jasmine2/src/index.ts +++ b/packages/jest-jasmine2/src/index.ts @@ -38,7 +38,7 @@ async function jasmine2( }); const env = jasmine.getEnv(); - const jasmineInterface = jasmineFactory.interface(jasmine, env); + const jasmineInterface = jasmineFactory._interface(jasmine, env); Object.assign(environment.global, jasmineInterface); env.addReporter(jasmineInterface.jsApiReporter); diff --git a/packages/jest-jasmine2/src/jasmine/jasmineLight.ts b/packages/jest-jasmine2/src/jasmine/jasmineLight.ts index 837f04906805..576af1aae1f2 100644 --- a/packages/jest-jasmine2/src/jasmine/jasmineLight.ts +++ b/packages/jest-jasmine2/src/jasmine/jasmineLight.ts @@ -40,7 +40,7 @@ import SpyRegistry from './spyRegistry'; import Suite from './Suite'; import Timer from './Timer'; -const create = function(createOptions: Record): Jasmine { +export const create = function(createOptions: Record): Jasmine { const j$ = {...createOptions} as Jasmine; j$._DEFAULT_TIMEOUT_INTERVAL = createOptions.testTimeout || 5000; @@ -63,7 +63,8 @@ const create = function(createOptions: Record): Jasmine { return j$; }; -const _interface = function(jasmine: Jasmine, env: any) { +// Interface is a reserved word in strict mode, so can't export it as ESM +export const _interface = function(jasmine: Jasmine, env: any) { const jasmineInterface = { describe(description: string, specDefinitions: Function) { return env.describe(description, specDefinitions); @@ -146,6 +147,3 @@ const _interface = function(jasmine: Jasmine, env: any) { return jasmineInterface; }; - -// Interface is a reserved word in strict mode, so can't export it as ESM -export = {create, interface: _interface}; diff --git a/packages/jest-validate/src/index.ts b/packages/jest-validate/src/index.ts index 85661dcf720e..01b9fccab3c1 100644 --- a/packages/jest-validate/src/index.ts +++ b/packages/jest-validate/src/index.ts @@ -5,22 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import { +export { ValidationError, createDidYouMeanMessage, format, logValidationWarning, } from './utils'; -import validate from './validate'; -import validateCLIOptions from './validateCLIOptions'; -import {multipleValidOptions} from './condition'; - -export = { - ValidationError, - createDidYouMeanMessage, - format, - logValidationWarning, - multipleValidOptions, - validate, - validateCLIOptions, -}; +export {default as validate} from './validate'; +export {default as validateCLIOptions} from './validateCLIOptions'; +export {multipleValidOptions} from './condition'; diff --git a/packages/jest/package.json b/packages/jest/package.json index c93b3082f821..f094070eaccf 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -5,6 +5,7 @@ "main": "build/jest.js", "types": "build/jest.d.ts", "dependencies": { + "@jest/core": "^24.9.0", "import-local": "^3.0.2", "jest-cli": "^24.9.0" }, diff --git a/packages/jest/src/jest.ts b/packages/jest/src/jest.ts index f7322540629f..ff2c31c2f394 100644 --- a/packages/jest/src/jest.ts +++ b/packages/jest/src/jest.ts @@ -5,6 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import * as cli from 'jest-cli'; +export { + SearchSource, + TestScheduler, + TestWatcher, + getVersion, + runCLI, +} from '@jest/core'; -export = cli; +export {run} from 'jest-cli'; diff --git a/packages/jest/tsconfig.json b/packages/jest/tsconfig.json index 0e089576b519..f3e9271cd4a7 100644 --- a/packages/jest/tsconfig.json +++ b/packages/jest/tsconfig.json @@ -5,6 +5,7 @@ "outDir": "build" }, "references": [ - {"path": "../jest-cli"} + {"path": "../jest-cli"}, + {"path": "../jest-core"} ] } From 4e9ac722b3f360322b02ac33c363a505795f5856 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 26 Aug 2019 09:36:17 +0200 Subject: [PATCH 10/97] chore: import clearline rather than duplicating it (#8875) --- packages/jest-console/package.json | 1 + packages/jest-console/src/CustomConsole.ts | 16 +++++----------- .../src/__tests__/CustomConsole.test.ts | 6 +++--- packages/jest-console/tsconfig.json | 3 ++- packages/jest-core/src/cli/index.ts | 4 ++-- packages/jest-core/src/runJest.ts | 6 +++--- packages/jest-util/src/clearLine.ts | 6 +++--- packages/jest-util/src/preRunMessage.ts | 4 ++-- 8 files changed, 21 insertions(+), 25 deletions(-) diff --git a/packages/jest-console/package.json b/packages/jest-console/package.json index 4d97f85ceb01..0605f0d10a99 100644 --- a/packages/jest-console/package.json +++ b/packages/jest-console/package.json @@ -12,6 +12,7 @@ "dependencies": { "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", + "jest-util": "^24.9.0", "slash": "^3.0.0" }, "engines": { diff --git a/packages/jest-console/src/CustomConsole.ts b/packages/jest-console/src/CustomConsole.ts index cf3bcd37cd0a..481cb18a1953 100644 --- a/packages/jest-console/src/CustomConsole.ts +++ b/packages/jest-console/src/CustomConsole.ts @@ -9,28 +9,22 @@ import assert = require('assert'); import {format} from 'util'; import {Console} from 'console'; import chalk from 'chalk'; +import {clearLine} from 'jest-util'; import {LogCounters, LogMessage, LogTimers, LogType} from './types'; -// TODO: Copied from `jest-util`. Import from it in Jest 25 -function clearLine(stream: NodeJS.WritableStream & {isTTY?: boolean}) { - if (stream.isTTY) { - stream.write('\x1b[999D\x1b[K'); - } -} - type Formatter = (type: LogType, message: LogMessage) => string; export default class CustomConsole extends Console { - private _stdout: NodeJS.WritableStream; - private _stderr: NodeJS.WritableStream; + private _stdout: NodeJS.WriteStream; + private _stderr: NodeJS.WriteStream; private _formatBuffer: Formatter; private _counters: LogCounters; private _timers: LogTimers; private _groupDepth: number; constructor( - stdout: NodeJS.WritableStream, - stderr: NodeJS.WritableStream, + stdout: NodeJS.WriteStream, + stderr: NodeJS.WriteStream, formatBuffer: Formatter = (_type, message) => message, ) { super(stdout, stderr); diff --git a/packages/jest-console/src/__tests__/CustomConsole.test.ts b/packages/jest-console/src/__tests__/CustomConsole.test.ts index 56c6964eab7b..f0dc966df14c 100644 --- a/packages/jest-console/src/__tests__/CustomConsole.test.ts +++ b/packages/jest-console/src/__tests__/CustomConsole.test.ts @@ -10,9 +10,9 @@ import chalk from 'chalk'; import CustomConsole from '../CustomConsole'; describe('CustomConsole', () => { - let _console; - let _stdout; - let _stderr; + let _console: CustomConsole; + let _stdout: string; + let _stderr: string; beforeEach(() => { _stdout = ''; diff --git a/packages/jest-console/tsconfig.json b/packages/jest-console/tsconfig.json index d38e7a48fd1c..719bab0f554b 100644 --- a/packages/jest-console/tsconfig.json +++ b/packages/jest-console/tsconfig.json @@ -5,6 +5,7 @@ "outDir": "build" }, "references": [ - {"path": "../jest-source-map"} + {"path": "../jest-source-map"}, + {"path": "../jest-util"} ] } diff --git a/packages/jest-core/src/cli/index.ts b/packages/jest-core/src/cli/index.ts index 6963f44e185b..1098332ef064 100644 --- a/packages/jest-core/src/cli/index.ts +++ b/packages/jest-core/src/cli/index.ts @@ -114,7 +114,7 @@ export const runCLI = async ( const buildContextsAndHasteMaps = async ( configs: Array, globalConfig: Config.GlobalConfig, - outputStream: NodeJS.WritableStream, + outputStream: NodeJS.WriteStream, ) => { const hasteMapInstances = Array(configs.length); const contexts = await Promise.all( @@ -242,7 +242,7 @@ const runWatch = async ( const runWithoutWatch = async ( globalConfig: Config.GlobalConfig, contexts: Array, - outputStream: NodeJS.WritableStream, + outputStream: NodeJS.WriteStream, onComplete: OnCompleteCallback, changedFilesPromise?: ChangedFilesPromise, filter?: Filter, diff --git a/packages/jest-core/src/runJest.ts b/packages/jest-core/src/runJest.ts index 3a9d293b127b..27c08d260947 100644 --- a/packages/jest-core/src/runJest.ts +++ b/packages/jest-core/src/runJest.ts @@ -36,7 +36,7 @@ import {Filter, TestRunData} from './types'; const getTestPaths = async ( globalConfig: Config.GlobalConfig, context: Context, - outputStream: NodeJS.WritableStream, + outputStream: NodeJS.WriteStream, changedFiles: ChangedFiles | undefined, jestHooks: JestHookEmitter, filter?: Filter, @@ -75,7 +75,7 @@ type ProcessResultOptions = Pick< > & { collectHandles?: () => Array; onComplete?: (result: AggregatedResult) => void; - outputStream: NodeJS.WritableStream; + outputStream: NodeJS.WriteStream; }; const processResults = ( @@ -136,7 +136,7 @@ export default (async function runJest({ }: { globalConfig: Config.GlobalConfig; contexts: Array; - outputStream: NodeJS.WritableStream; + outputStream: NodeJS.WriteStream; testWatcher: TestWatcher; jestHooks?: JestHookEmitter; startRun: (globalConfig: Config.GlobalConfig) => void; diff --git a/packages/jest-util/src/clearLine.ts b/packages/jest-util/src/clearLine.ts index c16f99c7c3fc..dcf770c9624f 100644 --- a/packages/jest-util/src/clearLine.ts +++ b/packages/jest-util/src/clearLine.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -export default (stream: NodeJS.WritableStream) => { - if (process.stdout.isTTY) { +export default function clearLine(stream: NodeJS.WriteStream) { + if (stream.isTTY) { stream.write('\x1b[999D\x1b[K'); } -}; +} diff --git a/packages/jest-util/src/preRunMessage.ts b/packages/jest-util/src/preRunMessage.ts index d6c8979fa1e6..100d4226a245 100644 --- a/packages/jest-util/src/preRunMessage.ts +++ b/packages/jest-util/src/preRunMessage.ts @@ -9,13 +9,13 @@ import chalk from 'chalk'; import clearLine from './clearLine'; import isInteractive from './isInteractive'; -export const print = (stream: NodeJS.WritableStream) => { +export const print = (stream: NodeJS.WriteStream) => { if (isInteractive) { stream.write(chalk.bold.dim('Determining test suites to run...')); } }; -export const remove = (stream: NodeJS.WritableStream) => { +export const remove = (stream: NodeJS.WriteStream) => { if (isInteractive) { clearLine(stream); } From 6c5d96a68e234834d5ded525a159e3343e16e483 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 26 Aug 2019 10:59:43 +0200 Subject: [PATCH 11/97] chore: upgrade to latest eslint 6 (#8877) --- package.json | 4 +- yarn.lock | 162 +++++++++++++++++++++++++-------------------------- 2 files changed, 80 insertions(+), 86 deletions(-) diff --git a/package.json b/package.json index 2fff8137dc90..18aa0284a6a0 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@typescript-eslint/parser": "^2.0.0", "ansi-regex": "^4.0.0", "ansi-styles": "^4.0.0", - "babel-eslint": "^10.0.2", + "babel-eslint": "^10.0.3", "babel-loader": "^8.0.5", "babel-plugin-replace-ts-export-assignment": "^0.0.2", "babel-plugin-typescript-strip-namespaces": "^1.1.1", @@ -26,7 +26,7 @@ "chalk": "^2.0.1", "codecov": "^3.0.0", "debug": "^4.0.1", - "eslint": "~6.1.0", + "eslint": "^6.2.2", "eslint-config-prettier": "^6.1.0", "eslint-plugin-babel": "^5.1.0", "eslint-plugin-flowtype": "^4.2.0", diff --git a/yarn.lock b/yarn.lock index 3253802a3faa..9f9b54b59520 100644 --- a/yarn.lock +++ b/yarn.lock @@ -913,16 +913,18 @@ safe-buffer "^5.1.2" "@evocateur/pacote@^9.6.3": - version "9.6.3" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.3.tgz#bcd7adbd3c2ef303aa89bd24166f06dd9c080d89" - integrity sha512-ExqNqcbdHQprEgKnY/uQz7WRtyHRbQxRl4JnVkSkmtF8qffRrF9K+piZKNLNSkRMOT/3H0e3IP44QVCHaXMWOQ== + version "9.6.5" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== dependencies: "@evocateur/npm-registry-fetch" "^4.0.0" bluebird "^3.5.3" - cacache "^12.0.0" + cacache "^12.0.3" + chownr "^1.1.2" figgy-pudding "^3.5.1" get-stream "^4.1.0" glob "^7.1.4" + infer-owner "^1.0.4" lru-cache "^5.1.1" make-fetch-happen "^5.0.0" minimatch "^3.0.4" @@ -932,7 +934,7 @@ normalize-package-data "^2.5.0" npm-package-arg "^6.1.0" npm-packlist "^1.4.4" - npm-pick-manifest "^2.2.3" + npm-pick-manifest "^3.0.0" osenv "^0.1.5" promise-inflight "^1.0.1" promise-retry "^1.1.1" @@ -2364,7 +2366,7 @@ acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.0: +acorn-jsx@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== @@ -2544,11 +2546,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.0.0.tgz#f6b84e8fc97ea7add7a53b7530ef28f3fde0e048" - integrity sha512-8zjUtFJ3db/QoPXuuEMloS2AUf79/yeyttJ7Abr3hteopJu9HK8vsgGviGUMq+zyA6cZZO6gAyZoMTF6TgaEjA== + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.1.0.tgz#d3ba8047b818293eaaa7978321dd61bff9842cfc" + integrity sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ== dependencies: - color-convert "^2.0.0" + color-convert "^2.0.1" ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" @@ -2915,17 +2917,17 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-eslint@^10.0.2: - version "10.0.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.2.tgz#182d5ac204579ff0881684b040560fdcc1558456" - integrity sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q== +babel-eslint@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" + integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.0.0" "@babel/traverse" "^7.0.0" "@babel/types" "^7.0.0" - eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" babel-loader@^8.0.5: version "8.0.6" @@ -3476,7 +3478,7 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.0, cacache@^12.0.2: +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: version "12.0.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== @@ -3715,9 +3717,9 @@ cheerio@^1.0.0-rc.2: parse5 "^3.0.1" chokidar@^2.0.2, chokidar@^2.0.4: - version "2.1.6" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" - integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" async-each "^1.0.1" @@ -3748,7 +3750,7 @@ chokidar@^3.0.0, chokidar@^3.0.2: optionalDependencies: fsevents "^2.0.6" -chownr@^1.1.1: +chownr@^1.1.1, chownr@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== @@ -3919,7 +3921,7 @@ color-convert@^1.9.0, color-convert@^1.9.1: dependencies: color-name "1.1.3" -color-convert@^2.0.0: +color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== @@ -5148,9 +5150,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.191: - version "1.3.236" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.236.tgz#c7158cbd4d17a3670ac7c9b44da44d752aa193a9" - integrity sha512-LWOvuJ80pLO3FtFqTcGuXB0dxdMtzSCkRmbXdY5mHUvXRQGor3sTVmyfU70aD2yF5i+fbHz52ncWr5T3xUYHlA== + version "1.3.241" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.241.tgz#859dc49ab7f90773ed698767372d384190f60cb1" + integrity sha512-Gb9E6nWZlbgjDDNe5cAvMJixtn79krNJ70EDpq/M10lkGo7PGtBUe7Y0CYVHsBScRwi6ybCS+YetXAN9ysAHDg== elliptic@^6.0.0: version "6.5.0" @@ -5492,9 +5494,9 @@ eslint-plugin-import@^2.6.0: resolve "^1.11.0" eslint-plugin-jest@^22.0.0: - version "22.15.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.15.1.tgz#54c4a752a44c4bc5a564ecc22b32e1cd16a2961a" - integrity sha512-CWq/RR/3tLaKFB+FZcCJwU9hH5q/bKeO3rFP8G07+q7hcDCFNqpvdphVbEbGE6o6qo1UbciEev4ejUWv7brUhw== + version "22.15.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.15.2.tgz#e3c10d9391f787744e31566f69ebb70c3a98e398" + integrity sha512-p4NME9TgXIt+KgpxcXyNBvO30ZKxwFAO1dJZBc2OGfDnXVEtPwEyNs95GSr6RIE3xLHdjd8ngDdE2icRRXrbxg== dependencies: "@typescript-eslint/experimental-utils" "^1.13.0" @@ -5557,14 +5559,6 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-scope@^4.0.0, eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5581,7 +5575,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1, eslint-utils@^1.4.0: +eslint-utils@^1.4.0, eslint-utils@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== @@ -5593,10 +5587,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@~6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" - integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== +eslint@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.2.2.tgz#03298280e7750d81fcd31431f3d333e43d93f24f" + integrity sha512-mf0elOkxHbdyGX1IJEUsNBzCDdyoUgljF3rRlgfyYh0pwGnreLc0jjD6ZuleOibjmnUWZLY2eXwSooeOgGJ2jw== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -5605,9 +5599,9 @@ eslint@~6.1.0: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.0.0" + eslint-utils "^1.4.2" + eslint-visitor-keys "^1.1.0" + espree "^6.1.1" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -5636,13 +5630,13 @@ eslint@~6.1.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.0.tgz#a1e8aa65bf29a331d70351ed814a80e7534e0884" - integrity sha512-boA7CHRLlVWUSg3iL5Kmlt/xT3Q+sXnKoRYYzj1YeM10A76TEJBbotV5pKbnK42hEUIr121zTv+QLRM5LsCPXQ== +espree@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" + integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== dependencies: acorn "^7.0.0" - acorn-jsx "^5.0.0" + acorn-jsx "^5.0.2" eslint-visitor-keys "^1.1.0" esprima@^3.1.3: @@ -6220,6 +6214,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-process@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.2.tgz#8703cbb542df0e4cd646f581fbcce860d0131c31" + integrity sha512-O83EVJr4dWvHJ7QpUzANNAMeQVKukRzRqRx4AIzdLYRrQorRdbqDwLPigkd9PYPhJRhmNPAoVjOm9bcwSmcZaw== + dependencies: + chalk "^2.0.1" + commander "^2.11.0" + debug "^2.6.8" + find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -6227,15 +6230,6 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-process@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.1.tgz#628c576a494d1525a27673fb26c77af90db5db02" - integrity sha512-RkYWDeukxEoDKUyocqMGKAYuwhSwq77zL99gCqhX9czWon3otdlzihJ0MSZ6YWNKHyvS/MN2YR4+RGYOuIEANg== - dependencies: - chalk "^2.0.1" - commander "^2.11.0" - debug "^2.6.8" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -7036,7 +7030,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: version "2.8.4" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== @@ -7325,7 +7319,7 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= -infer-owner@^1.0.3: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -9407,9 +9401,9 @@ minimist@~0.0.1: integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.4.0.tgz#38f0af94f42fb6f34d3d7d82a90e2c99cd3ff485" + integrity sha512-6PmOuSP4NnZXzs2z6rbwzLJu/c5gdzYg1mRI/WIYdx45iiX7T+a4esOzavD6V/KmBzAaopFSTZPZcUx73bqKWA== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" @@ -9759,9 +9753,9 @@ node-pre-gyp@^0.12.0: tar "^4" node-releases@^1.1.25: - version "1.1.27" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.27.tgz#b19ec8add2afe9a826a99dceccc516104c1edaf4" - integrity sha512-9iXUqHKSGo6ph/tdXVbHFbhRVQln4ZDTIBJCzsa90HimnBYc5jw8RWYt4wBYFHehGyC3koIz5O4mb2fHrbPOuA== + version "1.1.28" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.28.tgz#503c3c70d0e4732b84e7aaa2925fbdde10482d4a" + integrity sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g== dependencies: semver "^5.3.0" @@ -9849,13 +9843,13 @@ npm-lifecycle@^3.1.2: which "^1.3.1" "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== dependencies: - hosted-git-info "^2.6.0" + hosted-git-info "^2.7.1" osenv "^0.1.5" - semver "^5.5.0" + semver "^5.6.0" validate-npm-package-name "^3.0.0" npm-packlist@^1.1.6, npm-packlist@^1.4.4: @@ -9866,10 +9860,10 @@ npm-packlist@^1.1.6, npm-packlist@^1.4.4: ignore-walk "^3.0.1" npm-bundled "^1.0.1" -npm-pick-manifest@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" - integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA== +npm-pick-manifest@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.0.tgz#c94cab52d201a85875e45198fffe1a8a348e7af7" + integrity sha512-H+OnFudiq38Qj8P8xcesD/1Xa0Kvr2QRn1DTlephIwNfJg3P30Szc1wtpGEgdPXfAyKZKT2ajIM2X8YtCrbXrA== dependencies: figgy-pudding "^3.5.1" npm-package-arg "^6.0.0" @@ -11557,9 +11551,9 @@ react@16.6.3: scheduler "^0.11.2" read-cmd-shim@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.3.tgz#b246608c8e76e332a99be7811c096a4baf60015a" - integrity sha512-HUHb2imlZ8xBJjiZZRx0Ag9JfZ3jxQRfORMQXWCDeHE6PCCnpQrMq6LhyNqEPnMXhMDDIyq/BK7pBbhNy9zDDA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz#b4a53d43376211b45243f0072b6e603a8e37640d" + integrity sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ== dependencies: graceful-fs "^4.1.2" @@ -11790,9 +11784,9 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp-tree@^0.1.6: - version "0.1.11" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.11.tgz#c9c7f00fcf722e0a56c7390983a7a63dd6c272f3" - integrity sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg== + version "0.1.12" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.12.tgz#28eaaa6e66eeb3527c15108a3ff740d9e574e420" + integrity sha512-TsXZ8+cv2uxMEkLfgwO0E068gsNMLfuYwMMhiUxf0Kw2Vcgzq93vgl6wIlIYuPmfMqMjfQ9zAporiozqCnwLuQ== regexpp@^2.0.1: version "2.0.1" @@ -11985,7 +11979,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -13171,9 +13165,9 @@ terser-webpack-plugin@^1.4.1: worker-farm "^1.7.0" terser@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.0.tgz#4b1b5f4424b426a7a47e80d6aae45e0d7979aef0" - integrity sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA== + version "4.2.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1" + integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A== dependencies: commander "^2.20.0" source-map "~0.6.1" From 8c169d20add61c8831162d8347d2710c07b6b0ef Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 26 Aug 2019 12:05:49 +0200 Subject: [PATCH 12/97] chore: add caching to azure pipelines (#8866) --- .azure-pipelines-steps.yml | 6 ++++++ .azure-pipelines.yml | 2 ++ 2 files changed, 8 insertions(+) diff --git a/.azure-pipelines-steps.yml b/.azure-pipelines-steps.yml index 56f25e676cf8..f672e789dfca 100644 --- a/.azure-pipelines-steps.yml +++ b/.azure-pipelines-steps.yml @@ -22,6 +22,12 @@ steps: - script: node scripts/remove-postinstall displayName: 'Remove postinstall script' + - task: CacheBeta@0 + inputs: + key: yarn | $(Agent.OS) | yarn.lock + path: $(YARN_CACHE_FOLDER) + displayName: Cache Yarn packages + - script: yarn --no-progress --frozen-lockfile displayName: 'Install dependencies' diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index 6bf1e00454ab..aedf9b8cb3cf 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -34,3 +34,5 @@ variables: # Ensures the handful of tests that should be skipped during CI are CI: true + + YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn From e39b8dc5bb8816e23ef549b1f9459264364bb2f6 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 26 Aug 2019 14:41:06 +0200 Subject: [PATCH 13/97] chore: use `as const` rather than casting individual strings (#8879) * chore: use `as const` rather than casting individual strings * remove more casting --- packages/jest-cli/src/cli/args.ts | 242 +++++++++--------- packages/jest-config/src/ValidConfig.ts | 4 +- .../jest-transform/src/ScriptTransformer.ts | 6 +- 3 files changed, 128 insertions(+), 124 deletions(-) diff --git a/packages/jest-cli/src/cli/args.ts b/packages/jest-cli/src/cli/args.ts index 464330d63177..6bc9650b7a01 100644 --- a/packages/jest-cli/src/cli/args.ts +++ b/packages/jest-cli/src/cli/args.ts @@ -74,19 +74,19 @@ export const options = { 'The opposite of `onlyChanged`. If `onlyChanged` is set by ' + 'default, running jest with `--all` will force Jest to run all tests ' + 'instead of running only tests related to changed files.', - type: 'boolean' as 'boolean', + type: 'boolean', }, automock: { default: undefined, description: 'Automock all files by default.', - type: 'boolean' as 'boolean', + type: 'boolean', }, bail: { alias: 'b', default: undefined, description: 'Exit the test suite immediately after `n` number of failing tests.', - type: 'boolean' as 'boolean', + type: 'boolean', }, browser: { default: undefined, @@ -94,27 +94,27 @@ export const options = { 'Respect the "browser" field in package.json ' + 'when resolving modules. Some packages export different versions ' + 'based on whether they are operating in node.js or a browser.', - type: 'boolean' as 'boolean', + type: 'boolean', }, cache: { default: undefined, description: 'Whether to use the transform cache. Disable the cache ' + 'using --no-cache.', - type: 'boolean' as 'boolean', + type: 'boolean', }, cacheDirectory: { description: 'The directory where Jest should store its cached ' + ' dependency information.', - type: 'string' as 'string', + type: 'string', }, changedFilesWithAncestor: { default: undefined, description: 'Runs tests related to the current changes and the changes made in the ' + 'last commit. Behaves similarly to `--onlyChanged`.', - type: 'boolean' as 'boolean', + type: 'boolean', }, changedSince: { description: @@ -122,7 +122,7 @@ export const options = { 'current branch has diverged from the given branch, then only changes ' + 'made locally will be tested. Behaves similarly to `--onlyChanged`.', nargs: 1, - type: 'string' as 'string', + type: 'string', }, ci: { default: isCI, @@ -130,49 +130,49 @@ export const options = { 'Whether to run Jest in continuous integration (CI) mode. ' + 'This option is on by default in most popular CI environments. It will ' + ' prevent snapshots from being written unless explicitly requested.', - type: 'boolean' as 'boolean', + type: 'boolean', }, clearCache: { default: undefined, description: 'Clears the configured Jest cache directory and then exits. ' + 'Default directory can be found by calling jest --showConfig', - type: 'boolean' as 'boolean', + type: 'boolean', }, clearMocks: { default: undefined, description: 'Automatically clear mock calls and instances between every ' + 'test. Equivalent to calling jest.clearAllMocks() between each test.', - type: 'boolean' as 'boolean', + type: 'boolean', }, collectCoverage: { default: undefined, description: 'Alias for --coverage.', - type: 'boolean' as 'boolean', + type: 'boolean', }, collectCoverageFrom: { description: 'A glob pattern relative to matching the files that coverage ' + 'info needs to be collected from.', - type: 'string' as 'string', + type: 'string', }, collectCoverageOnlyFrom: { description: 'Explicit list of paths coverage will be restricted to.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, color: { default: undefined, description: 'Forces test results output color highlighting (even if ' + 'stdout is not a TTY). Set to false if you would like to have no colors.', - type: 'boolean' as 'boolean', + type: 'boolean', }, colors: { default: undefined, description: 'Alias for `--color`.', - type: 'boolean' as 'boolean', + type: 'boolean', }, config: { alias: 'c', @@ -181,44 +181,44 @@ export const options = { 'and execute tests. If no rootDir is set in the config, the directory ' + 'containing the config file is assumed to be the rootDir for the project.' + 'This can also be a JSON encoded value which Jest will use as configuration.', - type: 'string' as 'string', + type: 'string', }, coverage: { default: undefined, description: 'Indicates that test coverage information should be ' + 'collected and reported in the output.', - type: 'boolean' as 'boolean', + type: 'boolean', }, coverageDirectory: { description: 'The directory where Jest should output its coverage files.', - type: 'string' as 'string', + type: 'string', }, coveragePathIgnorePatterns: { description: 'An array of regexp pattern strings that are matched ' + 'against all file paths before executing the test. If the file path' + 'matches any of the patterns, coverage information will be skipped.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, coverageReporters: { description: 'A list of reporter names that Jest uses when writing ' + 'coverage reports. Any istanbul reporter can be used.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, coverageThreshold: { description: 'A JSON string with which will be used to configure ' + 'minimum threshold enforcement for coverage results', - type: 'string' as 'string', + type: 'string', }, debug: { default: undefined, description: 'Print debugging info about your jest config.', - type: 'boolean' as 'boolean', + type: 'boolean', }, detectLeaks: { default: false, @@ -226,32 +226,32 @@ export const options = { '**EXPERIMENTAL**: Detect memory leaks in tests. After executing a ' + 'test, it will try to garbage collect the global object used, and fail ' + 'if it was leaked', - type: 'boolean' as 'boolean', + type: 'boolean', }, detectOpenHandles: { default: false, description: 'Print out remaining open handles preventing Jest from exiting at the ' + 'end of a test run. Implies `runInBand`.', - type: 'boolean' as 'boolean', + type: 'boolean', }, env: { description: 'The test environment used for all tests. This can point to ' + 'any file or node module. Examples: `jsdom`, `node` or ' + '`path/to/my-environment.js`', - type: 'string' as 'string', + type: 'string', }, errorOnDeprecated: { default: false, description: 'Make calling deprecated APIs throw helpful error messages.', - type: 'boolean' as 'boolean', + type: 'boolean', }, expand: { alias: 'e', default: undefined, description: 'Use this flag to show full diffs instead of a patch.', - type: 'boolean' as 'boolean', + type: 'boolean', }, filter: { default: undefined, @@ -260,7 +260,7 @@ export const options = { 'a list of tests which can be manipulated to exclude tests from ' + 'running. Especially useful when used in conjunction with a testing ' + 'infrastructure to filter known broken tests.', - type: 'string' as 'string', + type: 'string', }, findRelatedTests: { default: undefined, @@ -268,7 +268,7 @@ export const options = { 'Find related tests for a list of source files that were ' + 'passed in as arguments. Useful for pre-commit hook integration to run ' + 'the minimal amount of tests necessary.', - type: 'boolean' as 'boolean', + type: 'boolean', }, forceExit: { default: undefined, @@ -276,44 +276,44 @@ export const options = { 'Force Jest to exit after all tests have completed running. ' + 'This is useful when resources set up by test code cannot be ' + 'adequately cleaned up.', - type: 'boolean' as 'boolean', + type: 'boolean', }, globalSetup: { description: 'The path to a module that runs before All Tests.', - type: 'string' as 'string', + type: 'string', }, globalTeardown: { description: 'The path to a module that runs after All Tests.', - type: 'string' as 'string', + type: 'string', }, globals: { description: 'A JSON string with map of global variables that need ' + 'to be available in all test environments.', - type: 'string' as 'string', + type: 'string', }, haste: { description: 'A JSON string with map of variables for the haste module system', - type: 'string' as 'string', + type: 'string', }, init: { description: 'Generate a basic configuration file', - type: 'boolean' as 'boolean', + type: 'boolean', }, json: { default: undefined, description: 'Prints the test results in JSON. This mode will send all ' + 'other test output and user messages to stderr.', - type: 'boolean' as 'boolean', + type: 'boolean', }, lastCommit: { default: undefined, description: 'Run all tests affected by file changes in the last commit made. ' + 'Behaves similarly to `--onlyChanged`.', - type: 'boolean' as 'boolean', + type: 'boolean', }, listTests: { default: false, @@ -321,7 +321,7 @@ export const options = { 'Lists all tests Jest will run given the arguments and ' + 'exits. Most useful in a CI system together with `--findRelatedTests` ' + 'to determine the tests Jest will run based on specific files', - type: 'boolean' as 'boolean', + type: 'boolean', }, logHeapUsage: { default: undefined, @@ -329,21 +329,21 @@ export const options = { 'Logs the heap usage after every test. Useful to debug ' + 'memory leaks. Use together with `--runInBand` and `--expose-gc` in ' + 'node.', - type: 'boolean' as 'boolean', + type: 'boolean', }, mapCoverage: { default: undefined, description: 'Maps code coverage reports against original source code ' + 'when transformers supply source maps.\n\nDEPRECATED', - type: 'boolean' as 'boolean', + type: 'boolean', }, maxConcurrency: { default: 5, description: 'Specifies the maximum number of tests that are allowed to run' + 'concurrently. This only affects tests using `test.concurrent`.', - type: 'number' as 'number', + type: 'number', }, maxWorkers: { alias: 'w', @@ -352,60 +352,60 @@ export const options = { 'will spawn for running tests. This defaults to the number of the ' + 'cores available on your machine. (its usually best not to override ' + 'this default)', - type: 'string' as 'string', + type: 'string', }, moduleDirectories: { description: 'An array of directory names to be searched recursively ' + "up from the requiring module's location.", - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, moduleFileExtensions: { description: 'An array of file extensions your modules use. If you ' + 'require modules without specifying a file extension, these are the ' + 'extensions Jest will look for. ', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, moduleNameMapper: { description: 'A JSON string with a map from regular expressions to ' + 'module names that allow to stub out resources, like images or ' + 'styles with a single module', - type: 'string' as 'string', + type: 'string', }, modulePathIgnorePatterns: { description: 'An array of regexp pattern strings that are matched ' + 'against all module paths before those paths are to be considered ' + '"visible" to the module loader.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, modulePaths: { description: 'An alternative API to setting the NODE_PATH env variable, ' + 'modulePaths is an array of absolute paths to additional locations to ' + 'search when resolving modules.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, noStackTrace: { default: undefined, description: 'Disables stack trace in test results output', - type: 'boolean' as 'boolean', + type: 'boolean', }, notify: { default: undefined, description: 'Activates notifications for test results.', - type: 'boolean' as 'boolean', + type: 'boolean', }, notifyMode: { default: 'failure-change', description: 'Specifies when notifications will appear for test results.', - type: 'string' as 'string', + type: 'string', }, onlyChanged: { alias: 'o', @@ -414,84 +414,84 @@ export const options = { 'Attempts to identify which tests to run based on which ' + "files have changed in the current repository. Only works if you're " + 'running tests in a git or hg repository at the moment.', - type: 'boolean' as 'boolean', + type: 'boolean', }, onlyFailures: { alias: 'f', default: undefined, description: 'Run tests that failed in the previous execution.', - type: 'boolean' as 'boolean', + type: 'boolean', }, outputFile: { description: 'Write test results to a file when the --json option is ' + 'also specified.', - type: 'string' as 'string', + type: 'string', }, passWithNoTests: { default: false, description: 'Will not fail if no tests are found (for example while using `--testPathPattern`.)', - type: 'boolean' as 'boolean', + type: 'boolean', }, preset: { description: "A preset that is used as a base for Jest's configuration.", - type: 'string' as 'string', + type: 'string', }, prettierPath: { default: undefined, description: 'The path to the "prettier" module used for inline snapshots.', - type: 'string' as 'string', + type: 'string', }, projects: { description: 'A list of projects that use Jest to run all tests of all ' + 'projects in a single instance of Jest.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, reporters: { description: 'A list of custom reporters for the test suite.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, resetMocks: { default: undefined, description: 'Automatically reset mock state between every test. ' + 'Equivalent to calling jest.resetAllMocks() between each test.', - type: 'boolean' as 'boolean', + type: 'boolean', }, resetModules: { default: undefined, description: 'If enabled, the module registry for every test file will ' + 'be reset before running each individual test.', - type: 'boolean' as 'boolean', + type: 'boolean', }, resolver: { description: 'A JSON string which allows the use of a custom resolver.', - type: 'string' as 'string', + type: 'string', }, restoreMocks: { default: undefined, description: 'Automatically restore mock state and implementation between every test. ' + 'Equivalent to calling jest.restoreAllMocks() between each test.', - type: 'boolean' as 'boolean', + type: 'boolean', }, rootDir: { description: 'The root directory that Jest should scan for tests and ' + 'modules within.', - type: 'string' as 'string', + type: 'string', }, roots: { description: 'A list of paths to directories that Jest should use to ' + 'search for files in.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, runInBand: { alias: 'i', @@ -501,7 +501,7 @@ export const options = { 'creating a worker pool of child processes that run tests). This ' + 'is sometimes useful for debugging, but such use cases are pretty ' + 'rare.', - type: 'boolean' as 'boolean', + type: 'boolean', }, runTestsByPath: { default: false, @@ -509,156 +509,156 @@ export const options = { 'Used when provided patterns are exact file paths. This avoids ' + 'converting them into a regular expression and matching it against ' + 'every single file.', - type: 'boolean' as 'boolean', + type: 'boolean', }, runner: { description: "Allows to use a custom runner instead of Jest's default test runner.", - type: 'string' as 'string', + type: 'string', }, setupFiles: { description: 'A list of paths to modules that run some code to configure or ' + 'set up the testing environment before each test. ', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, setupFilesAfterEnv: { description: 'A list of paths to modules that run some code to configure or ' + 'set up the testing framework before each test ', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, showConfig: { default: undefined, description: 'Print your jest config and then exits.', - type: 'boolean' as 'boolean', + type: 'boolean', }, silent: { default: undefined, description: 'Prevent tests from printing messages through the console.', - type: 'boolean' as 'boolean', + type: 'boolean', }, skipFilter: { default: undefined, description: 'Disables the filter provided by --filter. Useful for CI jobs, or ' + 'local enforcement when fixing tests.', - type: 'boolean' as 'boolean', + type: 'boolean', }, snapshotSerializers: { description: 'A list of paths to snapshot serializer modules Jest should ' + 'use for snapshot testing.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, testEnvironment: { description: 'Alias for --env', - type: 'string' as 'string', + type: 'string', }, testEnvironmentOptions: { description: 'Test environment options that will be passed to the testEnvironment. ' + 'The relevant options depend on the environment.', - type: 'string' as 'string', // Object + type: 'string', // Object }, testFailureExitCode: { description: 'Exit code of `jest` command if the test run failed', - type: 'string' as 'string', // number + type: 'string', // number }, testLocationInResults: { default: false, description: 'Add `location` information to the test results', - type: 'boolean' as 'boolean', + type: 'boolean', }, testMatch: { description: 'The glob patterns Jest uses to detect test files.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, testNamePattern: { alias: 't', description: 'Run only tests with a name that matches the regex pattern.', - type: 'string' as 'string', + type: 'string', }, testPathIgnorePatterns: { description: 'An array of regexp pattern strings that are matched ' + 'against all test paths before executing the test. If the test path ' + 'matches any of the patterns, it will be skipped.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, testPathPattern: { description: 'A regexp pattern string that is matched against all tests ' + 'paths before executing the test.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, testRegex: { description: 'A string or array of string regexp patterns that Jest uses to detect test files.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, testResultsProcessor: { description: 'Allows the use of a custom results processor. ' + 'This processor must be a node module that exports ' + 'a function expecting as the first argument the result object.', - type: 'string' as 'string', + type: 'string', }, testRunner: { description: 'Allows to specify a custom test runner. The default is ' + ' `jasmine2`. A path to a custom test runner can be provided: ' + '`/path/to/testRunner.js`.', - type: 'string' as 'string', + type: 'string', }, testSequencer: { description: 'Allows to specify a custom test sequencer. The default is ' + '`@jest/test-sequencer`. A path to a custom test sequencer can be ' + 'provided: `/path/to/testSequencer.js`', - type: 'string' as 'string', + type: 'string', }, testTimeout: { description: 'This option sets the default timeouts of test cases.', - type: 'number' as 'number', + type: 'number', }, testURL: { description: 'This option sets the URL for the jsdom environment.', - type: 'string' as 'string', + type: 'string', }, timers: { description: 'Setting this value to fake allows the use of fake timers ' + 'for functions such as setTimeout.', - type: 'string' as 'string', + type: 'string', }, transform: { description: 'A JSON string which maps from regular expressions to paths ' + 'to transformers.', - type: 'string' as 'string', + type: 'string', }, transformIgnorePatterns: { description: 'An array of regexp pattern strings that are matched ' + 'against all source file paths before transformation.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, unmockedModulePathPatterns: { description: 'An array of regexp pattern strings that are matched ' + 'against all modules before the module loader will automatically ' + 'return a mock for them.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, updateSnapshot: { alias: 'u', @@ -668,24 +668,24 @@ export const options = { 'Can be used together with a test suite pattern or with ' + '`--testNamePattern` to re-record snapshot for test matching ' + 'the pattern', - type: 'boolean' as 'boolean', + type: 'boolean', }, useStderr: { default: undefined, description: 'Divert all output to stderr.', - type: 'boolean' as 'boolean', + type: 'boolean', }, verbose: { default: undefined, description: 'Display individual test results with the test suite hierarchy.', - type: 'boolean' as 'boolean', + type: 'boolean', }, version: { alias: 'v', default: undefined, description: 'Print the version and exit', - type: 'boolean' as 'boolean', + type: 'boolean', }, watch: { default: undefined, @@ -693,7 +693,7 @@ export const options = { 'Watch files for changes and rerun tests related to ' + 'changed files. If you want to re-run all tests when a file has ' + 'changed, use the `--watchAll` option.', - type: 'boolean' as 'boolean', + type: 'boolean', }, watchAll: { default: undefined, @@ -701,21 +701,21 @@ export const options = { 'Watch files for changes and rerun all tests. If you want ' + 'to re-run only the tests related to the changed files, use the ' + '`--watch` option.', - type: 'boolean' as 'boolean', + type: 'boolean', }, watchPathIgnorePatterns: { description: 'An array of regexp pattern strings that are matched ' + 'against all paths before trigger test re-run in watch mode. ' + 'If the test path matches any of the patterns, it will be skipped.', - string: true as true, - type: 'array' as 'array', + string: true, + type: 'array', }, watchman: { default: undefined, description: 'Whether to use watchman for file crawling. Disable using ' + '--no-watchman.', - type: 'boolean' as 'boolean', + type: 'boolean', }, -}; +} as const; diff --git a/packages/jest-config/src/ValidConfig.ts b/packages/jest-config/src/ValidConfig.ts index 15676c43254c..28178876d529 100644 --- a/packages/jest-config/src/ValidConfig.ts +++ b/packages/jest-config/src/ValidConfig.ts @@ -39,9 +39,9 @@ const initialOptions: Config.InitialOptions = { }, dependencyExtractor: '/dependencyExtractor.js', displayName: multipleValidOptions('test-config', { - color: 'blue' as 'blue', + color: 'blue', name: 'test-config', - }), + } as const), errorOnDeprecated: false, expand: false, extraGlobals: [], diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 6ee27c6dd92a..09f611c67332 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -176,7 +176,11 @@ export default class ScriptTransformer { return transformer; } - transform = require(transformPath) as Transformer; + transform = require(transformPath); + + if (!transform) { + throw new TypeError('Jest: a transform must export something.'); + } const transformerConfig = this._transformConfigCache.get(transformPath); if (typeof transform.createTransformer === 'function') { transform = transform.createTransformer(transformerConfig); From fb7b132b7230dac3fca30d79fcc57c98ecffbc81 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Mon, 26 Aug 2019 11:04:04 -0400 Subject: [PATCH 14/97] jest-diff: Export as ECMAScript module (#8873) * jest-diff: Export Diff constructor as value instead of type * Rewrite as ECMAScript-TypeScript module * Delete or TypeScript in README * Add .default to example of CommonJS default export in README * Rename and add as BREAKING to CHANGELOG * Rewrite re-export as explicit import and export statements * Edit description in CHANGELOG.md --- CHANGELOG.md | 1 + packages/jest-diff/README.md | 84 ++++++++++++------- .../src/__tests__/diffStringsRaw.test.ts | 34 ++++++++ packages/jest-diff/src/index.ts | 30 ++----- packages/jest-matcher-utils/src/index.ts | 22 ++--- packages/jest-snapshot/src/print.ts | 4 +- 6 files changed, 110 insertions(+), 65 deletions(-) create mode 100644 packages/jest-diff/src/__tests__/diffStringsRaw.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index ce698c98f80e..4d622017f4ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - `[babel-plugin-jest-hoist]` Show codeframe on static hoisting issues ([#8865](https://github.com/facebook/jest/pull/8865)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) +- `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) - `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md index d60e630be761..822e6c2d619b 100644 --- a/packages/jest-diff/README.md +++ b/packages/jest-diff/README.md @@ -26,8 +26,8 @@ Given values and optional options, `diffLinesUnified(a, b, options?)` does the f To use this function, write either of the following: -- `const diffLinesUnified = require('jest-diff');` in a CommonJS module -- `import diffLinesUnified from 'jest-diff';` in an ECMAScript module +- `const diffLinesUnified = require('jest-diff').default;` in CommonJS modules +- `import diffLinesUnified from 'jest-diff';` in ECMAScript modules ### Example of default export @@ -40,8 +40,7 @@ const difference = diffLinesUnified(a, b); The returned **string** consists of: -- annotation lines which describe the change symbols with labels -- blank line +- annotation lines: describe the two change symbols with labels, and a blank line - comparison lines: similar to “unified” view on GitHub, but `Expected` lines are green, `Received` lines are red, and common lines are dim (by default, see Options) ```diff @@ -77,8 +76,8 @@ Although the function is mainly for **multiline** strings, it compares any strin Write either of the following: -- `const {diffStringsUnified} = require('jest-diff');` in a CommonJS module -- `import {diffStringsUnified} from 'jest-diff';` in an ECMAScript module +- `const {diffStringsUnified} = require('jest-diff');` in CommonJS modules +- `import {diffStringsUnified} from 'jest-diff';` in ECMAScript modules ### Example of diffStringsUnified @@ -91,9 +90,8 @@ const difference = diffStringsUnified(a, b); The returned **string** consists of: -- annotation lines which describe the change symbols with labels -- blank line -- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverted** foreground and background colors +- annotation lines: describe the two change symbols with labels, and a blank line +- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverted** foreground and background colors (which the following example does not show) ```diff - Expected @@ -121,18 +119,21 @@ If the input strings can have **arbitrary length**, we recommend that the callin ## Usage of diffStringsRaw -Given strings, `diffStringsRaw(a, b, cleanup)` does the following: +Given strings and boolean, `diffStringsRaw(a, b, cleanup)` does the following: - **compare** the strings character-by-character using the `diff-sequences` package - optionally **clean up** small (often coincidental) common substrings, also known as chaff Write one of the following: -- `const {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diffStringsRaw} = require('jest-diff');` in a CommonJS module -- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diffStringsRaw} from 'jest-diff';` in an ECMAScript module -- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from 'jest-diff';` in a TypeScript module +- `const {diffStringsRaw} = require('jest-diff');` in CommonJS modules +- `import {diffStringsRaw} from 'jest-diff';` in ECMAScript modules -The returned **array** describes substrings as instances of the `Diff` class (which calling code can access like array tuples). +Because `diffStringsRaw` returns the difference as **data** instead of a string, you can format it as your application requires (for example, enclosed in HTML markup for browser instead of escape sequences for console). + +The returned **array** describes substrings as instances of the `Diff` class, which calling code can access like array tuples: + +The value at index `0` is one of the following: | value | named export | description | | ----: | :------------ | :-------------------- | @@ -140,21 +141,23 @@ The returned **array** describes substrings as instances of the `Diff` class (wh | `-1` | `DIFF_DELETE` | in `a` but not in `b` | | `1` | `DIFF_INSERT` | in `b` but not in `a` | -Because `diffStringsRaw` returns the difference as **data** instead of a string, you are free to format it as your application requires (for example, enclosed in HTML markup for browser instead of escape sequences for console). +The value at index `1` is a substring of `a` or `b` or both. ### Example of diffStringsRaw with cleanup ```js const diffs = diffStringsRaw('change from', 'change to', true); -// diffs[0][0] === DIFF_EQUAL -// diffs[0][1] === 'change ' +/* +diffs[0][0] === 0 // DIFF_EQUAL +diffs[0][1] === 'change ' -// diffs[1][0] === DIFF_DELETE -// diffs[1][1] === 'from' +diffs[1][0] === -1 // DIFF_DELETE +diffs[1][1] === 'from' -// diffs[2][0] === DIFF_INSERT -// diffs[2][1] === 'to' +diffs[2][0] === 1 // DIFF_INSERT +diffs[2][1] === 'to' +*/ ``` ### Example of diffStringsRaw without cleanup @@ -162,21 +165,40 @@ const diffs = diffStringsRaw('change from', 'change to', true); ```js const diffs = diffStringsRaw('change from', 'change to', false); -// diffs[0][0] === DIFF_EQUAL -// diffs[0][1] === 'change ' +/* +diffs[0][0] === 0 // DIFF_EQUAL +diffs[0][1] === 'change ' -// diffs[1][0] === DIFF_DELETE -// diffs[1][1] === 'fr' +diffs[1][0] === -1 // DIFF_DELETE +diffs[1][1] === 'fr' -// diffs[2][0] === DIFF_INSERT -// diffs[2][1] === 't' +diffs[2][0] === 1 // DIFF_INSERT +diffs[2][1] === 't' // Here is a small coincidental common substring: -// diffs[3][0] === DIFF_EQUAL -// diffs[3][1] === 'o' +diffs[3][0] === 0 // DIFF_EQUAL +diffs[3][1] === 'o' + +diffs[4][0] === -1 // DIFF_DELETE +diffs[4][1] === 'm' +*/ +``` + +## Advanced import for diffStringsRaw -// diffs[4][0] === DIFF_DELETE -// diffs[4][1] === 'm' +Here are all the named imports for the `diffStringsRaw` function: + +- `const {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} = require('jest-diff');` in CommonJS modules +- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from 'jest-diff';` in ECMAScript modules + +To write a **formatting** function, you might need the named constants (and `Diff` in TypeScript annotations). + +If you write an application-specific **cleanup** algorithm, then you might need to call the `Diff` constructor: + +```js +const diffCommon = new Diff(DIFF_EQUAL, 'change '); +const diffDelete = new Diff(DIFF_DELETE, 'from'); +const diffInsert = new Diff(DIFF_INSERT, 'to'); ``` ## Options diff --git a/packages/jest-diff/src/__tests__/diffStringsRaw.test.ts b/packages/jest-diff/src/__tests__/diffStringsRaw.test.ts new file mode 100644 index 000000000000..330310b58f7d --- /dev/null +++ b/packages/jest-diff/src/__tests__/diffStringsRaw.test.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from '../'; + +describe('diffStringsRaw', () => { + test('one-line with cleanup', () => { + const expected: Array = [ + new Diff(DIFF_EQUAL, 'change '), + new Diff(DIFF_DELETE, 'from'), + new Diff(DIFF_INSERT, 'to'), + ]; + const received = diffStringsRaw('change from', 'change to', true); + + expect(received).toEqual(expected); + }); + + test('one-line without cleanup', () => { + const expected: Array = [ + new Diff(DIFF_EQUAL, 'change '), + new Diff(DIFF_DELETE, 'fr'), + new Diff(DIFF_INSERT, 't'), + new Diff(DIFF_EQUAL, 'o'), + new Diff(DIFF_DELETE, 'm'), + ]; + const received = diffStringsRaw('change from', 'change to', false); + + expect(received).toEqual(expected); + }); +}); diff --git a/packages/jest-diff/src/index.ts b/packages/jest-diff/src/index.ts index df6cd5a140a9..76cbb7c34dae 100644 --- a/packages/jest-diff/src/index.ts +++ b/packages/jest-diff/src/index.ts @@ -8,17 +8,17 @@ import prettyFormat = require('pretty-format'); import chalk from 'chalk'; import getType = require('jest-get-type'); -import { - DIFF_DELETE, - DIFF_EQUAL, - DIFF_INSERT, - Diff as DiffClass, -} from './cleanupSemantic'; +import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff} from './cleanupSemantic'; import diffLines from './diffLines'; import {normalizeDiffOptions} from './normalizeDiffOptions'; import {diffStringsRaw, diffStringsUnified} from './printDiffs'; import {NO_DIFF_MESSAGE, SIMILAR_MESSAGE} from './constants'; -import {DiffOptionsNormalized, DiffOptions as JestDiffOptions} from './types'; +import {DiffOptionsNormalized, DiffOptions as ImportDiffOptions} from './types'; + +export type DiffOptions = ImportDiffOptions; + +export {diffStringsRaw, diffStringsUnified}; +export {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff}; const { AsymmetricMatcher, @@ -50,7 +50,7 @@ const FALLBACK_FORMAT_OPTIONS_0 = {...FALLBACK_FORMAT_OPTIONS, indent: 0}; // Generate a string that will highlight the difference between two values // with green and red. (similar to how github does code diffing) -function diff(a: any, b: any, options?: JestDiffOptions): string | null { +function diff(a: any, b: any, options?: DiffOptions): string | null { if (Object.is(a, b)) { return NO_DIFF_MESSAGE; } @@ -163,16 +163,4 @@ function compareObjects( return diffMessage; } -// eslint-disable-next-line no-redeclare -namespace diff { - export type Diff = DiffClass; - export type DiffOptions = JestDiffOptions; -} - -diff.diffStringsUnified = diffStringsUnified; -diff.diffStringsRaw = diffStringsRaw; -diff.DIFF_DELETE = DIFF_DELETE; -diff.DIFF_EQUAL = DIFF_EQUAL; -diff.DIFF_INSERT = DIFF_INSERT; - -export = diff; +export default diff; diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index aba7ff29812e..2d03613e4a6a 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -6,17 +6,17 @@ */ import chalk from 'chalk'; -import jestDiff = require('jest-diff'); -import getType = require('jest-get-type'); -import prettyFormat = require('pretty-format'); - -const { +import diffLinesUnified, { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, + Diff, + DiffOptions as ImportDiffOptions, diffStringsRaw, diffStringsUnified, -} = jestDiff; +} from 'jest-diff'; +import getType = require('jest-get-type'); +import prettyFormat = require('pretty-format'); const { AsymmetricMatcher, @@ -49,7 +49,7 @@ export type MatcherHintOptions = { secondArgumentColor?: MatcherHintColor; }; -export type DiffOptions = jestDiff.DiffOptions; +export type DiffOptions = ImportDiffOptions; export const EXPECTED_COLOR = chalk.green; export const RECEIVED_COLOR = chalk.red; @@ -226,12 +226,12 @@ export const ensureExpectedIsNonNegativeInteger = ( // * include change substrings which have argument op // with inverse highlight only if there is a common substring const getCommonAndChangedSubstrings = ( - diffs: Array, + diffs: Array, op: number, hasCommonDiff: boolean, ): string => diffs.reduce( - (reduced: string, diff: jestDiff.Diff): string => + (reduced: string, diff: Diff): string => reduced + (diff[0] === DIFF_EQUAL ? diff[1] @@ -338,7 +338,7 @@ export const printDiffOrStringify = ( } if (isLineDiffable(expected, received)) { - const difference = jestDiff(expected, received, { + const difference = diffLinesUnified(expected, received, { aAnnotation: expectedLabel, bAnnotation: receivedLabel, expand, @@ -378,7 +378,7 @@ const shouldPrintDiff = (actual: unknown, expected: unknown) => { }; export const diff = (a: any, b: any, options?: DiffOptions): string | null => - shouldPrintDiff(a, b) ? jestDiff(a, b, options) : null; + shouldPrintDiff(a, b) ? diffLinesUnified(a, b, options) : null; export const pluralize = (word: string, count: number) => (NUMBERS[count] || count) + ' ' + word + (count === 1 ? '' : 's'); diff --git a/packages/jest-snapshot/src/print.ts b/packages/jest-snapshot/src/print.ts index 4f0516f91bf2..c59df18106f5 100644 --- a/packages/jest-snapshot/src/print.ts +++ b/packages/jest-snapshot/src/print.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import diff = require('jest-diff'); +import diff, {diffStringsUnified} from 'jest-diff'; import getType = require('jest-get-type'); import { EXPECTED_COLOR, @@ -86,7 +86,7 @@ export const printDiffOrStringified = ( receivedSerializedTrimmed.length <= MAX_DIFF_STRING_LENGTH && expectedSerializedTrimmed !== receivedSerializedTrimmed ) { - return diff.diffStringsUnified( + return diffStringsUnified( expectedSerializedTrimmed, receivedSerializedTrimmed, { From 700c17c5a9a4059c9794ca10d30adf75480ab388 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 28 Aug 2019 11:00:49 +0200 Subject: [PATCH 15/97] chore: fix formatting issues in changelog --- CHANGELOG.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d622017f4ca..b1ead344ca0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,7 +53,7 @@ - `[jest-core]` Improve report when snapshots are obsolete ([#8448](https://github.com/facebook/jest/pull/8665)) - `[jest-cli]` Improve chai support (with detailed output, to match jest exceptions) ([#8454](https://github.com/facebook/jest/pull/8454)) - `[*]` Manage the global timeout with `--testTimeout` command line argument. ([#8456](https://github.com/facebook/jest/pull/8456)) -- `[pretty-format]` Render custom displayName of memoized components +- `[pretty-format]` Render custom displayName of memoized components ([#8546](https://github.com/facebook/jest/pull/8546)) - `[jest-validate]` Allow `maxWorkers` as part of the `jest.config.js` ([#8565](https://github.com/facebook/jest/pull/8565)) - `[jest-runtime]` Allow passing configuration objects to transformers ([#7288](https://github.com/facebook/jest/pull/7288)) - `[@jest/core, @jest/test-sequencer]` Support async sort in custom `testSequencer` ([#8642](https://github.com/facebook/jest/pull/8642)) @@ -61,13 +61,13 @@ - `[@jest-transform]` Extract transforming require logic within `jest-core` into `@jest-transform` ([#8756](https://github.com/facebook/jest/pull/8756)) - `[jest-matcher-utils]` Add color options to `matcherHint` ([#8795](https://github.com/facebook/jest/pull/8795)) - `[jest-circus/jest-jasmine2]` Give clearer output for Node assert errors ([#8792](https://github.com/facebook/jest/pull/8792)) -- `[jest-runner]` Export all types in the type signature of `jest-runner` ([#8825](https://github.com/facebook/jest/pull/8825))` +- `[jest-runner]` Export all types in the type signature of `jest-runner` ([#8825](https://github.com/facebook/jest/pull/8825)) ### Fixes - `[jest-cli]` Detect side-effect only imports when running `--onlyChanged` or `--changedSince` ([#8670](https://github.com/facebook/jest/pull/8670)) - `[jest-cli]` Allow `--maxWorkers` to work with % input again ([#8565](https://github.com/facebook/jest/pull/8565)) -- `[babel-plugin-jest-hoist]` Expand list of whitelisted globals in global mocks ([#8429](https://github.com/facebook/jest/pull/8429) +- `[babel-plugin-jest-hoist]` Expand list of whitelisted globals in global mocks ([#8429](https://github.com/facebook/jest/pull/8429)) - `[jest-core]` Make watch plugin initialization errors look nice ([#8422](https://github.com/facebook/jest/pull/8422)) - `[jest-snapshot]` Prevent inline snapshots from drifting when inline snapshots are updated ([#8492](https://github.com/facebook/jest/pull/8492)) - `[jest-haste-map]` Don't throw on missing mapper in Node crawler ([#8558](https://github.com/facebook/jest/pull/8558)) @@ -79,8 +79,8 @@ ### Chore & Maintenance -- `[jest-leak-detector]` remove code repeat ([#8438](https://github.com/facebook/jest/pull/8438) -- `[docs]` Add example to `jest.requireActual` ([#8482](https://github.com/facebook/jest/pull/8482) +- `[jest-leak-detector]` remove code repeat ([#8438](https://github.com/facebook/jest/pull/8438)) +- `[docs]` Add example to `jest.requireActual` ([#8482](https://github.com/facebook/jest/pull/8482)) - `[docs]` Add example to `jest.mock` for mocking ES6 modules with the `factory` parameter ([#8550](https://github.com/facebook/jest/pull/8550)) - `[docs]` Add information about using `jest.doMock` with ES6 imports ([#8573](https://github.com/facebook/jest/pull/8573)) - `[docs]` Fix variable name in custom-matcher-api code example ([#8582](https://github.com/facebook/jest/pull/8582)) @@ -97,14 +97,14 @@ ### Performance -- `[jest-watcher]` Minor optimization for JestHook ([#8746](https://github.com/facebook/jest/pull/8746) +- `[jest-watcher]` Minor optimization for JestHook ([#8746](https://github.com/facebook/jest/pull/8746)) - `[@jest/reporters]` Prevent runaway CPU useage with `--notify` on macOS ([#8830](https://github.com/facebook/jest/issues/8830)) ## 24.8.0 ### Features -- `[jest-circus]` Bind to Circus events via an optional event handler on any custom env ([#8344](https://github.com/facebook/jest/pull/8344) +- `[jest-circus]` Bind to Circus events via an optional event handler on any custom env ([#8344](https://github.com/facebook/jest/pull/8344)) - `[expect]` Improve report when matcher fails, part 15 ([#8281](https://github.com/facebook/jest/pull/8281)) - `[jest-cli]` Update `--forceExit` and "did not exit for one second" message colors ([#8329](https://github.com/facebook/jest/pull/8329)) - `[expect]` Improve report when matcher fails, part 16 ([#8306](https://github.com/facebook/jest/pull/8306)) @@ -388,11 +388,11 @@ We skipped 24.2.0 because a draft was accidentally published. Please use `24.3.0 - `[jest-config]` Do not use a uuid as `name` since that breaks caching ([#7746](https://github.com/facebook/jest/pull/7746)) - `[jest-config]` Make sure `normalize` can consume `Defaults` without warnings ([#7742](https://github.com/facebook/jest/pull/7742)) - `[jest-config]` Allow `moduleFileExtensions` without 'js' for custom runners ([#7751](https://github.com/facebook/jest/pull/7751)) -- `[jest-cli]` Load transformers before installing require hooks ([#7752](https://github.com/facebook/jest/pull/7752) +- `[jest-cli]` Load transformers before installing require hooks ([#7752](https://github.com/facebook/jest/pull/7752)) - `[jest-cli]` Handle missing `numTodoTests` in test results ([#7779](https://github.com/facebook/jest/pull/7779)) -- `[jest-runtime]` Exclude setup/teardown files from coverage report ([#7790](https://github.com/facebook/jest/pull/7790) +- `[jest-runtime]` Exclude setup/teardown files from coverage report ([#7790](https://github.com/facebook/jest/pull/7790)) - `[babel-jest]` Throw an error if `babel-jest` tries to transform a file ignored by Babel ([#7797](https://github.com/facebook/jest/pull/7797)) -- `[babel-plugin-jest-hoist]` Ignore TS type references when looking for out-of-scope references ([#7799](https://github.com/facebook/jest/pull/7799) +- `[babel-plugin-jest-hoist]` Ignore TS type references when looking for out-of-scope references ([#7799](https://github.com/facebook/jest/pull/7799)) - `[expect]` fixed asymmetrical equality of cyclic objects ([#7730](https://github.com/facebook/jest/pull/7730)) ### Chore & Maintenance @@ -1014,7 +1014,7 @@ We skipped 24.2.0 because a draft was accidentally published. Please use `24.3.0 ### Fixes - `[jest-util]` Add "debug" method to "console" implementations ([#5350](https://github.com/facebook/jest/pull/5350)) -- `[jest-resolve]` Add condition to avoid infinite loop when node module package main is ".". ([#5344)](https://github.com/facebook/jest/pull/5344) +- `[jest-resolve]` Add condition to avoid infinite loop when node module package main is ".". ([#5344)](https://github.com/facebook/jest/pull/5344)) ### Features @@ -1137,7 +1137,7 @@ We skipped 24.2.0 because a draft was accidentally published. Please use `24.3.0 - `[jest-worker]` Remove `debug` and `inspect` flags from the arguments sent to the child ([#5068](https://github.com/facebook/jest/pull/5068)) - `[jest-config]` Use all `--testPathPattern` and `` args in `testPathPattern` ([#5066](https://github.com/facebook/jest/pull/5066)) - `[jest-cli]` Do not support `--watch` inside non-version-controlled environments ([#5060](https://github.com/facebook/jest/pull/5060)) -- `[jest-config]` Escape Windows path separator in testPathPattern CLI arguments ([#5054](https://github.com/facebook/jest/pull/5054) +- `[jest-config]` Escape Windows path separator in testPathPattern CLI arguments ([#5054](https://github.com/facebook/jest/pull/5054)) - `[jest-jasmine]` Register sourcemaps as node environment to improve performance with jsdom ([#5045](https://github.com/facebook/jest/pull/5045)) - `[pretty-format]` Do not call toJSON recursively ([#5044](https://github.com/facebook/jest/pull/5044)) - `[pretty-format]` Fix errors when identity-obj-proxy mocks CSS Modules ([#4935](https://github.com/facebook/jest/pull/4935)) From ef0b3271a17e79d554a91b80e765c21fcf92c33f Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 28 Aug 2019 22:57:27 +0200 Subject: [PATCH 16/97] chore: bump to TS 3.6 (#8886) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 18aa0284a6a0..bab8176bcdad 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "slash": "^3.0.0", "string-length": "^3.1.0", "strip-ansi": "^5.0.0", - "typescript": "^3.5.2", + "typescript": "^3.6.2", "webpack": "^4.28.4" }, "scripts": { diff --git a/yarn.lock b/yarn.lock index 9f9b54b59520..16a4d4cff02e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13505,10 +13505,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@*, typescript@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +typescript@*, typescript@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" + integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== ua-parser-js@^0.7.18: version "0.7.20" From ff81c2864b34809126c1c83bec67a9e6aff37b5f Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Thu, 29 Aug 2019 06:24:44 -0400 Subject: [PATCH 17/97] chore: Delete obsolete FlowFixMe comments (#8885) --- e2e/__tests__/__snapshots__/failures.test.ts.snap | 12 ++++++------ e2e/__tests__/detectOpenHandles.ts | 1 - e2e/__tests__/iterator-to-null-test.ts | 2 -- e2e/__tests__/snapshot.test.ts | 3 --- e2e/__tests__/snapshotMockFs.test.ts | 1 - e2e/__tests__/snapshotResolver.test.ts | 1 - e2e/__tests__/snapshotSerializers.test.ts | 1 - e2e/auto-clear-mocks/with-auto-clear/index.js | 2 -- e2e/bad-source-map/__tests__/badSourceMap.js | 2 -- e2e/clear-cache/__tests__/clearCache.test.js | 2 -- e2e/failures/macros.js | 2 -- .../with-empty-mock-name-not-called/index.js | 2 -- e2e/mock-names/with-empty-mock-name/index.js | 2 -- .../with-mock-name-call-times-fail/index.js | 2 -- .../with-mock-name-call-times-pass/index.js | 2 -- .../with-mock-name-not-called-fail/index.js | 2 -- .../with-mock-name-not-called-pass/index.js | 2 -- e2e/mock-names/with-mock-name-not-called/index.js | 2 -- e2e/mock-names/with-mock-name/index.js | 2 -- e2e/mock-names/without-mock-name-not-called/index.js | 2 -- e2e/mock-names/without-mock-name/index.js | 2 -- e2e/override-globals/index.js | 2 -- e2e/run-programmatically/index.js | 2 -- 23 files changed, 6 insertions(+), 47 deletions(-) diff --git a/e2e/__tests__/__snapshots__/failures.test.ts.snap b/e2e/__tests__/__snapshots__/failures.test.ts.snap index 02d7fa1921df..9d29554a17bc 100644 --- a/e2e/__tests__/__snapshots__/failures.test.ts.snap +++ b/e2e/__tests__/__snapshots__/failures.test.ts.snap @@ -265,14 +265,14 @@ FAIL __tests__/testMacro.test.js Expected: 2 Received: 1 - 10 | - 11 | module.exports = (one: any, two: any) => { - > 12 | expect(one).toEqual(two); + 8 | + 9 | module.exports = (one: any, two: any) => { + > 10 | expect(one).toEqual(two); | ^ - 13 | }; - 14 | + 11 | }; + 12 | - at toEqual (macros.js:12:15) + at toEqual (macros.js:10:15) at Object.shouldEqual (__tests__/testMacro.test.js:13:3) `; diff --git a/e2e/__tests__/detectOpenHandles.ts b/e2e/__tests__/detectOpenHandles.ts index 70420b49e21d..d5384d44feeb 100644 --- a/e2e/__tests__/detectOpenHandles.ts +++ b/e2e/__tests__/detectOpenHandles.ts @@ -9,7 +9,6 @@ import {wrap} from 'jest-snapshot-serializer-raw'; import runJest, {until} from '../runJest'; try { - // $FlowFixMe: Node core require('async_hooks'); } catch (e) { if (e.code === 'MODULE_NOT_FOUND') { diff --git a/e2e/__tests__/iterator-to-null-test.ts b/e2e/__tests__/iterator-to-null-test.ts index 228086d284e3..7272ec3c669a 100644 --- a/e2e/__tests__/iterator-to-null-test.ts +++ b/e2e/__tests__/iterator-to-null-test.ts @@ -8,9 +8,7 @@ 'use strict'; -// $FlowFixMe Array.prototype[Symbol.iterator] = null; -// $FlowFixMe String.prototype[Symbol.iterator] = null; test('modifying global object does not affect test runner', () => {}); diff --git a/e2e/__tests__/snapshot.test.ts b/e2e/__tests__/snapshot.test.ts index 0695c1fd422d..1cdc33c9a206 100644 --- a/e2e/__tests__/snapshot.test.ts +++ b/e2e/__tests__/snapshot.test.ts @@ -107,7 +107,6 @@ describe('Snapshot', () => { expect(json.numPendingTests).toBe(0); expect(result.status).toBe(0); - // $FlowFixMe dynamic require const content = require(snapshotFile); expect( content['snapshot is not influenced by previous counter 1'], @@ -238,7 +237,6 @@ describe('Snapshot', () => { it('works on subsequent runs without `-u`', () => { const firstRun = runWithJson('snapshot', ['-w=1', '--ci=false']); - // $FlowFixMe dynamic require const content = require(snapshotOfCopy); expect(content).not.toBe(undefined); const secondRun = runWithJson('snapshot', []); @@ -257,7 +255,6 @@ describe('Snapshot', () => { const firstRun = runWithJson('snapshot', ['-w=1', '--ci=false']); fs.unlinkSync(copyOfTestPath); - // $FlowFixMe dynamic require const content = require(snapshotOfCopy); expect(content).not.toBe(undefined); const secondRun = runWithJson('snapshot', ['-w=1', '--ci=false', '-u']); diff --git a/e2e/__tests__/snapshotMockFs.test.ts b/e2e/__tests__/snapshotMockFs.test.ts index a049e3905faa..8ac6c27cef6c 100644 --- a/e2e/__tests__/snapshotMockFs.test.ts +++ b/e2e/__tests__/snapshotMockFs.test.ts @@ -28,7 +28,6 @@ test('store snapshot even if fs is mocked', () => { expect(stderr).toMatch('1 snapshot written from 1 test suite.'); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - // $FlowFixMe dynamic require const content = require(snapshotFile); expect(content['snapshot 1']).toBe(` Object { diff --git a/e2e/__tests__/snapshotResolver.test.ts b/e2e/__tests__/snapshotResolver.test.ts index e39fb88d3e73..f5c3a08a4b25 100644 --- a/e2e/__tests__/snapshotResolver.test.ts +++ b/e2e/__tests__/snapshotResolver.test.ts @@ -33,7 +33,6 @@ describe('Custom snapshot resolver', () => { expect(result.stderr).toMatch('1 snapshot written from 1 test suite'); - // $FlowFixMe dynamic require const content = require(snapshotFile); expect(content).toHaveProperty( 'snapshots are written to custom location 1', diff --git a/e2e/__tests__/snapshotSerializers.test.ts b/e2e/__tests__/snapshotSerializers.test.ts index 0e1e377a1d32..fa3b586dfbcb 100644 --- a/e2e/__tests__/snapshotSerializers.test.ts +++ b/e2e/__tests__/snapshotSerializers.test.ts @@ -33,7 +33,6 @@ describe('Snapshot serializers', () => { it('renders snapshot', () => { runAndAssert(); - // $FlowFixMe dynamic require const snapshot = require(snapshotPath); expect(snapshot).toMatchSnapshot(); }); diff --git a/e2e/auto-clear-mocks/with-auto-clear/index.js b/e2e/auto-clear-mocks/with-auto-clear/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/auto-clear-mocks/with-auto-clear/index.js +++ b/e2e/auto-clear-mocks/with-auto-clear/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/bad-source-map/__tests__/badSourceMap.js b/e2e/bad-source-map/__tests__/badSourceMap.js index f7e209e4f358..4216e15dffdf 100644 --- a/e2e/bad-source-map/__tests__/badSourceMap.js +++ b/e2e/bad-source-map/__tests__/badSourceMap.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ 'use strict'; diff --git a/e2e/clear-cache/__tests__/clearCache.test.js b/e2e/clear-cache/__tests__/clearCache.test.js index c8045e3e8510..3c0ad577c1b5 100644 --- a/e2e/clear-cache/__tests__/clearCache.test.js +++ b/e2e/clear-cache/__tests__/clearCache.test.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ 'use strict'; diff --git a/e2e/failures/macros.js b/e2e/failures/macros.js index 0c3d07ddcf73..5bebb7950c2c 100644 --- a/e2e/failures/macros.js +++ b/e2e/failures/macros.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ 'use strict'; diff --git a/e2e/mock-names/with-empty-mock-name-not-called/index.js b/e2e/mock-names/with-empty-mock-name-not-called/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-empty-mock-name-not-called/index.js +++ b/e2e/mock-names/with-empty-mock-name-not-called/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-empty-mock-name/index.js b/e2e/mock-names/with-empty-mock-name/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-empty-mock-name/index.js +++ b/e2e/mock-names/with-empty-mock-name/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-mock-name-call-times-fail/index.js b/e2e/mock-names/with-mock-name-call-times-fail/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-mock-name-call-times-fail/index.js +++ b/e2e/mock-names/with-mock-name-call-times-fail/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-mock-name-call-times-pass/index.js b/e2e/mock-names/with-mock-name-call-times-pass/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-mock-name-call-times-pass/index.js +++ b/e2e/mock-names/with-mock-name-call-times-pass/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-mock-name-not-called-fail/index.js b/e2e/mock-names/with-mock-name-not-called-fail/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-mock-name-not-called-fail/index.js +++ b/e2e/mock-names/with-mock-name-not-called-fail/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-mock-name-not-called-pass/index.js b/e2e/mock-names/with-mock-name-not-called-pass/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-mock-name-not-called-pass/index.js +++ b/e2e/mock-names/with-mock-name-not-called-pass/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-mock-name-not-called/index.js b/e2e/mock-names/with-mock-name-not-called/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-mock-name-not-called/index.js +++ b/e2e/mock-names/with-mock-name-not-called/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/with-mock-name/index.js b/e2e/mock-names/with-mock-name/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/with-mock-name/index.js +++ b/e2e/mock-names/with-mock-name/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/without-mock-name-not-called/index.js b/e2e/mock-names/without-mock-name-not-called/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/without-mock-name-not-called/index.js +++ b/e2e/mock-names/without-mock-name-not-called/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/mock-names/without-mock-name/index.js b/e2e/mock-names/without-mock-name/index.js index b0649a5ec989..3f40dc0d6bd1 100644 --- a/e2e/mock-names/without-mock-name/index.js +++ b/e2e/mock-names/without-mock-name/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ module.exports = () => {}; diff --git a/e2e/override-globals/index.js b/e2e/override-globals/index.js index 14aaa06fbd12..f7a1c8f975d9 100644 --- a/e2e/override-globals/index.js +++ b/e2e/override-globals/index.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ global.Promise = function() { diff --git a/e2e/run-programmatically/index.js b/e2e/run-programmatically/index.js index b45fa0b0e585..fb35a26d185a 100644 --- a/e2e/run-programmatically/index.js +++ b/e2e/run-programmatically/index.js @@ -4,8 +4,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ require('@babel/register'); From 95688ac9c81c19ca1bbda3aaad2a278c2a60461f Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Thu, 29 Aug 2019 12:21:45 -0400 Subject: [PATCH 18/97] jest-diff: Add includeChangeCounts and rename Indicator options (#8881) * jest-diff: Add includeChangeCounts option * Update CHANGELOG.md * Rename Symbol options as Indicator like git diff * Display indicator following change counts * Update the example diff in README.md --- CHANGELOG.md | 1 + packages/jest-diff/README.md | 55 +++++-- .../__tests__/__snapshots__/diff.test.ts.snap | 151 +++++++++++++----- packages/jest-diff/src/__tests__/diff.test.ts | 86 ++++++++-- packages/jest-diff/src/diffLines.ts | 48 ++++-- .../jest-diff/src/normalizeDiffOptions.ts | 7 +- packages/jest-diff/src/printDiffs.ts | 133 +++++++++++---- packages/jest-diff/src/types.ts | 14 +- 8 files changed, 371 insertions(+), 124 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1ead344ca0b..a88b654a010a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) +- `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) - `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md index 822e6c2d619b..0ac49f1f894b 100644 --- a/packages/jest-diff/README.md +++ b/packages/jest-diff/README.md @@ -40,7 +40,7 @@ const difference = diffLinesUnified(a, b); The returned **string** consists of: -- annotation lines: describe the two change symbols with labels, and a blank line +- annotation lines: describe the two change indicators with labels, and a blank line - comparison lines: similar to “unified” view on GitHub, but `Expected` lines are green, `Received` lines are red, and common lines are dim (by default, see Options) ```diff @@ -90,7 +90,7 @@ const difference = diffStringsUnified(a, b); The returned **string** consists of: -- annotation lines: describe the two change symbols with labels, and a blank line +- annotation lines: describe the two change indicators with labels, and a blank line - comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverted** foreground and background colors (which the following example does not show) ```diff @@ -107,9 +107,9 @@ The returned **string** consists of: Here are edge cases for the return value: - both `a` and `b` are empty strings: no comparison lines -- only `a` is empty string: all comparison lines have `bColor` and `bSymbol` (see Options) -- only `b` is empty string: all comparison lines have `aColor` and `aSymbol` (see Options) -- `a` and `b` are equal non-empty strings: all comparison lines have `commonColor` and `commonSymbol` (see Options) +- only `a` is empty string: all comparison lines have `bColor` and `bIndicator` (see Options) +- only `b` is empty string: all comparison lines have `aColor` and `aIndicator` (see Options) +- `a` and `b` are equal non-empty strings: all comparison lines have `commonColor` and `commonIndicator` (see Options) ### Performance of diffStringsUnified @@ -184,7 +184,7 @@ diffs[4][1] === 'm' */ ``` -## Advanced import for diffStringsRaw +### Advanced import for diffStringsRaw Here are all the named imports for the `diffStringsRaw` function: @@ -216,14 +216,15 @@ For other applications, you can provide an options object as a third argument: | :-------------------- | :------------ | | `aAnnotation` | `'Expected'` | | `aColor` | `chalk.green` | -| `aSymbol` | `'-'` | +| `aIndicator` | `'-'` | | `bAnnotation` | `'Received'` | | `bColor` | `chalk.red` | -| `bSymbol` | `'+'` | +| `bIndicator` | `'+'` | | `commonColor` | `chalk.dim` | -| `commonSymbol` | `' '` | +| `commonIndicator` | `' '` | | `contextLines` | `5` | | `expand` | `true` | +| `includeChangeCounts` | `false` | | `omitAnnotationLines` | `false` | ### Example of options for labels @@ -264,18 +265,18 @@ const options = { }; ``` -### Example of options for symbols +### Example of options for indicators -For consistency with the `diff` command, you might replace the symbols: +For consistency with the `diff` command, you might replace the indicators: ```js const options = { - aSymbol: '<', - bSymbol: '>', + aIndicator: '<', + bIndicator: '>', }; ``` -The `jest-diff` package assumes (but does not enforce) that the 3 symbols have equal length. +The `jest-diff` package assumes (but does not enforce) that the 3 indicators have equal length. ### Example of options to limit common lines @@ -292,6 +293,32 @@ const options = { A patch mark like `@@ -12,7 +12,9 @@` accounts for omitted common lines. +### Example of option to include change counts + +To display the number of change lines at the right of annotation lines: + +```js +const a = ['change from', 'common']; +const b = ['change to', 'insert', 'common']; +const options = { + includeChangeCounts: true, +}; + +const difference = diffLinesUnified(a, b, options); +``` + +```diff +- Expected 1 - ++ Received 2 + + + Array [ +- "change from", ++ "change to", ++ "insert", + "common", + ] +``` + ### Example of option to omit annotation lines To display only the comparison lines: diff --git a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap index c7e1b19669fc..493fd9df66c8 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap @@ -100,8 +100,8 @@ exports[`color of text (expanded) 1`] = ` `; exports[`context number of lines: -1 (5 default) 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + @@ -6,9 +6,9 @@ 4, @@ -117,8 +117,8 @@ exports[`context number of lines: -1 (5 default) 1`] = ` `; exports[`context number of lines: 0 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + @@ -11,1 +11,0 @@ - 9, @@ -127,8 +127,8 @@ exports[`context number of lines: 0 1`] = ` `; exports[`context number of lines: 1 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + @@ -10,4 +10,4 @@ 8, @@ -139,8 +139,8 @@ exports[`context number of lines: 1 1`] = ` `; exports[`context number of lines: 2 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + @@ -9,6 +9,6 @@ 7, @@ -153,8 +153,8 @@ exports[`context number of lines: 2 1`] = ` `; exports[`context number of lines: 3.1 (5 default) 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + @@ -6,9 +6,9 @@ 4, @@ -170,8 +170,8 @@ exports[`context number of lines: 3.1 (5 default) 1`] = ` `; exports[`context number of lines: undefined (5 default) 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + @@ -6,9 +6,9 @@ 4, @@ -187,36 +187,36 @@ exports[`context number of lines: undefined (5 default) 1`] = ` `; exports[`diffStringsUnified edge cases empty both a and b 1`] = ` -"- Expected -+ Received +"- Expected 0 - ++ Received 0 + " `; exports[`diffStringsUnified edge cases empty only a 1`] = ` -"- Expected -+ Received +"- Expected 0 - ++ Received 1 + + one-line string" `; exports[`diffStringsUnified edge cases empty only b 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 0 + - one-line string" `; exports[`diffStringsUnified edge cases equal both non-empty 1`] = ` -"- Expected -+ Received +"- Expected 0 - ++ Received 0 + one-line string" `; exports[`diffStringsUnified edge cases multiline has no common after clean up chaff 1`] = ` -"- Expected -+ Received +"- Expected 2 - ++ Received 2 + - delete - two @@ -225,16 +225,16 @@ exports[`diffStringsUnified edge cases multiline has no common after clean up ch `; exports[`diffStringsUnified edge cases one-line has no common after clean up chaff 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + - delete + insert" `; exports[`falls back to not call toJSON if it throws and then objects have differences 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + Object { - \\"line\\": 1, @@ -247,8 +247,8 @@ exports[`falls back to not call toJSON if serialization has no differences but t "Compared values serialize to the same structure. Printing internal object structure without calling \`toJSON\` instead. -- Expected -+ Received +- Expected 1 - ++ Received 1 + Object { - \\"line\\": 1, @@ -273,24 +273,24 @@ exports[`highlight only the last in odd length of leading spaces (expanded) 1`] `; exports[`oneline strings 1`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + - ab + aa" `; exports[`oneline strings 2`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 1 + - 123456789 + 234567890" `; exports[`oneline strings 3`] = ` -"- Expected -+ Received +"- Expected 1 - ++ Received 2 + - oneline + multi @@ -298,8 +298,8 @@ exports[`oneline strings 3`] = ` `; exports[`oneline strings 4`] = ` -"- Expected -+ Received +"- Expected 2 - ++ Received 1 + - multi - line @@ -322,7 +322,7 @@ exports[`options 7980 diffStringsUnified 1`] = ` + \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\`" `; -exports[`options change symbols diff 1`] = ` +exports[`options change indicators diff 1`] = ` "< Expected > Received @@ -348,7 +348,74 @@ exports[`options common diff 1`] = ` = ]" `; -exports[`options omitAnnotationLines diff 1`] = ` +exports[`options includeChangeCounts false diffLinesUnified 1`] = ` +"- Expected ++ Received + + Array [ +- \\"delete\\", +- \\"change from\\", ++ \\"change to\\", ++ \\"insert\\", + \\"common\\", + ]" +`; + +exports[`options includeChangeCounts false diffStringsUnified 1`] = ` +"- Expected ++ Received + +- change from ++ change to + common" +`; + +exports[`options includeChangeCounts true padding diffLinesUnified a has 2 digits 1`] = ` +"- Before 10 - ++ After 1 + + + common +- a +- a +- a +- a +- a +- a +- a +- a +- a +- a ++ b" +`; + +exports[`options includeChangeCounts true padding diffLinesUnified b has 2 digits 1`] = ` +"- Before 1 - ++ After 10 + + + common +- a ++ b ++ b ++ b ++ b ++ b ++ b ++ b ++ b ++ b ++ b" +`; + +exports[`options includeChangeCounts true padding diffStringsUnified 1`] = ` +"- Before 1 - ++ After 1 + + +- change from ++ change to + common" +`; + +exports[`options omitAnnotationLines true diff 1`] = ` " Array [ - \\"delete\\", - \\"change from\\", @@ -358,4 +425,10 @@ exports[`options omitAnnotationLines diff 1`] = ` ]" `; -exports[`options omitAnnotationLines diffStringsUnified empty strings 1`] = `""`; +exports[`options omitAnnotationLines true diffStringsUnified and includeChangeCounts true 1`] = ` +"- change from ++ change to + common" +`; + +exports[`options omitAnnotationLines true diffStringsUnified empty strings 1`] = `""`; diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index 32d1b4f6d714..4ad245bd119f 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -12,6 +12,10 @@ import diff from '../'; import {diffStringsUnified} from '../printDiffs'; import {DiffOptions} from '../types'; +const optionsCounts = { + includeChangeCounts: true, +}; + const NO_DIFF_MESSAGE = 'Compared values have no visual difference.'; const stripped = (a: unknown, b: unknown, options?: DiffOptions) => @@ -88,10 +92,10 @@ describe('no visual difference', () => { }); test('oneline strings', () => { - expect(diff('ab', 'aa')).toMatchSnapshot(); - expect(diff('123456789', '234567890')).toMatchSnapshot(); - expect(diff('oneline', 'multi\nline')).toMatchSnapshot(); - expect(diff('multi\nline', 'oneline')).toMatchSnapshot(); + expect(diff('ab', 'aa', optionsCounts)).toMatchSnapshot(); + expect(diff('123456789', '234567890', optionsCounts)).toMatchSnapshot(); + expect(diff('oneline', 'multi\nline', optionsCounts)).toMatchSnapshot(); + expect(diff('multi\nline', 'oneline', optionsCounts)).toMatchSnapshot(); }); describe('falls back to not call toJSON', () => { @@ -103,7 +107,7 @@ describe('falls back to not call toJSON', () => { test('but then objects have differences', () => { const a = {line: 1, toJSON}; const b = {line: 2, toJSON}; - expect(diff(a, b)).toMatchSnapshot(); + expect(diff(a, b, optionsCounts)).toMatchSnapshot(); }); test('and then objects have no differences', () => { const a = {line: 2, toJSON}; @@ -119,7 +123,7 @@ describe('falls back to not call toJSON', () => { test('and then objects have differences', () => { const a = {line: 1, toJSON}; const b = {line: 2, toJSON}; - expect(diff(a, b)).toMatchSnapshot(); + expect(diff(a, b, optionsCounts)).toMatchSnapshot(); }); test('and then objects have no differences', () => { const a = {line: 2, toJSON}; @@ -849,6 +853,7 @@ describe('context', () => { { contextLines, expand: false, + ...optionsCounts, }, ); expect(result).toMatchSnapshot(); @@ -868,42 +873,42 @@ describe('diffStringsUnified edge cases', () => { const a = ''; const b = ''; - expect(diffStringsUnified(a, b)).toMatchSnapshot(); + expect(diffStringsUnified(a, b, optionsCounts)).toMatchSnapshot(); }); test('empty only a', () => { const a = ''; const b = 'one-line string'; - expect(diffStringsUnified(a, b)).toMatchSnapshot(); + expect(diffStringsUnified(a, b, optionsCounts)).toMatchSnapshot(); }); test('empty only b', () => { const a = 'one-line string'; const b = ''; - expect(diffStringsUnified(a, b)).toMatchSnapshot(); + expect(diffStringsUnified(a, b, optionsCounts)).toMatchSnapshot(); }); test('equal both non-empty', () => { const a = 'one-line string'; const b = 'one-line string'; - expect(diffStringsUnified(a, b)).toMatchSnapshot(); + expect(diffStringsUnified(a, b, optionsCounts)).toMatchSnapshot(); }); test('multiline has no common after clean up chaff', () => { const a = 'delete\ntwo'; const b = 'insert\n2'; - expect(diffStringsUnified(a, b)).toMatchSnapshot(); + expect(diffStringsUnified(a, b, optionsCounts)).toMatchSnapshot(); }); test('one-line has no common after clean up chaff', () => { const a = 'delete'; const b = 'insert'; - expect(diffStringsUnified(a, b)).toMatchSnapshot(); + expect(diffStringsUnified(a, b, optionsCounts)).toMatchSnapshot(); }); }); @@ -933,10 +938,13 @@ describe('options', () => { const a = ['delete', 'change from', 'common']; const b = ['change to', 'insert', 'common']; - describe('change symbols', () => { + const aString = 'change from\ncommon'; // without delete + const bString = 'change to\ncommon'; // without insert + + describe('change indicators', () => { const options = { - aSymbol: '<', - bSymbol: '>', + aIndicator: '<', + bIndicator: '>', }; test('diff', () => { @@ -947,7 +955,7 @@ describe('options', () => { describe('common', () => { const options = { commonColor: line => line, - commonSymbol: '=', + commonIndicator: '=', }; test('diff', () => { @@ -955,7 +963,45 @@ describe('options', () => { }); }); - describe('omitAnnotationLines', () => { + describe('includeChangeCounts false', () => { + const options = { + includeChangeCounts: false, + }; + + test('diffLinesUnified', () => { + expect(diff(a, b, options)).toMatchSnapshot(); + }); + + test('diffStringsUnified', () => { + expect(diffStringsUnified(aString, bString, options)).toMatchSnapshot(); + }); + }); + + describe('includeChangeCounts true padding', () => { + const options = { + aAnnotation: 'Before', + bAnnotation: 'After', + includeChangeCounts: true, + }; + + test('diffLinesUnified a has 2 digits', () => { + const has2 = 'common\na\na\na\na\na\na\na\na\na\na'; + const has1 = 'common\nb'; + expect(diff(has2, has1, options)).toMatchSnapshot(); + }); + + test('diffLinesUnified b has 2 digits', () => { + const has1 = 'common\na'; + const has2 = 'common\nb\nb\nb\nb\nb\nb\nb\nb\nb\nb'; + expect(diff(has1, has2, options)).toMatchSnapshot(); + }); + + test('diffStringsUnified', () => { + expect(diffStringsUnified(aString, bString, options)).toMatchSnapshot(); + }); + }); + + describe('omitAnnotationLines true', () => { const options = { omitAnnotationLines: true, }; @@ -964,6 +1010,12 @@ describe('options', () => { expect(diff(a, b, options)).toMatchSnapshot(); }); + test('diffStringsUnified and includeChangeCounts true', () => { + const options2 = {...options, includeChangeCounts: true}; + + expect(diffStringsUnified(aString, bString, options2)).toMatchSnapshot(); + }); + test('diffStringsUnified empty strings', () => { expect(diffStringsUnified('', '', options)).toMatchSnapshot(); }); diff --git a/packages/jest-diff/src/diffLines.ts b/packages/jest-diff/src/diffLines.ts index a718470caf65..305b8a19fd16 100644 --- a/packages/jest-diff/src/diffLines.ts +++ b/packages/jest-diff/src/diffLines.ts @@ -8,7 +8,7 @@ import chalk, {Chalk} from 'chalk'; import diff, {Callbacks} from 'diff-sequences'; import {NO_DIFF_MESSAGE} from './constants'; -import {createPatchMark, printAnnotation} from './printDiffs'; +import {ChangeCounts, createPatchMark, printAnnotation} from './printDiffs'; import {DiffOptionsNormalized} from './types'; type Original = { @@ -46,7 +46,7 @@ const formatDelete = ( aEnd: number, aLinesUn: Array, aLinesIn: Array, - {aColor, aSymbol}: DiffOptionsNormalized, + {aColor, aIndicator}: DiffOptionsNormalized, put: Put, ) => { const highlightSpaces = getHighlightSpaces(aLinesUn !== aLinesIn); @@ -56,7 +56,9 @@ const formatDelete = ( const indentation = aLineIn.slice(0, aLineIn.length - aLineUn.length); put( - aColor(aSymbol + ' ' + indentation + highlightSpaces(aLineUn, bgInverse)), + aColor( + aIndicator + ' ' + indentation + highlightSpaces(aLineUn, bgInverse), + ), ); } }; @@ -67,7 +69,7 @@ const formatInsert = ( bEnd: number, bLinesUn: Array, bLinesIn: Array, - {bColor, bSymbol}: DiffOptionsNormalized, + {bColor, bIndicator}: DiffOptionsNormalized, put: Put, ) => { const highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); @@ -77,7 +79,9 @@ const formatInsert = ( const indentation = bLineIn.slice(0, bLineIn.length - bLineUn.length); put( - bColor(bSymbol + ' ' + indentation + highlightSpaces(bLineUn, bgInverse)), + bColor( + bIndicator + ' ' + indentation + highlightSpaces(bLineUn, bgInverse), + ), ); } }; @@ -92,7 +96,7 @@ const formatCommon = ( aLinesIn: Array, bLinesUn: Array, bLinesIn: Array, - {commonColor, commonSymbol}: DiffOptionsNormalized, + {commonColor, commonIndicator}: DiffOptionsNormalized, put: Put, ) => { const highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); @@ -109,7 +113,7 @@ const formatCommon = ( const fg = hasSameIndentation ? commonColor : fgIndent; const bg = hasSameIndentation ? bgCommon : bgInverse; - put(fg(commonSymbol + ' ' + indentation + highlightSpaces(bLineUn, bg))); + put(fg(commonIndicator + ' ' + indentation + highlightSpaces(bLineUn, bg))); } }; @@ -130,6 +134,11 @@ const diffExpand = ( array.push(line); }; + const changeCounts: ChangeCounts = { + a: 0, + b: 0, + }; + let aStart = 0; let bStart = 0; @@ -138,6 +147,8 @@ const diffExpand = ( aCommon, bCommon, ) => { + changeCounts.a += aCommon - aStart; + changeCounts.b += bCommon - bStart; formatDelete(aStart, aCommon, aLinesUn, aLinesIn, options, put); formatInsert(bStart, bCommon, bLinesUn, bLinesIn, options, put); formatCommon( @@ -160,10 +171,12 @@ const diffExpand = ( diff(aLength, bLength, isCommon, foundSubsequence); // After the last common subsequence, format remaining change lines. + changeCounts.a += aLength - aStart; + changeCounts.b += bLength - bStart; formatDelete(aStart, aLength, aLinesUn, aLinesIn, options, put); formatInsert(bStart, bLength, bLinesUn, bLinesIn, options, put); - return array.join('\n'); + return printAnnotation(options, changeCounts) + array.join('\n'); }; // jest --no-expand @@ -191,6 +204,10 @@ const diffNoExpand = ( const bLength = bLinesUn.length; const nContextLines = options.contextLines; const nContextLines2 = nContextLines + nContextLines; + const changeCounts: ChangeCounts = { + a: 0, + b: 0, + }; // Initialize the first patch for changes at the start, // especially for edge case in which there is no common subsequence. @@ -232,6 +249,8 @@ const diffNoExpand = ( } // Format preceding change lines. + changeCounts.a += aStartCommon - aEnd; + changeCounts.b += bStartCommon - bEnd; formatDelete(aEnd, aStartCommon, aLinesUn, aLinesIn, options, put); formatInsert(bEnd, bStartCommon, bLinesUn, bLinesIn, options, put); aEnd = aStartCommon; @@ -302,6 +321,8 @@ const diffNoExpand = ( // If no common subsequence or last was not at end, format remaining change lines. if (!isAtEnd) { + changeCounts.a += aLength - aEnd; + changeCounts.b += bLength - bEnd; formatDelete(aEnd, aLength, aLinesUn, aLinesIn, options, put); formatInsert(bEnd, bLength, bLinesUn, bLinesIn, options, put); aEnd = aLength; @@ -314,7 +335,7 @@ const diffNoExpand = ( array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd); } - return array.join('\n'); + return printAnnotation(options, changeCounts) + array.join('\n'); }; export default ( @@ -350,10 +371,7 @@ export default ( } } - return ( - printAnnotation(options) + - (options.expand - ? diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options) - : diffNoExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options)) - ); + return options.expand + ? diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options) + : diffNoExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options); }; diff --git a/packages/jest-diff/src/normalizeDiffOptions.ts b/packages/jest-diff/src/normalizeDiffOptions.ts index 1430d7041d73..efdeab6701ab 100644 --- a/packages/jest-diff/src/normalizeDiffOptions.ts +++ b/packages/jest-diff/src/normalizeDiffOptions.ts @@ -14,14 +14,15 @@ const DIFF_CONTEXT_DEFAULT = 5; const OPTIONS_DEFAULT: DiffOptionsNormalized = { aAnnotation: 'Expected', aColor: chalk.green, - aSymbol: '-', + aIndicator: '-', bAnnotation: 'Received', bColor: chalk.red, - bSymbol: '+', + bIndicator: '+', commonColor: chalk.dim, - commonSymbol: ' ', + commonIndicator: ' ', contextLines: DIFF_CONTEXT_DEFAULT, expand: true, + includeChangeCounts: false, omitAnnotationLines: false, }; diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index 07d6c4d2ad4f..1abad0c3b416 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -7,7 +7,13 @@ import chalk from 'chalk'; -import {DIFF_EQUAL, Diff, cleanupSemantic} from './cleanupSemantic'; +import { + DIFF_DELETE, + DIFF_EQUAL, + DIFF_INSERT, + Diff, + cleanupSemantic, +} from './cleanupSemantic'; import diffLines from './diffLines'; import diffStrings from './diffStrings'; import getAlignedDiffs from './getAlignedDiffs'; @@ -50,30 +56,34 @@ const replaceSpacesAtEnd = (line: string): string => export const printDeleteLine = ( line: string, - {aColor, aSymbol}: DiffOptionsNormalized, + {aColor, aIndicator}: DiffOptionsNormalized, ): string => aColor( - line.length !== 0 ? aSymbol + ' ' + replaceSpacesAtEnd(line) : aSymbol, + line.length !== 0 + ? aIndicator + ' ' + replaceSpacesAtEnd(line) + : aIndicator, ); export const printInsertLine = ( line: string, - {bColor, bSymbol}: DiffOptionsNormalized, + {bColor, bIndicator}: DiffOptionsNormalized, ): string => bColor( - line.length !== 0 ? bSymbol + ' ' + replaceSpacesAtEnd(line) : bSymbol, + line.length !== 0 + ? bIndicator + ' ' + replaceSpacesAtEnd(line) + : bIndicator, ); // Prevent visually ambiguous empty line as the first or the last. export const printCommonLine = ( line: string, isFirstOrLast: boolean, - {commonColor, commonSymbol}: DiffOptionsNormalized, + {commonColor, commonIndicator}: DiffOptionsNormalized, ): string => line.length !== 0 - ? commonColor(commonSymbol + ' ' + replaceSpacesAtEnd(line)) + ? commonColor(commonIndicator + ' ' + replaceSpacesAtEnd(line)) : isFirstOrLast - ? commonColor(commonSymbol + ' ' + NEWLINE_SYMBOL) + ? commonColor(commonIndicator + ' ' + NEWLINE_SYMBOL) : ''; export const hasCommonDiff = (diffs: Array, isMultiline: boolean) => { @@ -88,21 +98,73 @@ export const hasCommonDiff = (diffs: Array, isMultiline: boolean) => { return diffs.some(diff => diff[0] === DIFF_EQUAL); }; -export const printAnnotation = ({ - aAnnotation, - aColor, - aSymbol, - bAnnotation, - bColor, - bSymbol, - omitAnnotationLines, -}: DiffOptionsNormalized): string => - omitAnnotationLines - ? '' - : aColor(aSymbol + ' ' + aAnnotation) + - '\n' + - bColor(bSymbol + ' ' + bAnnotation) + - '\n\n'; +export type ChangeCounts = { + a: number; + b: number; +}; + +const countChanges = (diffs: Array): ChangeCounts => { + let a = 0; + let b = 0; + + diffs.forEach(diff => { + switch (diff[0]) { + case DIFF_DELETE: + a += 1; + break; + + case DIFF_INSERT: + b += 1; + break; + } + }); + + return {a, b}; +}; + +export const printAnnotation = ( + { + aAnnotation, + aColor, + aIndicator, + bAnnotation, + bColor, + bIndicator, + includeChangeCounts, + omitAnnotationLines, + }: DiffOptionsNormalized, + changeCounts: ChangeCounts, +): string => { + if (omitAnnotationLines) { + return ''; + } + + let aRest = ''; + let bRest = ''; + + if (includeChangeCounts) { + const aCount = String(changeCounts.a); + const bCount = String(changeCounts.b); + + const aPadding = + Math.max(bAnnotation.length - aAnnotation.length, 0) + + Math.max(bCount.length - aCount.length, 0); + const bPadding = + Math.max(aAnnotation.length - bAnnotation.length, 0) + + Math.max(aCount.length - bCount.length, 0); + + // Separate annotation from count by padding plus margin of 2 spaces. + aRest = ' '.repeat(aPadding + 2) + aCount + ' ' + aIndicator; + bRest = ' '.repeat(bPadding + 2) + bCount + ' ' + bIndicator; + } + + return ( + aColor(aIndicator + ' ' + aAnnotation + aRest) + + '\n' + + bColor(bIndicator + ' ' + bAnnotation + bRest) + + '\n\n' + ); +}; // In GNU diff format, indexes are one-based instead of zero-based. export const createPatchMark = ( @@ -126,32 +188,43 @@ export const diffStringsUnified = ( if (a.length === 0 || b.length === 0) { const lines: Array = []; + const changeCounts: ChangeCounts = { + a: 0, + b: 0, + }; - // All comparison lines have aColor and aSymbol. if (a.length !== 0) { + // All comparison lines have aColor and aIndicator. a.split('\n').forEach(line => { lines.push(printDeleteLine(line, optionsNormalized)); }); + changeCounts.a = lines.length; } - // All comparison lines have bColor and bSymbol. if (b.length !== 0) { + // All comparison lines have bColor and bIndicator. b.split('\n').forEach(line => { lines.push(printInsertLine(line, optionsNormalized)); }); + changeCounts.b = lines.length; } - // If both are empty strings, there are no comparison lines. - return printAnnotation(optionsNormalized) + lines.join('\n'); + // Else if both are empty strings, there are no comparison lines. + + return printAnnotation(optionsNormalized, changeCounts) + lines.join('\n'); } if (a === b) { const lines = a.split('\n'); const iLast = lines.length - 1; + const changeCounts = { + a: 0, + b: 0, + }; - // All comparison lines have commonColor and commonSymbol. + // All comparison lines have commonColor and commonIndicator. return ( - printAnnotation(optionsNormalized) + + printAnnotation(optionsNormalized, changeCounts) + lines .map((line, i) => printCommonLine(line, i === 0 || i === iLast, optionsNormalized), @@ -172,7 +245,7 @@ export const diffStringsUnified = ( if (hasCommonDiff(diffs, isMultiline)) { const lines = getAlignedDiffs(diffs); return ( - printAnnotation(optionsNormalized) + + printAnnotation(optionsNormalized, countChanges(lines)) + (optionsNormalized.expand ? joinAlignedDiffsExpand(lines, optionsNormalized) : joinAlignedDiffsNoExpand(lines, optionsNormalized)) diff --git a/packages/jest-diff/src/types.ts b/packages/jest-diff/src/types.ts index 2ffd17280fdd..5647286e30fe 100644 --- a/packages/jest-diff/src/types.ts +++ b/packages/jest-diff/src/types.ts @@ -10,27 +10,29 @@ type DiffOptionsColor = (arg: string) => string; // subset of Chalk type export type DiffOptions = { aAnnotation?: string; aColor?: DiffOptionsColor; - aSymbol?: string; + aIndicator?: string; bAnnotation?: string; bColor?: DiffOptionsColor; - bSymbol?: string; + bIndicator?: string; commonColor?: DiffOptionsColor; - commonSymbol?: string; + commonIndicator?: string; contextLines?: number; expand?: boolean; + includeChangeCounts?: boolean; omitAnnotationLines?: boolean; }; export type DiffOptionsNormalized = { aAnnotation: string; aColor: DiffOptionsColor; - aSymbol: string; + aIndicator: string; bAnnotation: string; bColor: DiffOptionsColor; - bSymbol: string; + bIndicator: string; commonColor: DiffOptionsColor; - commonSymbol: string; + commonIndicator: string; contextLines: number; expand: boolean; + includeChangeCounts: boolean; omitAnnotationLines: boolean; }; From 45c57c5a1c49e667ddfb6b186797b454cd620f09 Mon Sep 17 00:00:00 2001 From: Mark Date: Sat, 31 Aug 2019 00:14:30 +0530 Subject: [PATCH 19/97] Refractor requireAndTranspileModule to use extenstions from moduleFileExtensions (#8895) --- packages/jest-transform/src/ScriptTransformer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 09f611c67332..3057dbe6586e 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -475,7 +475,7 @@ export default class ScriptTransformer { } }, { - exts: [path.extname(moduleName)], + exts: this._config.moduleFileExtensions.map(ext => `.${ext}`), ignoreNodeModules: false, matcher: filename => { if (transforming) { From 4482e71bd5c6c70b7f17450299dbee1394bfaa09 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Fri, 30 Aug 2019 16:04:33 -0400 Subject: [PATCH 20/97] jest-snapshot: Distinguish empty string from external snapshot not written (#8880) * jest-snapshot: Distinguish empty string from external snapshot not written * Update CHANGELOG.md * Replace null with undefined * Add e2e test toMatchSnapshotWithStringSerializer --- CHANGELOG.md | 1 + ...oMatchSnapshotWithStringSerializer.test.ts | 55 +++++++++++++++++++ .../package.json | 8 +++ .../serializers/string.js | 14 +++++ packages/jest-snapshot/src/State.ts | 14 ++++- packages/jest-snapshot/src/index.ts | 6 +- 6 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts create mode 100644 e2e/to-match-snapshot-with-string-serializer/package.json create mode 100644 e2e/to-match-snapshot-with-string-serializer/serializers/string.js diff --git a/CHANGELOG.md b/CHANGELOG.md index a88b654a010a..84bcead3d743 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - `[jest-leak-detector]` [**BREAKING**] Use `weak-napi` instead of `weak` package ([#8686](https://github.com/facebook/jest/pull/8686)) - `[jest-mock]` Fix for mockReturnValue overriding mockImplementationOnce ([#8398](https://github.com/facebook/jest/pull/8398)) - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) +- `[jest-snapshot]` Distinguish empty string from external snapshot not written ([#8880](https://github.com/facebook/jest/pull/8880)) ### Chore & Maintenance diff --git a/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts b/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts new file mode 100644 index 000000000000..52def4c55db1 --- /dev/null +++ b/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import * as path from 'path'; +import {cleanup, makeTemplate, writeFiles} from '../Utils'; +import runJest from '../runJest'; + +const DIR = path.resolve( + __dirname, + '../to-match-snapshot-with-string-serializer', +); +const TESTS_DIR = path.resolve(DIR, '__tests__'); + +beforeEach(() => cleanup(TESTS_DIR)); +afterAll(() => cleanup(TESTS_DIR)); + +test('empty external', () => { + // Make sure empty string as expected value of external snapshot + // is not confused with new snapshot not written because of --ci option. + const filename = 'empty-external.test.js'; + const template = makeTemplate( + `test('string serializer', () => { expect($1).toMatchSnapshot(); })`, + ); + + { + writeFiles(TESTS_DIR, { + [filename]: template(['""']), // empty string + }); + const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + expect(stderr).toMatch('1 snapshot written from 1 test suite.'); + expect(status).toBe(0); + } + + { + const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); + expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); + expect(status).toBe(0); + } + + { + writeFiles(TESTS_DIR, { + [filename]: template(['"non-empty"']), + }); + const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); + expect(stderr).not.toMatch('not written'); // not confused with --ci option + expect(stderr).toMatch(/- Snapshot|Snapshot:/); // ordinary report + expect(status).toBe(1); + } +}); diff --git a/e2e/to-match-snapshot-with-string-serializer/package.json b/e2e/to-match-snapshot-with-string-serializer/package.json new file mode 100644 index 000000000000..b68e414f8c97 --- /dev/null +++ b/e2e/to-match-snapshot-with-string-serializer/package.json @@ -0,0 +1,8 @@ +{ + "jest": { + "testEnvironment": "node", + "snapshotSerializers": [ + "./serializers/string" + ] + } +} diff --git a/e2e/to-match-snapshot-with-string-serializer/serializers/string.js b/e2e/to-match-snapshot-with-string-serializer/serializers/string.js new file mode 100644 index 000000000000..515489525c50 --- /dev/null +++ b/e2e/to-match-snapshot-with-string-serializer/serializers/string.js @@ -0,0 +1,14 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +// Serialize string (especially empty) without enclosing punctuation. +module.exports = { + print: val => val, + test: val => typeof val === 'string', +}; diff --git a/packages/jest-snapshot/src/State.ts b/packages/jest-snapshot/src/State.ts index b27bbc838d31..c8e4b7b9208a 100644 --- a/packages/jest-snapshot/src/State.ts +++ b/packages/jest-snapshot/src/State.ts @@ -35,6 +35,14 @@ export type SnapshotMatchOptions = { error?: Error; }; +type SnapshotReturnOptions = { + actual: string; + count: number; + expected?: string; + key: string; + pass: boolean; +}; + export default class SnapshotState { private _counters: Map; private _dirty: boolean; @@ -173,7 +181,7 @@ export default class SnapshotState { key, inlineSnapshot, error, - }: SnapshotMatchOptions) { + }: SnapshotMatchOptions): SnapshotReturnOptions { this._counters.set(testName, (this._counters.get(testName) || 0) + 1); const count = Number(this._counters.get(testName)); const isInline = inlineSnapshot !== undefined; @@ -185,7 +193,7 @@ export default class SnapshotState { // Do not mark the snapshot as "checked" if the snapshot is inline and // there's an external snapshot. This way the external snapshot can be // removed with `--updateSnapshot`. - if (!(isInline && this._snapshotData[key])) { + if (!(isInline && this._snapshotData[key] !== undefined)) { this._uncheckedKeys.delete(key); } @@ -248,7 +256,7 @@ export default class SnapshotState { return { actual: unescape(receivedSerialized), count, - expected: expected ? unescape(expected) : null, + expected: expected !== undefined ? unescape(expected) : undefined, key, pass: false, }; diff --git a/packages/jest-snapshot/src/index.ts b/packages/jest-snapshot/src/index.ts index 3526cbb687c6..bfebff396d54 100644 --- a/packages/jest-snapshot/src/index.ts +++ b/packages/jest-snapshot/src/index.ts @@ -340,7 +340,7 @@ const _toMatchSnapshot = ({ let report: () => string; if (pass) { return {message: () => '', pass: true}; - } else if (!expected) { + } else if (expected === undefined) { report = () => `New snapshot was ${RECEIVED_COLOR('not written')}. The update flag ` + `must be explicitly passed to write a new snapshot.\n\n` + @@ -349,8 +349,8 @@ const _toMatchSnapshot = ({ `${RECEIVED_COLOR('Received value')} ` + `${actual}`; } else { - expected = utils.removeExtraLineBreaks(expected || ''); - actual = utils.removeExtraLineBreaks(actual || ''); + expected = utils.removeExtraLineBreaks(expected); + actual = utils.removeExtraLineBreaks(actual); // Assign to local variable because of declaration let expected: // TypeScript thinks it could change before report function is called. From 554573036ae7529425aa157a1fd757612289abb5 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Sun, 1 Sep 2019 16:57:05 -0400 Subject: [PATCH 21/97] jest-snapshot: Distinguish empty string from internal snapshot not written (#8898) * jest-snapshot: Distinguish empty string from internal snapshot not written * Update CHANGELOG.md --- CHANGELOG.md | 1 + ...oMatchSnapshotWithStringSerializer.test.ts | 68 ++++++++++++++++++- packages/jest-snapshot/src/State.ts | 7 +- packages/jest-snapshot/src/index.ts | 16 ++++- 4 files changed, 83 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84bcead3d743..9f8139630c88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - `[jest-mock]` Fix for mockReturnValue overriding mockImplementationOnce ([#8398](https://github.com/facebook/jest/pull/8398)) - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) - `[jest-snapshot]` Distinguish empty string from external snapshot not written ([#8880](https://github.com/facebook/jest/pull/8880)) +- `[jest-snapshot]` [**BREAKING**] Distinguish empty string from internal snapshot not written ([#8898](https://github.com/facebook/jest/pull/8898)) ### Chore & Maintenance diff --git a/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts b/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts index 52def4c55db1..88aa8a788977 100644 --- a/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts +++ b/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import * as fs from 'fs'; import * as path from 'path'; import {cleanup, makeTemplate, writeFiles} from '../Utils'; import runJest from '../runJest'; @@ -15,9 +16,18 @@ const DIR = path.resolve( ); const TESTS_DIR = path.resolve(DIR, '__tests__'); +const readFile = filename => + fs.readFileSync(path.join(TESTS_DIR, filename), 'utf8'); + beforeEach(() => cleanup(TESTS_DIR)); afterAll(() => cleanup(TESTS_DIR)); +// Because the not written error might include Received, +// match Snapshot as either diff annotation or concise label. +const ORDINARY_FAILURE = /- Snapshot|Snapshot:/; + +const NOT_WRITTEN = 'not written'; // new snapshot with --ci option + test('empty external', () => { // Make sure empty string as expected value of external snapshot // is not confused with new snapshot not written because of --ci option. @@ -28,7 +38,7 @@ test('empty external', () => { { writeFiles(TESTS_DIR, { - [filename]: template(['""']), // empty string + [filename]: template([`''`]), }); const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); @@ -44,12 +54,64 @@ test('empty external', () => { { writeFiles(TESTS_DIR, { - [filename]: template(['"non-empty"']), + [filename]: template([`'non-empty'`]), }); const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); expect(stderr).not.toMatch('not written'); // not confused with --ci option - expect(stderr).toMatch(/- Snapshot|Snapshot:/); // ordinary report + expect(stderr).toMatch(ORDINARY_FAILURE); + expect(status).toBe(1); + } +}); + +test('empty internal ci false', () => { + // Make sure empty string as expected value of internal snapshot + // is not confused with absence of snapshot. + const filename = 'empty-internal-ci-false.test.js'; + const template = makeTemplate( + `test('string serializer', () => { expect($1).toMatchInlineSnapshot(); })`, + ); + + const received1 = `''`; + const received2 = `'non-empty'`; + + { + writeFiles(TESTS_DIR, { + [filename]: template([received1]), + }); + const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + expect(stderr).toMatch('1 snapshot written from 1 test suite.'); + expect(status).toBe(0); + } + + { + writeFiles(TESTS_DIR, { + [filename]: readFile(filename).replace(received1, received2), + }); + const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); + expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); + expect(stderr).toMatch(ORDINARY_FAILURE); + expect(status).toBe(1); + } +}); + +test('undefined internal ci true', () => { + // Make sure absence of internal snapshot + // is not confused with ordinary failure for empty string as expected value. + const filename = 'undefined-internal-ci-true.test.js'; + const template = makeTemplate( + `test('explicit update', () => { expect($1).toMatchInlineSnapshot(); })`, + ); + + { + writeFiles(TESTS_DIR, { + [filename]: template([`'non-empty'`]), + }); + const {stderr, status} = runJest(DIR, ['-w=1', '--ci=true', filename]); + expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); + expect(stderr).not.toMatch(ORDINARY_FAILURE); + expect(stderr).toMatch(NOT_WRITTEN); expect(status).toBe(1); } }); diff --git a/packages/jest-snapshot/src/State.ts b/packages/jest-snapshot/src/State.ts index c8e4b7b9208a..db7868b03cb7 100644 --- a/packages/jest-snapshot/src/State.ts +++ b/packages/jest-snapshot/src/State.ts @@ -32,6 +32,7 @@ export type SnapshotMatchOptions = { received: any; key?: string; inlineSnapshot?: string; + isInline: boolean; error?: Error; }; @@ -180,11 +181,11 @@ export default class SnapshotState { received, key, inlineSnapshot, + isInline, error, }: SnapshotMatchOptions): SnapshotReturnOptions { this._counters.set(testName, (this._counters.get(testName) || 0) + 1); const count = Number(this._counters.get(testName)); - const isInline = inlineSnapshot !== undefined; if (!key) { key = testNameToKey(testName, count); @@ -200,9 +201,7 @@ export default class SnapshotState { const receivedSerialized = serialize(received); const expected = isInline ? inlineSnapshot : this._snapshotData[key]; const pass = expected === receivedSerialized; - const hasSnapshot = isInline - ? inlineSnapshot !== '' - : this._snapshotData[key] !== undefined; + const hasSnapshot = expected !== undefined; const snapshotIsPersisted = isInline || fs.existsSync(this._snapshotPath); if (pass && !isInline) { diff --git a/packages/jest-snapshot/src/index.ts b/packages/jest-snapshot/src/index.ts index bfebff396d54..e898b94630a9 100644 --- a/packages/jest-snapshot/src/index.ts +++ b/packages/jest-snapshot/src/index.ts @@ -36,6 +36,7 @@ type MatchSnapshotConfig = { expectedArgument: string; hint?: string; inlineSnapshot?: string; + isInline: boolean; matcherName: string; options: MatcherHintOptions; propertyMatchers?: any; @@ -204,6 +205,7 @@ const toMatchSnapshot = function( context: this, expectedArgument, hint, + isInline: false, matcherName, options, propertyMatchers, @@ -249,7 +251,11 @@ const toMatchInlineSnapshot = function( return _toMatchSnapshot({ context: this, expectedArgument, - inlineSnapshot: stripAddedIndentation(inlineSnapshot || ''), + inlineSnapshot: + inlineSnapshot !== undefined + ? stripAddedIndentation(inlineSnapshot) + : undefined, + isInline: true, matcherName, options, propertyMatchers, @@ -262,6 +268,7 @@ const _toMatchSnapshot = ({ expectedArgument, hint, inlineSnapshot, + isInline, matcherName, options, propertyMatchers, @@ -331,6 +338,7 @@ const _toMatchSnapshot = ({ const result = snapshotState.match({ error: context.error, inlineSnapshot, + isInline, received, testName: fullTestName, }); @@ -404,6 +412,7 @@ const toThrowErrorMatchingSnapshot = function( context: this, expectedArgument, hint, + isInline: false, matcherName, options, received, @@ -431,7 +440,8 @@ const toThrowErrorMatchingInlineSnapshot = function( { context: this, expectedArgument, - inlineSnapshot: inlineSnapshot || '', + inlineSnapshot, + isInline: true, matcherName, options, received, @@ -445,6 +455,7 @@ const _toThrowErrorMatchingSnapshot = ( context, expectedArgument, inlineSnapshot, + isInline, matcherName, options, received, @@ -488,6 +499,7 @@ const _toThrowErrorMatchingSnapshot = ( expectedArgument, hint, inlineSnapshot, + isInline, matcherName, options, received: error.message, From c588c18595000d68c98bf8c72d003ff8b3674124 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 2 Sep 2019 15:09:44 +0200 Subject: [PATCH 22/97] chore: get rid of custom abstraction on top of execa in e2e tests (#8901) --- e2e/Utils.ts | 2 +- e2e/__tests__/autoClearMocks.test.ts | 4 +- e2e/__tests__/autoResetMocks.test.ts | 4 +- e2e/__tests__/autoRestoreMocks.test.ts | 4 +- e2e/__tests__/clearCache.test.ts | 10 +- .../cliHandlesExactFilenames.test.ts | 4 +- e2e/__tests__/config.test.ts | 6 +- e2e/__tests__/console.test.ts | 20 ++-- e2e/__tests__/consoleAfterTeardown.test.ts | 4 +- .../consoleLogOutputWhenRunInBand.test.ts | 4 +- e2e/__tests__/coverageRemapping.test.ts | 2 +- e2e/__tests__/coverageReport.test.ts | 38 +++---- e2e/__tests__/coverageThreshold.test.ts | 44 ++++---- .../coverageTransformInstrumented.test.ts | 2 +- e2e/__tests__/customReporters.test.ts | 32 +++--- e2e/__tests__/customResolver.test.ts | 2 +- e2e/__tests__/customTestSequencers.test.ts | 4 +- e2e/__tests__/declarationErrors.test.ts | 6 +- e2e/__tests__/dependencyClash.test.ts | 4 +- e2e/__tests__/deprecatedCliOptions.test.ts | 4 +- e2e/__tests__/each.test.ts | 14 +-- e2e/__tests__/emptyDescribeWithHooks.test.ts | 8 +- e2e/__tests__/emptySuiteError.test.ts | 2 - e2e/__tests__/env.test.ts | 12 +-- e2e/__tests__/errorOnDeprecated.test.ts | 4 +- e2e/__tests__/executeTestsOnceInMpr.ts | 4 +- e2e/__tests__/expectAsyncMatcher.test.ts | 4 +- e2e/__tests__/expectInVm.test.ts | 2 +- e2e/__tests__/fakePromises.test.ts | 4 +- e2e/__tests__/fatalWorkerError.test.ts | 4 +- e2e/__tests__/filter.test.ts | 14 +-- e2e/__tests__/generatorMock.test.ts | 4 +- e2e/__tests__/globalSetup.test.ts | 25 +++-- e2e/__tests__/globalTeardown.test.ts | 15 ++- e2e/__tests__/globals.test.ts | 36 +++---- e2e/__tests__/jasmineAsync.test.ts | 33 +++--- .../jasmineAsyncWithPendingDuringTest.ts | 3 +- e2e/__tests__/jest.config.js.test.ts | 12 +-- e2e/__tests__/jestChangedFiles.test.ts | 8 +- e2e/__tests__/jsonReporter.test.ts | 2 +- e2e/__tests__/lifecycles.ts | 4 +- e2e/__tests__/listTests.test.ts | 8 +- e2e/__tests__/mockNames.test.ts | 40 ++++--- e2e/__tests__/moduleNameMapper.test.ts | 8 +- e2e/__tests__/moduleParentNullInTest.ts | 4 +- e2e/__tests__/multiProjectRunner.test.ts | 16 +-- e2e/__tests__/nestedEventLoop.test.ts | 2 +- e2e/__tests__/noTestsFound.test.ts | 20 ++-- e2e/__tests__/nodePath.test.ts | 2 +- e2e/__tests__/onlyChanged.test.ts | 8 +- e2e/__tests__/presets.test.ts | 4 +- e2e/__tests__/promiseReject.test.ts | 4 +- e2e/__tests__/resetModules.test.ts | 2 +- e2e/__tests__/resolve.test.ts | 2 +- e2e/__tests__/resolveGetPaths.test.ts | 4 +- e2e/__tests__/resolveNoFileExtensions.test.ts | 8 +- e2e/__tests__/resolveNodeModule.test.ts | 2 +- e2e/__tests__/resolveWithPaths.test.ts | 4 +- e2e/__tests__/setImmediate.test.ts | 2 +- .../setupFilesAfterEnvConfig.test.ts | 4 +- e2e/__tests__/snapshot-unknown.test.ts | 2 +- e2e/__tests__/snapshot.test.ts | 28 ++--- e2e/__tests__/snapshotMockFs.test.ts | 4 +- e2e/__tests__/snapshotSerializers.test.ts | 5 +- e2e/__tests__/stackTrace.test.ts | 28 ++--- .../stackTraceNoCaptureStackTrace.test.ts | 4 +- e2e/__tests__/supportsDashedArgs.ts | 13 +-- e2e/__tests__/testEnvironmentAsync.test.ts | 2 +- e2e/__tests__/testFailureExitCode.test.ts | 12 +-- e2e/__tests__/testNamePattern.test.ts | 4 +- e2e/__tests__/testNamePatternSkipped.test.ts | 4 +- .../testPathPatternReporterMessage.test.ts | 2 - e2e/__tests__/testResultsProcessor.test.ts | 4 +- e2e/__tests__/testRetries.test.ts | 2 +- e2e/__tests__/testTodo.test.ts | 10 +- e2e/__tests__/timeouts.test.ts | 18 ++-- e2e/__tests__/timeoutsLegacy.test.ts | 12 +-- e2e/__tests__/timerResetMocks.test.ts | 4 +- e2e/__tests__/timerUseRealTimers.test.ts | 2 +- e2e/__tests__/toMatchInlineSnapshot.test.ts | 68 ++++++------ .../toMatchInlineSnapshotWithRetries.test.ts | 28 ++--- e2e/__tests__/toMatchSnapshot.test.ts | 100 +++++++++--------- .../toMatchSnapshotWithRetries.test.ts | 24 ++--- ...oMatchSnapshotWithStringSerializer.test.ts | 24 ++--- ...toThrowErrorMatchingInlineSnapshot.test.ts | 16 +-- .../toThrowErrorMatchingSnapshot.test.ts | 20 ++-- e2e/__tests__/transform.test.ts | 8 +- e2e/__tests__/verbose.test.ts | 4 +- e2e/__tests__/version.test.ts | 4 +- e2e/__tests__/watchModeOnlyFailed.test.ts | 4 +- e2e/__tests__/watchModePatterns.test.ts | 8 +- e2e/__tests__/watchModeUpdateSnapshot.test.ts | 4 +- e2e/__tests__/workerForceExit.test.ts | 8 +- e2e/runJest.ts | 42 ++++---- examples/typescript/CheckboxWithLabel.tsx | 2 - packages/jest-test-result/src/index.ts | 1 + 96 files changed, 535 insertions(+), 548 deletions(-) diff --git a/e2e/Utils.ts b/e2e/Utils.ts index 573bf3d3fd2a..a98e2e6bca39 100644 --- a/e2e/Utils.ts +++ b/e2e/Utils.ts @@ -96,7 +96,7 @@ const NUMBER_OF_TESTS_TO_FORCE_USING_WORKERS = 25; * Slow and modifies the test output. Use sparingly. */ export const generateTestFilesToForceUsingWorkers = () => { - const testFiles = {}; + const testFiles: Record = {}; for (let i = 0; i <= NUMBER_OF_TESTS_TO_FORCE_USING_WORKERS; i++) { testFiles[`__tests__/test${i}.test.js`] = ` test.todo('test ${i}'); diff --git a/e2e/__tests__/autoClearMocks.test.ts b/e2e/__tests__/autoClearMocks.test.ts index 1033aff68e87..e374bdf4e603 100644 --- a/e2e/__tests__/autoClearMocks.test.ts +++ b/e2e/__tests__/autoClearMocks.test.ts @@ -9,10 +9,10 @@ import runJest from '../runJest'; test('suite with auto-clear', () => { const result = runJest('auto-clear-mocks/with-auto-clear'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('suite without auto-clear', () => { const result = runJest('auto-clear-mocks/without-auto-clear'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/autoResetMocks.test.ts b/e2e/__tests__/autoResetMocks.test.ts index 69fc1758df9e..2208a4f9818e 100644 --- a/e2e/__tests__/autoResetMocks.test.ts +++ b/e2e/__tests__/autoResetMocks.test.ts @@ -9,10 +9,10 @@ import runJest from '../runJest'; test('suite with auto-reset', () => { const result = runJest('auto-reset-mocks/with-auto-reset'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('suite without auto-reset', () => { const result = runJest('auto-reset-mocks/without-auto-reset'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/autoRestoreMocks.test.ts b/e2e/__tests__/autoRestoreMocks.test.ts index ada6696f64f6..691fa96b5d50 100644 --- a/e2e/__tests__/autoRestoreMocks.test.ts +++ b/e2e/__tests__/autoRestoreMocks.test.ts @@ -9,10 +9,10 @@ import runJest from '../runJest'; test('suite with auto-restore', () => { const result = runJest('auto-restore-mocks/with-auto-restore'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('suite without auto-restore', () => { const result = runJest('auto-restore-mocks/without-auto-restore'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/clearCache.test.ts b/e2e/__tests__/clearCache.test.ts index db358d35b596..859800c939d4 100644 --- a/e2e/__tests__/clearCache.test.ts +++ b/e2e/__tests__/clearCache.test.ts @@ -14,15 +14,15 @@ const CACHE = path.resolve(tmpdir(), 'clear-cache-directory'); describe('jest --clearCache', () => { test('normal run results in cache directory being written', () => { - const {status} = runJest('clear-cache', [`--cacheDirectory=${CACHE}`]); + const {exitCode} = runJest('clear-cache', [`--cacheDirectory=${CACHE}`]); expect(fs.existsSync(CACHE)).toBe(true); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); - test('clearCache results in deleted directory and exit status 0', () => { + test('clearCache results in deleted directory and exitCode 0', () => { expect(fs.existsSync(CACHE)).toBe(true); - const {status, stdout, stderr} = runJest('clear-cache', [ + const {exitCode, stdout, stderr} = runJest('clear-cache', [ '--clearCache', `--cacheDirectory=${CACHE}`, ]); @@ -30,6 +30,6 @@ describe('jest --clearCache', () => { expect(fs.existsSync(CACHE)).toBe(false); expect(stdout).toBe(`Cleared ${CACHE}`); expect(stderr).toBe(''); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/cliHandlesExactFilenames.test.ts b/e2e/__tests__/cliHandlesExactFilenames.test.ts index ed40dfdc73ee..af7fd5d46d19 100644 --- a/e2e/__tests__/cliHandlesExactFilenames.test.ts +++ b/e2e/__tests__/cliHandlesExactFilenames.test.ts @@ -28,7 +28,7 @@ test('CLI accepts exact file names if matchers matched', () => { const result = runJest(DIR, ['-i', '--forceExit', './foo/bar.spec.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const {rest, summary} = extractSummary(result.stderr); @@ -47,7 +47,7 @@ test('CLI skips exact file names if no matchers matched', () => { const result = runJest(DIR, ['-i', '--forceExit', './foo/bar.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stdout).toMatch(/No tests found([\S\s]*)2 files checked./); expect(result.stderr).toEqual(''); }); diff --git a/e2e/__tests__/config.test.ts b/e2e/__tests__/config.test.ts index dd8ab265fff5..002cd04fd65e 100644 --- a/e2e/__tests__/config.test.ts +++ b/e2e/__tests__/config.test.ts @@ -16,7 +16,7 @@ test('config as JSON', () => { }), ]); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stdout).toMatch('No tests found'); }); @@ -28,7 +28,7 @@ test('works with sane config JSON', () => { }), ]); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stderr).toMatch('works just fine'); }); @@ -65,6 +65,6 @@ test('works with jsdom testEnvironmentOptions config JSON', () => { }), ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(result.stderr).toContain('found url jestjs.io'); }); diff --git a/e2e/__tests__/console.test.ts b/e2e/__tests__/console.test.ts index f228884fb4a3..7c78ae3c1bf6 100644 --- a/e2e/__tests__/console.test.ts +++ b/e2e/__tests__/console.test.ts @@ -11,29 +11,29 @@ import {extractSummary, run} from '../Utils'; import runJest from '../runJest'; test('console printing', () => { - const {stderr, status} = runJest('console'); + const {stderr, exitCode} = runJest('console'); const {summary, rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); }); test('console printing with --verbose', () => { - const {stderr, stdout, status} = runJest('console', [ + const {stderr, stdout, exitCode} = runJest('console', [ '--verbose', '--no-cache', ]); const {summary, rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(stdout)).toMatchSnapshot(); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); }); test('does not print to console with --silent', () => { - const {stderr, stdout, status} = runJest('console', [ + const {stderr, stdout, exitCode} = runJest('console', [ // Need to pass --config because console test specifies `verbose: false` '--config=' + JSON.stringify({ @@ -44,7 +44,7 @@ test('does not print to console with --silent', () => { ]); const {summary, rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(stdout)).toMatchSnapshot(); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); @@ -52,10 +52,10 @@ test('does not print to console with --silent', () => { // issue: https://github.com/facebook/jest/issues/5223 test('the jsdom console is the same as the test console', () => { - const {stderr, stdout, status} = runJest('console-jsdom'); + const {stderr, stdout, exitCode} = runJest('console-jsdom'); const {summary, rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(stdout)).toMatchSnapshot(); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); @@ -64,10 +64,10 @@ test('the jsdom console is the same as the test console', () => { test('does not error out when using winston', () => { const dir = path.resolve(__dirname, '../console-winston'); run('yarn', dir); - const {stderr, stdout, status} = runJest(dir); + const {stderr, stdout, exitCode} = runJest(dir); const {summary, rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(stdout)).toMatchSnapshot(); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); diff --git a/e2e/__tests__/consoleAfterTeardown.test.ts b/e2e/__tests__/consoleAfterTeardown.test.ts index 25b87ce8a49e..543da32f4d0f 100644 --- a/e2e/__tests__/consoleAfterTeardown.test.ts +++ b/e2e/__tests__/consoleAfterTeardown.test.ts @@ -10,9 +10,9 @@ import {extractSummary} from '../Utils'; import runJest from '../runJest'; test('console printing', () => { - const {stderr, status} = runJest('console-after-teardown'); + const {stderr, exitCode} = runJest('console-after-teardown'); const {rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts b/e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts index 0fbb737e8f2f..e49a61328672 100644 --- a/e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts +++ b/e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts @@ -23,13 +23,13 @@ test('prints console.logs when run with forceExit', () => { 'package.json': '{}', }); - const {stderr, stdout, status} = runJest(DIR, [ + const {stderr, stdout, exitCode} = runJest(DIR, [ '-i', '--ci=false', '--forceExit', ]); const {rest, summary} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); expect(wrap(stdout)).toMatchSnapshot(); diff --git a/e2e/__tests__/coverageRemapping.test.ts b/e2e/__tests__/coverageRemapping.test.ts index 75b8a83ecaff..07172e613b77 100644 --- a/e2e/__tests__/coverageRemapping.test.ts +++ b/e2e/__tests__/coverageRemapping.test.ts @@ -21,7 +21,7 @@ it('maps code coverage against original source', () => { run('yarn', dir); const result = runJest(dir, ['--coverage', '--no-cache']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const coverageMapFile = path.join(coverageDir, 'coverage-final.json'); const coverageMap = JSON.parse(readFileSync(coverageMapFile, 'utf-8')); diff --git a/e2e/__tests__/coverageReport.test.ts b/e2e/__tests__/coverageReport.test.ts index 42f2700fa9a1..bb72df69521b 100644 --- a/e2e/__tests__/coverageReport.test.ts +++ b/e2e/__tests__/coverageReport.test.ts @@ -18,7 +18,7 @@ beforeAll(() => { }); test('outputs coverage report', () => { - const {stdout, status} = runJest(DIR, ['--no-cache', '--coverage'], { + const {stdout, exitCode} = runJest(DIR, ['--no-cache', '--coverage'], { stripAnsi: true, }); const coverageDir = path.join(DIR, 'coverage'); @@ -31,7 +31,7 @@ test('outputs coverage report', () => { expect(wrap(stdout)).toMatchSnapshot(); expect(() => fs.accessSync(coverageDir, fs.F_OK)).not.toThrow(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('collects coverage only from specified file', () => { @@ -86,26 +86,26 @@ test('collects coverage only from specified files avoiding dependencies', () => }); test('json reporter printing with --coverage', () => { - const {stderr, status} = runJest('json-reporter', ['--coverage'], { + const {stderr, exitCode} = runJest('json-reporter', ['--coverage'], { stripAnsi: true, }); const {summary} = extractSummary(stderr); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(summary)).toMatchSnapshot(); }); test('outputs coverage report as json', () => { - const {stdout, status} = runJest( + const {stdout, exitCode} = runJest( DIR, ['--no-cache', '--coverage', '--json'], {stripAnsi: true}, ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(() => JSON.parse(stdout)).not.toThrow(); }); test('outputs coverage report when text is requested', () => { - const {stdout, status} = runJest( + const {stdout, exitCode} = runJest( DIR, [ '--no-cache', @@ -115,24 +115,24 @@ test('outputs coverage report when text is requested', () => { ], {stripAnsi: true}, ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stdout).toMatch(/Stmts | . Branch/); expect(wrap(stdout)).toMatchSnapshot(); }); test('outputs coverage report when text-summary is requested', () => { - const {stdout, status} = runJest( + const {stdout, exitCode} = runJest( DIR, ['--no-cache', '--coverage', '--coverageReporters=text-summary'], {stripAnsi: true}, ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stdout).toMatch(/Coverage summary/); expect(wrap(stdout)).toMatchSnapshot(); }); test('outputs coverage report when text and text-summary is requested', () => { - const {stdout, status} = runJest( + const {stdout, exitCode} = runJest( DIR, [ '--no-cache', @@ -142,19 +142,19 @@ test('outputs coverage report when text and text-summary is requested', () => { ], {stripAnsi: true}, ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stdout).toMatch(/Stmts | . Branch/); expect(stdout).toMatch(/Coverage summary/); expect(wrap(stdout)).toMatchSnapshot(); }); test('does not output coverage report when html is requested', () => { - const {stdout, status} = runJest( + const {stdout, exitCode} = runJest( DIR, ['--no-cache', '--coverage', '--coverageReporters=html'], {stripAnsi: true}, ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stdout).toMatch(/^$/); expect(wrap(stdout)).toMatchSnapshot(); }); @@ -162,7 +162,7 @@ test('does not output coverage report when html is requested', () => { test('collects coverage from duplicate files avoiding shared cache', () => { const args = [ '--coverage', - // Ensure the status code is non-zero if super edge case with coverage triggers + // Ensure the exitCode is non-zero if super edge case with coverage triggers '--coverageThreshold', '{"global": {"lines": 100}}', '--collectCoverageOnlyFrom', @@ -176,17 +176,17 @@ test('collects coverage from duplicate files avoiding shared cache', () => { runJest(DIR, args, {stripAnsi: true}); // Run for the second time - const {stdout, status} = runJest(DIR, args, {stripAnsi: true}); + const {stdout, exitCode} = runJest(DIR, args, {stripAnsi: true}); expect(wrap(stdout)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('generates coverage when using the testRegex config param ', () => { - const {stdout, status} = runJest(DIR, [ + const {stdout, exitCode} = runJest(DIR, [ '--no-cache', '--testRegex=__tests__', '--coverage', ]); expect(wrap(stdout)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/coverageThreshold.test.ts b/e2e/__tests__/coverageThreshold.test.ts index 9ecfae0e97f7..b0bc9436f093 100644 --- a/e2e/__tests__/coverageThreshold.test.ts +++ b/e2e/__tests__/coverageThreshold.test.ts @@ -41,12 +41,14 @@ test('exits with 1 if coverage threshold is not met', () => { 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { - stripAnsi: true, - }); + const {stdout, stderr, exitCode} = runJest( + DIR, + ['--coverage', '--ci=false'], + {stripAnsi: true}, + ); const {rest, summary} = extractSummary(stderr); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); expect(wrap(stdout)).toMatchSnapshot('stdout'); @@ -78,12 +80,14 @@ test('exits with 1 if path threshold group is not found in coverage data', () => 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { - stripAnsi: true, - }); + const {stdout, stderr, exitCode} = runJest( + DIR, + ['--coverage', '--ci=false'], + {stripAnsi: true}, + ); const {rest, summary} = extractSummary(stderr); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); expect(wrap(stdout)).toMatchSnapshot('stdout'); @@ -118,11 +122,11 @@ test('exits with 0 if global threshold group is not found in coverage data', () 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, status} = runJest(DIR, ['--coverage', '--ci=false'], { + const {stdout, exitCode} = runJest(DIR, ['--coverage', '--ci=false'], { stripAnsi: true, }); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(stdout)).toMatchSnapshot('stdout'); }); @@ -160,12 +164,14 @@ test('excludes tests matched by path threshold groups from global group', () => 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { - stripAnsi: true, - }); + const {stdout, stderr, exitCode} = runJest( + DIR, + ['--coverage', '--ci=false'], + {stripAnsi: true}, + ); const {rest, summary} = extractSummary(stderr); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); expect(wrap(stdout)).toMatchSnapshot('stdout'); @@ -203,9 +209,11 @@ test('file is matched by all path and glob threshold groups', () => { 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { - stripAnsi: true, - }); + const {stdout, stderr, exitCode} = runJest( + DIR, + ['--coverage', '--ci=false'], + {stripAnsi: true}, + ); const {rest, summary} = extractSummary( /* This test also runs on windows and when the glob fails it outputs the system specific absolute path to the test file. */ @@ -215,7 +223,7 @@ test('file is matched by all path and glob threshold groups', () => { ), ); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); expect(wrap(stdout)).toMatchSnapshot('stdout'); diff --git a/e2e/__tests__/coverageTransformInstrumented.test.ts b/e2e/__tests__/coverageTransformInstrumented.test.ts index d139cd6c17ec..c16b07fab5ce 100644 --- a/e2e/__tests__/coverageTransformInstrumented.test.ts +++ b/e2e/__tests__/coverageTransformInstrumented.test.ts @@ -21,7 +21,7 @@ it('code coverage for transform instrumented code', () => { run('yarn', dir); const result = runJest(dir, ['--coverage', '--no-cache']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const coverageMapFile = path.join(coverageDir, 'coverage-final.json'); const coverageMap = JSON.parse(readFileSync(coverageMapFile, 'utf-8')); diff --git a/e2e/__tests__/customReporters.test.ts b/e2e/__tests__/customReporters.test.ts index bb5dd8aeef03..55aafea3c67f 100644 --- a/e2e/__tests__/customReporters.test.ts +++ b/e2e/__tests__/customReporters.test.ts @@ -22,13 +22,13 @@ describe('Custom Reporters Integration', () => { reporters: ['/reporters/TestReporter.js'], }; - const {status} = runJest('custom-reporters', [ + const {exitCode} = runJest('custom-reporters', [ '--config', JSON.stringify(reporterConfig), 'add.test.js', ]); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('valid array format for adding reporters', () => { @@ -38,14 +38,14 @@ describe('Custom Reporters Integration', () => { ], }; - const {status, stdout} = runJest('custom-reporters', [ + const {exitCode, stdout} = runJest('custom-reporters', [ '--config', JSON.stringify(reporterConfig), 'add.test.js', ]); expect(wrap(stdout)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('invalid format for adding reporters', () => { @@ -53,18 +53,18 @@ describe('Custom Reporters Integration', () => { reporters: [[3243242]], }; - const {status, stderr} = runJest('custom-reporters', [ + const {exitCode, stderr} = runJest('custom-reporters', [ '--config', JSON.stringify(reporterConfig), 'add.test.js', ]); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(stderr)).toMatchSnapshot(); }); test('default reporters enabled', () => { - const {stderr, stdout, status} = runJest('custom-reporters', [ + const {stderr, stdout, exitCode} = runJest('custom-reporters', [ '--config', JSON.stringify({ reporters: ['default', '/reporters/TestReporter.js'], @@ -75,38 +75,38 @@ describe('Custom Reporters Integration', () => { const {summary, rest} = extractSummary(stderr); const parsedJSON = JSON.parse(stdout); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); expect(parsedJSON).toMatchSnapshot(); }); test('TestReporter with all tests passing', () => { - const {stdout, status, stderr} = runJest('custom-reporters', [ + const {stdout, exitCode, stderr} = runJest('custom-reporters', [ 'add.test.js', ]); const parsedJSON = JSON.parse(stdout); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stderr).toBe(''); expect(parsedJSON).toMatchSnapshot(); }); test('TestReporter with all tests failing', () => { - const {stdout, status, stderr} = runJest('custom-reporters', [ + const {stdout, exitCode, stderr} = runJest('custom-reporters', [ 'addFail.test.js', ]); const parsedJSON = JSON.parse(stdout); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toBe(''); expect(parsedJSON).toMatchSnapshot(); }); test('IncompleteReporter for flexibility', () => { - const {stderr, stdout, status} = runJest('custom-reporters', [ + const {stderr, stdout, exitCode} = runJest('custom-reporters', [ '--no-cache', '--config', JSON.stringify({ @@ -115,7 +115,7 @@ describe('Custom Reporters Integration', () => { 'add.test.js', ]); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stderr).toBe(''); expect(wrap(stdout)).toMatchSnapshot(); @@ -140,8 +140,8 @@ describe('Custom Reporters Integration', () => { `, }); - const {stderr, status} = runJest(DIR); + const {stderr, exitCode} = runJest(DIR); expect(stderr).toMatch(/ON_RUN_START_ERROR/); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); }); diff --git a/e2e/__tests__/customResolver.test.ts b/e2e/__tests__/customResolver.test.ts index daa777f78b03..21bd0e8cd45a 100644 --- a/e2e/__tests__/customResolver.test.ts +++ b/e2e/__tests__/customResolver.test.ts @@ -9,5 +9,5 @@ import runJest from '../runJest'; test('use the custom resolver', () => { const result = runJest('custom-resolver'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/customTestSequencers.test.ts b/e2e/__tests__/customTestSequencers.test.ts index 3e6398f75691..5a6c03f9bf94 100644 --- a/e2e/__tests__/customTestSequencers.test.ts +++ b/e2e/__tests__/customTestSequencers.test.ts @@ -22,7 +22,7 @@ test('run prioritySequence first sync', () => { ], {}, ); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const sequence = extractSummary(result.stderr) .rest.replace(/PASS /g, '') .split('\n'); @@ -47,7 +47,7 @@ test('run prioritySequence first async', () => { ], {}, ); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const sequence = extractSummary(result.stderr) .rest.replace(/PASS /g, '') .split('\n'); diff --git a/e2e/__tests__/declarationErrors.test.ts b/e2e/__tests__/declarationErrors.test.ts index 55004e6e3c3c..2c5058f0e164 100644 --- a/e2e/__tests__/declarationErrors.test.ts +++ b/e2e/__tests__/declarationErrors.test.ts @@ -17,7 +17,7 @@ it('warns if describe returns a Promise', () => { 'describeReturnPromise.test.js', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(normalizeCircusJasmine(result.stdout)).toMatchSnapshot(); }); @@ -26,14 +26,14 @@ it('warns if describe returns something', () => { 'describeReturnSomething.test.js', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(normalizeCircusJasmine(result.stdout)).toMatchSnapshot(); }); it('errors if describe throws', () => { const result = runJest('declaration-errors', ['describeThrow.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stdout).toBe(''); expect(result.stderr).toContain('whoops'); }); diff --git a/e2e/__tests__/dependencyClash.test.ts b/e2e/__tests__/dependencyClash.test.ts index 419108ace632..cd7140757d04 100644 --- a/e2e/__tests__/dependencyClash.test.ts +++ b/e2e/__tests__/dependencyClash.test.ts @@ -75,11 +75,11 @@ test('does not require project modules from inside node_modules', () => { }; `, }); - const {stderr, status} = runJest(tempDir, ['--no-cache', '--no-watchman']); + const {stderr, exitCode} = runJest(tempDir, ['--no-cache', '--no-watchman']); // make sure there are no errors that lead to invariant.js (if we were to // require a wrong `invariant.js` we'd have a syntax error, because jest // internals wouldn't be able to parse flow annotations) expect(stderr).not.toMatch('invariant'); expect(stderr).toMatch('PASS'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/deprecatedCliOptions.test.ts b/e2e/__tests__/deprecatedCliOptions.test.ts index fff024893970..4334b065dc43 100644 --- a/e2e/__tests__/deprecatedCliOptions.test.ts +++ b/e2e/__tests__/deprecatedCliOptions.test.ts @@ -11,8 +11,8 @@ import runJest from '../runJest'; const dir = path.resolve(__dirname, '../deprecated-cli-options'); it('Prints deprecation warnings for CLI flags', () => { - const {stderr, status} = runJest(dir, ['--mapCoverage']); - expect(status).toBe(0); + const {stderr, exitCode} = runJest(dir, ['--mapCoverage']); + expect(exitCode).toBe(0); expect(stderr).toMatch(/Test Suites: 1 passed, 1 total/); expect(stderr).toMatch(`● Deprecation Warning: diff --git a/e2e/__tests__/each.test.ts b/e2e/__tests__/each.test.ts index 90fff25df8f3..c95245a269de 100644 --- a/e2e/__tests__/each.test.ts +++ b/e2e/__tests__/each.test.ts @@ -14,19 +14,19 @@ const dir = path.resolve(__dirname, '../each'); test('works with passing tests', () => { const result = runJest(dir, ['success.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('shows error message when not enough arguments are supplied to tests', () => { const result = runJest(dir, ['eachException.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); test('shows the correct errors in stderr when failing tests', () => { const result = runJest(dir, ['failure.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const output = extractSummary(result.stderr) .rest.split('\n') .map(line => line.trimRight()) @@ -36,7 +36,7 @@ test('shows the correct errors in stderr when failing tests', () => { test('shows only the tests with .only as being ran', () => { const result = runJest(dir, ['eachOnly.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); @@ -45,19 +45,19 @@ test('shows only the tests without .skip as being ran', () => { const result = runJest(dir, ['eachSkip.test.js']); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('runs only the describe.only.each tests', () => { const result = runJest(dir, ['describeOnly.test.js']); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('formats args with pretty format when given %p', () => { const result = runJest(dir, ['pretty.test.js']); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/emptyDescribeWithHooks.test.ts b/e2e/__tests__/emptyDescribeWithHooks.test.ts index 96cd51ebe862..a0c3b7aff39c 100644 --- a/e2e/__tests__/emptyDescribeWithHooks.test.ts +++ b/e2e/__tests__/emptyDescribeWithHooks.test.ts @@ -16,24 +16,24 @@ skipSuiteOnJasmine(); test('hook in empty describe', () => { const result = runJest(dir, ['hookInEmptyDescribe.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr)).toMatchSnapshot(); }); test('hook in describe with skipped test', () => { const result = runJest(dir, ['hookInDescribeWithSkippedTest.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(extractSummary(result.stderr)).toMatchSnapshot(); }); test('hook in empty nested describe', () => { const result = runJest(dir, ['hookInEmptyNestedDescribe.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr)).toMatchSnapshot(); }); test('multiple hooks in empty describe', () => { const result = runJest(dir, ['multipleHooksInEmptyDescribe.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/emptySuiteError.test.ts b/e2e/__tests__/emptySuiteError.test.ts index 67dbed8d650d..789be229cf24 100644 --- a/e2e/__tests__/emptySuiteError.test.ts +++ b/e2e/__tests__/emptySuiteError.test.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -'use strict'; - import * as path from 'path'; import runJest from '../runJest'; diff --git a/e2e/__tests__/env.test.ts b/e2e/__tests__/env.test.ts index ac849db0a09b..3d7e2193665a 100644 --- a/e2e/__tests__/env.test.ts +++ b/e2e/__tests__/env.test.ts @@ -12,36 +12,36 @@ const getLog = result => result.stdout.split('\n')[1].trim(); describe('Environment override', () => { it('uses jsdom when specified', () => { const result = runJest('env-test', ['--env=jsdom', 'env.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(getLog(result)).toBe('WINDOW'); }); it('uses node as default from package.json', () => { const result = runJest('env-test', ['env.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(getLog(result)).toBe('NO WINDOW'); }); it('uses node when specified', () => { const result = runJest('env-test', ['--env=node', 'env.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(getLog(result)).toBe('NO WINDOW'); }); it('fails when the env is not available', () => { const result = runJest('env-test', ['--env=banana', 'env.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); }); }); describe('Environment equivalent', () => { it('uses jsdom', () => { const result = runJest('env-test', ['--env=jsdom', 'equivalent.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); it('uses node', () => { const result = runJest('env-test', ['--env=node', 'equivalent.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/errorOnDeprecated.test.ts b/e2e/__tests__/errorOnDeprecated.test.ts index 5eae6b117a23..38353f73497b 100644 --- a/e2e/__tests__/errorOnDeprecated.test.ts +++ b/e2e/__tests__/errorOnDeprecated.test.ts @@ -40,7 +40,7 @@ testFiles.forEach(testFile => { testFile, '--errorOnDeprecated', ]); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); let {rest} = extractSummary(result.stderr); if ( @@ -69,6 +69,6 @@ testFiles.forEach(testFile => { test(testName, () => { const result = runJest('error-on-deprecated', [testFile]); - expect(result.status).toBe(shouldPass ? 1 : 0); + expect(result.exitCode).toBe(shouldPass ? 1 : 0); }); }); diff --git a/e2e/__tests__/executeTestsOnceInMpr.ts b/e2e/__tests__/executeTestsOnceInMpr.ts index 756cf9584224..20f4346c51d3 100644 --- a/e2e/__tests__/executeTestsOnceInMpr.ts +++ b/e2e/__tests__/executeTestsOnceInMpr.ts @@ -47,9 +47,9 @@ test('Tests are executed only once even in an MPR', () => { }); /* eslint-enable sort-keys */ - const {stderr, status} = runJest(DIR, ['foo/folder/my-test-bar.js']); + const {stderr, exitCode} = runJest(DIR, ['foo/folder/my-test-bar.js']); - expect(status).toBe(0); + expect(exitCode).toBe(0); const {rest, summary} = extractSummary(stderr); diff --git a/e2e/__tests__/expectAsyncMatcher.test.ts b/e2e/__tests__/expectAsyncMatcher.test.ts index 6df794c3a819..038979f05e28 100644 --- a/e2e/__tests__/expectAsyncMatcher.test.ts +++ b/e2e/__tests__/expectAsyncMatcher.test.ts @@ -18,13 +18,13 @@ beforeAll(() => { test('works with passing tests', () => { const result = runJest(dir, ['success.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('shows the correct errors in stderr when failing tests', () => { const result = runJest(dir, ['failure.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const rest = extractSummary(result.stderr) .rest.split('\n') diff --git a/e2e/__tests__/expectInVm.test.ts b/e2e/__tests__/expectInVm.test.ts index fd34c52e59d5..8074f43b769d 100644 --- a/e2e/__tests__/expectInVm.test.ts +++ b/e2e/__tests__/expectInVm.test.ts @@ -9,5 +9,5 @@ import runJest from '../runJest'; test('expect works correctly with RegExps created inside a VM', () => { const result = runJest('expect-in-vm'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/fakePromises.test.ts b/e2e/__tests__/fakePromises.test.ts index 5a5b78c159f3..61cb548eecb6 100644 --- a/e2e/__tests__/fakePromises.test.ts +++ b/e2e/__tests__/fakePromises.test.ts @@ -10,11 +10,11 @@ import runJest from '../runJest'; describe('Fake promises', () => { it('should be possible to resolve with fake timers using immediates', () => { const result = runJest('fake-promises/immediate'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); it('should be possible to resolve with fake timers using asap', () => { const result = runJest('fake-promises/asap'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/fatalWorkerError.test.ts b/e2e/__tests__/fatalWorkerError.test.ts index 4085a9192e97..566467c8a28d 100644 --- a/e2e/__tests__/fatalWorkerError.test.ts +++ b/e2e/__tests__/fatalWorkerError.test.ts @@ -34,11 +34,11 @@ test('fails a test that terminates the worker with a fatal error', () => { 'package.json': '{}', }); - const {status, stderr} = runJest(DIR, ['--maxWorkers=2']); + const {exitCode, stderr} = runJest(DIR, ['--maxWorkers=2']); const numberOfTestsPassed = (stderr.match(/\bPASS\b/g) || []).length; - expect(status).not.toBe(0); + expect(exitCode).not.toBe(0); expect(numberOfTestsPassed).toBe(Object.keys(testFiles).length - 1); expect(stderr).toContain('FAIL __tests__/fatalWorkerError.test.js'); expect(stderr).toContain('Call retries were exceeded'); diff --git a/e2e/__tests__/filter.test.ts b/e2e/__tests__/filter.test.ts index 32253ab77ed2..4b1edce2cd01 100644 --- a/e2e/__tests__/filter.test.ts +++ b/e2e/__tests__/filter.test.ts @@ -11,7 +11,7 @@ describe('Dynamic test filtering', () => { it('uses the default JSON option', () => { const result = runJest('filter', []); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(result.stderr).toContain('1 total'); }); @@ -20,7 +20,7 @@ describe('Dynamic test filtering', () => { '--filter=/my-secondary-filter.js', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(result.stderr).toContain('1 total'); }); @@ -30,7 +30,7 @@ describe('Dynamic test filtering', () => { '--skipFilter', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(result.stderr).toContain('2 total'); }); @@ -39,7 +39,7 @@ describe('Dynamic test filtering', () => { '--filter=/my-clowny-filter.js', ]); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stderr).toContain('did not return a valid test list'); expect(result.stderr).toContain('my-clowny-filter'); }); @@ -47,7 +47,7 @@ describe('Dynamic test filtering', () => { it('will call setup on filter before filtering', () => { const result = runJest('filter', ['--filter=/my-setup-filter.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(result.stderr).toContain('1 total'); }); @@ -56,7 +56,7 @@ describe('Dynamic test filtering', () => { '--filter=/my-broken-filter.js', ]); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stderr).toContain('Error: My broken filter error.'); }); @@ -65,7 +65,7 @@ describe('Dynamic test filtering', () => { '--filter=/my-broken-setup-filter.js', ]); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.stderr).toContain('Error: My broken setup filter error.'); }); }); diff --git a/e2e/__tests__/generatorMock.test.ts b/e2e/__tests__/generatorMock.test.ts index 58a3fb1c7f2c..74d08b89666b 100644 --- a/e2e/__tests__/generatorMock.test.ts +++ b/e2e/__tests__/generatorMock.test.ts @@ -8,7 +8,7 @@ import runJest from '../runJest'; test('mock works with generator', () => { - const {status} = runJest('generator-mock'); + const {exitCode} = runJest('generator-mock'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/globalSetup.test.ts b/e2e/__tests__/globalSetup.test.ts index adb0826dd99a..8e9a582f2ea7 100644 --- a/e2e/__tests__/globalSetup.test.ts +++ b/e2e/__tests__/globalSetup.test.ts @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -'use strict'; import * as fs from 'fs'; import {tmpdir} from 'os'; @@ -48,7 +47,7 @@ test('globalSetup is triggered once before all test suites', () => { `--testPathPattern=__tests__`, ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const files = fs.readdirSync(DIR); expect(files).toHaveLength(1); const setup = fs.readFileSync(path.join(DIR, files[0]), 'utf8'); @@ -57,12 +56,12 @@ test('globalSetup is triggered once before all test suites', () => { test('jest throws an error when globalSetup does not export a function', () => { const setupPath = path.resolve(__dirname, '../global-setup/invalidSetup.js'); - const {status, stderr} = runJest(e2eDir, [ + const {exitCode, stderr} = runJest(e2eDir, [ `--globalSetup=${setupPath}`, `--testPathPattern=__tests__`, ]); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch( `TypeError: globalSetup file must export a function at ${setupPath}`, ); @@ -86,7 +85,7 @@ test('should call globalSetup function of multiple projects', () => { const result = runWithJson(e2eDir, [`--config=${configPath}`]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(fs.existsSync(DIR)).toBe(true); expect(fs.existsSync(project1DIR)).toBe(true); @@ -101,7 +100,7 @@ test('should not call a globalSetup of a project if there are no tests to run fr '--testPathPattern=project-1', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(fs.existsSync(DIR)).toBe(true); expect(fs.existsSync(project1DIR)).toBe(true); @@ -117,7 +116,7 @@ test('should not call any globalSetup if there are no tests to run', () => { '--onlyChanged', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(fs.existsSync(DIR)).toBe(false); expect(fs.existsSync(project1DIR)).toBe(false); @@ -140,25 +139,25 @@ test('globalSetup works with default export', () => { test('globalSetup throws with named export', () => { const setupPath = path.resolve(e2eDir, 'invalidSetupWithNamedExport.js'); - const {status, stderr} = runJest(e2eDir, [ + const {exitCode, stderr} = runJest(e2eDir, [ `--globalSetup=${setupPath}`, `--testPathPattern=__tests__`, ]); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch( `TypeError: globalSetup file must export a function at ${setupPath}`, ); }); test('should not transpile the transformer', () => { - const {status} = runJest('global-setup-custom-transform', [`--no-cache`]); + const {exitCode} = runJest('global-setup-custom-transform', [`--no-cache`]); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('should transform node_modules if configured by transformIgnorePatterns', () => { - const {status} = runJest('global-setup-node-modules', [`--no-cache`]); + const {exitCode} = runJest('global-setup-node-modules', [`--no-cache`]); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/globalTeardown.test.ts b/e2e/__tests__/globalTeardown.test.ts index 6f9f9d81dd5d..b05d94cfabcd 100644 --- a/e2e/__tests__/globalTeardown.test.ts +++ b/e2e/__tests__/globalTeardown.test.ts @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -'use strict'; import * as fs from 'fs'; import {tmpdir} from 'os'; @@ -41,7 +40,7 @@ test('globalTeardown is triggered once after all test suites', () => { `--testPathPattern=__tests__`, ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const files = fs.readdirSync(DIR); expect(files).toHaveLength(1); const teardown = fs.readFileSync(path.join(DIR, files[0]), 'utf8'); @@ -50,12 +49,12 @@ test('globalTeardown is triggered once after all test suites', () => { test('jest throws an error when globalTeardown does not export a function', () => { const teardownPath = path.resolve(e2eDir, 'invalidTeardown.js'); - const {status, stderr} = runJest(e2eDir, [ + const {exitCode, stderr} = runJest(e2eDir, [ `--globalTeardown=${teardownPath}`, `--testPathPattern=__tests__`, ]); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch( `TypeError: globalTeardown file must export a function at ${teardownPath}`, ); @@ -79,7 +78,7 @@ test('should call globalTeardown function of multiple projects', () => { const result = runWithJson('global-teardown', [`--config=${configPath}`]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(fs.existsSync(DIR)).toBe(true); expect(fs.existsSync(project1DIR)).toBe(true); @@ -94,7 +93,7 @@ test('should not call a globalTeardown of a project if there are no tests to run '--testPathPattern=project-1', ]); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(fs.existsSync(DIR)).toBe(true); expect(fs.existsSync(project1DIR)).toBe(true); @@ -120,12 +119,12 @@ test('globalTeardown throws with named export', () => { 'invalidTeardownWithNamedExport.js', ); - const {status, stderr} = runJest(e2eDir, [ + const {exitCode, stderr} = runJest(e2eDir, [ `--globalTeardown=${teardownPath}`, `--testPathPattern=__tests__`, ]); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch( `TypeError: globalTeardown file must export a function at ${teardownPath}`, ); diff --git a/e2e/__tests__/globals.test.ts b/e2e/__tests__/globals.test.ts index fd007a8e1235..151da4e06418 100644 --- a/e2e/__tests__/globals.test.ts +++ b/e2e/__tests__/globals.test.ts @@ -44,8 +44,8 @@ test('basic test constructs', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR); - expect(status).toBe(0); + const {stderr, exitCode} = runJest(DIR); + expect(exitCode).toBe(0); const {summary, rest} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); @@ -75,12 +75,12 @@ test('skips', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR); + const {stderr, exitCode} = runJest(DIR); const {summary, rest} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('only', () => { @@ -105,8 +105,8 @@ test('only', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR); - expect(status).toBe(0); + const {stderr, exitCode} = runJest(DIR); + expect(exitCode).toBe(0); const {summary, rest} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); @@ -120,8 +120,8 @@ test('cannot have describe with no implementation', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR); - expect(status).toBe(1); + const {stderr, exitCode} = runJest(DIR); + expect(exitCode).toBe(1); const rest = cleanStderr(stderr); const {summary} = extractSummary(stderr); @@ -138,8 +138,8 @@ test('cannot test with no implementation', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR); - expect(status).toBe(1); + const {stderr, exitCode} = runJest(DIR); + expect(exitCode).toBe(1); const {summary} = extractSummary(stderr); expect(wrap(cleanStderr(stderr))).toMatchSnapshot(); @@ -169,8 +169,8 @@ test('skips with expand arg', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR, ['--expand']); - expect(status).toBe(0); + const {stderr, exitCode} = runJest(DIR, ['--expand']); + expect(exitCode).toBe(0); const {summary, rest} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); @@ -199,8 +199,8 @@ test('only with expand arg', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR, ['--expand']); - expect(status).toBe(0); + const {stderr, exitCode} = runJest(DIR, ['--expand']); + expect(exitCode).toBe(0); const {summary, rest} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); @@ -216,8 +216,8 @@ test('cannot test with no implementation with expand arg', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR, ['--expand']); - expect(status).toBe(1); + const {stderr, exitCode} = runJest(DIR, ['--expand']); + expect(exitCode).toBe(1); const {summary} = extractSummary(stderr); expect(wrap(cleanStderr(stderr))).toMatchSnapshot(); @@ -234,8 +234,8 @@ test('function as descriptor', () => { `; writeFiles(TEST_DIR, {[filename]: content}); - const {stderr, status} = runJest(DIR); - expect(status).toBe(0); + const {stderr, exitCode} = runJest(DIR); + expect(exitCode).toBe(0); const {summary, rest} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); diff --git a/e2e/__tests__/jasmineAsync.test.ts b/e2e/__tests__/jasmineAsync.test.ts index 28b4aa827d0d..fb869f65cd06 100644 --- a/e2e/__tests__/jasmineAsync.test.ts +++ b/e2e/__tests__/jasmineAsync.test.ts @@ -9,8 +9,7 @@ import runJest, {json as runWithJson} from '../runJest'; describe('async jasmine', () => { it('works with beforeAll', () => { - const result = runWithJson('jasmine-async', ['promiseBeforeAll.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['promiseBeforeAll.test.js']); expect(json.numTotalTests).toBe(4); expect(json.numPassedTests).toBe(1); @@ -25,8 +24,7 @@ describe('async jasmine', () => { }); it('works with beforeEach', () => { - const result = runWithJson('jasmine-async', ['promiseBeforeEach.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['promiseBeforeEach.test.js']); expect(json.numTotalTests).toBe(3); expect(json.numPassedTests).toBe(1); @@ -40,7 +38,7 @@ describe('async jasmine', () => { it('works with afterAll', () => { const result = runWithJson('jasmine-async', ['promiseAfterAll.test.js']); - const json = result.json; + const {json} = result; expect(json.numTotalTests).toBe(2); expect(json.numPassedTests).toBe(2); @@ -52,8 +50,7 @@ describe('async jasmine', () => { }); it('works with afterEach', () => { - const result = runWithJson('jasmine-async', ['promiseAfterEach.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['promiseAfterEach.test.js']); expect(json.numTotalTests).toBe(2); expect(json.numPassedTests).toBe(2); @@ -63,8 +60,7 @@ describe('async jasmine', () => { }); it('works with fit', () => { - const result = runWithJson('jasmine-async', ['promiseFit.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['promiseFit.test.js']); expect(json.numTotalTests).toBe(3); expect(json.numPassedTests).toBe(1); @@ -74,8 +70,7 @@ describe('async jasmine', () => { }); it('works with xit', () => { - const result = runWithJson('jasmine-async', ['promiseXit.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['promiseXit.test.js']); expect(json.numTotalTests).toBe(2); expect(json.numPassedTests).toBe(1); @@ -84,8 +79,7 @@ describe('async jasmine', () => { }); it('throws when not a promise is returned', () => { - const result = runWithJson('jasmine-async', ['returningValues.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['returningValues.test.js']); expect(json.numTotalTests).toBe(11); expect(json.numPassedTests).toBe(0); @@ -94,8 +88,7 @@ describe('async jasmine', () => { }); it('tests async promise code', () => { - const result = runWithJson('jasmine-async', ['promiseIt.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['promiseIt.test.js']); const message = json.testResults[0].message; expect(json.numTotalTests).toBe(16); @@ -114,8 +107,7 @@ describe('async jasmine', () => { }); it('works with concurrent', () => { - const result = runWithJson('jasmine-async', ['concurrent.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['concurrent.test.js']); expect(json.numTotalTests).toBe(4); expect(json.numPassedTests).toBe(2); expect(json.numFailedTests).toBe(1); @@ -124,8 +116,7 @@ describe('async jasmine', () => { }); it("doesn't execute more than 5 tests simultaneously", () => { - const result = runWithJson('jasmine-async', ['concurrent-many.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['concurrent-many.test.js']); expect(json.numTotalTests).toBe(10); expect(json.numPassedTests).toBe(10); expect(json.numFailedTests).toBe(0); @@ -135,7 +126,7 @@ describe('async jasmine', () => { it('async test fails', () => { const result = runWithJson('jasmine-async', ['asyncTestFails.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(result.json.testResults[0].message).toEqual( expect.stringContaining('Received:'), ); @@ -144,6 +135,6 @@ describe('async jasmine', () => { it('generator test', () => { const result = runJest('jasmine-async', ['generator.test.js']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts b/e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts index cd9bfc37b89c..bfa23463e04b 100644 --- a/e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts +++ b/e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts @@ -12,8 +12,7 @@ describe('async jasmine with pending during test', () => { skipSuiteOnJestCircus(); it('should be reported as a pending test', () => { - const result = runWithJson('jasmine-async', ['pendingInPromise.test.js']); - const json = result.json; + const {json} = runWithJson('jasmine-async', ['pendingInPromise.test.js']); expect(json.numTotalTests).toBe(1); expect(json.numPassedTests).toBe(0); diff --git a/e2e/__tests__/jest.config.js.test.ts b/e2e/__tests__/jest.config.js.test.ts index 054fb46997ee..5fd47a0ba1c9 100644 --- a/e2e/__tests__/jest.config.js.test.ts +++ b/e2e/__tests__/jest.config.js.test.ts @@ -22,9 +22,9 @@ test('works with jest.config.js', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); const {rest, summary} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); }); @@ -41,7 +41,7 @@ test('traverses directory tree up until it finds jest.config', () => { 'some/nested/directory/file.js': '// nothing special', }); - const {stderr, status, stdout} = runJest( + const {stderr, exitCode, stdout} = runJest( path.join(DIR, 'some', 'nested', 'directory'), ['-w=1', '--ci=false'], {skipPkgJsonCheck: true}, @@ -53,7 +53,7 @@ test('traverses directory tree up until it finds jest.config', () => { ).toMatchSnapshot(); const {rest, summary} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); }); @@ -65,7 +65,7 @@ test('invalid JS in jest.config.js', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); expect(stderr).toMatch('SyntaxError: '); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); diff --git a/e2e/__tests__/jestChangedFiles.test.ts b/e2e/__tests__/jestChangedFiles.test.ts index 817f6f1f5fff..8d8c2b73aba3 100644 --- a/e2e/__tests__/jestChangedFiles.test.ts +++ b/e2e/__tests__/jestChangedFiles.test.ts @@ -254,9 +254,9 @@ test('handles a bad revision for "changedSince", for git', async () => { run(`${GIT} add .`, DIR); run(`${GIT} commit --no-gpg-sign -m "first"`, DIR); - const {status, stderr} = runJest(DIR, ['--changedSince=blablabla']); + const {exitCode, stderr} = runJest(DIR, ['--changedSince=blablabla']); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(stderr)).toMatchSnapshot(); }); @@ -406,8 +406,8 @@ test('handles a bad revision for "changedSince", for hg', async () => { run(`${HG} add .`, DIR); run(`${HG} commit -m "first"`, DIR); - const {status, stderr} = runJest(DIR, ['--changedSince=blablabla']); + const {exitCode, stderr} = runJest(DIR, ['--changedSince=blablabla']); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(stderr)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/jsonReporter.test.ts b/e2e/__tests__/jsonReporter.test.ts index 5e49c52ed764..0f8c9068d687 100644 --- a/e2e/__tests__/jsonReporter.test.ts +++ b/e2e/__tests__/jsonReporter.test.ts @@ -66,7 +66,7 @@ describe('JSON Reporter', () => { let jsonResult; expect(result.stderr).toMatch(/1 failed, 2 passed/); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); try { jsonResult = JSON.parse(result.stdout); diff --git a/e2e/__tests__/lifecycles.ts b/e2e/__tests__/lifecycles.ts index 75a96cd6ebc6..443ce6310e40 100644 --- a/e2e/__tests__/lifecycles.ts +++ b/e2e/__tests__/lifecycles.ts @@ -8,7 +8,7 @@ import runJest from '../runJest'; test('suite with invalid assertions in afterAll', () => { - const {stderr, status} = runJest('lifecycles'); + const {stderr, exitCode} = runJest('lifecycles'); expect(stderr).toMatch(/afterAll just failed!/); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); diff --git a/e2e/__tests__/listTests.test.ts b/e2e/__tests__/listTests.test.ts index 1d9292a41967..6de9620c52a1 100644 --- a/e2e/__tests__/listTests.test.ts +++ b/e2e/__tests__/listTests.test.ts @@ -20,9 +20,9 @@ const normalizePaths = rawPaths => describe('--listTests flag', () => { it('causes tests to be printed in different lines', () => { - const {status, stdout} = runJest('list-tests', ['--listTests']); + const {exitCode, stdout} = runJest('list-tests', ['--listTests']); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect( wrap( normalizePaths(stdout) @@ -34,9 +34,9 @@ describe('--listTests flag', () => { }); it('causes tests to be printed out as JSON when using the --json flag', () => { - const {status, stdout} = runJest('list-tests', ['--listTests', '--json']); + const {exitCode, stdout} = runJest('list-tests', ['--listTests', '--json']); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(() => JSON.parse(stdout)).not.toThrow(); expect( wrap( diff --git a/e2e/__tests__/mockNames.test.ts b/e2e/__tests__/mockNames.test.ts index 8328fea04a73..3fe772792966 100644 --- a/e2e/__tests__/mockNames.test.ts +++ b/e2e/__tests__/mockNames.test.ts @@ -8,57 +8,65 @@ import runJest from '../runJest'; test('suite without mock name, mock called', () => { - const {stderr, status} = runJest('mock-names/without-mock-name'); + const {stderr, exitCode} = runJest('mock-names/without-mock-name'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stderr).toMatch(/PASS/); }); test('suite without mock name, mock not called', () => { - const {stderr, status} = runJest('mock-names/without-mock-name-not-called'); + const {stderr, exitCode} = runJest('mock-names/without-mock-name-not-called'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/expect\(jest\.fn\(\)\)\.toHaveBeenCalled/); }); test('suite with mock name, expect mock not called', () => { - const {stderr, status} = runJest('mock-names/with-mock-name-not-called-pass'); + const {stderr, exitCode} = runJest( + 'mock-names/with-mock-name-not-called-pass', + ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stderr).toMatch(/PASS/); }); test('suite with mock name, mock called, expect fail', () => { - const {stderr, status} = runJest('mock-names/with-mock-name-not-called-fail'); + const {stderr, exitCode} = runJest( + 'mock-names/with-mock-name-not-called-fail', + ); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/expect\(myMockedFunction\)\.not\.toHaveBeenCalled/); }); test('suite with mock name, mock called 5 times', () => { - const {stderr, status} = runJest('mock-names/with-mock-name-call-times-pass'); + const {stderr, exitCode} = runJest( + 'mock-names/with-mock-name-call-times-pass', + ); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stderr).toMatch(/PASS/); }); test('suite with mock name, mock not called 5 times, expect fail', () => { - const {stderr, status} = runJest('mock-names/with-mock-name-call-times-fail'); + const {stderr, exitCode} = runJest( + 'mock-names/with-mock-name-call-times-fail', + ); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/expect\(myMockedFunction\)\.toHaveBeenCalledTimes/); }); test('suite with mock name, mock called', () => { - const {stderr, status} = runJest('mock-names/with-mock-name'); + const {stderr, exitCode} = runJest('mock-names/with-mock-name'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(stderr).toMatch(/PASS/); }); test('suite with mock name, mock not called', () => { - const {stderr, status} = runJest('mock-names/with-mock-name-not-called'); + const {stderr, exitCode} = runJest('mock-names/with-mock-name-not-called'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/expect\(myMockedFunction\)\.toHaveBeenCalled/); }); diff --git a/e2e/__tests__/moduleNameMapper.test.ts b/e2e/__tests__/moduleNameMapper.test.ts index a4186a3453f2..75b5f355ed25 100644 --- a/e2e/__tests__/moduleNameMapper.test.ts +++ b/e2e/__tests__/moduleNameMapper.test.ts @@ -10,20 +10,20 @@ import runJest, {json as runWithJson} from '../runJest'; import {extractSummary} from '../Utils'; test('moduleNameMapper wrong configuration', () => { - const {stderr, status} = runJest('module-name-mapper-wrong-config'); + const {stderr, exitCode} = runJest('module-name-mapper-wrong-config'); const {rest} = extractSummary(stderr); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(rest)).toMatchSnapshot(); }); test('moduleNameMapper correct configuration', () => { - const {stderr, status} = runJest('module-name-mapper-correct-config', [], { + const {stderr, exitCode} = runJest('module-name-mapper-correct-config', [], { stripAnsi: true, }); const {rest} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(rest)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/moduleParentNullInTest.ts b/e2e/__tests__/moduleParentNullInTest.ts index 9b53ef0bd766..1d77aba5841e 100644 --- a/e2e/__tests__/moduleParentNullInTest.ts +++ b/e2e/__tests__/moduleParentNullInTest.ts @@ -8,7 +8,7 @@ import runJest from '../runJest'; test('module.parent should be null in test files', () => { - const {status} = runJest('module-parent-null-in-test'); + const {exitCode} = runJest('module-parent-null-in-test'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/multiProjectRunner.test.ts b/e2e/__tests__/multiProjectRunner.test.ts index e67545705f19..77b2a374ccd0 100644 --- a/e2e/__tests__/multiProjectRunner.test.ts +++ b/e2e/__tests__/multiProjectRunner.test.ts @@ -198,11 +198,11 @@ test.each([{projectPath: 'packages/somepackage'}, {projectPath: 'packages/*'}])( `, }); - const {stdout, stderr, status} = runJest(DIR, ['--no-watchman']); + const {stdout, stderr, exitCode} = runJest(DIR, ['--no-watchman']); expect(stderr).toContain('PASS packages/somepackage/test.js'); expect(stderr).toContain('Test Suites: 1 passed, 1 total'); expect(stdout).toEqual(''); - expect(status).toEqual(0); + expect(exitCode).toEqual(0); }, ); @@ -229,14 +229,14 @@ test('projects can be workspaces with non-JS/JSON files', () => { 'packages/project2/package.json': '{}', }); - const {status, stdout, stderr} = runJest(DIR, ['--no-watchman']); + const {exitCode, stdout, stderr} = runJest(DIR, ['--no-watchman']); expect(stderr).toContain('Test Suites: 2 passed, 2 total'); expect(stderr).toContain('PASS packages/project1/__tests__/file1.test.js'); expect(stderr).toContain('PASS packages/project2/__tests__/file2.test.js'); expect(stderr).toContain('Ran all test suites in 2 projects.'); expect(stdout).toEqual(''); - expect(status).toEqual(0); + expect(exitCode).toEqual(0); }); test('objects in project configuration', () => { @@ -256,13 +256,13 @@ test('objects in project configuration', () => { 'package.json': '{}', }); - const {stdout, stderr, status} = runJest(DIR, ['--no-watchman']); + const {stdout, stderr, exitCode} = runJest(DIR, ['--no-watchman']); expect(stderr).toContain('Test Suites: 2 passed, 2 total'); expect(stderr).toContain('PASS __tests__/file1.test.js'); expect(stderr).toContain('PASS __tests__/file2.test.js'); expect(stderr).toContain('Ran all test suites in 2 projects.'); expect(stdout).toEqual(''); - expect(status).toEqual(0); + expect(exitCode).toEqual(0); }); test('allows a single project', () => { @@ -278,11 +278,11 @@ test('allows a single project', () => { 'package.json': '{}', }); - const {stdout, stderr, status} = runJest(DIR, ['--no-watchman']); + const {stdout, stderr, exitCode} = runJest(DIR, ['--no-watchman']); expect(stderr).toContain('PASS __tests__/file1.test.js'); expect(stderr).toContain('Test Suites: 1 passed, 1 total'); expect(stdout).toEqual(''); - expect(status).toEqual(0); + expect(exitCode).toEqual(0); }); test('resolves projects and their properly', () => { diff --git a/e2e/__tests__/nestedEventLoop.test.ts b/e2e/__tests__/nestedEventLoop.test.ts index dd4e386f5212..c1eb32168042 100644 --- a/e2e/__tests__/nestedEventLoop.test.ts +++ b/e2e/__tests__/nestedEventLoop.test.ts @@ -9,5 +9,5 @@ import runJest from '../runJest'; test('works with nested event loops', () => { const result = runJest('nested-event-loop'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/noTestsFound.test.ts b/e2e/__tests__/noTestsFound.test.ts index ac5676c12de0..1e48a204a5b6 100644 --- a/e2e/__tests__/noTestsFound.test.ts +++ b/e2e/__tests__/noTestsFound.test.ts @@ -12,50 +12,50 @@ const DIR = path.resolve(__dirname, '../no-tests-found-test'); describe('No tests are found', () => { test('fails the test suite in standard situation', () => { - const {status, stdout} = runJest(DIR, [ + const {exitCode, stdout} = runJest(DIR, [ '--testPathPattern', '/non/existing/path/', ]); expect(stdout).toMatch('No tests found'); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); test("doesn't fail the test suite if --passWithNoTests passed", () => { - const {status, stdout} = runJest(DIR, [ + const {exitCode, stdout} = runJest(DIR, [ '--testPathPattern', '/non/existing/path/', '--passWithNoTests', ]); expect(stdout).toMatch('No tests found'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test("doesn't fail the test suite if using --lastCommit", () => { // Since there are no files in DIR no tests will be found - const {status, stdout} = runJest(DIR, ['--lastCommit']); + const {exitCode, stdout} = runJest(DIR, ['--lastCommit']); expect(stdout).toMatch('No tests found'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test("doesn't fail the test suite if using --onlyChanged", () => { // Since there are no files in DIR no tests will be found - const {status, stdout} = runJest(DIR, ['--onlyChanged']); + const {exitCode, stdout} = runJest(DIR, ['--onlyChanged']); expect(stdout).toMatch('No tests found'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test("doesn't fail the test suite if using --findRelatedTests", () => { // Since there are no files in DIR no tests will be found - const {status, stdout} = runJest(DIR, [ + const {exitCode, stdout} = runJest(DIR, [ '--findRelatedTests', '/non/existing/path', ]); expect(stdout).toMatch('No tests found'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/nodePath.test.ts b/e2e/__tests__/nodePath.test.ts index 7afa0856be26..8c3bbe8d2b8a 100644 --- a/e2e/__tests__/nodePath.test.ts +++ b/e2e/__tests__/nodePath.test.ts @@ -11,5 +11,5 @@ test('supports NODE_PATH', () => { const result = runJest('node-path', [], { nodePath: ['../node-path/src'], }); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/onlyChanged.test.ts b/e2e/__tests__/onlyChanged.test.ts index 5bcc4ff6a0b0..3a7ff38da596 100644 --- a/e2e/__tests__/onlyChanged.test.ts +++ b/e2e/__tests__/onlyChanged.test.ts @@ -153,12 +153,12 @@ test('do not pickup non-tested files when reporting coverage on only changed fil 'package.json': JSON.stringify({name: 'new name'}), }); - const {stderr, stdout, status} = runJest(DIR, ['-o', '--coverage']); + const {stderr, stdout, exitCode} = runJest(DIR, ['-o', '--coverage']); expect(stderr).toEqual( expect.not.stringContaining('Failed to collect coverage from'), ); expect(stdout).toEqual(expect.not.stringContaining('package.json')); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('collect test coverage when using onlyChanged', () => { @@ -180,11 +180,11 @@ test('collect test coverage when using onlyChanged', () => { 'b.test.js': 'it("passes", () => {expect(1).toBe(1)})', }); - const {stderr, status} = runJest(DIR, ['-o', '--coverage']); + const {stderr, exitCode} = runJest(DIR, ['-o', '--coverage']); expect(stderr).toEqual( expect.not.stringContaining('Failed to collect coverage from'), ); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('onlyChanged in config is overwritten by --all or testPathPattern', () => { diff --git a/e2e/__tests__/presets.test.ts b/e2e/__tests__/presets.test.ts index 60b5596c3d8f..17029ef349d5 100644 --- a/e2e/__tests__/presets.test.ts +++ b/e2e/__tests__/presets.test.ts @@ -9,10 +9,10 @@ import runJest from '../runJest'; test('supports json preset', () => { const result = runJest('presets/json'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('supports js preset', () => { const result = runJest('presets/js'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/promiseReject.test.ts b/e2e/__tests__/promiseReject.test.ts index 831871a9074d..c4306efc67c7 100644 --- a/e2e/__tests__/promiseReject.test.ts +++ b/e2e/__tests__/promiseReject.test.ts @@ -23,8 +23,8 @@ test('', () => { }); `, }); - const {stdout, stderr, status} = runJest(DIR); + const {stdout, stderr, exitCode} = runJest(DIR); expect(stdout).toBe(''); expect(stderr).toMatch(/(Failed|thrown): null/); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); diff --git a/e2e/__tests__/resetModules.test.ts b/e2e/__tests__/resetModules.test.ts index 8a3e358ee8ae..cb71f32dec9a 100644 --- a/e2e/__tests__/resetModules.test.ts +++ b/e2e/__tests__/resetModules.test.ts @@ -9,5 +9,5 @@ import runJest from '../runJest'; test('jest.resetModules should not error when _isMockFunction is defined but not boolean', () => { const result = runJest('reset-modules'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/resolve.test.ts b/e2e/__tests__/resolve.test.ts index 77e0ab311e5c..543c16a06253 100644 --- a/e2e/__tests__/resolve.test.ts +++ b/e2e/__tests__/resolve.test.ts @@ -9,5 +9,5 @@ import runJest from '../runJest'; test('resolve platform modules', () => { const result = runJest('resolve'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/resolveGetPaths.test.ts b/e2e/__tests__/resolveGetPaths.test.ts index c868c1871d74..f0bea396de0a 100644 --- a/e2e/__tests__/resolveGetPaths.test.ts +++ b/e2e/__tests__/resolveGetPaths.test.ts @@ -8,6 +8,6 @@ import runJest from '../runJest'; test('require.resolve.paths', () => { - const {status} = runJest('resolve-get-paths'); - expect(status).toBe(0); + const {exitCode} = runJest('resolve-get-paths'); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/resolveNoFileExtensions.test.ts b/e2e/__tests__/resolveNoFileExtensions.test.ts index 943640fecc3c..824eef1bf8c9 100644 --- a/e2e/__tests__/resolveNoFileExtensions.test.ts +++ b/e2e/__tests__/resolveNoFileExtensions.test.ts @@ -16,10 +16,10 @@ beforeEach(() => cleanup(DIR)); afterAll(() => cleanup(DIR)); test('show error message with matching files', () => { - const {status, stderr} = runJest('resolve-no-extensions'); + const {exitCode, stderr} = runJest('resolve-no-extensions'); const {rest} = extractSummary(stderr); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(rest)).toMatchSnapshot(); }); @@ -44,8 +44,8 @@ test('show error message when no js moduleFileExtensions', () => { `, }); - const {status, stderr} = runJest('resolve-no-extensions-no-js'); + const {exitCode, stderr} = runJest('resolve-no-extensions-no-js'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(stderr)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/resolveNodeModule.test.ts b/e2e/__tests__/resolveNodeModule.test.ts index 40dfcc87ef30..bfa5a1f6d1b7 100644 --- a/e2e/__tests__/resolveNodeModule.test.ts +++ b/e2e/__tests__/resolveNodeModule.test.ts @@ -9,5 +9,5 @@ import runJest from '../runJest'; test('resolve node module', () => { const result = runJest('resolve-node-module'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/resolveWithPaths.test.ts b/e2e/__tests__/resolveWithPaths.test.ts index 670c05960646..58e47e4e9285 100644 --- a/e2e/__tests__/resolveWithPaths.test.ts +++ b/e2e/__tests__/resolveWithPaths.test.ts @@ -27,6 +27,6 @@ afterAll(() => { }); test('require.resolve with paths', () => { - const {status} = runJest('resolve-with-paths'); - expect(status).toBe(0); + const {exitCode} = runJest('resolve-with-paths'); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/setImmediate.test.ts b/e2e/__tests__/setImmediate.test.ts index ea17d5f33682..1b5b9bb891af 100644 --- a/e2e/__tests__/setImmediate.test.ts +++ b/e2e/__tests__/setImmediate.test.ts @@ -11,5 +11,5 @@ test('setImmediate', () => { const result = runJest('set-immediate', ['--verbose']); expect(result.stderr).toMatch('setImmediate test'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/setupFilesAfterEnvConfig.test.ts b/e2e/__tests__/setupFilesAfterEnvConfig.test.ts index 0d6e0b4d301e..a5955368e2a1 100644 --- a/e2e/__tests__/setupFilesAfterEnvConfig.test.ts +++ b/e2e/__tests__/setupFilesAfterEnvConfig.test.ts @@ -41,7 +41,7 @@ describe('setupFilesAfterEnv', () => { expect(result.json.numTotalTests).toBe(2); expect(result.json.numPassedTests).toBe(2); expect(result.json.testResults.length).toBe(2); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); it('requires setup files *after* the test runners are required', () => { @@ -62,6 +62,6 @@ describe('setupFilesAfterEnv', () => { expect(result.json.numTotalTests).toBe(1); expect(result.json.numPassedTests).toBe(1); expect(result.json.testResults.length).toBe(1); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/snapshot-unknown.test.ts b/e2e/__tests__/snapshot-unknown.test.ts index b1697cae7077..6cd2748de52b 100644 --- a/e2e/__tests__/snapshot-unknown.test.ts +++ b/e2e/__tests__/snapshot-unknown.test.ts @@ -15,6 +15,6 @@ describe('Snapshot serializers', () => { expect(stderr).toMatch('2 snapshot files obsolete'); expect(stderr).toMatch('__tests__/__snapshots__/fails.test.js.snap'); expect(stderr).toMatch('__tests__/__snapshots__/fails2.test.js.snap'); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); }); }); diff --git a/e2e/__tests__/snapshot.test.ts b/e2e/__tests__/snapshot.test.ts index 1cdc33c9a206..7cda913f7c44 100644 --- a/e2e/__tests__/snapshot.test.ts +++ b/e2e/__tests__/snapshot.test.ts @@ -56,7 +56,7 @@ const snapshotEscapeSubstitutionFile = path.resolve( const initialTestData = fs.readFileSync(snapshotEscapeTestFile, 'utf8'); -const fileExists = filePath => { +const fileExists = (filePath: string) => { try { return fs.statSync(filePath).isFile(); } catch (e) {} @@ -98,22 +98,24 @@ describe('Snapshot', () => { afterAll(cleanup); it('stores new snapshots on the first run', () => { - const result = runWithJson('snapshot', ['-w=1', '--ci=false']); - const json = result.json; + const {exitCode, json, stderr} = runWithJson('snapshot', [ + '-w=1', + '--ci=false', + ]); expect(json.numTotalTests).toBe(5); expect(json.numPassedTests).toBe(5); expect(json.numFailedTests).toBe(0); expect(json.numPendingTests).toBe(0); - expect(result.status).toBe(0); + expect(exitCode).toBe(0); const content = require(snapshotFile); expect( content['snapshot is not influenced by previous counter 1'], ).not.toBeUndefined(); - expect(result.stderr).toMatch('5 snapshots written from 2 test suites'); - expect(wrap(extractSummary(result.stderr).summary)).toMatchSnapshot(); + expect(stderr).toMatch('5 snapshots written from 2 test suites'); + expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); }); it('works with escaped characters', () => { @@ -126,7 +128,7 @@ describe('Snapshot', () => { let stderr = result.stderr; expect(stderr).toMatch('1 snapshot written'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); // Write the second snapshot @@ -146,7 +148,7 @@ describe('Snapshot', () => { expect(stderr).toMatch('1 snapshot written'); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); // Now let's check again if everything still passes. // If this test doesn't pass, some snapshot data was not properly escaped. @@ -159,7 +161,7 @@ describe('Snapshot', () => { expect(stderr).not.toMatch('Snapshot Summary'); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); it('works with escaped regex', () => { @@ -172,7 +174,7 @@ describe('Snapshot', () => { let stderr = result.stderr; expect(stderr).toMatch('2 snapshots written from 1 test suite.'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); result = runJest('snapshot-escape', [ @@ -186,7 +188,7 @@ describe('Snapshot', () => { // indicate that the snapshot couldn't be loaded properly. expect(stderr).not.toMatch('Snapshot Summary'); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); it('works with template literal substitutions', () => { @@ -199,7 +201,7 @@ describe('Snapshot', () => { let stderr = result.stderr; expect(stderr).toMatch('1 snapshot written'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); result = runJest('snapshot-escape', [ @@ -213,7 +215,7 @@ describe('Snapshot', () => { // indicate that the snapshot couldn't be loaded properly. expect(stderr).not.toMatch('1 snapshot written'); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); describe('Validation', () => { diff --git a/e2e/__tests__/snapshotMockFs.test.ts b/e2e/__tests__/snapshotMockFs.test.ts index 8ac6c27cef6c..a10cedf5e2aa 100644 --- a/e2e/__tests__/snapshotMockFs.test.ts +++ b/e2e/__tests__/snapshotMockFs.test.ts @@ -19,9 +19,9 @@ beforeEach(() => rimraf.sync(snapshotDir)); afterAll(() => rimraf.sync(snapshotDir)); test('store snapshot even if fs is mocked', () => { - const {json, status, stderr} = runJestJson(DIR, ['--ci=false']); + const {json, exitCode, stderr} = runJestJson(DIR, ['--ci=false']); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(json.numTotalTests).toBe(1); expect(json.numPassedTests).toBe(1); diff --git a/e2e/__tests__/snapshotSerializers.test.ts b/e2e/__tests__/snapshotSerializers.test.ts index fa3b586dfbcb..a625fd5d64e5 100644 --- a/e2e/__tests__/snapshotSerializers.test.ts +++ b/e2e/__tests__/snapshotSerializers.test.ts @@ -14,17 +14,16 @@ const snapshotsDir = path.resolve(testDir, '__tests__/__snapshots__'); const snapshotPath = path.resolve(snapshotsDir, 'snapshot.test.js.snap'); const runAndAssert = () => { - const result = runWithJson('snapshot-serializers', [ + const {exitCode, json} = runWithJson('snapshot-serializers', [ '-w=1', '--ci=false', '--no-cache', ]); - const json = result.json; expect(json.numTotalTests).toBe(9); expect(json.numPassedTests).toBe(9); expect(json.numFailedTests).toBe(0); expect(json.numPendingTests).toBe(0); - expect(result.status).toBe(0); + expect(exitCode).toBe(0); }; describe('Snapshot serializers', () => { diff --git a/e2e/__tests__/stackTrace.test.ts b/e2e/__tests__/stackTrace.test.ts index a65a73883748..a9e571900cb2 100644 --- a/e2e/__tests__/stackTrace.test.ts +++ b/e2e/__tests__/stackTrace.test.ts @@ -11,11 +11,11 @@ import {extractSummary} from '../Utils'; describe('Stack Trace', () => { it('prints a stack trace for runtime errors', () => { - const {status, stderr} = runJest('stack-trace', ['runtimeError.test.js']); + const {exitCode, stderr} = runJest('stack-trace', ['runtimeError.test.js']); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch( /ReferenceError: thisIsARuntimeError is not defined/, ); @@ -26,13 +26,13 @@ describe('Stack Trace', () => { }); it('does not print a stack trace for runtime errors when --noStackTrace is given', () => { - const {status, stderr} = runJest('stack-trace', [ + const {exitCode, stderr} = runJest('stack-trace', [ 'runtimeError.test.js', '--noStackTrace', ]); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch( /ReferenceError: thisIsARuntimeError is not defined/, @@ -43,22 +43,22 @@ describe('Stack Trace', () => { }); it('prints a stack trace for matching errors', () => { - const {status, stderr} = runJest('stack-trace', ['stackTrace.test.js']); + const {exitCode, stderr} = runJest('stack-trace', ['stackTrace.test.js']); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/\s+at\s(?:.+?)\s\(__tests__\/stackTrace.test\.js/); }); it('does not print a stack trace for matching errors when --noStackTrace is given', () => { - const {status, stderr} = runJest('stack-trace', [ + const {exitCode, stderr} = runJest('stack-trace', [ 'stackTrace.test.js', '--noStackTrace', ]); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).not.toMatch( /\s+at\s(?:.+?)\s\(__tests__\/stackTrace.test\.js/, @@ -66,10 +66,10 @@ describe('Stack Trace', () => { }); it('prints a stack trace for errors', () => { - const {status, stderr} = runJest('stack-trace', ['testError.test.js']); + const {exitCode, stderr} = runJest('stack-trace', ['testError.test.js']); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/this is unexpected\./); expect(stderr).toMatch(/this is a string\./); @@ -87,12 +87,12 @@ describe('Stack Trace', () => { }); it('prints a stack trace for errors without message in stack trace', () => { - const {status, stderr} = runJest('stack-trace', [ + const {exitCode, stderr} = runJest('stack-trace', [ 'stackTraceWithoutMessage.test.js', ]); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch(/important message/); expect(stderr).toMatch( @@ -101,13 +101,13 @@ describe('Stack Trace', () => { }); it('does not print a stack trace for errors when --noStackTrace is given', () => { - const {status, stderr} = runJest('stack-trace', [ + const {exitCode, stderr} = runJest('stack-trace', [ 'testError.test.js', '--noStackTrace', ]); expect(wrap(extractSummary(stderr).summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).not.toMatch( /\s+at\s(?:.+?)\s\(__tests__\/testError.test\.js/, diff --git a/e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts b/e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts index a457ff757cb8..997aa1467c96 100644 --- a/e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts +++ b/e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts @@ -8,7 +8,7 @@ import runJest from '../runJest'; it('prints a usable stack trace even if no Error.captureStackTrace', () => { - const {stderr, status} = runJest('stack-trace-no-capture-stack-trace'); + const {stderr, exitCode} = runJest('stack-trace-no-capture-stack-trace'); expect(stderr).not.toMatch('Error.captureStackTrace is not a function'); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); diff --git a/e2e/__tests__/supportsDashedArgs.ts b/e2e/__tests__/supportsDashedArgs.ts index 0290ceb0f3de..aafde059da71 100644 --- a/e2e/__tests__/supportsDashedArgs.ts +++ b/e2e/__tests__/supportsDashedArgs.ts @@ -17,7 +17,7 @@ expect.addSnapshotSerializer({ }); test('works with passing tests', () => { - const result = runJest(eachDir, [ + const {exitCode} = runJest(eachDir, [ 'success.test.js', '--runInBand', '--collect-coverage', @@ -26,14 +26,11 @@ test('works with passing tests', () => { '--clear-mocks', '--useStderr', ]); - if (result.status !== 0) { - console.error(result.stderr); - } - expect(result.status).toBe(0); + expect(exitCode).toBe(0); }); test('throws error for unknown dashed & camelcase args', () => { - const result = runJest(consoleDir, [ + const {exitCode, stderr} = runJest(consoleDir, [ 'success.test.js', '--runInBand', '--collect-coverage', @@ -44,7 +41,7 @@ test('throws error for unknown dashed & camelcase args', () => { '--also-does-not-exist', '--useStderr', ]); - expect(result.stderr).toMatchInlineSnapshot(` + expect(stderr).toMatchInlineSnapshot(` ● Unrecognized CLI Parameters: Following options were not recognized: @@ -54,5 +51,5 @@ test('throws error for unknown dashed & camelcase args', () => { https://jestjs.io/docs/en/cli.html `); - expect(result.status).toBe(1); + expect(exitCode).toBe(1); }); diff --git a/e2e/__tests__/testEnvironmentAsync.test.ts b/e2e/__tests__/testEnvironmentAsync.test.ts index be5a5e3ffc06..fd0d7804ed46 100644 --- a/e2e/__tests__/testEnvironmentAsync.test.ts +++ b/e2e/__tests__/testEnvironmentAsync.test.ts @@ -26,7 +26,7 @@ it('triggers setup/teardown hooks', () => { const testFile = path.join(testDir, 'custom.test.js'); const result = runJest('test-environment-async'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); expect(result.stdout).toContain(`TestEnvironment.setup: ${testFile}`); const teardown = fs.readFileSync(DIR + '/teardown', 'utf8'); diff --git a/e2e/__tests__/testFailureExitCode.test.ts b/e2e/__tests__/testFailureExitCode.test.ts index ae3012cabd1a..6b60983746ca 100644 --- a/e2e/__tests__/testFailureExitCode.test.ts +++ b/e2e/__tests__/testFailureExitCode.test.ts @@ -23,11 +23,11 @@ test('exits with a specified code when test fail', () => { }), }); - let {status} = runJest(DIR); - expect(status).toBe(99); + let {exitCode} = runJest(DIR); + expect(exitCode).toBe(99); - ({status} = runJest(DIR, ['--testFailureExitCode', '77'])); - expect(status).toBe(77); + ({exitCode} = runJest(DIR, ['--testFailureExitCode', '77'])); + expect(exitCode).toBe(77); writeFiles(DIR, { '__tests__/test.test.js': `test('test', () => { expect(1).toBe(2); });`, @@ -35,6 +35,6 @@ test('exits with a specified code when test fail', () => { jest: {testEnvironment: 'node'}, }), }); - ({status} = runJest(DIR)); - expect(status).toBe(1); + ({exitCode} = runJest(DIR)); + expect(exitCode).toBe(1); }); diff --git a/e2e/__tests__/testNamePattern.test.ts b/e2e/__tests__/testNamePattern.test.ts index 4162b5443439..fd17bd4f1e4d 100644 --- a/e2e/__tests__/testNamePattern.test.ts +++ b/e2e/__tests__/testNamePattern.test.ts @@ -10,12 +10,12 @@ import {extractSummary} from '../Utils'; import {json as runWithJson} from '../runJest'; test('testNamePattern', () => { - const {stderr, status} = runWithJson('test-name-pattern', [ + const {stderr, exitCode} = runWithJson('test-name-pattern', [ '--testNamePattern', 'should match', ]); const {summary} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(summary)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/testNamePatternSkipped.test.ts b/e2e/__tests__/testNamePatternSkipped.test.ts index facd63aa16be..37e107d8077e 100644 --- a/e2e/__tests__/testNamePatternSkipped.test.ts +++ b/e2e/__tests__/testNamePatternSkipped.test.ts @@ -10,12 +10,12 @@ import {extractSummary} from '../Utils'; import {json as runWithJson} from '../runJest'; test('testNamePattern skipped', () => { - const {stderr, status} = runWithJson('test-name-pattern-skipped', [ + const {stderr, exitCode} = runWithJson('test-name-pattern-skipped', [ '--testNamePattern', 'false', ]); const {summary} = extractSummary(stderr); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(summary)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/testPathPatternReporterMessage.test.ts b/e2e/__tests__/testPathPatternReporterMessage.test.ts index 19b04c97bacd..e12164cb912a 100644 --- a/e2e/__tests__/testPathPatternReporterMessage.test.ts +++ b/e2e/__tests__/testPathPatternReporterMessage.test.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -'use strict'; - import {tmpdir} from 'os'; import * as path from 'path'; import runJest from '../runJest'; diff --git a/e2e/__tests__/testResultsProcessor.test.ts b/e2e/__tests__/testResultsProcessor.test.ts index be8eda122754..cd7d89e6f592 100644 --- a/e2e/__tests__/testResultsProcessor.test.ts +++ b/e2e/__tests__/testResultsProcessor.test.ts @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -'use strict'; import * as path from 'path'; import {json as runWithJson} from '../runJest'; @@ -14,10 +13,9 @@ test('testNamePattern', () => { __dirname, '../test-results-processor/processor.js', ); - const result = runWithJson('test-results-processor', [ + const {json} = runWithJson('test-results-processor', [ '--json', `--testResultsProcessor=${processorPath}`, ]); - const json = result.json; expect(json.processed).toBe(true); }); diff --git a/e2e/__tests__/testRetries.test.ts b/e2e/__tests__/testRetries.test.ts index 2a409119add2..cedf680ea0a2 100644 --- a/e2e/__tests__/testRetries.test.ts +++ b/e2e/__tests__/testRetries.test.ts @@ -27,7 +27,7 @@ describe('Test Retries', () => { it('retries failed tests', () => { const result = runJest('test-retries', ['e2e.test.js']); - expect(result.status).toEqual(0); + expect(result.exitCode).toEqual(0); expect(result.failed).toBe(false); }); diff --git a/e2e/__tests__/testTodo.test.ts b/e2e/__tests__/testTodo.test.ts index e0da43241e4a..7982d37534cc 100644 --- a/e2e/__tests__/testTodo.test.ts +++ b/e2e/__tests__/testTodo.test.ts @@ -13,35 +13,35 @@ const dir = path.resolve(__dirname, '../test-todo'); test('works with all statuses', () => { const result = runJest(dir, ['statuses.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); test('shows error messages when called with no arguments', () => { const result = runJest(dir, ['todoNoArgs.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); test('shows error messages when called with multiple arguments', () => { const result = runJest(dir, ['todoMultipleArgs.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); test('shows error messages when called with invalid argument', () => { const result = runJest(dir, ['todoNonString.test.js']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); test('shows todo messages when in verbose mode', () => { const result = runJest(dir, ['verbose.test.js', '--verbose']); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); const {rest} = extractSummary(result.stderr); expect(wrap(rest)).toMatchSnapshot(); }); diff --git a/e2e/__tests__/timeouts.test.ts b/e2e/__tests__/timeouts.test.ts index 9e64c3224034..228e1ae33964 100644 --- a/e2e/__tests__/timeouts.test.ts +++ b/e2e/__tests__/timeouts.test.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -'use strict'; - import * as path from 'path'; import {wrap} from 'jest-snapshot-serializer-raw'; import {cleanup, extractSummary, writeFiles} from '../Utils'; @@ -31,13 +29,13 @@ test('exceeds the timeout', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); const {rest, summary} = extractSummary(stderr); expect(rest).toMatch( /(jest\.setTimeout|jasmine\.DEFAULT_TIMEOUT_INTERVAL|Exceeded timeout)/, ); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); test('does not exceed the timeout', () => { @@ -54,11 +52,11 @@ test('does not exceed the timeout', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); const {rest, summary} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('exceeds the command line testTimeout', () => { @@ -74,7 +72,7 @@ test('exceeds the command line testTimeout', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testTimeout=200', @@ -84,7 +82,7 @@ test('exceeds the command line testTimeout', () => { /(jest\.setTimeout|jasmine\.DEFAULT_TIMEOUT_INTERVAL|Exceeded timeout)/, ); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); test('does not exceed the command line testTimeout', () => { @@ -100,7 +98,7 @@ test('does not exceed the command line testTimeout', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testTimeout=1000', @@ -108,5 +106,5 @@ test('does not exceed the command line testTimeout', () => { const {rest, summary} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/timeoutsLegacy.test.ts b/e2e/__tests__/timeoutsLegacy.test.ts index de90706c40a6..5382336d3591 100644 --- a/e2e/__tests__/timeoutsLegacy.test.ts +++ b/e2e/__tests__/timeoutsLegacy.test.ts @@ -36,13 +36,13 @@ test('exceeds the timeout set using jasmine.DEFAULT_TIMEOUT_INTERVAL', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); const {rest, summary} = extractSummary(stderr); expect(rest).toMatch( /(jest\.setTimeout|jasmine\.DEFAULT_TIMEOUT_INTERVAL|Exceeded timeout)/, ); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(1); + expect(exitCode).toBe(1); }); test('does not exceed the timeout using jasmine.DEFAULT_TIMEOUT_INTERVAL', () => { @@ -59,11 +59,11 @@ test('does not exceed the timeout using jasmine.DEFAULT_TIMEOUT_INTERVAL', () => 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); const {rest, summary} = extractSummary(stderr); expect(wrap(rest)).toMatchSnapshot(); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('can read and write jasmine.DEFAULT_TIMEOUT_INTERVAL', () => { @@ -81,8 +81,8 @@ test('can read and write jasmine.DEFAULT_TIMEOUT_INTERVAL', () => { 'package.json': '{}', }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false']); const {summary} = extractSummary(stderr); expect(wrap(summary)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/timerResetMocks.test.ts b/e2e/__tests__/timerResetMocks.test.ts index 194c9cd4045a..9ef9f20f6ece 100644 --- a/e2e/__tests__/timerResetMocks.test.ts +++ b/e2e/__tests__/timerResetMocks.test.ts @@ -9,10 +9,10 @@ import runJest from '../runJest'; test('run timers after resetAllMocks test', () => { const result = runJest('timer-reset-mocks/after-reset-all-mocks'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); test('run timers with resetMocks in config test', () => { const result = runJest('timer-reset-mocks/with-reset-mocks'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/timerUseRealTimers.test.ts b/e2e/__tests__/timerUseRealTimers.test.ts index 8a655ed32606..6c5c3d815637 100644 --- a/e2e/__tests__/timerUseRealTimers.test.ts +++ b/e2e/__tests__/timerUseRealTimers.test.ts @@ -10,5 +10,5 @@ import runJest from '../runJest'; test('useRealTimers cancels "timers": "fake" for whole test file', () => { const result = runJest('timer-use-real-timers'); expect(result.stdout).toMatch('API is not mocked with fake timers.'); - expect(result.status).toBe(0); + expect(result.exitCode).toBe(0); }); diff --git a/e2e/__tests__/toMatchInlineSnapshot.test.ts b/e2e/__tests__/toMatchInlineSnapshot.test.ts index 9b1f2d7ba1a2..bea20f9baf04 100644 --- a/e2e/__tests__/toMatchInlineSnapshot.test.ts +++ b/e2e/__tests__/toMatchInlineSnapshot.test.ts @@ -30,19 +30,19 @@ test('basic support', () => { writeFiles(TESTS_DIR, { [filename]: template(['{apple: "original value"}']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('initial write'); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('snapshot passed'); } @@ -50,15 +50,15 @@ test('basic support', () => { writeFiles(TESTS_DIR, { [filename]: readFile(filename).replace('original value', 'updated value'), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshot name: `inline snapshots 1`'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(fileAfter)).toMatchSnapshot('snapshot mismatch'); } { - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', filename, @@ -66,7 +66,7 @@ test('basic support', () => { ]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot updated from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('snapshot updated'); } }); @@ -81,19 +81,19 @@ test('do not indent empty lines', () => { writeFiles(TESTS_DIR, { [filename]: template(['`hello\n\nworld`']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('initial write'); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('snapshot passed'); } }); @@ -107,18 +107,18 @@ test('handles property matchers', () => { { writeFiles(TESTS_DIR, {[filename]: template(['new Date()'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('initial write'); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('snapshot passed'); } @@ -126,11 +126,11 @@ test('handles property matchers', () => { writeFiles(TESTS_DIR, { [filename]: readFile(filename).replace('new Date()', '"string"'), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshot name: `handles property matchers 1`'); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(fileAfter)).toMatchSnapshot('snapshot failed'); } @@ -138,7 +138,7 @@ test('handles property matchers', () => { writeFiles(TESTS_DIR, { [filename]: readFile(filename).replace('any(Date)', 'any(String)'), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', filename, @@ -146,7 +146,7 @@ test('handles property matchers', () => { ]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot updated from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('snapshot updated'); } }); @@ -166,26 +166,26 @@ test('removes obsolete external snapshots', () => { { writeFiles(TESTS_DIR, {[filename]: template(['toMatchSnapshot'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('initial write'); expect(fs.existsSync(snapshotPath)).toEqual(true); } { writeFiles(TESTS_DIR, {[filename]: template(['toMatchInlineSnapshot'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshots: 1 obsolete, 1 written, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(wrap(fileAfter)).toMatchSnapshot('inline snapshot written'); expect(fs.existsSync(snapshotPath)).toEqual(true); } { - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', filename, @@ -193,7 +193,7 @@ test('removes obsolete external snapshots', () => { ]); const fileAfter = readFile(filename); expect(stderr).toMatch('Snapshots: 1 file removed, 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot('external snapshot cleaned'); expect(fs.existsSync(snapshotPath)).toEqual(false); } @@ -209,10 +209,10 @@ test('supports async matchers', () => { `; writeFiles(TESTS_DIR, {[filename]: test}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('2 snapshots written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot(); }); @@ -226,10 +226,10 @@ test('supports async tests', () => { `; writeFiles(TESTS_DIR, {[filename]: test}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot(); }); @@ -242,11 +242,11 @@ test('writes snapshots with non-literals in expect(...)', () => { `; writeFiles(TESTS_DIR, {[filename]: test}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); expect(wrap(fileAfter)).toMatchSnapshot(); }); @@ -262,7 +262,7 @@ test('handles mocking native modules prettier relies on', () => { `; writeFiles(TESTS_DIR, {[filename]: test}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts b/e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts index a85e8a871cbb..ed3583e67276 100644 --- a/e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts +++ b/e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts @@ -30,16 +30,16 @@ test('works with a single snapshot', () => { writeFiles(TESTS_DIR, { [filename]: template(['3', '1' /* retries */]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '2' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', @@ -47,21 +47,21 @@ test('works with a single snapshot', () => { ]); expect(stderr).toMatch('Received: 2'); expect(stderr).toMatch('1 snapshot failed from 1 test suite.'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '4' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', filename, ]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -79,10 +79,10 @@ test('works when a different assertion is failing', () => { writeFiles(TESTS_DIR, { [filename]: template(['4']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Test Suites: 1 failed, 1 total'); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -104,16 +104,16 @@ test('works when multiple tests have snapshots but only one of them failed multi writeFiles(TESTS_DIR, { [filename]: template(['3', '2' /* retries */]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 2 passed, 2 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '2' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', @@ -122,20 +122,20 @@ test('works when multiple tests have snapshots but only one of them failed multi expect(stderr).toMatch('Snapshot name: `with retries snapshots 1`'); expect(stderr).toMatch('Received: 2'); expect(stderr).toMatch('1 snapshot failed from 1 test suite.'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '4' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', filename, ]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); diff --git a/e2e/__tests__/toMatchSnapshot.test.ts b/e2e/__tests__/toMatchSnapshot.test.ts index 27cb67a24daa..e2c3f7fb1f2e 100644 --- a/e2e/__tests__/toMatchSnapshot.test.ts +++ b/e2e/__tests__/toMatchSnapshot.test.ts @@ -25,36 +25,36 @@ test('basic support', () => { writeFiles(TESTS_DIR, { [filename]: template(['{apple: "original value"}']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template(['{apple: "updated value"}']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshot name: `snapshots 1`'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', filename, '-u', ]); expect(stderr).toMatch('1 snapshot updated from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -69,24 +69,24 @@ test('error thrown before snapshot', () => { writeFiles(TESTS_DIR, { [filename]: template(['true', '{a: "original"}']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template(['false', '{a: "original"}']), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).not.toMatch('1 obsolete snapshot found'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -99,18 +99,18 @@ test('first snapshot fails, second passes', () => { { writeFiles(TESTS_DIR, {[filename]: template([`'apple'`, `'banana'`])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('2 snapshots written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, {[filename]: template([`'kiwi'`, `'banana'`])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshot name: `snapshots 1`'); expect(stderr).toMatch('Snapshot: "apple"\n Received: "kiwi"'); expect(stderr).not.toMatch('1 obsolete snapshot found'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -127,16 +127,16 @@ test('does not mark snapshots as obsolete in skipped tests', () => { { writeFiles(TESTS_DIR, {[filename]: template(['test'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, {[filename]: template(['test.skip'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).not.toMatch('1 obsolete snapshot found'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -149,9 +149,9 @@ test('accepts custom snapshot name', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -164,23 +164,23 @@ test('handles property matchers', () => { { writeFiles(TESTS_DIR, {[filename]: template(['new Date()'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, {[filename]: template(['"string"'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshot name: `handles property matchers 1`'); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -193,9 +193,9 @@ test('handles invalid property matchers', () => { }); `, }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Property matchers must be an object.'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, { @@ -204,12 +204,12 @@ test('handles invalid property matchers', () => { }); `, }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Property matchers must be an object.'); expect(stderr).toMatch( 'To provide a snapshot test name without property matchers, use: toMatchSnapshot("name")', ); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, { @@ -218,12 +218,12 @@ test('handles invalid property matchers', () => { }); `, }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Property matchers must be an object.'); expect(stderr).toMatch( 'To provide a snapshot test name without property matchers, use: toMatchSnapshot("name")', ); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -236,26 +236,26 @@ test('handles property matchers with hint', () => { { writeFiles(TESTS_DIR, {[filename]: template(['new Date()'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, {[filename]: template(['"string"'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch( 'Snapshot name: `handles property matchers with hint: descriptive hint 1`', ); expect(stderr).toMatch('Expected properties:'); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -268,35 +268,35 @@ test('handles property matchers with deep properties', () => { { writeFiles(TESTS_DIR, {[filename]: template(['new Date()', '"Jest"'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, {[filename]: template(['"string"', '"Jest"'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch( 'Snapshot name: `handles property matchers with deep properties 1`', ); expect(stderr).toMatch('Expected properties:'); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, {[filename]: template(['new Date()', '"CHANGED"'])}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch( 'Snapshot name: `handles property matchers with deep properties 1`', ); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); diff --git a/e2e/__tests__/toMatchSnapshotWithRetries.test.ts b/e2e/__tests__/toMatchSnapshotWithRetries.test.ts index 2c10d5345363..ef20f9a854c6 100644 --- a/e2e/__tests__/toMatchSnapshotWithRetries.test.ts +++ b/e2e/__tests__/toMatchSnapshotWithRetries.test.ts @@ -30,16 +30,16 @@ test('works with a single snapshot', () => { writeFiles(TESTS_DIR, { [filename]: template(['3', '1' /* retries */]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '2' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', @@ -47,21 +47,21 @@ test('works with a single snapshot', () => { ]); expect(stderr).toMatch('Received: 2'); expect(stderr).toMatch('1 snapshot failed from 1 test suite.'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '4' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', filename, ]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -83,16 +83,16 @@ test('works when multiple tests have snapshots but only one of them failed multi writeFiles(TESTS_DIR, { [filename]: template(['3', '2' /* retries */]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('2 snapshots written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '2' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', @@ -100,20 +100,20 @@ test('works when multiple tests have snapshots but only one of them failed multi ]); expect(stderr).toMatch('Received: 2'); expect(stderr).toMatch('1 snapshot failed from 1 test suite.'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } { writeFiles(TESTS_DIR, { [filename]: template(['index', '4' /* retries */]), }); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', '--testRunner=jest-circus/runner', filename, ]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); diff --git a/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts b/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts index 88aa8a788977..b96515af5415 100644 --- a/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts +++ b/e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts @@ -40,27 +40,27 @@ test('empty external', () => { writeFiles(TESTS_DIR, { [filename]: template([`''`]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 passed, 1 total'); expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: template([`'non-empty'`]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); expect(stderr).not.toMatch('not written'); // not confused with --ci option expect(stderr).toMatch(ORDINARY_FAILURE); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -79,20 +79,20 @@ test('empty internal ci false', () => { writeFiles(TESTS_DIR, { [filename]: template([received1]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } { writeFiles(TESTS_DIR, { [filename]: readFile(filename).replace(received1, received2), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); expect(stderr).not.toMatch('1 snapshot written from 1 test suite.'); expect(stderr).toMatch(ORDINARY_FAILURE); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -108,10 +108,10 @@ test('undefined internal ci true', () => { writeFiles(TESTS_DIR, { [filename]: template([`'non-empty'`]), }); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=true', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=true', filename]); expect(stderr).toMatch('Snapshots: 1 failed, 1 total'); expect(stderr).not.toMatch(ORDINARY_FAILURE); expect(stderr).toMatch(NOT_WRITTEN); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); diff --git a/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts b/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts index 2d0f2d02dbd9..6ccdcdbd5e56 100644 --- a/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts +++ b/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts @@ -36,11 +36,11 @@ test('works fine when function throws error', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); expect(wrap(fileAfter)).toMatchSnapshot('initial write'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -57,7 +57,7 @@ test('updates existing snapshot', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, [ + const {stderr, exitCode} = runJest(DIR, [ '-w=1', '--ci=false', filename, @@ -66,7 +66,7 @@ test('updates existing snapshot', () => { const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot updated from 1 test suite.'); expect(wrap(fileAfter)).toMatchSnapshot('updated snapshot'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -80,9 +80,9 @@ test('cannot be used with .not', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('.not cannot be used with snapshot matchers'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -96,9 +96,9 @@ test('should support rejecting promises', () => { `); writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const fileAfter = readFile(filename); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); expect(wrap(fileAfter)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts b/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts index 34820d5ed4d6..1a9f398a65a4 100644 --- a/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts +++ b/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts @@ -27,9 +27,9 @@ test('works fine when function throws error', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -42,9 +42,9 @@ test(`throws the error if tested function didn't throw error`, () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Received function did not throw'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -58,9 +58,9 @@ test('accepts custom snapshot name', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('1 snapshot written from 1 test suite.'); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); @@ -73,9 +73,9 @@ test('cannot be used with .not', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('.not cannot be used with snapshot matchers'); - expect(status).toBe(1); + expect(exitCode).toBe(1); } }); @@ -88,7 +88,7 @@ test('should support rejecting promises', () => { { writeFiles(TESTS_DIR, {[filename]: template()}); - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]); + const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); const snapshot = fs.readFileSync( `${TESTS_DIR}/__snapshots__/${filename}.snap`, @@ -97,6 +97,6 @@ test('should support rejecting promises', () => { expect(stderr).toMatch('1 snapshot written from 1 test suite.'); expect(wrap(snapshot)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); } }); diff --git a/e2e/__tests__/transform.test.ts b/e2e/__tests__/transform.test.ts index a62524d3640a..68f067ea3d47 100644 --- a/e2e/__tests__/transform.test.ts +++ b/e2e/__tests__/transform.test.ts @@ -49,8 +49,8 @@ describe('babel-jest ignored', () => { it('tells user to match ignored files', () => { // --no-cache because babel can cache stuff and result in false green - const {status, stderr} = runJest(dir, ['--no-cache']); - expect(status).toBe(1); + const {exitCode, stderr} = runJest(dir, ['--no-cache']); + expect(exitCode).toBe(1); expect(wrap(extractSummary(stderr).rest)).toMatchSnapshot(); }); }); @@ -120,12 +120,12 @@ describe('custom transformer', () => { }); it('instruments files', () => { - const {stdout, status} = runJest(dir, ['--no-cache', '--coverage'], { + const {stdout, exitCode} = runJest(dir, ['--no-cache', '--coverage'], { stripAnsi: true, }); // coverage should be empty because there's no real instrumentation expect(wrap(stdout)).toMatchSnapshot(); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); }); diff --git a/e2e/__tests__/verbose.test.ts b/e2e/__tests__/verbose.test.ts index 241d6ebbf1ec..b9497214d706 100644 --- a/e2e/__tests__/verbose.test.ts +++ b/e2e/__tests__/verbose.test.ts @@ -8,9 +8,9 @@ import runJest from '../runJest'; test('Verbose Reporter', () => { - const {status, stderr} = runJest('verbose-reporter'); + const {exitCode, stderr} = runJest('verbose-reporter'); - expect(status).toBe(1); + expect(exitCode).toBe(1); expect(stderr).toMatch('works just fine'); expect(stderr).toMatch('does not work'); expect(stderr).toMatch(/Verbose\n.*?works/); diff --git a/e2e/__tests__/version.test.ts b/e2e/__tests__/version.test.ts index b88449feb18c..3acbfb1ad4f2 100644 --- a/e2e/__tests__/version.test.ts +++ b/e2e/__tests__/version.test.ts @@ -21,10 +21,10 @@ test('works with jest.config.js', () => { 'package.json': '{}', }); - const {status, stdout, stderr} = runJest(DIR, ['--version']); + const {exitCode, stdout, stderr} = runJest(DIR, ['--version']); expect(stdout).toMatch(/\d{2}\.\d{1,2}\.\d{1,2}[\-\S]*-dev$/); // Only version gets printed and nothing else expect(stdout.split(/\n/)).toHaveLength(1); expect(stderr).toBe(''); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/watchModeOnlyFailed.test.ts b/e2e/__tests__/watchModeOnlyFailed.test.ts index 48828c90abf2..1d8d1c0cd8bd 100644 --- a/e2e/__tests__/watchModeOnlyFailed.test.ts +++ b/e2e/__tests__/watchModeOnlyFailed.test.ts @@ -43,7 +43,7 @@ test('can press "f" to run only failed tests', () => { const input = [{keys: ['f']}, {keys: ['q']}]; setupFiles(input); - const {status, stderr} = runJest(DIR, ['--no-watchman', '--watchAll']); + const {exitCode, stderr} = runJest(DIR, ['--no-watchman', '--watchAll']); const results = extractSummaries(stderr); expect(results).toHaveLength(2); @@ -51,5 +51,5 @@ test('can press "f" to run only failed tests', () => { expect(wrap(rest)).toMatchSnapshot('test results'); expect(wrap(summary)).toMatchSnapshot('test summary'); }); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/watchModePatterns.test.ts b/e2e/__tests__/watchModePatterns.test.ts index 4323d19058f0..7d4302f7e8e0 100644 --- a/e2e/__tests__/watchModePatterns.test.ts +++ b/e2e/__tests__/watchModePatterns.test.ts @@ -45,7 +45,7 @@ test('can press "p" to filter by file name', () => { const input = [{keys: ['p', 'b', 'a', 'r', '\r']}, {keys: ['q']}]; setupFiles(input); - const {status, stdout, stderr} = runJest(DIR, [ + const {exitCode, stdout, stderr} = runJest(DIR, [ '--no-watchman', '--watchAll', ]); @@ -58,14 +58,14 @@ test('can press "p" to filter by file name', () => { expect(wrap(rest)).toMatchSnapshot('test results'); expect(wrap(summary)).toMatchSnapshot('test summary'); }); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); test('can press "t" to filter by test name', () => { const input = [{keys: ['t', '2', '\r']}, {keys: ['q']}]; setupFiles(input); - const {status, stdout, stderr} = runJest(DIR, [ + const {exitCode, stdout, stderr} = runJest(DIR, [ '--no-watchman', '--watchAll', ]); @@ -78,5 +78,5 @@ test('can press "t" to filter by test name', () => { expect(wrap(rest)).toMatchSnapshot('test results'); expect(wrap(summary)).toMatchSnapshot('test summary'); }); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/watchModeUpdateSnapshot.test.ts b/e2e/__tests__/watchModeUpdateSnapshot.test.ts index d2854c514024..30477fe27e1c 100644 --- a/e2e/__tests__/watchModeUpdateSnapshot.test.ts +++ b/e2e/__tests__/watchModeUpdateSnapshot.test.ts @@ -44,12 +44,12 @@ test('can press "u" to update snapshots', () => { const input = [{keys: ['u']}, {keys: ['q']}]; setupFiles(input); - const {status, stderr} = runJest(DIR, ['--no-watchman', '--watchAll']); + const {exitCode, stderr} = runJest(DIR, ['--no-watchman', '--watchAll']); const results = extractSummaries(stderr); expect(results).toHaveLength(2); results.forEach(({rest, summary}) => { expect(wrap(rest)).toMatchSnapshot('test results'); expect(wrap(summary)).toMatchSnapshot('test summary'); }); - expect(status).toBe(0); + expect(exitCode).toBe(0); }); diff --git a/e2e/__tests__/workerForceExit.test.ts b/e2e/__tests__/workerForceExit.test.ts index 87bc44c09598..7cdda47f0a96 100644 --- a/e2e/__tests__/workerForceExit.test.ts +++ b/e2e/__tests__/workerForceExit.test.ts @@ -42,9 +42,9 @@ test('prints a warning if a worker is force exited', () => { }); `, }); - const {status, stderr, stdout} = runJest(DIR, ['--maxWorkers=2']); + const {exitCode, stderr, stdout} = runJest(DIR, ['--maxWorkers=2']); - expect(status).toBe(0); + expect(exitCode).toBe(0); verifyNumPassed(stderr); expect(stdout).toContain('A worker process has failed to exit gracefully'); }); @@ -59,9 +59,9 @@ test('force exits a worker that fails to exit gracefully', async () => { }); `, }); - const {status, stderr} = runJest(DIR, ['--maxWorkers=2']); + const {exitCode, stderr} = runJest(DIR, ['--maxWorkers=2']); - expect(status).toBe(0); + expect(exitCode).toBe(0); verifyNumPassed(stderr); const [pid] = /pid: \d+/.exec(stderr); diff --git a/e2e/runJest.ts b/e2e/runJest.ts index c88f3fc76ddc..e6bf4c770578 100644 --- a/e2e/runJest.ts +++ b/e2e/runJest.ts @@ -9,11 +9,8 @@ import * as path from 'path'; import * as fs from 'fs'; import {Writable} from 'stream'; -import execa, { - ExecaChildProcess, - ExecaReturnValue, - ExecaSyncReturnValue, -} from 'execa'; +import execa = require('execa'); +import {FormattedTestResults} from '@jest/test-result'; import stripAnsi from 'strip-ansi'; import {normalizeIcons} from './Utils'; @@ -35,7 +32,7 @@ export default function runJest( args?: Array, options: RunJestOptions = {}, ) { - return normalizeResult(spawnJest(dir, args, options), options); + return normalizeStdoutAndStderr(spawnJest(dir, args, options), options); } function spawnJest( @@ -43,13 +40,13 @@ function spawnJest( args?: Array, options?: RunJestOptions, spawnAsync?: false, -): ExecaReturnValue; +): execa.ExecaReturnValue; function spawnJest( dir: string, args?: Array, options?: RunJestOptions, spawnAsync?: true, -): ExecaChildProcess; +): execa.ExecaChildProcess; // Spawns Jest and returns either a Promise (if spawnAsync is true) or the completed child process function spawnJest( @@ -57,7 +54,7 @@ function spawnJest( args?: Array, options: RunJestOptions = {}, spawnAsync: boolean = false, -): ExecaSyncReturnValue | ExecaChildProcess { +): execa.ExecaSyncReturnValue | execa.ExecaChildProcess { const isRelative = !path.isAbsolute(dir); if (isRelative) { @@ -95,19 +92,14 @@ function spawnJest( ); } -interface RunJestResult extends ExecaReturnValue { - status?: number; - json?: ( - dir: string, - args: Array | undefined, - options: RunJestOptions, - ) => RunJestResult; +interface RunJestJsonResult extends execa.ExecaReturnValue { + json: FormattedTestResults; } -function normalizeResult(result: RunJestResult, options: RunJestOptions) { - // For compat with cross-spawn - result.status = result.exitCode; - +function normalizeStdoutAndStderr( + result: execa.ExecaReturnValue, + options: RunJestOptions, +) { result.stdout = normalizeIcons(result.stdout); if (options.stripAnsi) result.stdout = stripAnsi(result.stdout); result.stderr = normalizeIcons(result.stderr); @@ -124,11 +116,14 @@ export const json = function( dir: string, args: Array | undefined, options: RunJestOptions = {}, -): RunJestResult { +): RunJestJsonResult { args = [...(args || []), '--json']; const result = runJest(dir, args, options); try { - result.json = JSON.parse(result.stdout || ''); + return { + ...result, + json: JSON.parse(result.stdout || ''), + }; } catch (e) { throw new Error( ` @@ -139,7 +134,6 @@ export const json = function( `, ); } - return result; }; // Runs `jest` until a given output is achieved, then kills it with `SIGTERM` @@ -165,5 +159,5 @@ export const until = async function( }), ); - return normalizeResult(await jestPromise, options); + return normalizeStdoutAndStderr(await jestPromise, options); }; diff --git a/examples/typescript/CheckboxWithLabel.tsx b/examples/typescript/CheckboxWithLabel.tsx index 32e99d992a8a..02efd702d15f 100644 --- a/examples/typescript/CheckboxWithLabel.tsx +++ b/examples/typescript/CheckboxWithLabel.tsx @@ -1,7 +1,5 @@ // Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -/// - import * as React from 'react'; interface CheckboxWithLabelProps { diff --git a/packages/jest-test-result/src/index.ts b/packages/jest-test-result/src/index.ts index d942f144e519..b5feb16ae93e 100644 --- a/packages/jest-test-result/src/index.ts +++ b/packages/jest-test-result/src/index.ts @@ -17,6 +17,7 @@ export { AssertionLocation, AssertionResult, FailedAssertion, + FormattedTestResults, Milliseconds, SerializableError, SnapshotSummary, From 8e0786fdbc80ec993707fbb36495143e4e043952 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Wed, 4 Sep 2019 09:31:12 -0400 Subject: [PATCH 23/97] jest-diff: Do not inverse format if line consists of one change (#8903) --- CHANGELOG.md | 1 + .../__snapshots__/matchers.test.js.snap | 6 ++-- .../getAlignedDiffs.test.ts.snap | 36 +++++++++---------- packages/jest-diff/src/getAlignedDiffs.ts | 10 +++++- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f8139630c88..fc78d401485a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Fixes - `[expect]` Display expectedDiff more carefully in toBeCloseTo ([#8389](https://github.com/facebook/jest/pull/8389)) +- `[jest-diff]` Do not inverse format if line consists of one change ([#8903](https://github.com/facebook/jest/pull/8903)) - `[jest-fake-timers]` `getTimerCount` will not include cancelled immediates ([#8764](https://github.com/facebook/jest/pull/8764)) - `[jest-leak-detector]` [**BREAKING**] Use `weak-napi` instead of `weak` package ([#8686](https://github.com/facebook/jest/pull/8686)) - `[jest-mock]` Fix for mockReturnValue overriding mockImplementationOnce ([#8398](https://github.com/facebook/jest/pull/8398)) diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index 9c018a897cee..736c6547c1e9 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -303,9 +303,9 @@ string" 1`] = ` - Expected + Received -- 3 -+ four -+ 4 +- 3 ++ four ++ 4 line string" `; diff --git a/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap index bc62b6fff2c1..48f282bf8a3e 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap @@ -1,34 +1,34 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`getAlignedDiffs lines change preceding and following common 1`] = ` -"- delete -+ insert +"- delete ++ insert common between changes -- prev -+ next" +- prev ++ next" `; exports[`getAlignedDiffs lines common at end when both current change lines are empty 1`] = ` -"- delete +"- delete common at end" `; exports[`getAlignedDiffs lines common between delete and insert 1`] = ` -"- delete +"- delete common between changes -+ insert" ++ insert" `; exports[`getAlignedDiffs lines common between insert and delete 1`] = ` -"+ insert +"+ insert common between changes -- delete" +- delete" `; exports[`getAlignedDiffs lines common preceding and following change 1`] = ` " common preceding -- delete -+ insert +- delete ++ insert common following" `; @@ -85,7 +85,7 @@ exports[`getAlignedDiffs strings delete or insert at start and change at end 1`] `; exports[`getAlignedDiffs substrings first common when both current change lines are empty 1`] = ` -"+ insert +"+ insert first middle - last prev @@ -101,7 +101,7 @@ exports[`getAlignedDiffs substrings first common when either current change line exports[`getAlignedDiffs substrings first delete completes the current line 1`] = ` "- common preceding first -- middle +- middle - last and following + common preceding and following" `; @@ -109,7 +109,7 @@ exports[`getAlignedDiffs substrings first delete completes the current line 1`] exports[`getAlignedDiffs substrings first insert completes the current line 1`] = ` "- common preceding + common preceding first -+ middle ++ middle +" `; @@ -140,21 +140,21 @@ exports[`getAlignedDiffs substrings middle is empty in delete between common 1`] exports[`getAlignedDiffs substrings middle is empty in insert at start 1`] = ` "- expected common at end -+ insert line ++ insert line + + received common at end" `; exports[`getAlignedDiffs substrings middle is non-empty in delete at end 1`] = ` "- common at start precedes delete -- non-empty line -- next +- non-empty line +- next + common at start precedes prev" `; exports[`getAlignedDiffs substrings middle is non-empty in insert between common 1`] = ` "- common at start precedes delete expected + common at start precedes insert -+ non-empty ++ non-empty + received" `; diff --git a/packages/jest-diff/src/getAlignedDiffs.ts b/packages/jest-diff/src/getAlignedDiffs.ts index 19421ae5e06a..2dae77412fd0 100644 --- a/packages/jest-diff/src/getAlignedDiffs.ts +++ b/packages/jest-diff/src/getAlignedDiffs.ts @@ -27,8 +27,16 @@ class ChangeBuffer { private pushLine(): void { // Assume call only if line has at least one diff, // therefore an empty line must have a diff which has an empty string. + + // If line has multiple diffs, then assume it has a common diff, + // therefore change diffs have change color; + // otherwise then it has line color only. this.lines.push( - new Diff(this.op, invertChangedSubstrings(this.op, this.line)), + this.line.length !== 1 + ? new Diff(this.op, invertChangedSubstrings(this.op, this.line)) + : this.line[0][0] === this.op + ? this.line[0] // can use instance + : new Diff(this.op, this.line[0][1]), // was common diff ); this.line.length = 0; } From a055df88c2c7625849ec3f9ff2f2b0974125358c Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 5 Sep 2019 10:48:48 +0200 Subject: [PATCH 24/97] chore: remove mention of outdated jsdom from docs (#8914) --- docs/Configuration.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index 9832ebb4d421..85ec47c164d4 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -921,8 +921,6 @@ beforeAll(() => { }); ``` -_Note: Jest comes with JSDOM@11 by default. Due to JSDOM 12 and newer dropping support for Node 6, Jest is unable to upgrade for the time being. However, you can install a custom `testEnvironment` with whichever version of JSDOM you want. E.g. [jest-environment-jsdom-thirteen](https://www.npmjs.com/package/jest-environment-jsdom-thirteen), which has JSDOM@13._ - ### `testEnvironmentOptions` [Object] Default: `{}` From 8e197c621f14b100fb3ebb62abe29079b455df1b Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Thu, 5 Sep 2019 11:43:33 -0400 Subject: [PATCH 25/97] jest-diff: Add changeColor and patchColor options (#8911) * jest-diff: Add changeColor and patchColor options * Edit comment * Update CHANGELOG.md * Fix prettier lint error in README.md * Replace 4 occurrences of change with changed * Replace 4 occurrences of change with changed correctly this time --- CHANGELOG.md | 1 + packages/jest-diff/README.md | 69 +++-- .../__tests__/__snapshots__/diff.test.ts.snap | 17 +- .../getAlignedDiffs.test.ts.snap | 172 +++++------ .../joinAlignedDiffs.test.ts.snap | 274 +++++++++--------- packages/jest-diff/src/__tests__/diff.test.ts | 40 ++- .../src/__tests__/getAlignedDiffs.test.ts | 22 +- .../src/__tests__/joinAlignedDiffs.test.ts | 66 ++++- packages/jest-diff/src/diffLines.ts | 4 +- packages/jest-diff/src/getAlignedDiffs.ts | 42 ++- packages/jest-diff/src/joinAlignedDiffs.ts | 10 +- .../jest-diff/src/normalizeDiffOptions.ts | 2 + packages/jest-diff/src/printDiffs.ts | 29 +- packages/jest-diff/src/types.ts | 6 +- 14 files changed, 444 insertions(+), 310 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc78d401485a..c8bd846baeb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) - `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) +- `[jest-diff]` Add `changeColor` and `patchColor` options ([#8911](https://github.com/facebook/jest/pull/8911)) - `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md index 0ac49f1f894b..32d2670572ff 100644 --- a/packages/jest-diff/README.md +++ b/packages/jest-diff/README.md @@ -91,7 +91,7 @@ const difference = diffStringsUnified(a, b); The returned **string** consists of: - annotation lines: describe the two change indicators with labels, and a blank line -- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverted** foreground and background colors (which the following example does not show) +- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverse** foreground and background colors (which the following example does not show) ```diff - Expected @@ -212,20 +212,22 @@ For other applications, you can provide an options object as a third argument: ### Properties of options object -| name | default | -| :-------------------- | :------------ | -| `aAnnotation` | `'Expected'` | -| `aColor` | `chalk.green` | -| `aIndicator` | `'-'` | -| `bAnnotation` | `'Received'` | -| `bColor` | `chalk.red` | -| `bIndicator` | `'+'` | -| `commonColor` | `chalk.dim` | -| `commonIndicator` | `' '` | -| `contextLines` | `5` | -| `expand` | `true` | -| `includeChangeCounts` | `false` | -| `omitAnnotationLines` | `false` | +| name | default | +| :-------------------- | :-------------- | +| `aAnnotation` | `'Expected'` | +| `aColor` | `chalk.green` | +| `aIndicator` | `'-'` | +| `bAnnotation` | `'Received'` | +| `bColor` | `chalk.red` | +| `bIndicator` | `'+'` | +| `changeColor` | `chalk.inverse` | +| `commonColor` | `chalk.dim` | +| `commonIndicator` | `' '` | +| `contextLines` | `5` | +| `expand` | `true` | +| `includeChangeCounts` | `false` | +| `omitAnnotationLines` | `false` | +| `patchColor` | `chalk.yellow` | ### Example of options for labels @@ -240,7 +242,7 @@ const options = { The `jest-diff` package does not assume that the 2 labels have equal length. -### Example of options for colors +### Example of options for colors of changed lines For consistency with most diff tools, you might exchange the colors: @@ -253,15 +255,31 @@ const options = { }; ``` -### Example of option to keep the default color +### Example of option for color of changed substrings + +Although the default inverse of foreground and background colors is hard to beat for changed substrings **within lines**, especially because it highlights spaces, if you want bold font weight on yellow background: + +```js +const options = { + changeColor: chalk.bold.bgAnsi256(226), // #ffff00 +}; +``` + +### Example of options for no colors The value of a color option is a function, which given a string, returns a string. -For common lines to keep the default (usually black) color, you might provide an identity function: +To store the difference in a file without escape codes for colors, provide an identity function: ```js +const identity = string => string; + const options = { - commonColor: line => line, + aColor: identity, + bColor: identity, + changeColor: identity, + commonColor: identity, + patchColor: identity, }; ``` @@ -293,9 +311,20 @@ const options = { A patch mark like `@@ -12,7 +12,9 @@` accounts for omitted common lines. +### Example of option for color of patch marks + +If you want patch marks to have the same dim color as common lines: + +```js +const options = { + expand: false, + patchColor: chalk.dim, +}; +``` + ### Example of option to include change counts -To display the number of change lines at the right of annotation lines: +To display the number of changed lines at the right of annotation lines: ```js const a = ['change from', 'common']; diff --git a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap index 493fd9df66c8..8a9e97253172 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap @@ -103,7 +103,7 @@ exports[`context number of lines: -1 (5 default) 1`] = ` "- Expected 1 - + Received 1 + -@@ -6,9 +6,9 @@ +@@ -6,9 +6,9 @@ 4, 5, 6, @@ -156,7 +156,7 @@ exports[`context number of lines: 3.1 (5 default) 1`] = ` "- Expected 1 - + Received 1 + -@@ -6,9 +6,9 @@ +@@ -6,9 +6,9 @@ 4, 5, 6, @@ -173,7 +173,7 @@ exports[`context number of lines: undefined (5 default) 1`] = ` "- Expected 1 - + Received 1 + -@@ -6,9 +6,9 @@ +@@ -6,9 +6,9 @@ 4, 5, 6, @@ -322,6 +322,17 @@ exports[`options 7980 diffStringsUnified 1`] = ` + \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\`" `; +exports[`options change color diffStringsUnified 1`] = ` +"- Expected ++ Received + +- delete +- changed from ++ changed to ++ insert + common" +`; + exports[`options change indicators diff 1`] = ` "< Expected > Received diff --git a/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap index 48f282bf8a3e..44c519c9f6d4 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/getAlignedDiffs.test.ts.snap @@ -1,160 +1,160 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`getAlignedDiffs lines change preceding and following common 1`] = ` -"- delete -+ insert - common between changes -- prev -+ next" +- delete ++ insert + common between changes +- prev ++ next `; exports[`getAlignedDiffs lines common at end when both current change lines are empty 1`] = ` -"- delete - common at end" +- delete + common at end `; exports[`getAlignedDiffs lines common between delete and insert 1`] = ` -"- delete - common between changes -+ insert" +- delete + common between changes ++ insert `; exports[`getAlignedDiffs lines common between insert and delete 1`] = ` -"+ insert - common between changes -- delete" ++ insert + common between changes +- delete `; exports[`getAlignedDiffs lines common preceding and following change 1`] = ` -" common preceding -- delete -+ insert - common following" + common preceding +- delete ++ insert + common following `; exports[`getAlignedDiffs newline change from space 1`] = ` -"- preceding following -+ preceding -+ following" +- preceding following ++ preceding ++ following `; exports[`getAlignedDiffs newline change to space 1`] = ` -"- preceding -- following -+ preceding following" +- preceding +- following ++ preceding following `; exports[`getAlignedDiffs newline delete only 1`] = ` -"- preceding -- following -+ precedingfollowing" +- preceding +- following ++ precedingfollowing `; exports[`getAlignedDiffs newline delete with adjacent change 1`] = ` -"- preceding -- following -+ precededfollowing" +- preceding +- following ++ precededfollowing `; exports[`getAlignedDiffs newline insert only 1`] = ` -"- precedingfollowing -+ preceding -+ following" +- precedingfollowing ++ preceding ++ following `; exports[`getAlignedDiffs newline insert with adjacent changes 1`] = ` -"- precededfollowing -+ preceding -+ Following" +- precededfollowing ++ preceding ++ Following `; exports[`getAlignedDiffs strings change at start and delete or insert at end 1`] = ` -"- prev change common delete -+ next change common - unchanged -- expected change common -+ received change common insert" +- prev change common delete ++ next change common + unchanged +- expected change common ++ received change common insert `; exports[`getAlignedDiffs strings delete or insert at start and change at end 1`] = ` -"- common change prev -+ insert common change next - unchanged -- delete common change this -+ common change that" +- common change prev ++ insert common change next + unchanged +- delete common change this ++ common change that `; exports[`getAlignedDiffs substrings first common when both current change lines are empty 1`] = ` -"+ insert - first - middle -- last prev -+ last next" ++ insert + first + middle +- last prev ++ last next `; exports[`getAlignedDiffs substrings first common when either current change line is non-empty 1`] = ` -"- expected first -+ first +- expected first ++ first - last" + last `; exports[`getAlignedDiffs substrings first delete completes the current line 1`] = ` -"- common preceding first -- middle -- last and following -+ common preceding and following" +- common preceding first +- middle +- last and following ++ common preceding and following `; exports[`getAlignedDiffs substrings first insert completes the current line 1`] = ` -"- common preceding -+ common preceding first -+ middle -+" +- common preceding ++ common preceding first ++ middle ++ `; exports[`getAlignedDiffs substrings last is empty in delete at end 1`] = ` -"- common string preceding prev -- -+ common string preceding next" +- common string preceding prev +- ++ common string preceding next `; exports[`getAlignedDiffs substrings last is empty in insert at end 1`] = ` -"- common string preceding prev -+ common string preceding next -+" +- common string preceding prev ++ common string preceding next ++ `; exports[`getAlignedDiffs substrings last is non-empty in common not at end 1`] = ` -" common first -- last expected -+ last received" + common first +- last expected ++ last received `; exports[`getAlignedDiffs substrings middle is empty in delete between common 1`] = ` -"- common at start precedes delete -- -- expected common at end -+ common at start precedes received common at end" +- common at start precedes delete +- +- expected common at end ++ common at start precedes received common at end `; exports[`getAlignedDiffs substrings middle is empty in insert at start 1`] = ` -"- expected common at end -+ insert line -+ -+ received common at end" +- expected common at end ++ insert line ++ ++ received common at end `; exports[`getAlignedDiffs substrings middle is non-empty in delete at end 1`] = ` -"- common at start precedes delete -- non-empty line -- next -+ common at start precedes prev" +- common at start precedes delete +- non-empty line +- next ++ common at start precedes prev `; exports[`getAlignedDiffs substrings middle is non-empty in insert between common 1`] = ` -"- common at start precedes delete expected -+ common at start precedes insert -+ non-empty -+ received" +- common at start precedes delete expected ++ common at start precedes insert ++ non-empty ++ received `; diff --git a/packages/jest-diff/src/__tests__/__snapshots__/joinAlignedDiffs.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/joinAlignedDiffs.test.ts.snap index 588beca3a445..cbc041c3ac19 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/joinAlignedDiffs.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/joinAlignedDiffs.test.ts.snap @@ -1,160 +1,160 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`joinAlignedDiffsExpand first line is empty common 1`] = ` -" ↵ - common 2 preceding A - common 1 preceding A -- delete line -- change expected A -+ change received A - common 1 following A - common 2 following A - common 3 following A - common 4 following A - common 4 preceding B - common 3 preceding B - common 2 preceding B - common 1 preceding B -- change expected B -+ change received B -+ insert line - common 1 following B - common 2 following B - common 3 between B and C - common 2 preceding C - common 1 preceding C -- change expected C -+ change received C - common 1 following C - common 2 following C - common 3 following C + ↵ + common 2 preceding A + common 1 preceding A +- delete line +- change expected A ++ change received A + common 1 following A + common 2 following A + common 3 following A + common 4 following A + common 4 preceding B + common 3 preceding B + common 2 preceding B + common 1 preceding B +- change expected B ++ change received B ++ insert line + common 1 following B + common 2 following B + common 3 between B and C + common 2 preceding C + common 1 preceding C +- change expected C ++ change received C + common 1 following C + common 2 following C + common 3 following C - common 5 following C" + common 5 following C `; exports[`joinAlignedDiffsNoExpand patch 0 with context 1 and change at start and end 1`] = ` -"- delete - common following delete - common preceding insert -+ insert" +- delete + common following delete + common preceding insert ++ insert `; exports[`joinAlignedDiffsNoExpand patch 0 with context 5 and first line is empty common 1`] = ` -" ↵ - common 2 preceding A - common 1 preceding A -- delete line -- change expected A -+ change received A - common 1 following A - common 2 following A - common 3 following A - common 4 following A - common 4 preceding B - common 3 preceding B - common 2 preceding B - common 1 preceding B -- change expected B -+ change received B -+ insert line - common 1 following B - common 2 following B - common 3 between B and C - common 2 preceding C - common 1 preceding C -- change expected C -+ change received C - common 1 following C - common 2 following C - common 3 following C + ↵ + common 2 preceding A + common 1 preceding A +- delete line +- change expected A ++ change received A + common 1 following A + common 2 following A + common 3 following A + common 4 following A + common 4 preceding B + common 3 preceding B + common 2 preceding B + common 1 preceding B +- change expected B ++ change received B ++ insert line + common 1 following B + common 2 following B + common 3 between B and C + common 2 preceding C + common 1 preceding C +- change expected C ++ change received C + common 1 following C + common 2 following C + common 3 following C - common 5 following C" + common 5 following C `; exports[`joinAlignedDiffsNoExpand patch 1 with context 4 and last line is empty common 1`] = ` -"@@ -1,24 +1,24 @@ +@@ -1,24 +1,24 @@ - common 2 preceding A - common 1 preceding A -- delete line -- change expected A -+ change received A - common 1 following A - common 2 following A - common 3 following A - common 4 following A - common 4 preceding B - common 3 preceding B - common 2 preceding B - common 1 preceding B -- change expected B -+ change received B -+ insert line - common 1 following B - common 2 following B - common 3 between B and C - common 2 preceding C - common 1 preceding C -- change expected C -+ change received C - common 1 following C - common 2 following C - common 3 following C - ↵" + common 2 preceding A + common 1 preceding A +- delete line +- change expected A ++ change received A + common 1 following A + common 2 following A + common 3 following A + common 4 following A + common 4 preceding B + common 3 preceding B + common 2 preceding B + common 1 preceding B +- change expected B ++ change received B ++ insert line + common 1 following B + common 2 following B + common 3 between B and C + common 2 preceding C + common 1 preceding C +- change expected C ++ change received C + common 1 following C + common 2 following C + common 3 following C + ↵ `; exports[`joinAlignedDiffsNoExpand patch 2 with context 3 1`] = ` -"@@ -1,8 +1,7 @@ +@@ -1,8 +1,7 @@ - common 2 preceding A - common 1 preceding A -- delete line -- change expected A -+ change received A - common 1 following A - common 2 following A - common 3 following A -@@ -11,13 +10,14 @@ - common 3 preceding B - common 2 preceding B - common 1 preceding B -- change expected B -+ change received B -+ insert line - common 1 following B - common 2 following B - common 3 between B and C - common 2 preceding C - common 1 preceding C -- change expected C -+ change received C - common 1 following C - common 2 following C - common 3 following C" + common 2 preceding A + common 1 preceding A +- delete line +- change expected A ++ change received A + common 1 following A + common 2 following A + common 3 following A +@@ -11,13 +10,14 @@ + common 3 preceding B + common 2 preceding B + common 1 preceding B +- change expected B ++ change received B ++ insert line + common 1 following B + common 2 following B + common 3 between B and C + common 2 preceding C + common 1 preceding C +- change expected C ++ change received C + common 1 following C + common 2 following C + common 3 following C `; exports[`joinAlignedDiffsNoExpand patch 3 with context 2 and omit excess common at start 1`] = ` -"@@ -2,6 +2,5 @@ - common 2 preceding A - common 1 preceding A -- delete line -- change expected A -+ change received A - common 1 following A - common 2 following A -@@ -12,5 +11,6 @@ - common 2 preceding B - common 1 preceding B -- change expected B -+ change received B -+ insert line - common 1 following B - common 2 following B -@@ -18,5 +18,5 @@ - common 2 preceding C - common 1 preceding C -- change expected C -+ change received C - common 1 following C - common 2 following C" +@@ -2,6 +2,5 @@ + common 2 preceding A + common 1 preceding A +- delete line +- change expected A ++ change received A + common 1 following A + common 2 following A +@@ -12,5 +11,6 @@ + common 2 preceding B + common 1 preceding B +- change expected B ++ change received B ++ insert line + common 1 following B + common 2 following B +@@ -18,5 +18,5 @@ + common 2 preceding C + common 1 preceding C +- change expected C ++ change received C + common 1 following C + common 2 following C `; diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index 4ad245bd119f..68cb65845b66 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -838,23 +838,27 @@ test('collapses big diffs to patch format', () => { describe('context', () => { const testDiffContextLines = (contextLines?: number) => { - test(`number of lines: ${ - typeof contextLines === 'number' ? contextLines : 'undefined' - } ${ + const validContextLines = typeof contextLines === 'number' && Number.isSafeInteger(contextLines) && - contextLines >= 0 - ? '' - : '(5 default)' - }`, () => { + contextLines >= 0; + + test(`number of lines: ${ + typeof contextLines === 'number' ? contextLines : 'undefined' + } ${validContextLines ? '' : '(5 default)'}`, () => { + const options = { + ...optionsCounts, + contextLines, + expand: false, + }; + if (!validContextLines) { + options.patchColor = chalk.dim; + } + const result = diff( {test: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, {test: [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]}, - { - contextLines, - expand: false, - ...optionsCounts, - }, + options, ); expect(result).toMatchSnapshot(); }); @@ -952,6 +956,18 @@ describe('options', () => { }); }); + describe('change color', () => { + const options = { + changeColor: chalk.bold, + }; + + test('diffStringsUnified', () => { + const aChanged = a.join('\n').replace('change', 'changed'); + const bChanged = b.join('\n').replace('change', 'changed'); + expect(diffStringsUnified(aChanged, bChanged, options)).toMatchSnapshot(); + }); + }); + describe('common', () => { const options = { commonColor: line => line, diff --git a/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts b/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts index df825a822c6a..c1a05b9ed56c 100644 --- a/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts +++ b/packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts @@ -7,8 +7,28 @@ import {diffStringsUnified} from '../printDiffs'; +// To align columns so people can review snapshots confidently: + +// 1. Use options to omit line colors. +const identity = (string: string) => string; +const changeColor = (string: string) => '' + string + ''; +const options = { + aColor: identity, + bColor: identity, + changeColor, + commonColor: identity, + omitAnnotationLines: true, + patchColor: identity, +}; + const testAlignedDiffs = (a: string, b: string): string => - diffStringsUnified(a, b, {omitAnnotationLines: true}); + diffStringsUnified(a, b, options); + +// 2. Add string serializer to omit double quote marks. +expect.addSnapshotSerializer({ + serialize: (val: string) => val, + test: (val: unknown) => typeof val === 'string', +}); describe('getAlignedDiffs', () => { describe('lines', () => { diff --git a/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts b/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts index 51ceeb874390..01c08878e935 100644 --- a/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts +++ b/packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts @@ -6,20 +6,38 @@ */ import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff} from '../cleanupSemantic'; -import {INVERTED_COLOR} from '../printDiffs'; import { joinAlignedDiffsExpand, joinAlignedDiffsNoExpand, } from '../joinAlignedDiffs'; import {normalizeDiffOptions} from '../normalizeDiffOptions'; +// To align columns so people can review snapshots confidently: + +// 1. Use options to omit line colors. +const identity = (string: string) => string; +const changeColor = (string: string) => '' + string + ''; +const optionsNoColor = { + aColor: identity, + bColor: identity, + changeColor, + commonColor: identity, + patchColor: identity, +}; + +// 2. Add string serializer to omit double quote marks. +expect.addSnapshotSerializer({ + serialize: (val: string) => val, + test: (val: unknown) => typeof val === 'string', +}); + const diffsCommonStartEnd = [ new Diff(DIFF_EQUAL, ''), new Diff(DIFF_EQUAL, 'common 2 preceding A'), new Diff(DIFF_EQUAL, 'common 1 preceding A'), new Diff(DIFF_DELETE, 'delete line'), - new Diff(DIFF_DELETE, ['change ', INVERTED_COLOR('expect'), 'ed A'].join('')), - new Diff(DIFF_INSERT, ['change ', INVERTED_COLOR('receiv'), 'ed A'].join('')), + new Diff(DIFF_DELETE, ['change ', changeColor('expect'), 'ed A'].join('')), + new Diff(DIFF_INSERT, ['change ', changeColor('receiv'), 'ed A'].join('')), new Diff(DIFF_EQUAL, 'common 1 following A'), new Diff(DIFF_EQUAL, 'common 2 following A'), new Diff(DIFF_EQUAL, 'common 3 following A'), @@ -28,16 +46,16 @@ const diffsCommonStartEnd = [ new Diff(DIFF_EQUAL, 'common 3 preceding B'), new Diff(DIFF_EQUAL, 'common 2 preceding B'), new Diff(DIFF_EQUAL, 'common 1 preceding B'), - new Diff(DIFF_DELETE, ['change ', INVERTED_COLOR('expect'), 'ed B'].join('')), - new Diff(DIFF_INSERT, ['change ', INVERTED_COLOR('receiv'), 'ed B'].join('')), + new Diff(DIFF_DELETE, ['change ', changeColor('expect'), 'ed B'].join('')), + new Diff(DIFF_INSERT, ['change ', changeColor('receiv'), 'ed B'].join('')), new Diff(DIFF_INSERT, 'insert line'), new Diff(DIFF_EQUAL, 'common 1 following B'), new Diff(DIFF_EQUAL, 'common 2 following B'), new Diff(DIFF_EQUAL, 'common 3 between B and C'), new Diff(DIFF_EQUAL, 'common 2 preceding C'), new Diff(DIFF_EQUAL, 'common 1 preceding C'), - new Diff(DIFF_DELETE, ['change ', INVERTED_COLOR('expect'), 'ed C'].join('')), - new Diff(DIFF_INSERT, ['change ', INVERTED_COLOR('receiv'), 'ed C'].join('')), + new Diff(DIFF_DELETE, ['change ', changeColor('expect'), 'ed C'].join('')), + new Diff(DIFF_INSERT, ['change ', changeColor('receiv'), 'ed C'].join('')), new Diff(DIFF_EQUAL, 'common 1 following C'), new Diff(DIFF_EQUAL, 'common 2 following C'), new Diff(DIFF_EQUAL, 'common 3 following C'), @@ -54,7 +72,8 @@ const diffsChangeStartEnd = [ describe('joinAlignedDiffsExpand', () => { test('first line is empty common', () => { - const options = normalizeDiffOptions(); + const options = normalizeDiffOptions(optionsNoColor); + expect( joinAlignedDiffsExpand(diffsCommonStartEnd, options), ).toMatchSnapshot(); @@ -63,35 +82,56 @@ describe('joinAlignedDiffsExpand', () => { describe('joinAlignedDiffsNoExpand', () => { test('patch 0 with context 1 and change at start and end', () => { - const options = normalizeDiffOptions({contextLines: 1, expand: false}); + const options = normalizeDiffOptions({ + ...optionsNoColor, + contextLines: 1, + expand: false, + }); + expect( joinAlignedDiffsNoExpand(diffsChangeStartEnd, options), ).toMatchSnapshot(); }); test('patch 0 with context 5 and first line is empty common', () => { - const options = normalizeDiffOptions({expand: false}); + const options = normalizeDiffOptions({...optionsNoColor, expand: false}); + expect( joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), ).toMatchSnapshot(); }); test('patch 1 with context 4 and last line is empty common', () => { - const options = normalizeDiffOptions({contextLines: 4, expand: false}); + const options = normalizeDiffOptions({ + ...optionsNoColor, + contextLines: 4, + expand: false, + }); + expect( joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), ).toMatchSnapshot(); }); test('patch 2 with context 3', () => { - const options = normalizeDiffOptions({contextLines: 3, expand: false}); + const options = normalizeDiffOptions({ + ...optionsNoColor, + contextLines: 3, + expand: false, + }); + expect( joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), ).toMatchSnapshot(); }); test('patch 3 with context 2 and omit excess common at start', () => { - const options = normalizeDiffOptions({contextLines: 2, expand: false}); + const options = normalizeDiffOptions({ + ...optionsNoColor, + contextLines: 2, + expand: false, + }); + expect( joinAlignedDiffsNoExpand(diffsCommonStartEnd, options), ).toMatchSnapshot(); diff --git a/packages/jest-diff/src/diffLines.ts b/packages/jest-diff/src/diffLines.ts index 305b8a19fd16..3855f7d2e935 100644 --- a/packages/jest-diff/src/diffLines.ts +++ b/packages/jest-diff/src/diffLines.ts @@ -291,7 +291,7 @@ const diffNoExpand = ( aEnd += nContextLines; bEnd += nContextLines; - array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd); + array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); // If common subsequence is not at end, another patch follows it. if (!isAtEnd) { @@ -332,7 +332,7 @@ const diffNoExpand = ( if (aStart === 0 && aEnd === aLength && bStart === 0 && bEnd === bLength) { array.splice(0, 1); // delete placeholder line for patch mark } else { - array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd); + array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); } return printAnnotation(options, changeCounts) + array.join('\n'); diff --git a/packages/jest-diff/src/getAlignedDiffs.ts b/packages/jest-diff/src/getAlignedDiffs.ts index 2dae77412fd0..c17117b4a199 100644 --- a/packages/jest-diff/src/getAlignedDiffs.ts +++ b/packages/jest-diff/src/getAlignedDiffs.ts @@ -5,19 +5,41 @@ * LICENSE file in the root directory of this source tree. */ -import {DIFF_DELETE, DIFF_INSERT, Diff} from './cleanupSemantic'; -import {invertChangedSubstrings} from './printDiffs'; +import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff} from './cleanupSemantic'; +import {DiffOptionsColor} from './types'; + +// Given change op and array of diffs, return concatenated string: +// * include common strings +// * include change strings which have argument op with changeColor +// * exclude change strings which have opposite op +const concatenateRelevantDiffs = ( + op: number, + diffs: Array, + changeColor: DiffOptionsColor, +): string => + diffs.reduce( + (reduced: string, diff: Diff): string => + reduced + + (diff[0] === DIFF_EQUAL + ? diff[1] + : diff[0] === op && diff[1].length !== 0 // empty if change is newline + ? changeColor(diff[1]) + : ''), + '', + ); // Encapsulate change lines until either a common newline or the end. class ChangeBuffer { private op: number; private line: Array; // incomplete line private lines: Array; // complete lines + private changeColor: DiffOptionsColor; - constructor(op: number) { + constructor(op: number, changeColor: DiffOptionsColor) { this.op = op; this.line = []; this.lines = []; + this.changeColor = changeColor; } private pushSubstring(substring: string): void { @@ -33,7 +55,10 @@ class ChangeBuffer { // otherwise then it has line color only. this.lines.push( this.line.length !== 1 - ? new Diff(this.op, invertChangedSubstrings(this.op, this.line)) + ? new Diff( + this.op, + concatenateRelevantDiffs(this.op, this.line, this.changeColor), + ) : this.line[0][0] === this.op ? this.line[0] // can use instance : new Diff(this.op, this.line[0][1]), // was common diff @@ -180,9 +205,12 @@ class CommonBuffer { // Assume the function is not called: // * if either expected or received is empty string // * if neither expected nor received is multiline string -const getAlignedDiffs = (diffs: Array): Array => { - const deleteBuffer = new ChangeBuffer(DIFF_DELETE); - const insertBuffer = new ChangeBuffer(DIFF_INSERT); +const getAlignedDiffs = ( + diffs: Array, + changeColor: DiffOptionsColor, +): Array => { + const deleteBuffer = new ChangeBuffer(DIFF_DELETE, changeColor); + const insertBuffer = new ChangeBuffer(DIFF_INSERT, changeColor); const commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer); diffs.forEach(diff => { diff --git a/packages/jest-diff/src/joinAlignedDiffs.ts b/packages/jest-diff/src/joinAlignedDiffs.ts index db00e5720bc5..7ae7a9b41ff4 100644 --- a/packages/jest-diff/src/joinAlignedDiffs.ts +++ b/packages/jest-diff/src/joinAlignedDiffs.ts @@ -144,7 +144,13 @@ export const joinAlignedDiffsNoExpand = ( pushCommonLine(diffs[iCommon][1]); } - lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd); + lines[jPatchMark] = createPatchMark( + aStart, + aEnd, + bStart, + bEnd, + options, + ); jPatchMark = lines.length; lines.push(''); // placeholder line for next patch mark @@ -177,7 +183,7 @@ export const joinAlignedDiffsNoExpand = ( } if (hasPatch) { - lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd); + lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); } return lines.join('\n'); diff --git a/packages/jest-diff/src/normalizeDiffOptions.ts b/packages/jest-diff/src/normalizeDiffOptions.ts index efdeab6701ab..4433edb8f84c 100644 --- a/packages/jest-diff/src/normalizeDiffOptions.ts +++ b/packages/jest-diff/src/normalizeDiffOptions.ts @@ -18,12 +18,14 @@ const OPTIONS_DEFAULT: DiffOptionsNormalized = { bAnnotation: 'Received', bColor: chalk.red, bIndicator: '+', + changeColor: chalk.inverse, commonColor: chalk.dim, commonIndicator: ' ', contextLines: DIFF_CONTEXT_DEFAULT, expand: true, includeChangeCounts: false, omitAnnotationLines: false, + patchColor: chalk.yellow, }; const getContextLines = (contextLines?: number): number => diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index 1abad0c3b416..93ada7d8e8e1 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -import chalk from 'chalk'; - import { DIFF_DELETE, DIFF_EQUAL, @@ -24,28 +22,6 @@ import { import {normalizeDiffOptions} from './normalizeDiffOptions'; import {DiffOptions, DiffOptionsNormalized} from './types'; -export const INVERTED_COLOR = chalk.inverse; // export for joinAlignedDiffs test -const PATCH_COLOR = chalk.yellow; - -// Given change op and array of diffs, return concatenated string: -// * include common strings -// * include change strings which have argument op (inverse highlight) -// * exclude change strings which have opposite op -export const invertChangedSubstrings = ( - op: number, - diffs: Array, -): string => - diffs.reduce( - (reduced: string, diff: Diff): string => - reduced + - (diff[0] === DIFF_EQUAL - ? diff[1] - : diff[0] === op - ? INVERTED_COLOR(diff[1]) - : ''), - '', - ); - const NEWLINE_SYMBOL = '\u{21B5}'; // downwards arrow with corner leftwards const SPACE_SYMBOL = '\u{00B7}'; // middle dot @@ -172,8 +148,9 @@ export const createPatchMark = ( aEnd: number, bStart: number, bEnd: number, + {patchColor}: DiffOptionsNormalized, ): string => - PATCH_COLOR( + patchColor( `@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`, ); @@ -243,7 +220,7 @@ export const diffStringsUnified = ( ); if (hasCommonDiff(diffs, isMultiline)) { - const lines = getAlignedDiffs(diffs); + const lines = getAlignedDiffs(diffs, optionsNormalized.changeColor); return ( printAnnotation(optionsNormalized, countChanges(lines)) + (optionsNormalized.expand diff --git a/packages/jest-diff/src/types.ts b/packages/jest-diff/src/types.ts index 5647286e30fe..f79ff163c956 100644 --- a/packages/jest-diff/src/types.ts +++ b/packages/jest-diff/src/types.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -type DiffOptionsColor = (arg: string) => string; // subset of Chalk type +export type DiffOptionsColor = (arg: string) => string; // subset of Chalk type export type DiffOptions = { aAnnotation?: string; @@ -14,12 +14,14 @@ export type DiffOptions = { bAnnotation?: string; bColor?: DiffOptionsColor; bIndicator?: string; + changeColor?: DiffOptionsColor; commonColor?: DiffOptionsColor; commonIndicator?: string; contextLines?: number; expand?: boolean; includeChangeCounts?: boolean; omitAnnotationLines?: boolean; + patchColor?: DiffOptionsColor; }; export type DiffOptionsNormalized = { @@ -29,10 +31,12 @@ export type DiffOptionsNormalized = { bAnnotation: string; bColor: DiffOptionsColor; bIndicator: string; + changeColor: DiffOptionsColor; commonColor: DiffOptionsColor; commonIndicator: string; contextLines: number; expand: boolean; includeChangeCounts: boolean; omitAnnotationLines: boolean; + patchColor: DiffOptionsColor; }; From 70bd4978c52aa070393bb030b625abbdee2381f9 Mon Sep 17 00:00:00 2001 From: Brian Donovan <1938+eventualbuddha@users.noreply.github.com> Date: Thu, 5 Sep 2019 12:32:29 -0700 Subject: [PATCH 26/97] docs: fix typo comment (#8916) --- examples/timer/__tests__/infinite_timer_game.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/timer/__tests__/infinite_timer_game.test.js b/examples/timer/__tests__/infinite_timer_game.test.js index e4e09d90fa54..031e5aa0e049 100644 --- a/examples/timer/__tests__/infinite_timer_game.test.js +++ b/examples/timer/__tests__/infinite_timer_game.test.js @@ -19,7 +19,7 @@ it('schedules a 10-second timer after 1 second', () => { // (but not any new timers that get created during that process) jest.runOnlyPendingTimers(); - // At this point, our 1-second timer should have fired it's callback + // At this point, our 1-second timer should have fired its callback expect(callback).toBeCalled(); // And it should have created a new timer to start the game over in From 85e84b4e9225cc94d6164e4b111e1713e0a2fd88 Mon Sep 17 00:00:00 2001 From: Orta Date: Fri, 6 Sep 2019 10:13:52 +0200 Subject: [PATCH 27/97] Adds nofollow to lower tier, and fix some CSS around the backers (#8915) --- website/pages/en/index.js | 7 ++++--- website/static/css/jest.css | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/website/pages/en/index.js b/website/pages/en/index.js index 6aab42a18dfc..44532762992e 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -66,6 +66,7 @@ const Backer = ({ className="backer-item" title={`$${totalDonations.value} by ${name || slug}`} target="_blank" + rel="nofollow" href={website || `https://opencollective.com/${slug}`} > { @@ -538,9 +539,9 @@ class Index extends React.Component { A lot of people! With - [16m](https://www.npmjs.com/package/jest) downloads in the - last 30 days, and used on over - [1,130,000](https://github.com/facebook/jest/network/dependents) + [20m](https://www.npmjs.com/package/jest) downloads in the + last month, and used on over + [1,293,000](https://github.com/facebook/jest/network/dependents) public repos on GitHub. Jest is used extensively at these companies: diff --git a/website/static/css/jest.css b/website/static/css/jest.css index 351f114ca1f1..8ebda323c280 100644 --- a/website/static/css/jest.css +++ b/website/static/css/jest.css @@ -23,7 +23,7 @@ } .sponsor-item img { - background: #095708; + background: white; } .sponsor-avatar { From 9279a3a97a39cc67f289635e4911a009ecfec60e Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 6 Sep 2019 10:42:12 +0200 Subject: [PATCH 28/97] feat: add fake timers implementation backed by Lolex (#8897) --- CHANGELOG.md | 1 + .../timerAndMock.test.js | 12 +- .../with-reset-mocks/timerWithMock.test.js | 6 +- .../__tests__/infinite_timer_game.test.js | 9 +- examples/timer/__tests__/timer_game.test.js | 11 +- packages/jest-fake-timers/package.json | 6 +- .../jest-fake-timers/src/FakeTimersLolex.ts | 154 ++++ .../fakeTimersLolex.test.ts.snap | 3 + .../src/__tests__/fakeTimersLolex.test.ts | 848 ++++++++++++++++++ .../src/__tests__/jestFakeTimers.test.ts | 2 +- packages/jest-fake-timers/src/index.ts | 1 + .../src/__tests__/pTimeout.test.ts | 5 + yarn.lock | 10 + 13 files changed, 1049 insertions(+), 19 deletions(-) create mode 100644 packages/jest-fake-timers/src/FakeTimersLolex.ts create mode 100644 packages/jest-fake-timers/src/__tests__/__snapshots__/fakeTimersLolex.test.ts.snap create mode 100644 packages/jest-fake-timers/src/__tests__/fakeTimersLolex.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c8bd846baeb4..f83f547771a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) - `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) - `[jest-diff]` Add `changeColor` and `patchColor` options ([#8911](https://github.com/facebook/jest/pull/8911)) +- `[@jest/fake-timers]` Add Lolex as implementation of fake timers ([#8897](https://github.com/facebook/jest/pull/8897)) - `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) diff --git a/e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js b/e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js index ab26793f5589..67c095a6f57f 100644 --- a/e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js +++ b/e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js @@ -9,17 +9,17 @@ describe('timers', () => { it('should work before calling resetAllMocks', () => { jest.useFakeTimers(); const f = jest.fn(); - setImmediate(() => f()); - jest.runAllImmediates(); - expect(f.mock.calls.length).toBe(1); + setTimeout(f, 0); + jest.runAllTimers(); + expect(f).toHaveBeenCalledTimes(1); }); it('should not break after calling resetAllMocks', () => { jest.resetAllMocks(); jest.useFakeTimers(); const f = jest.fn(); - setImmediate(() => f()); - jest.runAllImmediates(); - expect(f.mock.calls.length).toBe(1); + setTimeout(f, 0); + jest.runAllTimers(); + expect(f).toHaveBeenCalledTimes(1); }); }); diff --git a/e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js b/e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js index 7d7cc8b75a58..d45bb7b54ed5 100644 --- a/e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js +++ b/e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js @@ -9,8 +9,8 @@ describe('timers', () => { it('should work before calling resetAllMocks', () => { const f = jest.fn(); jest.useFakeTimers(); - setImmediate(() => f()); - jest.runAllImmediates(); - expect(f.mock.calls.length).toBe(1); + setTimeout(f, 0); + jest.runAllTimers(); + expect(f).toHaveBeenCalledTimes(1); }); }); diff --git a/examples/timer/__tests__/infinite_timer_game.test.js b/examples/timer/__tests__/infinite_timer_game.test.js index 031e5aa0e049..8205ccc68a9c 100644 --- a/examples/timer/__tests__/infinite_timer_game.test.js +++ b/examples/timer/__tests__/infinite_timer_game.test.js @@ -5,6 +5,7 @@ jest.useFakeTimers(); it('schedules a 10-second timer after 1 second', () => { + jest.spyOn(global, 'setTimeout'); const infiniteTimerGame = require('../infiniteTimerGame'); const callback = jest.fn(); @@ -12,8 +13,8 @@ it('schedules a 10-second timer after 1 second', () => { // At this point in time, there should have been a single call to // setTimeout to schedule the end of the game in 1 second. - expect(setTimeout.mock.calls.length).toBe(1); - expect(setTimeout.mock.calls[0][1]).toBe(1000); + expect(setTimeout).toBeCalledTimes(1); + expect(setTimeout).toHaveBeenNthCalledWith(1, expect.any(Function), 1000); // Fast forward and exhaust only currently pending timers // (but not any new timers that get created during that process) @@ -24,6 +25,6 @@ it('schedules a 10-second timer after 1 second', () => { // And it should have created a new timer to start the game over in // 10 seconds - expect(setTimeout.mock.calls.length).toBe(2); - expect(setTimeout.mock.calls[1][1]).toBe(10000); + expect(setTimeout).toBeCalledTimes(2); + expect(setTimeout).toHaveBeenNthCalledWith(2, expect.any(Function), 10000); }); diff --git a/examples/timer/__tests__/timer_game.test.js b/examples/timer/__tests__/timer_game.test.js index 599d083c6fbc..c2f55ea24ecf 100644 --- a/examples/timer/__tests__/timer_game.test.js +++ b/examples/timer/__tests__/timer_game.test.js @@ -5,12 +5,15 @@ jest.useFakeTimers(); describe('timerGame', () => { + beforeEach(() => { + jest.spyOn(global, 'setTimeout'); + }); it('waits 1 second before ending the game', () => { const timerGame = require('../timerGame'); timerGame(); - expect(setTimeout.mock.calls.length).toBe(1); - expect(setTimeout.mock.calls[0][1]).toBe(1000); + expect(setTimeout).toBeCalledTimes(1); + expect(setTimeout).toBeCalledWith(expect.any(Function), 1000); }); it('calls the callback after 1 second via runAllTimers', () => { @@ -27,7 +30,7 @@ describe('timerGame', () => { // Now our callback should have been called! expect(callback).toBeCalled(); - expect(callback.mock.calls.length).toBe(1); + expect(callback).toBeCalledTimes(1); }); it('calls the callback after 1 second via advanceTimersByTime', () => { @@ -44,6 +47,6 @@ describe('timerGame', () => { // Now our callback should have been called! expect(callback).toBeCalled(); - expect(callback.mock.calls.length).toBe(1); + expect(callback).toBeCalledTimes(1); }); }); diff --git a/packages/jest-fake-timers/package.json b/packages/jest-fake-timers/package.json index 52c246bbf7c0..3085e2d14b62 100644 --- a/packages/jest-fake-timers/package.json +++ b/packages/jest-fake-timers/package.json @@ -13,7 +13,11 @@ "@jest/types": "^24.9.0", "jest-message-util": "^24.9.0", "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" + "jest-util": "^24.9.0", + "lolex": "^4.2.0" + }, + "devDependencies": { + "@types/lolex": "^3.1.1" }, "engines": { "node": ">= 8" diff --git a/packages/jest-fake-timers/src/FakeTimersLolex.ts b/packages/jest-fake-timers/src/FakeTimersLolex.ts new file mode 100644 index 000000000000..7964e0ccf8cd --- /dev/null +++ b/packages/jest-fake-timers/src/FakeTimersLolex.ts @@ -0,0 +1,154 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { + InstalledClock, + LolexWithContext, + withGlobal as lolexWithGlobal, +} from 'lolex'; +import {StackTraceConfig, formatStackTrace} from 'jest-message-util'; + +export default class FakeTimers { + private _clock!: InstalledClock; + private _config: StackTraceConfig; + private _fakingTime: boolean; + private _global: NodeJS.Global; + private _lolex: LolexWithContext; + private _maxLoops: number; + + constructor({ + global, + config, + maxLoops, + }: { + global: NodeJS.Global; + config: StackTraceConfig; + maxLoops?: number; + }) { + this._global = global; + this._config = config; + this._maxLoops = maxLoops || 100000; + + this._fakingTime = false; + this._lolex = lolexWithGlobal(global); + } + + clearAllTimers() { + if (this._fakingTime) { + this._clock.reset(); + } + } + + dispose() { + this.useRealTimers(); + } + + runAllTimers() { + if (this._checkFakeTimers()) { + this._clock.runAll(); + } + } + + runOnlyPendingTimers() { + if (this._checkFakeTimers()) { + this._clock.runToLast(); + } + } + + advanceTimersToNextTimer(steps = 1) { + if (this._checkFakeTimers()) { + for (let i = steps; i > 0; i--) { + this._clock.next(); + // Fire all timers at this point: https://github.com/sinonjs/lolex/issues/250 + this._clock.tick(0); + + if (this._clock.countTimers() === 0) { + break; + } + } + } + } + + advanceTimersByTime(msToRun: number) { + if (this._checkFakeTimers()) { + this._clock.tick(msToRun); + } + } + + runAllTicks() { + if (this._checkFakeTimers()) { + // @ts-ignore + this._clock.runMicrotasks(); + } + } + + useRealTimers() { + if (this._fakingTime) { + this._clock.uninstall(); + this._fakingTime = false; + } + } + + useFakeTimers() { + const toFake = Object.keys(this._lolex.timers) as Array< + keyof LolexWithContext['timers'] + >; + + if (!this._fakingTime) { + this._clock = this._lolex.install({ + loopLimit: this._maxLoops, + now: Date.now(), + target: this._global, + toFake, + }); + + this._fakingTime = true; + } + } + + reset() { + if (this._checkFakeTimers()) { + const {now} = this._clock; + this._clock.reset(); + this._clock.setSystemTime(now); + } + } + + setSystemTime(now?: number) { + if (this._checkFakeTimers()) { + this._clock.setSystemTime(now); + } + } + + getRealSystemTime() { + return Date.now(); + } + + getTimerCount() { + if (this._checkFakeTimers()) { + return this._clock.countTimers(); + } + + return 0; + } + + private _checkFakeTimers() { + if (!this._fakingTime) { + this._global.console.warn( + 'A function to advance timers was called but the timers API is not ' + + 'mocked with fake timers. Call `jest.useFakeTimers()` in this test or ' + + 'enable fake timers globally by setting `"timers": "fake"` in the ' + + 'configuration file\nStack Trace:\n' + + formatStackTrace(new Error().stack!, this._config, { + noStackTrace: false, + }), + ); + } + + return this._fakingTime; + } +} diff --git a/packages/jest-fake-timers/src/__tests__/__snapshots__/fakeTimersLolex.test.ts.snap b/packages/jest-fake-timers/src/__tests__/__snapshots__/fakeTimersLolex.test.ts.snap new file mode 100644 index 000000000000..39cc8dd4ad64 --- /dev/null +++ b/packages/jest-fake-timers/src/__tests__/__snapshots__/fakeTimersLolex.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`FakeTimers runAllTimers warns when trying to advance timers while real timers are used 1`] = `"A function to advance timers was called but the timers API is not mocked with fake timers. Call \`jest.useFakeTimers()\` in this test or enable fake timers globally by setting \`\\"timers\\": \\"fake\\"\` in the configuration file"`; diff --git a/packages/jest-fake-timers/src/__tests__/fakeTimersLolex.test.ts b/packages/jest-fake-timers/src/__tests__/fakeTimersLolex.test.ts new file mode 100644 index 000000000000..bba8df289496 --- /dev/null +++ b/packages/jest-fake-timers/src/__tests__/fakeTimersLolex.test.ts @@ -0,0 +1,848 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import FakeTimers from '../FakeTimersLolex'; + +describe('FakeTimers', () => { + describe('construction', () => { + it('installs setTimeout mock', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.setTimeout).not.toBe(undefined); + }); + + it('installs clearTimeout mock', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.clearTimeout).not.toBe(undefined); + }); + + it('installs setInterval mock', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.setInterval).not.toBe(undefined); + }); + + it('installs clearInterval mock', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.clearInterval).not.toBe(undefined); + }); + + it('mocks process.nextTick if it exists on global', () => { + const origNextTick = () => {}; + const global = { + Date, + clearTimeout, + process: { + nextTick: origNextTick, + }, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.process.nextTick).not.toBe(origNextTick); + }); + + it('mocks setImmediate if it exists on global', () => { + const origSetImmediate = () => {}; + const global = { + Date, + clearTimeout, + process, + setImmediate: origSetImmediate, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.setImmediate).not.toBe(origSetImmediate); + }); + + it('mocks clearImmediate if setImmediate is on global', () => { + const origSetImmediate = () => {}; + const origClearImmediate = () => {}; + const global = { + Date, + clearImmediate: origClearImmediate, + clearTimeout, + process, + setImmediate: origSetImmediate, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + expect(global.clearImmediate).not.toBe(origClearImmediate); + }); + }); + + describe('runAllTicks', () => { + it('runs all ticks, in order', () => { + const global = { + Date, + clearTimeout, + process: { + nextTick: () => {}, + }, + setTimeout, + }; + + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder = []; + const mock1 = jest.fn(() => runOrder.push('mock1')); + const mock2 = jest.fn(() => runOrder.push('mock2')); + + global.process.nextTick(mock1); + global.process.nextTick(mock2); + + expect(mock1).toHaveBeenCalledTimes(0); + expect(mock2).toHaveBeenCalledTimes(0); + + timers.runAllTicks(); + + expect(mock1).toHaveBeenCalledTimes(1); + expect(mock2).toHaveBeenCalledTimes(1); + expect(runOrder).toEqual(['mock1', 'mock2']); + }); + + it('does nothing when no ticks have been scheduled', () => { + const nextTick = jest.fn(); + const global = { + Date, + clearTimeout, + process: { + nextTick, + }, + setTimeout, + }; + + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + timers.runAllTicks(); + + expect(nextTick).toHaveBeenCalledTimes(0); + }); + + it('only runs a scheduled callback once', () => { + const global = { + Date, + clearTimeout, + process: { + nextTick: () => {}, + }, + setTimeout, + }; + + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const mock1 = jest.fn(); + global.process.nextTick(mock1); + expect(mock1).toHaveBeenCalledTimes(0); + + timers.runAllTicks(); + expect(mock1).toHaveBeenCalledTimes(1); + + timers.runAllTicks(); + expect(mock1).toHaveBeenCalledTimes(1); + }); + + it('throws before allowing infinite recursion', () => { + const global = { + Date, + clearTimeout, + process: { + nextTick: () => {}, + }, + setTimeout, + }; + + const timers = new FakeTimers({global, maxLoops: 100}); + + timers.useFakeTimers(); + + global.process.nextTick(function infinitelyRecursingCallback() { + global.process.nextTick(infinitelyRecursingCallback); + }); + + expect(() => { + timers.runAllTicks(); + }).toThrow( + 'Aborting after running 100 timers, assuming an infinite loop!', + ); + }); + }); + + describe('runAllTimers', () => { + it('runs all timers in order', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder = []; + const mock1 = jest.fn(() => runOrder.push('mock1')); + const mock2 = jest.fn(() => runOrder.push('mock2')); + const mock3 = jest.fn(() => runOrder.push('mock3')); + const mock4 = jest.fn(() => runOrder.push('mock4')); + const mock5 = jest.fn(() => runOrder.push('mock5')); + const mock6 = jest.fn(() => runOrder.push('mock6')); + + global.setTimeout(mock1, 100); + global.setTimeout(mock2, NaN); + global.setTimeout(mock3, 0); + const intervalHandler = global.setInterval(() => { + mock4(); + global.clearInterval(intervalHandler); + }, 200); + global.setTimeout(mock5, Infinity); + global.setTimeout(mock6, -Infinity); + + timers.runAllTimers(); + expect(runOrder).toEqual([ + 'mock2', + 'mock3', + 'mock5', + 'mock6', + 'mock1', + 'mock4', + ]); + }); + + it('warns when trying to advance timers while real timers are used', () => { + const consoleWarn = console.warn; + console.warn = jest.fn(); + const timers = new FakeTimers({ + config: { + rootDir: __dirname, + }, + global, + }); + timers.runAllTimers(); + expect( + console.warn.mock.calls[0][0].split('\nStack Trace')[0], + ).toMatchSnapshot(); + console.warn = consoleWarn; + }); + + it('does nothing when no timers have been scheduled', () => { + const nativeSetTimeout = jest.fn(); + const global = { + Date, + clearTimeout, + process, + setTimeout: nativeSetTimeout, + }; + + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + timers.runAllTimers(); + }); + + it('only runs a setTimeout callback once (ever)', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const fn = jest.fn(); + global.setTimeout(fn, 0); + expect(fn).toHaveBeenCalledTimes(0); + + timers.runAllTimers(); + expect(fn).toHaveBeenCalledTimes(1); + + timers.runAllTimers(); + expect(fn).toHaveBeenCalledTimes(1); + }); + + it('runs callbacks with arguments after the interval', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const fn = jest.fn(); + global.setTimeout(fn, 0, 'mockArg1', 'mockArg2'); + + timers.runAllTimers(); + expect(fn).toHaveBeenCalledTimes(1); + expect(fn).toHaveBeenCalledWith('mockArg1', 'mockArg2'); + }); + + it("doesn't pass the callback to native setTimeout", () => { + const nativeSetTimeout = jest.fn(); + + const global = { + Date, + clearTimeout, + process, + setTimeout: nativeSetTimeout, + }; + + const timers = new FakeTimers({global}); + // Lolex uses `setTimeout` during init to figure out if it's in Node or + // browser env. So clear its calls before we install them into the env + nativeSetTimeout.mockClear(); + timers.useFakeTimers(); + + const mock1 = jest.fn(); + global.setTimeout(mock1, 0); + + timers.runAllTimers(); + expect(mock1).toHaveBeenCalledTimes(1); + expect(nativeSetTimeout).toHaveBeenCalledTimes(0); + }); + + it('throws before allowing infinite recursion', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global, maxLoops: 100}); + timers.useFakeTimers(); + + global.setTimeout(function infinitelyRecursingCallback() { + global.setTimeout(infinitelyRecursingCallback, 0); + }, 0); + + expect(() => { + timers.runAllTimers(); + }).toThrow( + new Error( + 'Aborting after running 100 timers, assuming an infinite loop!', + ), + ); + }); + + it('also clears ticks', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const fn = jest.fn(); + global.setTimeout(() => { + process.nextTick(fn); + }, 0); + expect(fn).toHaveBeenCalledTimes(0); + + timers.runAllTimers(); + expect(fn).toHaveBeenCalledTimes(1); + }); + }); + + describe('advanceTimersByTime', () => { + it('runs timers in order', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder = []; + const mock1 = jest.fn(() => runOrder.push('mock1')); + const mock2 = jest.fn(() => runOrder.push('mock2')); + const mock3 = jest.fn(() => runOrder.push('mock3')); + const mock4 = jest.fn(() => runOrder.push('mock4')); + + global.setTimeout(mock1, 100); + global.setTimeout(mock2, 0); + global.setTimeout(mock3, 0); + global.setInterval(() => { + mock4(); + }, 200); + + // Move forward to t=50 + timers.advanceTimersByTime(50); + expect(runOrder).toEqual(['mock2', 'mock3']); + + // Move forward to t=60 + timers.advanceTimersByTime(10); + expect(runOrder).toEqual(['mock2', 'mock3']); + + // Move forward to t=100 + timers.advanceTimersByTime(40); + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1']); + + // Move forward to t=200 + timers.advanceTimersByTime(100); + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4']); + + // Move forward to t=400 + timers.advanceTimersByTime(200); + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4', 'mock4']); + }); + + it('does nothing when no timers have been scheduled', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + timers.advanceTimersByTime(100); + }); + }); + + describe('advanceTimersToNextTimer', () => { + it('runs timers in order', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder: Array = []; + const mock1 = jest.fn(() => runOrder.push('mock1')); + const mock2 = jest.fn(() => runOrder.push('mock2')); + const mock3 = jest.fn(() => runOrder.push('mock3')); + const mock4 = jest.fn(() => runOrder.push('mock4')); + + global.setTimeout(mock1, 100); + global.setTimeout(mock2, 0); + global.setTimeout(mock3, 0); + global.setInterval(() => { + mock4(); + }, 200); + + timers.advanceTimersToNextTimer(); + // Move forward to t=0 + expect(runOrder).toEqual(['mock2', 'mock3']); + + timers.advanceTimersToNextTimer(); + // Move forward to t=100 + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1']); + + timers.advanceTimersToNextTimer(); + // Move forward to t=200 + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4']); + + timers.advanceTimersToNextTimer(); + // Move forward to t=400 + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4', 'mock4']); + }); + + it('run correct amount of steps', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder: Array = []; + const mock1 = jest.fn(() => runOrder.push('mock1')); + const mock2 = jest.fn(() => runOrder.push('mock2')); + const mock3 = jest.fn(() => runOrder.push('mock3')); + const mock4 = jest.fn(() => runOrder.push('mock4')); + + global.setTimeout(mock1, 100); + global.setTimeout(mock2, 0); + global.setTimeout(mock3, 0); + global.setInterval(() => { + mock4(); + }, 200); + + // Move forward to t=100 + timers.advanceTimersToNextTimer(2); + expect(runOrder).toEqual(['mock2', 'mock3', 'mock1']); + + // Move forward to t=600 + timers.advanceTimersToNextTimer(3); + expect(runOrder).toEqual([ + 'mock2', + 'mock3', + 'mock1', + 'mock4', + 'mock4', + 'mock4', + ]); + }); + + it('setTimeout inside setTimeout', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder: Array = []; + const mock1 = jest.fn(() => runOrder.push('mock1')); + const mock2 = jest.fn(() => runOrder.push('mock2')); + const mock3 = jest.fn(() => runOrder.push('mock3')); + const mock4 = jest.fn(() => runOrder.push('mock4')); + + global.setTimeout(mock1, 0); + global.setTimeout(() => { + mock2(); + global.setTimeout(mock3, 50); + }, 25); + global.setTimeout(mock4, 100); + + // Move forward to t=75 + timers.advanceTimersToNextTimer(3); + expect(runOrder).toEqual(['mock1', 'mock2', 'mock3']); + }); + + it('does nothing when no timers have been scheduled', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + timers.advanceTimersToNextTimer(); + }); + }); + + describe('reset', () => { + it('resets all pending setTimeouts', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const mock1 = jest.fn(); + global.setTimeout(mock1, 100); + + timers.reset(); + timers.runAllTimers(); + expect(mock1).toHaveBeenCalledTimes(0); + }); + + it('resets all pending setIntervals', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const mock1 = jest.fn(); + global.setInterval(mock1, 200); + + timers.reset(); + timers.runAllTimers(); + expect(mock1).toHaveBeenCalledTimes(0); + }); + + it('resets all pending ticks callbacks', () => { + const global = { + Date, + clearTimeout, + process: { + nextTick: () => {}, + }, + setImmediate: () => {}, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const mock1 = jest.fn(); + global.process.nextTick(mock1); + global.setImmediate(mock1); + + timers.reset(); + timers.runAllTicks(); + expect(mock1).toHaveBeenCalledTimes(0); + }); + + it('resets current advanceTimersByTime time cursor', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const mock1 = jest.fn(); + global.setTimeout(mock1, 100); + timers.advanceTimersByTime(50); + + timers.reset(); + global.setTimeout(mock1, 100); + + timers.advanceTimersByTime(50); + expect(mock1).toHaveBeenCalledTimes(0); + }); + }); + + describe('runOnlyPendingTimers', () => { + it('runs all timers in order', () => { + const nativeSetImmediate = jest.fn(); + + const global = { + Date, + clearTimeout, + process, + setImmediate: nativeSetImmediate, + setTimeout, + }; + + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const runOrder = []; + + global.setTimeout(function cb() { + runOrder.push('mock1'); + global.setTimeout(cb, 100); + }, 100); + + global.setTimeout(function cb() { + runOrder.push('mock2'); + global.setTimeout(cb, 50); + }, 0); + + global.setInterval(() => { + runOrder.push('mock3'); + }, 200); + + global.setImmediate(() => { + runOrder.push('mock4'); + }); + + global.setImmediate(function cb() { + runOrder.push('mock5'); + global.setTimeout(cb, 400); + }); + + timers.runOnlyPendingTimers(); + const firsRunOrder = [ + 'mock4', + 'mock5', + 'mock2', + 'mock2', + 'mock1', + 'mock2', + 'mock2', + 'mock3', + 'mock1', + 'mock2', + ]; + + expect(runOrder).toEqual(firsRunOrder); + + timers.runOnlyPendingTimers(); + expect(runOrder).toEqual([ + ...firsRunOrder, + 'mock2', + 'mock1', + 'mock2', + 'mock2', + 'mock3', + 'mock5', + 'mock1', + 'mock2', + ]); + }); + + it('does not run timers that were cleared in another timer', () => { + const global = {Date, clearTimeout, process, setTimeout}; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + const fn = jest.fn(); + const timer = global.setTimeout(fn, 10); + global.setTimeout(() => { + global.clearTimeout(timer); + }, 0); + + timers.runOnlyPendingTimers(); + expect(fn).not.toBeCalled(); + }); + }); + + describe('useRealTimers', () => { + it('resets native timer APIs', () => { + const nativeSetTimeout = jest.fn(); + const nativeSetInterval = jest.fn(); + const nativeClearTimeout = jest.fn(); + const nativeClearInterval = jest.fn(); + + const global = { + Date, + clearInterval: nativeClearInterval, + clearTimeout: nativeClearTimeout, + process, + setInterval: nativeSetInterval, + setTimeout: nativeSetTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + // Ensure that timers has overridden the native timer APIs + // (because if it didn't, this test might pass when it shouldn't) + expect(global.setTimeout).not.toBe(nativeSetTimeout); + expect(global.setInterval).not.toBe(nativeSetInterval); + expect(global.clearTimeout).not.toBe(nativeClearTimeout); + expect(global.clearInterval).not.toBe(nativeClearInterval); + + timers.useRealTimers(); + + expect(global.setTimeout).toBe(nativeSetTimeout); + expect(global.setInterval).toBe(nativeSetInterval); + expect(global.clearTimeout).toBe(nativeClearTimeout); + expect(global.clearInterval).toBe(nativeClearInterval); + }); + + it('resets native process.nextTick when present', () => { + const nativeProcessNextTick = jest.fn(); + + const global = { + Date, + clearTimeout, + process: {nextTick: nativeProcessNextTick}, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + // Ensure that timers has overridden the native timer APIs + // (because if it didn't, this test might pass when it shouldn't) + expect(global.process.nextTick).not.toBe(nativeProcessNextTick); + + timers.useRealTimers(); + + expect(global.process.nextTick).toBe(nativeProcessNextTick); + }); + + it('resets native setImmediate when present', () => { + const nativeSetImmediate = jest.fn(); + const nativeClearImmediate = jest.fn(); + + const global = { + Date, + clearImmediate: nativeClearImmediate, + clearTimeout, + process, + setImmediate: nativeSetImmediate, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useFakeTimers(); + + // Ensure that timers has overridden the native timer APIs + // (because if it didn't, this test might pass when it shouldn't) + expect(global.setImmediate).not.toBe(nativeSetImmediate); + expect(global.clearImmediate).not.toBe(nativeClearImmediate); + + timers.useRealTimers(); + + expect(global.setImmediate).toBe(nativeSetImmediate); + expect(global.clearImmediate).toBe(nativeClearImmediate); + }); + }); + + describe('useFakeTimers', () => { + it('resets mock timer APIs', () => { + const nativeSetTimeout = jest.fn(); + const nativeSetInterval = jest.fn(); + const nativeClearTimeout = jest.fn(); + const nativeClearInterval = jest.fn(); + + const global = { + Date, + clearInterval: nativeClearInterval, + clearTimeout: nativeClearTimeout, + process, + setInterval: nativeSetInterval, + setTimeout: nativeSetTimeout, + }; + const timers = new FakeTimers({global}); + timers.useRealTimers(); + + // Ensure that the real timers are installed at this point + // (because if they aren't, this test might pass when it shouldn't) + expect(global.setTimeout).toBe(nativeSetTimeout); + expect(global.setInterval).toBe(nativeSetInterval); + expect(global.clearTimeout).toBe(nativeClearTimeout); + expect(global.clearInterval).toBe(nativeClearInterval); + + timers.useFakeTimers(); + + expect(global.setTimeout).not.toBe(nativeSetTimeout); + expect(global.setInterval).not.toBe(nativeSetInterval); + expect(global.clearTimeout).not.toBe(nativeClearTimeout); + expect(global.clearInterval).not.toBe(nativeClearInterval); + }); + + it('resets mock process.nextTick when present', () => { + const nativeProcessNextTick = jest.fn(); + + const global = { + Date, + clearTimeout, + process: {nextTick: nativeProcessNextTick}, + setTimeout, + }; + const timers = new FakeTimers({global}); + timers.useRealTimers(); + + // Ensure that the real timers are installed at this point + // (because if they aren't, this test might pass when it shouldn't) + expect(global.process.nextTick).toBe(nativeProcessNextTick); + + timers.useFakeTimers(); + + expect(global.process.nextTick).not.toBe(nativeProcessNextTick); + }); + + it('resets mock setImmediate when present', () => { + const nativeSetImmediate = jest.fn(); + const nativeClearImmediate = jest.fn(); + + const global = { + Date, + clearImmediate: nativeClearImmediate, + clearTimeout, + process, + setImmediate: nativeSetImmediate, + setTimeout, + }; + const fakeTimers = new FakeTimers({global}); + fakeTimers.useRealTimers(); + + // Ensure that the real timers are installed at this point + // (because if they aren't, this test might pass when it shouldn't) + expect(global.setImmediate).toBe(nativeSetImmediate); + expect(global.clearImmediate).toBe(nativeClearImmediate); + + fakeTimers.useFakeTimers(); + + expect(global.setImmediate).not.toBe(nativeSetImmediate); + expect(global.clearImmediate).not.toBe(nativeClearImmediate); + }); + }); + + describe('getTimerCount', () => { + it('returns the correct count', () => { + const timers = new FakeTimers({global}); + + timers.useFakeTimers(); + + global.setTimeout(() => {}, 0); + global.setTimeout(() => {}, 0); + global.setTimeout(() => {}, 10); + + expect(timers.getTimerCount()).toEqual(3); + + timers.advanceTimersByTime(5); + + expect(timers.getTimerCount()).toEqual(1); + + timers.advanceTimersByTime(5); + + expect(timers.getTimerCount()).toEqual(0); + }); + + it('includes immediates and ticks', () => { + const timers = new FakeTimers({global}); + + timers.useFakeTimers(); + + global.setTimeout(() => {}, 0); + global.setImmediate(() => {}); + process.nextTick(() => {}); + + expect(timers.getTimerCount()).toEqual(3); + }); + + it('not includes cancelled immediates', () => { + const timers = new FakeTimers({global}); + + timers.useFakeTimers(); + + global.setImmediate(() => {}); + expect(timers.getTimerCount()).toEqual(1); + timers.clearAllTimers(); + + expect(timers.getTimerCount()).toEqual(0); + }); + }); +}); diff --git a/packages/jest-fake-timers/src/__tests__/jestFakeTimers.test.ts b/packages/jest-fake-timers/src/__tests__/jestFakeTimers.test.ts index 5bedb0047726..434315c93343 100644 --- a/packages/jest-fake-timers/src/__tests__/jestFakeTimers.test.ts +++ b/packages/jest-fake-timers/src/__tests__/jestFakeTimers.test.ts @@ -6,7 +6,7 @@ */ import {runInNewContext} from 'vm'; -import mock from 'jest-mock'; +import mock = require('jest-mock'); import FakeTimers from '../jestFakeTimers'; const timerConfig = { diff --git a/packages/jest-fake-timers/src/index.ts b/packages/jest-fake-timers/src/index.ts index fe0d39d5b62a..295edc2bee29 100644 --- a/packages/jest-fake-timers/src/index.ts +++ b/packages/jest-fake-timers/src/index.ts @@ -6,3 +6,4 @@ */ export {default as JestFakeTimers} from './jestFakeTimers'; +export {default as LolexFakeTimers} from './FakeTimersLolex'; diff --git a/packages/jest-jasmine2/src/__tests__/pTimeout.test.ts b/packages/jest-jasmine2/src/__tests__/pTimeout.test.ts index fef80a2bd541..9907d1f5945f 100644 --- a/packages/jest-jasmine2/src/__tests__/pTimeout.test.ts +++ b/packages/jest-jasmine2/src/__tests__/pTimeout.test.ts @@ -11,6 +11,11 @@ jest.useFakeTimers(); import pTimeout from '../pTimeout'; describe('pTimeout', () => { + beforeEach(() => { + jest.spyOn(global, 'setTimeout'); + jest.spyOn(global, 'clearTimeout'); + }); + it('calls `clearTimeout` and resolves when `promise` resolves.', async () => { const onTimeout = jest.fn(); const promise = Promise.resolve(); diff --git a/yarn.lock b/yarn.lock index 16a4d4cff02e..4f1a04a38960 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1940,6 +1940,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== +"@types/lolex@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/lolex/-/lolex-3.1.1.tgz#d40895223e5c8f8aa64f5500c6ca4eeab067d432" + integrity sha512-NU2qVtKxbt4IBvjEOW1QeUnV6KGUF6hpgJyvwZt3JrXe2qmwQF0+BiazQw+iFy9qL5ie+QHOxTzXkcvJUEh76g== + "@types/merge-stream@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@types/merge-stream/-/merge-stream-1.1.2.tgz#a880ff66b1fbbb5eef4958d015c5947a9334dbb1" @@ -8749,6 +8754,11 @@ logalot@^2.0.0: figures "^1.3.5" squeak "^1.0.0" +lolex@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" + integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== + longest@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" From 8054b94924664b3ca0f122283cffe346270c395f Mon Sep 17 00:00:00 2001 From: ArtemRudenko Date: Fri, 6 Sep 2019 12:25:26 +0300 Subject: [PATCH 29/97] chore: add Angular example (#8905) --- examples/angular/.babelrc.js | 24 ++++++ examples/angular/app.component.spec.ts | 42 ++++++++++ examples/angular/app.component.ts | 15 ++++ examples/angular/app.module.ts | 11 +++ examples/angular/jest.config.js | 10 +++ examples/angular/package.json | 31 +++++++ examples/angular/setupJest.js | 18 ++++ examples/angular/shared/data.service.spec.ts | 30 +++++++ examples/angular/shared/data.service.ts | 12 +++ examples/angular/shared/sub.service.spec.ts | 18 ++++ examples/angular/shared/sub.service.ts | 8 ++ yarn.lock | 86 +++++++++++++++++++- 12 files changed, 303 insertions(+), 2 deletions(-) create mode 100644 examples/angular/.babelrc.js create mode 100644 examples/angular/app.component.spec.ts create mode 100644 examples/angular/app.component.ts create mode 100644 examples/angular/app.module.ts create mode 100644 examples/angular/jest.config.js create mode 100644 examples/angular/package.json create mode 100644 examples/angular/setupJest.js create mode 100644 examples/angular/shared/data.service.spec.ts create mode 100644 examples/angular/shared/data.service.ts create mode 100644 examples/angular/shared/sub.service.spec.ts create mode 100644 examples/angular/shared/sub.service.ts diff --git a/examples/angular/.babelrc.js b/examples/angular/.babelrc.js new file mode 100644 index 000000000000..e684d0ed4af5 --- /dev/null +++ b/examples/angular/.babelrc.js @@ -0,0 +1,24 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +module.exports = { + plugins: [ + 'babel-plugin-transform-typescript-metadata', + ['@babel/plugin-proposal-decorators', {legacy: true}], + '@babel/plugin-proposal-class-properties', + ], + presets: [ + [ + '@babel/preset-env', + { + shippedProposals: true, + targets: {node: 8}, + }, + ], + '@babel/preset-typescript', + ] +}; diff --git a/examples/angular/app.component.spec.ts b/examples/angular/app.component.spec.ts new file mode 100644 index 000000000000..acd80ab8fd2d --- /dev/null +++ b/examples/angular/app.component.spec.ts @@ -0,0 +1,42 @@ +import {ComponentFixture, TestBed, async} from '@angular/core/testing'; + +import {AppComponent} from './app.component'; +import {DataService} from './shared/data.service'; + +const title = 'Test'; +const getTitleFn = jest.fn().mockReturnValue(title); +const dataServiceSpy = jest.fn().mockImplementation( + (): Partial => ({ + getTitle: getTitleFn, + }) +); + +describe('AppComponent', () => { + let fixture: ComponentFixture; + let app: AppComponent; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [AppComponent], + providers: [{provide: DataService, useClass: dataServiceSpy}], + }).compileComponents(); + fixture = TestBed.createComponent(AppComponent); + app = fixture.debugElement.componentInstance; + })); + + it('should create the app', () => { + expect(app).toBeTruthy(); + }); + + it(`should have as title 'angular'`, () => { + expect(app.title).toEqual(title); + }); + + it('should render title in a h1 tag', () => { + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain( + `Welcome to ${title}!` + ); + }); +}); diff --git a/examples/angular/app.component.ts b/examples/angular/app.component.ts new file mode 100644 index 000000000000..86aff20a89c9 --- /dev/null +++ b/examples/angular/app.component.ts @@ -0,0 +1,15 @@ +import {Component} from '@angular/core'; + +import {DataService} from './shared/data.service'; + +@Component({ + selector: 'app-root', + template: '

Welcome to {{ title }}!

', +}) +export class AppComponent { + public title: string; + + constructor(dataService: DataService) { + this.title = dataService.getTitle(); + } +} diff --git a/examples/angular/app.module.ts b/examples/angular/app.module.ts new file mode 100644 index 000000000000..00b69bf7097e --- /dev/null +++ b/examples/angular/app.module.ts @@ -0,0 +1,11 @@ +import {BrowserModule} from '@angular/platform-browser'; +import {NgModule} from '@angular/core'; + +import {AppComponent} from './app.component'; + +@NgModule({ + bootstrap: [AppComponent], + declarations: [AppComponent], + imports: [BrowserModule], +}) +export class AppModule {} diff --git a/examples/angular/jest.config.js b/examples/angular/jest.config.js new file mode 100644 index 000000000000..4329aeac9dad --- /dev/null +++ b/examples/angular/jest.config.js @@ -0,0 +1,10 @@ +module.exports = { + moduleFileExtensions: ['ts', 'html', 'js', 'json'], + setupFilesAfterEnv: ['/setupJest.js'], + transform: { + '^.+\\.[t|j]s$': [ + 'babel-jest', + {configFile: require.resolve('./.babelrc')}, + ], + }, +}; diff --git a/examples/angular/package.json b/examples/angular/package.json new file mode 100644 index 000000000000..e06f1ca37d8e --- /dev/null +++ b/examples/angular/package.json @@ -0,0 +1,31 @@ +{ + "name": "angular", + "version": "0.0.1", + "scripts": { + "test": "jest" + }, + "private": true, + "dependencies": { + "@angular/common": "^8.2.5", + "@angular/compiler": "^8.2.5", + "@angular/core": "^8.2.5", + "@angular/forms": "^8.2.5", + "@angular/platform-browser": "^8.2.5", + "@angular/platform-browser-dynamic": "^8.2.5", + "core-js": "^3.2.1", + "rxjs": "^6.5.3", + "typescript": "*", + "zone.js": "~0.9.1" + }, + "devDependencies": { + "@babel/plugin-proposal-class-properties": "*", + "@babel/plugin-proposal-decorators": "*", + "@babel/preset-env": "*", + "@babel/preset-typescript": "*", + "babel-jest": "*", + "babel-plugin-transform-typescript-metadata": "*", + "@types/jest": "*", + "jest": "*", + "jest-zone-patch": "*" + } +} diff --git a/examples/angular/setupJest.js b/examples/angular/setupJest.js new file mode 100644 index 000000000000..c8a41202d6e7 --- /dev/null +++ b/examples/angular/setupJest.js @@ -0,0 +1,18 @@ +'use strict'; + +require('core-js/proposals/reflect-metadata'); +require('zone.js/dist/zone.js'); +require('zone.js/dist/proxy.js'); +require('zone.js/dist/sync-test'); +require('zone.js/dist/async-test'); +require('zone.js/dist/fake-async-test'); +// eslint-disable-next-line import/no-extraneous-dependencies +require('jest-zone-patch'); + +const {getTestBed} = require('@angular/core/testing'); +const testingModule = require('@angular/platform-browser-dynamic/testing'); + +getTestBed().initTestEnvironment( + testingModule.BrowserDynamicTestingModule, + testingModule.platformBrowserDynamicTesting() +); diff --git a/examples/angular/shared/data.service.spec.ts b/examples/angular/shared/data.service.spec.ts new file mode 100644 index 000000000000..a9b8716b893e --- /dev/null +++ b/examples/angular/shared/data.service.spec.ts @@ -0,0 +1,30 @@ +import {TestBed} from '@angular/core/testing'; + +import {DataService} from './data.service'; +import {SubService} from './sub.service'; + +const title = 'SubTest'; +const getTitleFn = jest.fn().mockReturnValue(title); +const subServiceSpy = jest.fn().mockImplementation(() => ({ + getTitle: getTitleFn, +})); + +describe('Service: DataService', () => { + let service: DataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DataService, {provide: SubService, useClass: subServiceSpy}], + }); + + service = TestBed.get(DataService); + }); + + it('should create service', () => { + expect(service).toBeTruthy(); + }); + + it('should return the right title', () => { + expect(service.getTitle()).toEqual(title); + }); +}); diff --git a/examples/angular/shared/data.service.ts b/examples/angular/shared/data.service.ts new file mode 100644 index 000000000000..f5359fd2c770 --- /dev/null +++ b/examples/angular/shared/data.service.ts @@ -0,0 +1,12 @@ +import {Injectable} from '@angular/core'; + +import {SubService} from './sub.service'; + +@Injectable() +export class DataService { + constructor(private subService: SubService) {} + + getTitle() { + return this.subService.getTitle(); + } +} diff --git a/examples/angular/shared/sub.service.spec.ts b/examples/angular/shared/sub.service.spec.ts new file mode 100644 index 000000000000..3aaf03f53685 --- /dev/null +++ b/examples/angular/shared/sub.service.spec.ts @@ -0,0 +1,18 @@ +import {TestBed} from '@angular/core/testing'; + +import {SubService} from './sub.service'; + +describe('Service: SubService', () => { + let service: SubService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [SubService], + }); + service = TestBed.get(SubService); + }); + + it('should create service', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/examples/angular/shared/sub.service.ts b/examples/angular/shared/sub.service.ts new file mode 100644 index 000000000000..2f4fbab84960 --- /dev/null +++ b/examples/angular/shared/sub.service.ts @@ -0,0 +1,8 @@ +import {Injectable} from '@angular/core'; + +@Injectable() +export class SubService { + public getTitle() { + return 'Angular App with Jest24'; + } +} diff --git a/yarn.lock b/yarn.lock index 4f1a04a38960..3a41a9a133f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,48 @@ # yarn lockfile v1 +"@angular/common@^8.2.5": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-8.2.5.tgz#4155df1ca4a6ac50a82b9cbf40dbc357f214e040" + integrity sha512-7iSDLVhS+jbVRkECpbTzU9+6IQPS3Wl0CF73EA0sdzPbTC2GKvGfM9WLnIZZIxewkii6Wn1Yb0x0qRdWMT2STA== + dependencies: + tslib "^1.9.0" + +"@angular/compiler@^8.2.5": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.2.5.tgz#015928a7698677484f5ff38054c5b12ea71a8e44" + integrity sha512-u3OgSBTupn9DN1uDF+NmXqN7w9m6bbrIalJkwdw+kFXnXt8JpdIeJmeV2jN4wLuGp6A3sWS1ze+6u4kpFHMqTw== + dependencies: + tslib "^1.9.0" + +"@angular/core@^8.2.5": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.2.5.tgz#c94f41c81abc318c9597285648f790b88ca7bfa6" + integrity sha512-cBEiHhLE8VFIdB53seR+nQYNQFlNloKgD7ro26eMazvRF94wBSzO9VrD3+/XmNWdIYibU7PBaXhDCOKTe+ZSHw== + dependencies: + tslib "^1.9.0" + +"@angular/forms@^8.2.5": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-8.2.5.tgz#3d86574b344ffbe51403bf7237585cf42daaa8ab" + integrity sha512-USJdzopslLC7JVMu7v58SA/g0NWeQeAM16qcR4LHj+wdMbJ+5G64LdZQe9vEHRdgGpgrZU4c2ODAwDEa1MzIDA== + dependencies: + tslib "^1.9.0" + +"@angular/platform-browser-dynamic@^8.2.5": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.5.tgz#9d10e6a6ab11e541892049f41ea6244723a2c9ab" + integrity sha512-4Ewg8I3T0t6/ClLt5ZFZ6ncDTqvEyI84h0K1cnNTsyoup3QKrY/FnklFbZbNl4ONVioHS6fkEg3R+xt1WthhYQ== + dependencies: + tslib "^1.9.0" + +"@angular/platform-browser@^8.2.5": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-8.2.5.tgz#2c71197a7ae1bf3b09f17f0c81c027d3142f8bf2" + integrity sha512-JIm4uOcgQq0oX1oTzRbQpwxFYAEYKiLi/uAPUf2CZeU2lVxMkhScAW0b8+tVFLIJ7IaVx5d2QxZ6HK81r+QSVg== + dependencies: + tslib "^1.9.0" + "@babel/code-frame@7.5.5", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" @@ -72,7 +114,7 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/helper-create-class-features-plugin@^7.5.5": +"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== @@ -262,6 +304,15 @@ "@babel/helper-create-class-features-plugin" "^7.5.5" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-proposal-decorators@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" + integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/plugin-proposal-dynamic-import@^7.5.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" @@ -341,6 +392,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-decorators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" + integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" @@ -2971,6 +3029,13 @@ babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== +babel-plugin-transform-typescript-metadata@*: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.2.2.tgz#fc44611187409ed9d5cb372ca2f85939a359cada" + integrity sha512-wWRw1p3IDNZN8l3UOLgeScq9Nhh4lvxT7ZOvUzYi5sMw8lUWW+KdRlnBeQKehHAsgDs5TR6PvMJmsQ6e6NmKCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-typescript-strip-namespaces@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-typescript-strip-namespaces/-/babel-plugin-typescript-strip-namespaces-1.1.1.tgz#160433b17e424b57cf72e3b4d8f08195ad28d7fd" @@ -4296,7 +4361,7 @@ core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== -core-js@^3.0.0, core-js@^3.1.3: +core-js@^3.0.0, core-js@^3.1.3, core-js@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== @@ -8118,6 +8183,11 @@ jest-worker@24.0.0-alpha.6: dependencies: merge-stream "^1.0.1" +jest-zone-patch@*: + version "0.0.10" + resolved "https://registry.yarnpkg.com/jest-zone-patch/-/jest-zone-patch-0.0.10.tgz#58252f44ab4aad45aaed62a705819577b9709b82" + integrity sha512-K5uHLHgMgi2Eyj74gbY+xSeGGekb5U48bXsgDwgipRbFdaekyZK+TAcp8auamqU4UjrAt5S4sIUZz/2bBNyTTA== + jpegtran-bin@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz#d00aed809fba7aa6f30817e59eee4ddf198f8f10" @@ -12134,6 +12204,13 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" +rxjs@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -14454,3 +14531,8 @@ yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +zone.js@~0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.9.1.tgz#e37c6e5c54c13fae4de26b5ffe8d8e9212da6d9b" + integrity sha512-GkPiJL8jifSrKReKaTZ5jkhrMEgXbXYC+IPo1iquBjayRa0q86w3Dipjn8b415jpitMExe9lV8iTsv8tk3DGag== From 116303baf711df37304986897582eb8078aa24d8 Mon Sep 17 00:00:00 2001 From: Josh Rosenstein Date: Fri, 6 Sep 2019 09:41:05 -0500 Subject: [PATCH 30/97] feat: BigInt Support (#8382) * feat(jest-get-type) include bigint * (jest-matcher-utils) add ensureActualIsNumberOrBigInit Originally planned on just including biginit in ensurenumbers, but the only built in matcher that cant accept biginit would be toBeCloseTo * (expect) add biginit support * Revert gettype to ifelse * Add tests mixing numbers and bigint * bigDumbTypo * babel-plugin-jest-hoist add to whitelist * Wrap BigInt Tests with guard * temp fix test suite must contain at least one test * remove MatchingSnapshot tests due to unsupported env having obsoletes * remove unnecessary bigint check in equals * Remove ensure*NumbersOrBigInt, include BigInt in originals, add `or bigint` to errors * Update snapshots with new error message `number or bigint` * add bigint support to toBeCloseTo, replace ensureNumbersOrBigInt to ensureNumbers * tests(expect) remove temp_test, add bigint tests to matchers.test * tests(jest-matcher-utils) remove temp_tests, add bigint tests to index,test * Update CHANGELOG.md * Update CHANGELOG.md * (babel-preset-jest)-add @babel/plugin-syntax-bigint * Add tests for bigint syntax * Update CHANGELOG.md * :rage2: :abc: * Checking if node6 breaks with lookup * Revert "Checking if node6 breaks with lookup" This reverts commit 592d6f3d815a7038d7d30e0f705463598ec79c32. * Revert "Add tests for bigint syntax" This reverts commit be5cbb615fd0e3ccb76ac11edd972b8c09abbf4a. * Update CHANGELOG.md Co-Authored-By: JoshRosenstein * Remove Default Precision Value and update error msg via code review https://github.com/facebook/jest/pull/8382#discussion_r279918058 https://github.com/facebook/jest/pull/8382#discussion_r279919941 * Replace ensureExpectedIsNumber with ensureExpectedIsNonNegativeInteger for spy matchers https://github.com/facebook/jest/pull/8382/files/fb6655d33f5efac890b77f199bd5b3f7684b1421#r280160170 * Update Matchers interface * Revert Bigint Support for 'toBeCloseTo' * Update CHANGELOG.md * pedrottimark's CR fixes in tests :eyes: :dart: * Update CHANGELOG.md * move changelog entries * fix changelog formatting * Delete unnecessary disable of eslint rules * Update ExpectAPI.md * Update CHANGELOG.md * Edit ExpectAPI.md --- CHANGELOG.md | 9 +- docs/ExpectAPI.md | 28 +- packages/babel-plugin-jest-hoist/src/index.ts | 1 + packages/babel-preset-jest/index.js | 1 + packages/babel-preset-jest/package.json | 1 + .../__snapshots__/spyMatchers.test.js.snap | 96 +++---- .../expect/src/__tests__/matchers.test.js | 243 ++++++++++++++++++ packages/expect/src/matchers.ts | 43 +++- packages/expect/src/spyMatchers.ts | 6 +- packages/expect/src/types.ts | 8 +- .../src/__tests__/getType.test.ts | 4 + .../src/__tests__/isPrimitive.test.ts | 2 + packages/jest-get-type/src/index.ts | 3 + .../__snapshots__/index.test.ts.snap | 16 +- .../src/__tests__/index.test.ts | 18 ++ packages/jest-matcher-utils/src/index.ts | 20 +- yarn.lock | 7 + 17 files changed, 419 insertions(+), 87 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f83f547771a8..574f3c5ac7e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,17 @@ ### Features - `[babel-plugin-jest-hoist]` Show codeframe on static hoisting issues ([#8865](https://github.com/facebook/jest/pull/8865)) +- `[babel-plugin-jest-hoist]` Add `BigInt` to `WHITELISTED_IDENTIFIERS` ([#8382](https://github.com/facebook/jest/pull/8382)) +- `[babel-preset-jest]` Add `@babel/plugin-syntax-bigint` ([#8382](https://github.com/facebook/jest/pull/8382)) +- `[expect]` Add `BigInt` support to `toBeGreaterThan`, `toBeGreaterThanOrEqual`, `toBeLessThan` and `toBeLessThanOrEqual` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) - `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) - `[jest-diff]` Add `changeColor` and `patchColor` options ([#8911](https://github.com/facebook/jest/pull/8911)) - `[@jest/fake-timers]` Add Lolex as implementation of fake timers ([#8897](https://github.com/facebook/jest/pull/8897)) +- `[jest-get-type]` Add `BigInt` support. ([#8382](https://github.com/facebook/jest/pull/8382)) +- `[jest-matcher-utils]` Add `BigInt` support to `ensureNumbers` `ensureActualIsNumber`, `ensureExpectedIsNumber` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) @@ -447,7 +452,7 @@ We skipped 24.2.0 because a draft was accidentally published. Please use `24.3.0 - `[jest-haste-map]` Add `getCacheFilePath` to get the path to the cache file for a `HasteMap` instance ([#7217](https://github.com/facebook/jest/pull/7217)) - `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) -- `[jest-config]` Accept an array as as well as a string for `testRegex`([#7209]https://github.com/facebook/jest/pull/7209)) +- `[jest-config]` Accept an array as as well as a string for `testRegex` ([#7209]https://github.com/facebook/jest/pull/7209)) - `[expect/jest-matcher-utils]` Improve report when assertion fails, part 4 ([#7241](https://github.com/facebook/jest/pull/7241)) - `[expect/jest-matcher-utils]` Improve report when assertion fails, part 5 ([#7557](https://github.com/facebook/jest/pull/7557)) - `[expect]` Check constructor equality in .toStrictEqual() ([#7005](https://github.com/facebook/jest/pull/7005)) @@ -496,7 +501,7 @@ We skipped 24.2.0 because a draft was accidentally published. Please use `24.3.0 - `[jest-jasmine2]` Better error message when a describe block is empty ([#6372](https://github.com/facebook/jest/pull/6372)) - `[jest-jasmine2]` Pending calls inside async tests are reported as pending not failed ([#6782](https://github.com/facebook/jest/pull/6782)) - `[jest-circus]` Better error message when a describe block is empty ([#6372](https://github.com/facebook/jest/pull/6372)) -- `[jest-jasmine2]` Add missing testLocationResults for `xit` and `fit`([#6482](https://github.com/facebook/jest/pull/6482)) +- `[jest-jasmine2]` Add missing testLocationResults for `xit` and `fit` ([#6482](https://github.com/facebook/jest/pull/6482)) - `[expect]` Return false from asymmetric matchers if received value isn’t string ([#7107](https://github.com/facebook/jest/pull/7107)) - `[jest-cli]` Fix unhandled error when a bad revision is provided to `changedSince` ([#7115](https://github.com/facebook/jest/pull/7115)) - `[jest-config]` Moved dynamically assigned `cwd` from `jest-cli` to default configuration in `jest-config` ([#7146](https://github.com/facebook/jest/pull/7146)) diff --git a/docs/ExpectAPI.md b/docs/ExpectAPI.md index 1fcdb23cf921..2dcb31acd31c 100644 --- a/docs/ExpectAPI.md +++ b/docs/ExpectAPI.md @@ -831,7 +831,11 @@ test('this house has my desired features', () => { ### `.toBeCloseTo(number, numDigits?)` -Using exact equality with floating point numbers is a bad idea. Rounding means that intuitive things fail. For example, this test fails: +Use `toBeCloseTo` to compare floating point numbers for approximate equality. + +The optional `numDigits` argument limits the number of digits to check **after** the decimal point. For the default value `2`, the test criterion is `Math.abs(expected - received) < 0.005` (that is, `10 ** -2 / 2`). + +Intuitive equality comparisons often fail, because arithmetic on decimal (base 10) values often have rounding errors in limited precision binary (base 2) representation. For example, this test fails: ```js test('adding works sanely with simple decimals', () => { @@ -839,9 +843,9 @@ test('adding works sanely with simple decimals', () => { }); ``` -It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. Sorry. +It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. -Instead, use `.toBeCloseTo`. Use `numDigits` to control how many digits after the decimal point to check. For example, if you want to be sure that `0.2 + 0.1` is equal to `0.3` with a precision of 5 decimal digits, you can use this test: +For example, this test passes with a precision of 5 digits: ```js test('adding works sanely with simple decimals', () => { @@ -849,7 +853,7 @@ test('adding works sanely with simple decimals', () => { }); ``` -The optional `numDigits` argument has default value `2` which means the criterion is `Math.abs(expected - received) < 0.005` (that is, `10 ** -2 / 2`). +Because floating point errors are the problem that `toBeCloseTo` solves, it does not support big integer values. ### `.toBeDefined()` @@ -885,9 +889,9 @@ test('drinking La Croix does not lead to errors', () => { In JavaScript, there are six falsy values: `false`, `0`, `''`, `null`, `undefined`, and `NaN`. Everything else is truthy. -### `.toBeGreaterThan(number)` +### `.toBeGreaterThan(number | bigint)` -To compare floating point numbers, you can use `toBeGreaterThan`. For example, if you want to test that `ouncesPerCan()` returns a value of more than 10 ounces, write: +Use `toBeGreaterThan` to compare `received > expected` for number or big integer values. For example, test that `ouncesPerCan()` returns a value of more than 10 ounces: ```js test('ounces per can is more than 10', () => { @@ -895,9 +899,9 @@ test('ounces per can is more than 10', () => { }); ``` -### `.toBeGreaterThanOrEqual(number)` +### `.toBeGreaterThanOrEqual(number | bigint)` -To compare floating point numbers, you can use `toBeGreaterThanOrEqual`. For example, if you want to test that `ouncesPerCan()` returns a value of at least 12 ounces, write: +Use `toBeGreaterThanOrEqual` to compare `received >= expected` for number or big integer values. For example, test that `ouncesPerCan()` returns a value of at least 12 ounces: ```js test('ounces per can is at least 12', () => { @@ -905,9 +909,9 @@ test('ounces per can is at least 12', () => { }); ``` -### `.toBeLessThan(number)` +### `.toBeLessThan(number | bigint)` -To compare floating point numbers, you can use `toBeLessThan`. For example, if you want to test that `ouncesPerCan()` returns a value of less than 20 ounces, write: +Use `toBeLessThan` to compare `received < expected` for number or big integer values. For example, test that `ouncesPerCan()` returns a value of less than 20 ounces: ```js test('ounces per can is less than 20', () => { @@ -915,9 +919,9 @@ test('ounces per can is less than 20', () => { }); ``` -### `.toBeLessThanOrEqual(number)` +### `.toBeLessThanOrEqual(number | bigint)` -To compare floating point numbers, you can use `toBeLessThanOrEqual`. For example, if you want to test that `ouncesPerCan()` returns a value of at most 12 ounces, write: +Use `toBeLessThanOrEqual` to compare `received <= expected` for number or big integer values. For example, test that `ouncesPerCan()` returns a value of at most 12 ounces: ```js test('ounces per can is at most 12', () => { diff --git a/packages/babel-plugin-jest-hoist/src/index.ts b/packages/babel-plugin-jest-hoist/src/index.ts index 5a5d51b99fc3..e949ed6e0b9f 100644 --- a/packages/babel-plugin-jest-hoist/src/index.ts +++ b/packages/babel-plugin-jest-hoist/src/index.ts @@ -20,6 +20,7 @@ const WHITELISTED_IDENTIFIERS = new Set( 'Array', 'ArrayBuffer', 'Boolean', + 'BigInt', 'DataView', 'Date', 'Error', diff --git a/packages/babel-preset-jest/index.js b/packages/babel-preset-jest/index.js index 3a6e9a89cba6..c8c235eae479 100644 --- a/packages/babel-preset-jest/index.js +++ b/packages/babel-preset-jest/index.js @@ -9,5 +9,6 @@ module.exports = () => ({ plugins: [ require.resolve('babel-plugin-jest-hoist'), require.resolve('@babel/plugin-syntax-object-rest-spread'), + require.resolve('@babel/plugin-syntax-bigint'), ], }); diff --git a/packages/babel-preset-jest/package.json b/packages/babel-preset-jest/package.json index a3f9869f12ad..797cc217f86b 100644 --- a/packages/babel-preset-jest/package.json +++ b/packages/babel-preset-jest/package.json @@ -9,6 +9,7 @@ "license": "MIT", "main": "index.js", "dependencies": { + "@babel/plugin-syntax-bigint": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.0.0", "babel-plugin-jest-hoist": "^24.9.0" }, diff --git a/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap index 1bf242fcd488..5236afb7b8d8 100644 --- a/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap @@ -743,7 +743,7 @@ Received has value: [Function fn]" exports[`toBeCalledTimes .not only accepts a number argument 1`] = ` "expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -752,7 +752,7 @@ Expected has value: {}" exports[`toBeCalledTimes .not only accepts a number argument 2`] = ` "expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -761,7 +761,7 @@ Expected has value: []" exports[`toBeCalledTimes .not only accepts a number argument 3`] = ` "expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -770,7 +770,7 @@ Expected has value: true" exports[`toBeCalledTimes .not only accepts a number argument 4`] = ` "expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -779,7 +779,7 @@ Expected has value: \\"a\\"" exports[`toBeCalledTimes .not only accepts a number argument 5`] = ` "expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -788,7 +788,7 @@ Expected has value: Map {}" exports[`toBeCalledTimes .not only accepts a number argument 6`] = ` "expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -827,7 +827,7 @@ Received number of calls: 1" exports[`toBeCalledTimes only accepts a number argument 1`] = ` "expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -836,7 +836,7 @@ Expected has value: {}" exports[`toBeCalledTimes only accepts a number argument 2`] = ` "expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -845,7 +845,7 @@ Expected has value: []" exports[`toBeCalledTimes only accepts a number argument 3`] = ` "expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -854,7 +854,7 @@ Expected has value: true" exports[`toBeCalledTimes only accepts a number argument 4`] = ` "expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -863,7 +863,7 @@ Expected has value: \\"a\\"" exports[`toBeCalledTimes only accepts a number argument 5`] = ` "expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -872,7 +872,7 @@ Expected has value: Map {}" exports[`toBeCalledTimes only accepts a number argument 6`] = ` "expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -1068,7 +1068,7 @@ Received has value: [Function fn]" exports[`toHaveBeenCalledTimes .not only accepts a number argument 1`] = ` "expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -1077,7 +1077,7 @@ Expected has value: {}" exports[`toHaveBeenCalledTimes .not only accepts a number argument 2`] = ` "expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -1086,7 +1086,7 @@ Expected has value: []" exports[`toHaveBeenCalledTimes .not only accepts a number argument 3`] = ` "expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -1095,7 +1095,7 @@ Expected has value: true" exports[`toHaveBeenCalledTimes .not only accepts a number argument 4`] = ` "expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -1104,7 +1104,7 @@ Expected has value: \\"a\\"" exports[`toHaveBeenCalledTimes .not only accepts a number argument 5`] = ` "expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -1113,7 +1113,7 @@ Expected has value: Map {}" exports[`toHaveBeenCalledTimes .not only accepts a number argument 6`] = ` "expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -1152,7 +1152,7 @@ Received number of calls: 1" exports[`toHaveBeenCalledTimes only accepts a number argument 1`] = ` "expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -1161,7 +1161,7 @@ Expected has value: {}" exports[`toHaveBeenCalledTimes only accepts a number argument 2`] = ` "expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -1170,7 +1170,7 @@ Expected has value: []" exports[`toHaveBeenCalledTimes only accepts a number argument 3`] = ` "expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -1179,7 +1179,7 @@ Expected has value: true" exports[`toHaveBeenCalledTimes only accepts a number argument 4`] = ` "expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -1188,7 +1188,7 @@ Expected has value: \\"a\\"" exports[`toHaveBeenCalledTimes only accepts a number argument 5`] = ` "expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -1197,7 +1197,7 @@ Expected has value: Map {}" exports[`toHaveBeenCalledTimes only accepts a number argument 6`] = ` "expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -2135,7 +2135,7 @@ Received has value: [Function spy]" exports[`toHaveReturnedTimes .not only accepts a number argument 1`] = ` "expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -2144,7 +2144,7 @@ Expected has value: {}" exports[`toHaveReturnedTimes .not only accepts a number argument 2`] = ` "expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -2153,7 +2153,7 @@ Expected has value: []" exports[`toHaveReturnedTimes .not only accepts a number argument 3`] = ` "expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -2162,7 +2162,7 @@ Expected has value: true" exports[`toHaveReturnedTimes .not only accepts a number argument 4`] = ` "expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -2171,7 +2171,7 @@ Expected has value: \\"a\\"" exports[`toHaveReturnedTimes .not only accepts a number argument 5`] = ` "expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -2180,7 +2180,7 @@ Expected has value: Map {}" exports[`toHaveReturnedTimes .not only accepts a number argument 6`] = ` "expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -2240,7 +2240,7 @@ Received number of calls: 4" exports[`toHaveReturnedTimes only accepts a number argument 1`] = ` "expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -2249,7 +2249,7 @@ Expected has value: {}" exports[`toHaveReturnedTimes only accepts a number argument 2`] = ` "expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -2258,7 +2258,7 @@ Expected has value: []" exports[`toHaveReturnedTimes only accepts a number argument 3`] = ` "expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -2267,7 +2267,7 @@ Expected has value: true" exports[`toHaveReturnedTimes only accepts a number argument 4`] = ` "expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -2276,7 +2276,7 @@ Expected has value: \\"a\\"" exports[`toHaveReturnedTimes only accepts a number argument 5`] = ` "expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -2285,7 +2285,7 @@ Expected has value: Map {}" exports[`toHaveReturnedTimes only accepts a number argument 6`] = ` "expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -2560,7 +2560,7 @@ Received has value: [Function spy]" exports[`toReturnTimes .not only accepts a number argument 1`] = ` "expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -2569,7 +2569,7 @@ Expected has value: {}" exports[`toReturnTimes .not only accepts a number argument 2`] = ` "expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -2578,7 +2578,7 @@ Expected has value: []" exports[`toReturnTimes .not only accepts a number argument 3`] = ` "expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -2587,7 +2587,7 @@ Expected has value: true" exports[`toReturnTimes .not only accepts a number argument 4`] = ` "expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -2596,7 +2596,7 @@ Expected has value: \\"a\\"" exports[`toReturnTimes .not only accepts a number argument 5`] = ` "expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -2605,7 +2605,7 @@ Expected has value: Map {}" exports[`toReturnTimes .not only accepts a number argument 6`] = ` "expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" @@ -2665,7 +2665,7 @@ Received number of calls: 4" exports[`toReturnTimes only accepts a number argument 1`] = ` "expect(received).toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: object Expected has value: {}" @@ -2674,7 +2674,7 @@ Expected has value: {}" exports[`toReturnTimes only accepts a number argument 2`] = ` "expect(received).toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: array Expected has value: []" @@ -2683,7 +2683,7 @@ Expected has value: []" exports[`toReturnTimes only accepts a number argument 3`] = ` "expect(received).toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: boolean Expected has value: true" @@ -2692,7 +2692,7 @@ Expected has value: true" exports[`toReturnTimes only accepts a number argument 4`] = ` "expect(received).toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: string Expected has value: \\"a\\"" @@ -2701,7 +2701,7 @@ Expected has value: \\"a\\"" exports[`toReturnTimes only accepts a number argument 5`] = ` "expect(received).toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: map Expected has value: Map {}" @@ -2710,7 +2710,7 @@ Expected has value: Map {}" exports[`toReturnTimes only accepts a number argument 6`] = ` "expect(received).toReturnTimes(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a non-negative integer Expected has type: function Expected has value: [Function anonymous]" diff --git a/packages/expect/src/__tests__/matchers.test.js b/packages/expect/src/__tests__/matchers.test.js index a4cbb0800e9b..487cf9cc8fd8 100644 --- a/packages/expect/src/__tests__/matchers.test.js +++ b/packages/expect/src/__tests__/matchers.test.js @@ -19,6 +19,9 @@ afterAll(() => { chalk.enabled = chalkEnabled; }); +/* global BigInt */ +const isBigIntDefined = typeof BigInt === 'function'; + it('should throw if passed two arguments', () => { expect(() => jestExpect('foo', 'bar')).toThrow( new Error('Expect takes at most one argument.'), @@ -197,6 +200,11 @@ describe('.toBe()', () => { jestExpect(null).toBe(null); jestExpect(undefined).toBe(undefined); jestExpect(NaN).toBe(NaN); + if (isBigIntDefined) { + jestExpect(BigInt(1)).not.toBe(BigInt(2)); + jestExpect(BigInt(1)).not.toBe(1); + jestExpect(BigInt(1)).toBe(BigInt(1)); + } }); [ @@ -227,12 +235,30 @@ describe('.toBe()', () => { }); }); + if (isBigIntDefined) { + [[BigInt(1), BigInt(2)], [{a: BigInt(1)}, {a: BigInt(1)}]].forEach( + ([a, b]) => { + it(`fails for: ${stringify(a)} and ${stringify(b)}`, () => { + expect(() => jestExpect(a).toBe(b)).toThrowError('toBe'); + }); + }, + ); + } + [false, 1, 'a', undefined, null, {}, []].forEach(v => { it(`fails for '${stringify(v)}' with '.not'`, () => { expect(() => jestExpect(v).not.toBe(v)).toThrowErrorMatchingSnapshot(); }); }); + if (isBigIntDefined) { + [BigInt(1), BigInt('1')].forEach(v => { + it(`fails for '${stringify(v)}' with '.not'`, () => { + expect(() => jestExpect(v).not.toBe(v)).toThrowError('toBe'); + }); + }); + } + it('does not crash on circular references', () => { const obj = {}; obj.circular = obj; @@ -488,6 +514,17 @@ describe('.toEqual()', () => { }); }); + if (isBigIntDefined) { + [[BigInt(1), BigInt(2)], [BigInt(1), 1]].forEach(([a, b]) => { + test(`{pass: false} expect(${stringify(a)}).toEqual(${stringify( + b, + )})`, () => { + expect(() => jestExpect(a).toEqual(b)).toThrowError('toEqual'); + jestExpect(a).not.toEqual(b); + }); + }); + } + [ [true, true], [1, 1], @@ -619,6 +656,25 @@ describe('.toEqual()', () => { }); }); + if (isBigIntDefined) { + [ + [BigInt(1), BigInt(1)], + [BigInt(0), BigInt('0')], + [[BigInt(1)], [BigInt(1)]], + [[BigInt(1), 2], [BigInt(1), 2]], + [Immutable.List([BigInt(1)]), Immutable.List([BigInt(1)])], + [{a: BigInt(99)}, {a: BigInt(99)}], + [new Set([BigInt(1), BigInt(2)]), new Set([BigInt(1), BigInt(2)])], + ].forEach(([a, b]) => { + test(`{pass: true} expect(${stringify(a)}).not.toEqual(${stringify( + b, + )})`, () => { + jestExpect(a).toEqual(b); + expect(() => jestExpect(a).not.toEqual(b)).toThrowError('toEqual'); + }); + }); + } + test('assertion error matcherResult property contains matcher name, expected and actual values', () => { const actual = {a: 1}; const expected = {a: 2}; @@ -821,6 +877,19 @@ describe('.toBeTruthy(), .toBeFalsy()', () => { }); }); + if (isBigIntDefined) { + [BigInt(1)].forEach(v => { + test(`'${stringify(v)}' is truthy`, () => { + jestExpect(v).toBeTruthy(); + jestExpect(v).not.toBeFalsy(); + + expect(() => jestExpect(v).not.toBeTruthy()).toThrowError('toBeTruthy'); + + expect(() => jestExpect(v).toBeFalsy()).toThrowError('toBeFalsy'); + }); + }); + } + [false, null, NaN, 0, '', undefined].forEach(v => { test(`'${stringify(v)}' is falsy`, () => { jestExpect(v).toBeFalsy(); @@ -833,6 +902,19 @@ describe('.toBeTruthy(), .toBeFalsy()', () => { ).toThrowErrorMatchingSnapshot(); }); }); + + if (isBigIntDefined) { + [BigInt(0)].forEach(v => { + test(`'${stringify(v)}' is falsy`, () => { + jestExpect(v).toBeFalsy(); + jestExpect(v).not.toBeTruthy(); + + expect(() => jestExpect(v).toBeTruthy()).toThrowError('toBeTruthy'); + + expect(() => jestExpect(v).not.toBeFalsy()).toThrowError('toBeFalsy'); + }); + }); + } }); describe('.toBeNaN()', () => { @@ -889,6 +971,23 @@ describe('.toBeDefined(), .toBeUndefined()', () => { }); }); + if (isBigIntDefined) { + [BigInt(1)].forEach(v => { + test(`'${stringify(v)}' is defined`, () => { + jestExpect(v).toBeDefined(); + jestExpect(v).not.toBeUndefined(); + + expect(() => jestExpect(v).not.toBeDefined()).toThrowError( + 'toBeDefined', + ); + + expect(() => jestExpect(v).toBeUndefined()).toThrowError( + 'toBeUndefined', + ); + }); + }); + } + test('undefined is undefined', () => { jestExpect(undefined).toBeUndefined(); jestExpect(undefined).not.toBeDefined(); @@ -983,6 +1082,105 @@ describe( }); }); + if (isBigIntDefined) { + test('can compare BigInt to Numbers', () => { + const a = BigInt(2); + jestExpect(a).toBeGreaterThan(1); + jestExpect(a).toBeGreaterThanOrEqual(2); + jestExpect(2).toBeLessThanOrEqual(a); + jestExpect(a).toBeLessThan(3); + jestExpect(a).toBeLessThanOrEqual(2); + }); + + [ + [BigInt(1), BigInt(2)], + [BigInt(0x11), BigInt(0x22)], + [-1, BigInt(2)], + ].forEach(([small, big]) => { + it(`{pass: true} expect(${stringify(small)}).toBeLessThan(${stringify( + big, + )})`, () => { + jestExpect(small).toBeLessThan(big); + }); + + it(`{pass: false} expect(${stringify(big)}).toBeLessThan(${stringify( + small, + )})`, () => { + jestExpect(big).not.toBeLessThan(small); + }); + + it(`{pass: true} expect(${stringify(big)}).toBeGreaterThan(${stringify( + small, + )})`, () => { + jestExpect(big).toBeGreaterThan(small); + }); + + it(`{pass: false} expect(${stringify( + small, + )}).toBeGreaterThan(${stringify(big)})`, () => { + jestExpect(small).not.toBeGreaterThan(big); + }); + + it(`{pass: true} expect(${stringify( + small, + )}).toBeLessThanOrEqual(${stringify(big)})`, () => { + jestExpect(small).toBeLessThanOrEqual(big); + }); + + it(`{pass: false} expect(${stringify( + big, + )}).toBeLessThanOrEqual(${stringify(small)})`, () => { + jestExpect(big).not.toBeLessThanOrEqual(small); + }); + + it(`{pass: true} expect(${stringify( + big, + )}).toBeGreaterThanOrEqual(${stringify(small)})`, () => { + jestExpect(big).toBeGreaterThanOrEqual(small); + }); + + it(`{pass: false} expect(${stringify( + small, + )}).toBeGreaterThanOrEqual(${stringify(big)})`, () => { + jestExpect(small).not.toBeGreaterThanOrEqual(big); + }); + + it(`throws: [${stringify(small)}, ${stringify(big)}]`, () => { + expect(() => jestExpect(small).toBeGreaterThan(big)).toThrowError( + 'toBeGreaterThan', + ); + + expect(() => jestExpect(small).not.toBeLessThan(big)).toThrowError( + 'toBeLessThan', + ); + + expect(() => jestExpect(big).not.toBeGreaterThan(small)).toThrowError( + 'toBeGreaterThan', + ); + + expect(() => jestExpect(big).toBeLessThan(small)).toThrowError( + 'toBeLessThan', + ); + + expect(() => + jestExpect(small).toBeGreaterThanOrEqual(big), + ).toThrowError('toBeGreaterThanOrEqual'); + + expect(() => + jestExpect(small).not.toBeLessThanOrEqual(big), + ).toThrowError('toBeLessThanOrEqual'); + + expect(() => + jestExpect(big).not.toBeGreaterThanOrEqual(small), + ).toThrowError('toBeGreaterThanOrEqual'); + + expect(() => jestExpect(big).toBeLessThanOrEqual(small)).toThrowError( + 'toBeLessThanOrEqual', + ); + }); + }); + } + [ [1, 1], [Number.MIN_VALUE, Number.MIN_VALUE], @@ -1003,6 +1201,26 @@ describe( ).toThrowErrorMatchingSnapshot(); }); }); + + if (isBigIntDefined) { + [ + [BigInt(1), BigInt(1)], + [BigInt(Number.MAX_SAFE_INTEGER), BigInt(Number.MAX_SAFE_INTEGER)], + ].forEach(([n1, n2]) => { + test(`equal numbers: [${n1}, ${n2}]`, () => { + jestExpect(n1).toBeGreaterThanOrEqual(n2); + jestExpect(n1).toBeLessThanOrEqual(n2); + + expect(() => + jestExpect(n1).not.toBeGreaterThanOrEqual(n2), + ).toThrowError('toBeGreaterThanOrEqual'); + + expect(() => jestExpect(n1).not.toBeLessThanOrEqual(n2)).toThrowError( + 'toBeLessThanOrEqual', + ); + }); + }); + } }, ); @@ -1052,6 +1270,21 @@ describe('.toContain(), .toContainEqual()', () => { }); }); + if (isBigIntDefined) { + [ + [[BigInt(1), BigInt(2), BigInt(3), BigInt(4)], BigInt(1)], + [[1, 2, 3, BigInt(3), 4], BigInt(3)], + ].forEach(([list, v]) => { + it(`'${stringify(list)}' contains '${stringify(v)}'`, () => { + jestExpect(list).toContain(v); + + expect(() => jestExpect(list).not.toContain(v)).toThrowError( + 'toContain', + ); + }); + }); + } + [ [[1, 2, 3], 4], [[null, undefined], 1], @@ -1067,6 +1300,16 @@ describe('.toContain(), .toContainEqual()', () => { }); }); + if (isBigIntDefined) { + [[[BigInt(1), BigInt(2), BigInt(3)], 3]].forEach(([list, v]) => { + it(`'${stringify(list)}' does not contain '${stringify(v)}'`, () => { + jestExpect(list).not.toContain(v); + + expect(() => jestExpect(list).toContain(v)).toThrowError('toContain'); + }); + }); + } + test('error cases', () => { expect(() => jestExpect(null).toContain(1)).toThrowErrorMatchingSnapshot(); }); diff --git a/packages/expect/src/matchers.ts b/packages/expect/src/matchers.ts index 05f05da91c06..ca51e52291ba 100644 --- a/packages/expect/src/matchers.ts +++ b/packages/expect/src/matchers.ts @@ -137,7 +137,26 @@ const matchers: MatchersObject = { secondArgument, secondArgumentColor: (arg: string) => arg, }; - ensureNumbers(received, expected, matcherName, options); + + if (typeof expected !== 'number') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${EXPECTED_COLOR('expected')} value must be a number`, + printWithType('Expected', expected, printExpected), + ), + ); + } + + if (typeof received !== 'number') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must be a number`, + printWithType('Received', received, printReceived), + ), + ); + } let pass = false; let expectedDiff = 0; @@ -210,7 +229,11 @@ const matchers: MatchersObject = { return {message, pass}; }, - toBeGreaterThan(this: MatcherState, received: number, expected: number) { + toBeGreaterThan( + this: MatcherState, + received: number | bigint, + expected: number | bigint, + ) { const matcherName = 'toBeGreaterThan'; const isNot = this.isNot; const options: MatcherHintOptions = { @@ -232,8 +255,8 @@ const matchers: MatchersObject = { toBeGreaterThanOrEqual( this: MatcherState, - received: number, - expected: number, + received: number | bigint, + expected: number | bigint, ) { const matcherName = 'toBeGreaterThanOrEqual'; const isNot = this.isNot; @@ -305,7 +328,11 @@ const matchers: MatchersObject = { return {message, pass}; }, - toBeLessThan(this: MatcherState, received: number, expected: number) { + toBeLessThan( + this: MatcherState, + received: number | bigint, + expected: number | bigint, + ) { const matcherName = 'toBeLessThan'; const isNot = this.isNot; const options: MatcherHintOptions = { @@ -325,7 +352,11 @@ const matchers: MatchersObject = { return {message, pass}; }, - toBeLessThanOrEqual(this: MatcherState, received: number, expected: number) { + toBeLessThanOrEqual( + this: MatcherState, + received: number | bigint, + expected: number | bigint, + ) { const matcherName = 'toBeLessThanOrEqual'; const isNot = this.isNot; const options: MatcherHintOptions = { diff --git a/packages/expect/src/spyMatchers.ts b/packages/expect/src/spyMatchers.ts index b299b01d8b5d..6a2b116ea4f7 100644 --- a/packages/expect/src/spyMatchers.ts +++ b/packages/expect/src/spyMatchers.ts @@ -12,7 +12,7 @@ import { MatcherHintOptions, RECEIVED_COLOR, diff, - ensureExpectedIsNumber, + ensureExpectedIsNonNegativeInteger, ensureNoExpected, matcherErrorMessage, matcherHint, @@ -472,7 +472,7 @@ const createToBeCalledTimesMatcher = (matcherName: string) => isNot: this.isNot, promise: this.promise, }; - ensureExpectedIsNumber(expected, matcherName, options); + ensureExpectedIsNonNegativeInteger(expected, matcherName, options); ensureMockOrSpy(received, matcherName, expectedArgument, options); const receivedIsSpy = isSpy(received); @@ -508,7 +508,7 @@ const createToReturnTimesMatcher = (matcherName: string) => isNot: this.isNot, promise: this.promise, }; - ensureExpectedIsNumber(expected, matcherName, options); + ensureExpectedIsNonNegativeInteger(expected, matcherName, options); ensureMock(received, matcherName, expectedArgument, options); const receivedName = received.getMockName(); diff --git a/packages/expect/src/types.ts b/packages/expect/src/types.ts index 04f3950cbbf9..529d12014df4 100644 --- a/packages/expect/src/types.ts +++ b/packages/expect/src/types.ts @@ -150,11 +150,11 @@ export interface Matchers { /** * For comparing floating point numbers. */ - toBeGreaterThan(expected: number): R; + toBeGreaterThan(expected: number | bigint): R; /** * For comparing floating point numbers. */ - toBeGreaterThanOrEqual(expected: number): R; + toBeGreaterThanOrEqual(expected: number | bigint): R; /** * Ensure that an object is an instance of a class. * This matcher uses `instanceof` underneath. @@ -163,11 +163,11 @@ export interface Matchers { /** * For comparing floating point numbers. */ - toBeLessThan(expected: number): R; + toBeLessThan(expected: number | bigint): R; /** * For comparing floating point numbers. */ - toBeLessThanOrEqual(expected: number): R; + toBeLessThanOrEqual(expected: number | bigint): R; /** * This is the same as `.toBe(null)` but the error messages are a bit nicer. * So use `.toBeNull()` when you want to check that something is null. diff --git a/packages/jest-get-type/src/__tests__/getType.test.ts b/packages/jest-get-type/src/__tests__/getType.test.ts index de4bec59d8db..0f66f444316f 100644 --- a/packages/jest-get-type/src/__tests__/getType.test.ts +++ b/packages/jest-get-type/src/__tests__/getType.test.ts @@ -22,4 +22,8 @@ describe('.getType()', () => { test('map', () => expect(getType(new Map())).toBe('map')); test('set', () => expect(getType(new Set())).toBe('set')); test('date', () => expect(getType(new Date())).toBe('date')); + /* global BigInt */ + if (typeof BigInt === 'function') { + test('bigint', () => expect(getType(BigInt(1))).toBe('bigint')); + } }); diff --git a/packages/jest-get-type/src/__tests__/isPrimitive.test.ts b/packages/jest-get-type/src/__tests__/isPrimitive.test.ts index 9d0a6ab663c4..ecc7edcee1ea 100644 --- a/packages/jest-get-type/src/__tests__/isPrimitive.test.ts +++ b/packages/jest-get-type/src/__tests__/isPrimitive.test.ts @@ -8,6 +8,7 @@ // eslint-disable-next-line import/named import {isPrimitive} from '..'; +/* global BigInt */ describe('.isPrimitive()', () => { test.each([ @@ -20,6 +21,7 @@ describe('.isPrimitive()', () => { 0, NaN, Infinity, + typeof BigInt === 'function' ? BigInt(1) : 1, ])('returns true when given primitive value of: %s', primitive => { expect(isPrimitive(primitive)).toBe(true); }); diff --git a/packages/jest-get-type/src/index.ts b/packages/jest-get-type/src/index.ts index fde928fcc337..c2ceeaf9b604 100644 --- a/packages/jest-get-type/src/index.ts +++ b/packages/jest-get-type/src/index.ts @@ -7,6 +7,7 @@ type ValueType = | 'array' + | 'bigint' | 'boolean' | 'function' | 'null' @@ -37,6 +38,8 @@ function getType(value: unknown): ValueType { return 'number'; } else if (typeof value === 'string') { return 'string'; + } else if (typeof value === 'bigint') { + return 'bigint'; } else if (typeof value === 'object') { if (value != null) { if (value.constructor === RegExp) { diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap index b495afe03d41..63845c6c1b4a 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap @@ -21,7 +21,7 @@ Expected has value: {\\"a\\": 1}" exports[`.ensureNumbers() throws error when expected is not a number (backward compatibility) 1`] = ` "expect(received)[.not].toBeCloseTo(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a number or bigint Expected has type: string Expected has value: \\"not_a_number\\"" @@ -30,7 +30,7 @@ Expected has value: \\"not_a_number\\"" exports[`.ensureNumbers() throws error when received is not a number (backward compatibility) 1`] = ` "expect(received)[.not].toBeCloseTo(expected) -Matcher error: received value must be a number +Matcher error: received value must be a number or bigint Received has type: string Received has value: \\"not_a_number\\"" @@ -39,7 +39,7 @@ Received has value: \\"not_a_number\\"" exports[`.ensureNumbers() with options promise empty isNot false received 1`] = ` "expect(received).toBeCloseTo(expected, precision) -Matcher error: received value must be a number +Matcher error: received value must be a number or bigint Received has type: string Received has value: \\"\\"" @@ -48,7 +48,7 @@ Received has value: \\"\\"" exports[`.ensureNumbers() with options promise empty isNot true expected 1`] = ` "expect(received).not.toBeCloseTo(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a number or bigint Expected has value: undefined" `; @@ -56,7 +56,7 @@ Expected has value: undefined" exports[`.ensureNumbers() with options promise rejects isNot false expected 1`] = ` "expect(received).rejects.toBeCloseTo(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a number or bigint Expected has type: string Expected has value: \\"0\\"" @@ -65,7 +65,7 @@ Expected has value: \\"0\\"" exports[`.ensureNumbers() with options promise rejects isNot true received 1`] = ` "expect(received).rejects.not.toBeCloseTo(expected) -Matcher error: received value must be a number +Matcher error: received value must be a number or bigint Received has type: symbol Received has value: Symbol(0.1)" @@ -74,7 +74,7 @@ Received has value: Symbol(0.1)" exports[`.ensureNumbers() with options promise resolves isNot false received 1`] = ` "expect(received).resolves.toBeCloseTo(expected) -Matcher error: received value must be a number +Matcher error: received value must be a number or bigint Received has type: boolean Received has value: false" @@ -83,7 +83,7 @@ Received has value: false" exports[`.ensureNumbers() with options promise resolves isNot true expected 1`] = ` "expect(received).resolves.not.toBeCloseTo(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a number or bigint Expected has value: null" `; diff --git a/packages/jest-matcher-utils/src/__tests__/index.test.ts b/packages/jest-matcher-utils/src/__tests__/index.test.ts index 2178cecae6cc..8ab83984bdfb 100644 --- a/packages/jest-matcher-utils/src/__tests__/index.test.ts +++ b/packages/jest-matcher-utils/src/__tests__/index.test.ts @@ -18,6 +18,9 @@ import { stringify, } from '../'; +/* global BigInt */ +const isBigIntDefined = typeof BigInt === 'function'; + describe('.stringify()', () => { [ [[], '[]'], @@ -33,6 +36,8 @@ describe('.stringify()', () => { [Infinity, 'Infinity'], [-Infinity, '-Infinity'], [/ab\.c/gi, '/ab\\.c/gi'], + isBigIntDefined ? [BigInt(1), '1n'] : [12, '12'], + isBigIntDefined ? [BigInt(0), '0n'] : [123, '123'], ].forEach(([v, s]) => { test(stringify(v), () => { expect(stringify(v)).toBe(s); @@ -99,6 +104,12 @@ describe('.ensureNumbers()', () => { // @ts-ignore ensureNumbers(1, 2); }).not.toThrow(); + if (isBigIntDefined) { + expect(() => { + // @ts-ignore + ensureNumbers(BigInt(1), BigInt(2)); + }).not.toThrow(); + } }); test('throws error when expected is not a number (backward compatibility)', () => { @@ -219,6 +230,7 @@ describe('diff', () => { ['a', 1], ['a', true], [1, true], + [isBigIntDefined ? BigInt(1) : 1, true], ].forEach(([actual, expected]) => expect(diff(actual, expected)).toBe('diff output'), ); @@ -231,6 +243,12 @@ describe('diff', () => { test('two numbers', () => { expect(diff(1, 2)).toBe(null); }); + + if (isBigIntDefined) { + test('two bigints', () => { + expect(diff(BigInt(1), BigInt(2))).toBe(null); + }); + } }); describe('.pluralize()', () => { diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index 2d03613e4a6a..c1526694b77d 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -152,42 +152,51 @@ export const ensureNoExpected = ( } }; +/** + * Ensures that `actual` is of type `number | bigint` + */ export const ensureActualIsNumber = ( actual: unknown, matcherName: string, options?: MatcherHintOptions, ) => { - if (typeof actual !== 'number') { + if (typeof actual !== 'number' && typeof actual !== 'bigint') { // Prepend maybe not only for backward compatibility. const matcherString = (options ? '' : '[.not]') + matcherName; throw new Error( matcherErrorMessage( matcherHint(matcherString, undefined, undefined, options), - `${RECEIVED_COLOR('received')} value must be a number`, + `${RECEIVED_COLOR('received')} value must be a number or bigint`, printWithType('Received', actual, printReceived), ), ); } }; +/** + * Ensures that `expected` is of type `number | bigint` + */ export const ensureExpectedIsNumber = ( expected: unknown, matcherName: string, options?: MatcherHintOptions, ) => { - if (typeof expected !== 'number') { + if (typeof expected !== 'number' && typeof expected !== 'bigint') { // Prepend maybe not only for backward compatibility. const matcherString = (options ? '' : '[.not]') + matcherName; throw new Error( matcherErrorMessage( matcherHint(matcherString, undefined, undefined, options), - `${EXPECTED_COLOR('expected')} value must be a number`, + `${EXPECTED_COLOR('expected')} value must be a number or bigint`, printWithType('Expected', expected, printExpected), ), ); } }; +/** + * Ensures that `actual` & `expected` are of type `number | bigint` + */ export const ensureNumbers = ( actual: unknown, expected: unknown, @@ -371,6 +380,9 @@ const shouldPrintDiff = (actual: unknown, expected: unknown) => { if (typeof actual === 'number' && typeof expected === 'number') { return false; } + if (typeof actual === 'bigint' && typeof expected === 'bigint') { + return false; + } if (typeof actual === 'boolean' && typeof expected === 'boolean') { return false; } diff --git a/yarn.lock b/yarn.lock index 3a41a9a133f3..3f0c0c749558 100644 --- a/yarn.lock +++ b/yarn.lock @@ -385,6 +385,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-bigint@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.4.4.tgz#3c6f77ba5f4aefbabfd5183117278c9695971093" + integrity sha512-tXyL/mlth1QBl5OwpsABCmAWm4u9xvUIk5nsLd2wWKrC6C4Qm9JvmN18IAGlIXkMvWZTRJVuGRXSLCuz+1hG9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-class-properties@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" From 0df9981ef7836bc1eae31a01a3744dc461a25212 Mon Sep 17 00:00:00 2001 From: Evan Bacon Date: Fri, 6 Sep 2019 22:36:15 -0700 Subject: [PATCH 31/97] [jest-config] Changed "Preset ... not found" validation error (#8924) --- CHANGELOG.md | 1 + .../src/__tests__/normalize.test.js | 23 +++++++++++++ packages/jest-config/src/normalize.ts | 32 ++++++++++++++----- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 574f3c5ac7e7..c59e2dfe29b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - `[babel-plugin-jest-hoist]` Add `BigInt` to `WHITELISTED_IDENTIFIERS` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[babel-preset-jest]` Add `@babel/plugin-syntax-bigint` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[expect]` Add `BigInt` support to `toBeGreaterThan`, `toBeGreaterThanOrEqual`, `toBeLessThan` and `toBeLessThanOrEqual` ([#8382](https://github.com/facebook/jest/pull/8382)) +- `[jest-config]` Throw the full error message and stack when a Jest preset is missing a dependency ([#8924](https://github.com/facebook/jest/pull/8924)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 3620be8a1603..9f085294e276 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -1041,6 +1041,29 @@ describe('preset', () => { }).toThrowErrorMatchingSnapshot(); }); + test('throws when a dependency is missing in the preset', () => { + jest.doMock( + '/node_modules/react-native-js-preset/jest-preset.js', + () => { + require('library-that-is-not-installed'); + return { + transform: {}, + }; + }, + {virtual: true}, + ); + + expect(() => { + normalize( + { + preset: 'react-native-js-preset', + rootDir: '/root/path/foo', + }, + {}, + ); + }).toThrowError(/Cannot find module 'library-that-is-not-installed'/); + }); + test('throws when preset is invalid', () => { jest.doMock('/node_modules/react-native/jest-preset.json', () => jest.requireActual('./jest-preset.json'), diff --git a/packages/jest-config/src/normalize.ts b/packages/jest-config/src/normalize.ts index 01e3999aff1d..fea4d8da24f1 100644 --- a/packages/jest-config/src/normalize.ts +++ b/packages/jest-config/src/normalize.ts @@ -108,19 +108,35 @@ const setupPreset = ( ); } - const preset = Resolver.findNodeModule(presetPath, { - basedir: options.rootDir, - }); + if (error.message.includes('Cannot find module')) { + if (error.message.includes(presetPath)) { + const preset = Resolver.findNodeModule(presetPath, { + basedir: options.rootDir, + }); - if (preset) { + if (preset) { + throw createConfigError( + ` Module ${chalk.bold( + presetPath, + )} should have "jest-preset.js" or "jest-preset.json" file at the root.`, + ); + } + throw createConfigError( + ` Preset ${chalk.bold(presetPath)} not found.`, + ); + } throw createConfigError( - ` Module ${chalk.bold( - presetPath, - )} should have "jest-preset.js" or "jest-preset.json" file at the root.`, + ` Missing dependency in ${chalk.bold(presetPath)}:\n\n ${ + error.message + }\n ${error.stack}`, ); } - throw createConfigError(` Preset ${chalk.bold(presetPath)} not found.`); + throw createConfigError( + ` An unknown error occurred in ${chalk.bold(presetPath)}:\n\n ${ + error.message + }\n ${error.stack}`, + ); } if (options.setupFiles) { From a7f2d0def4a5f72a0172e5988b406f4916098855 Mon Sep 17 00:00:00 2001 From: Chafic Najjar Date: Sat, 7 Sep 2019 13:46:40 +0300 Subject: [PATCH 32/97] Replace `test` with `it` in TutorialAsync.md (#8921) `it` is used everywhere in TutorialAsync.md except for one test where `test` is used. This commit replaces that `test` with an `it` to keep things consistent and because there does not seem to be a good reason to use `test` over `it` here. --- docs/TutorialAsync.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/TutorialAsync.md b/docs/TutorialAsync.md index 2bcd2e69bf34..8ae673757d61 100644 --- a/docs/TutorialAsync.md +++ b/docs/TutorialAsync.md @@ -116,7 +116,7 @@ Errors can be handled using the `.catch` method. Make sure to add `expect.assert ```js // Testing for async errors using Promise.catch. -test('tests error with promises', () => { +it('tests error with promises', () => { expect.assertions(1); return user.getUserName(2).catch(e => expect(e).toEqual({ From 04efbeba5c9632ff2108840ac13d4164627567da Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sun, 8 Sep 2019 11:26:47 +0200 Subject: [PATCH 33/97] fix: cache transforms within a worker (#8890) * fix: cache transforms within a worker * windows test fix --- CHANGELOG.md | 1 + e2e/__tests__/transform.test.ts | 20 +++++++++++++++++++ e2e/transform/cache/__tests__/aTests.js | 12 +++++++++++ e2e/transform/cache/__tests__/bTests.js | 12 +++++++++++ e2e/transform/cache/__tests__/cTests.js | 12 +++++++++++ e2e/transform/cache/__tests__/dTests.js | 12 +++++++++++ e2e/transform/cache/common-file.js | 8 ++++++++ e2e/transform/cache/package.json | 10 ++++++++++ e2e/transform/cache/transformer.js | 16 +++++++++++++++ .../jest-transform/src/ScriptTransformer.ts | 12 +++++------ 10 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 e2e/transform/cache/__tests__/aTests.js create mode 100644 e2e/transform/cache/__tests__/bTests.js create mode 100644 e2e/transform/cache/__tests__/cTests.js create mode 100644 e2e/transform/cache/__tests__/dTests.js create mode 100644 e2e/transform/cache/common-file.js create mode 100644 e2e/transform/cache/package.json create mode 100644 e2e/transform/cache/transformer.js diff --git a/CHANGELOG.md b/CHANGELOG.md index c59e2dfe29b9..b46bf8c25f54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) - `[jest-snapshot]` Distinguish empty string from external snapshot not written ([#8880](https://github.com/facebook/jest/pull/8880)) - `[jest-snapshot]` [**BREAKING**] Distinguish empty string from internal snapshot not written ([#8898](https://github.com/facebook/jest/pull/8898)) +- `[jest-transform]` Properly cache transformed files across tests ([#8890](https://github.com/facebook/jest/pull/8890)) ### Chore & Maintenance diff --git a/e2e/__tests__/transform.test.ts b/e2e/__tests__/transform.test.ts index 68f067ea3d47..c736dea1a24b 100644 --- a/e2e/__tests__/transform.test.ts +++ b/e2e/__tests__/transform.test.ts @@ -185,3 +185,23 @@ describe('transformer-config', () => { expect(stdout).toMatchSnapshot(); }); }); + +describe('transformer caching', () => { + const dir = path.resolve(__dirname, '../transform/cache'); + const transformedFile = path.resolve(dir, './common-file.js'); + + it('does not rerun transform within worker', () => { + // --no-cache because babel can cache stuff and result in false green + const {stdout} = runJest(dir, ['--no-cache', '-w=2']); + + const loggedFiles = stdout.split('\n'); + + // Verify any lines logged are _just_ the file we care about + loggedFiles.forEach(line => { + expect(line).toBe(transformedFile); + }); + + // We run with 2 workers, so the file should be transformed twice + expect(loggedFiles).toHaveLength(2); + }); +}); diff --git a/e2e/transform/cache/__tests__/aTests.js b/e2e/transform/cache/__tests__/aTests.js new file mode 100644 index 000000000000..2f8f32a8b022 --- /dev/null +++ b/e2e/transform/cache/__tests__/aTests.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const phrase = require('../common-file'); + +test('A', () => { + expect(phrase).toBe('hello'); +}); diff --git a/e2e/transform/cache/__tests__/bTests.js b/e2e/transform/cache/__tests__/bTests.js new file mode 100644 index 000000000000..c896f74c4967 --- /dev/null +++ b/e2e/transform/cache/__tests__/bTests.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const phrase = require('../common-file'); + +test('B', () => { + expect(phrase).toBe('hello'); +}); diff --git a/e2e/transform/cache/__tests__/cTests.js b/e2e/transform/cache/__tests__/cTests.js new file mode 100644 index 000000000000..55827295d0af --- /dev/null +++ b/e2e/transform/cache/__tests__/cTests.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const phrase = require('../common-file'); + +test('C', () => { + expect(phrase).toBe('hello'); +}); diff --git a/e2e/transform/cache/__tests__/dTests.js b/e2e/transform/cache/__tests__/dTests.js new file mode 100644 index 000000000000..74716a8e9aa3 --- /dev/null +++ b/e2e/transform/cache/__tests__/dTests.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const phrase = require('../common-file'); + +test('D', () => { + expect(phrase).toBe('hello'); +}); diff --git a/e2e/transform/cache/common-file.js b/e2e/transform/cache/common-file.js new file mode 100644 index 000000000000..798c701db1fa --- /dev/null +++ b/e2e/transform/cache/common-file.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +module.exports = 'hello'; diff --git a/e2e/transform/cache/package.json b/e2e/transform/cache/package.json new file mode 100644 index 000000000000..d75bca46c3ba --- /dev/null +++ b/e2e/transform/cache/package.json @@ -0,0 +1,10 @@ +{ + "name": "cache", + "version": "1.0.0", + "jest": { + "testEnvironment": "node", + "transform": { + "^.+\\.js$": "/transformer.js" + } + } +} diff --git a/e2e/transform/cache/transformer.js b/e2e/transform/cache/transformer.js new file mode 100644 index 000000000000..10d02e637f80 --- /dev/null +++ b/e2e/transform/cache/transformer.js @@ -0,0 +1,16 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +module.exports = { + process(src, path) { + if (path.includes('common')) { + console.log(path); + } + + return src; + }, +}; diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 3057dbe6586e..9079e9f90efd 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -43,10 +43,7 @@ const {version: VERSION} = require('../package.json'); // This data structure is used to avoid recalculating some data every time that // we need to transform a file. Since ScriptTransformer is instantiated for each // file we need to keep this object in the local scope of this module. -const projectCaches: WeakMap< - Config.ProjectConfig, - ProjectCache -> = new WeakMap(); +const projectCaches = new Map(); // To reset the cache for specific changesets (rather than package version). const CACHE_VERSION = '1'; @@ -74,17 +71,18 @@ export default class ScriptTransformer { this._transformCache = new Map(); this._transformConfigCache = new Map(); - let projectCache = projectCaches.get(config); + const configString = stableStringify(this._config); + let projectCache = projectCaches.get(configString); if (!projectCache) { projectCache = { - configString: stableStringify(this._config), + configString, ignorePatternsRegExp: calcIgnorePatternRegExp(this._config), transformRegExp: calcTransformRegExp(this._config), transformedFiles: new Map(), }; - projectCaches.set(config, projectCache); + projectCaches.set(configString, projectCache); } this._cache = projectCache; From 0935f7c2cd7780e47365511e35efc829ba359df4 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sun, 8 Sep 2019 15:06:03 +0200 Subject: [PATCH 34/97] feat: add fakeTimersLolex to the test environments (#8925) * feat: add fakeTimersLolex to the test environments * link to PR --- CHANGELOG.md | 2 ++ TestUtils.ts | 2 +- .../log_debug_messages.test.ts.snap | 2 +- .../src/__tests__/jsdom_environment.test.ts | 18 +++++++---- packages/jest-environment-jsdom/src/index.ts | 31 ++++++++++++------- .../src/__tests__/node_environment.test.ts | 23 +++++++++----- packages/jest-environment-node/src/index.ts | 23 +++++++++----- packages/jest-environment/src/index.ts | 8 +++-- .../jest-fake-timers/src/FakeTimersLolex.ts | 8 ++--- .../script_transformer.test.js.snap | 6 ++-- 10 files changed, 78 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b46bf8c25f54..8697dd4ac315 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) - `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) - `[jest-diff]` Add `changeColor` and `patchColor` options ([#8911](https://github.com/facebook/jest/pull/8911)) +- `[jest-environment-jsdom]` Add `fakeTimersLolex` ([#8925](https://github.com/facebook/jest/pull/8925)) +- `[jest-environment-node]` Add `fakeTimersLolex` ([#8925](https://github.com/facebook/jest/pull/8925)) - `[@jest/fake-timers]` Add Lolex as implementation of fake timers ([#8897](https://github.com/facebook/jest/pull/8897)) - `[jest-get-type]` Add `BigInt` support. ([#8382](https://github.com/facebook/jest/pull/8382)) - `[jest-matcher-utils]` Add `BigInt` support to `ensureNumbers` `ensureActualIsNumber`, `ensureExpectedIsNumber` ([#8382](https://github.com/facebook/jest/pull/8382)) diff --git a/TestUtils.ts b/TestUtils.ts index 827890f683fa..7bfca86f8bba 100644 --- a/TestUtils.ts +++ b/TestUtils.ts @@ -115,7 +115,7 @@ const DEFAULT_PROJECT_CONFIG: Config.ProjectConfig = { testPathIgnorePatterns: [], testRegex: ['\\.test\\.js$'], testRunner: 'jest-jasmine2', - testURL: '', + testURL: 'http://localhost', timers: 'real', transform: [], transformIgnorePatterns: [], diff --git a/packages/jest-core/src/lib/__tests__/__snapshots__/log_debug_messages.test.ts.snap b/packages/jest-core/src/lib/__tests__/__snapshots__/log_debug_messages.test.ts.snap index 89a8b2173338..95f5df413db5 100644 --- a/packages/jest-core/src/lib/__tests__/__snapshots__/log_debug_messages.test.ts.snap +++ b/packages/jest-core/src/lib/__tests__/__snapshots__/log_debug_messages.test.ts.snap @@ -56,7 +56,7 @@ exports[`prints the config object 1`] = ` "\\\\.test\\\\.js$" ], "testRunner": "myRunner", - "testURL": "", + "testURL": "http://localhost", "timers": "real", "transform": [], "transformIgnorePatterns": [], diff --git a/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts b/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts index 50c58fe43c93..d3b2439ec7a8 100644 --- a/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts +++ b/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts @@ -4,21 +4,27 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -'use strict'; -const JSDomEnvironment = jest.requireActual('../'); +import JSDomEnvironment = require('../'); +import {makeProjectConfig} from '../../../../TestUtils'; describe('JSDomEnvironment', () => { it('should configure setTimeout/setInterval to use the browser api', () => { - const env1 = new JSDomEnvironment({}); + const env = new JSDomEnvironment(makeProjectConfig()); - env1.fakeTimers.useFakeTimers(); + env.fakeTimers!.useFakeTimers(); - const timer1 = env1.global.setTimeout(() => {}, 0); - const timer2 = env1.global.setInterval(() => {}, 0); + const timer1 = env.global.setTimeout(() => {}, 0); + const timer2 = env.global.setInterval(() => {}, 0); [timer1, timer2].forEach(timer => { expect(typeof timer).toBe('number'); }); }); + + it('has Lolex fake timers implementation', () => { + const env = new JSDomEnvironment(makeProjectConfig()); + + expect(env.fakeTimersLolex).toBeDefined(); + }); }); diff --git a/packages/jest-environment-jsdom/src/index.ts b/packages/jest-environment-jsdom/src/index.ts index c294b7610798..557afc1a6b36 100644 --- a/packages/jest-environment-jsdom/src/index.ts +++ b/packages/jest-environment-jsdom/src/index.ts @@ -8,8 +8,11 @@ import {Script} from 'vm'; import {Config, Global} from '@jest/types'; import {installCommonGlobals} from 'jest-util'; -import mock = require('jest-mock'); -import {JestFakeTimers as FakeTimers} from '@jest/fake-timers'; +import {ModuleMocker} from 'jest-mock'; +import { + JestFakeTimers as LegacyFakeTimers, + LolexFakeTimers, +} from '@jest/fake-timers'; import {EnvironmentContext, JestEnvironment} from '@jest/environment'; import {JSDOM, VirtualConsole} from 'jsdom'; @@ -24,10 +27,11 @@ type Win = Window & class JSDOMEnvironment implements JestEnvironment { dom: JSDOM | null; - fakeTimers: FakeTimers | null; + fakeTimers: LegacyFakeTimers | null; + fakeTimersLolex: LolexFakeTimers | null; global: Win; errorEventListener: ((event: Event & {error: Error}) => void) | null; - moduleMocker: mock.ModuleMocker | null; + moduleMocker: ModuleMocker | null; constructor(config: Config.ProjectConfig, options: EnvironmentContext = {}) { this.dom = new JSDOM('', { @@ -78,29 +82,32 @@ class JSDOMEnvironment implements JestEnvironment { return originalRemoveListener.apply(this, args); }; - this.moduleMocker = new mock.ModuleMocker(global as any); + this.moduleMocker = new ModuleMocker(global as any); const timerConfig = { idToRef: (id: number) => id, refToId: (ref: number) => ref, }; - this.fakeTimers = new FakeTimers({ + this.fakeTimers = new LegacyFakeTimers({ config, - global: global as any, + global, moduleMocker: this.moduleMocker, timerConfig, }); - } - setup() { - return Promise.resolve(); + this.fakeTimersLolex = new LolexFakeTimers({config, global}); } - teardown() { + async setup() {} + + async teardown() { if (this.fakeTimers) { this.fakeTimers.dispose(); } + if (this.fakeTimersLolex) { + this.fakeTimersLolex.dispose(); + } if (this.global) { if (this.errorEventListener) { this.global.removeEventListener('error', this.errorEventListener); @@ -114,7 +121,7 @@ class JSDOMEnvironment implements JestEnvironment { this.global = null; this.dom = null; this.fakeTimers = null; - return Promise.resolve(); + this.fakeTimersLolex = null; } runScript(script: Script) { diff --git a/packages/jest-environment-node/src/__tests__/node_environment.test.ts b/packages/jest-environment-node/src/__tests__/node_environment.test.ts index 7e5c3af2513c..35ee577c3a62 100644 --- a/packages/jest-environment-node/src/__tests__/node_environment.test.ts +++ b/packages/jest-environment-node/src/__tests__/node_environment.test.ts @@ -4,42 +4,49 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -'use strict'; -const NodeEnvironment = jest.requireActual('../'); +import NodeEnvironment = require('../'); +import {makeProjectConfig} from '../../../../TestUtils'; describe('NodeEnvironment', () => { it('uses a copy of the process object', () => { - const env1 = new NodeEnvironment({}); - const env2 = new NodeEnvironment({}); + const env1 = new NodeEnvironment(makeProjectConfig()); + const env2 = new NodeEnvironment(makeProjectConfig()); expect(env1.global.process).not.toBe(env2.global.process); }); it('exposes process.on', () => { - const env1 = new NodeEnvironment({}); + const env1 = new NodeEnvironment(makeProjectConfig()); expect(env1.global.process.on).not.toBe(null); }); it('exposes global.global', () => { - const env1 = new NodeEnvironment({}); + const env1 = new NodeEnvironment(makeProjectConfig()); expect(env1.global.global).toBe(env1.global); }); it('should configure setTimeout/setInterval to use the node api', () => { - const env1 = new NodeEnvironment({}); + const env1 = new NodeEnvironment(makeProjectConfig()); - env1.fakeTimers.useFakeTimers(); + env1.fakeTimers!.useFakeTimers(); const timer1 = env1.global.setTimeout(() => {}, 0); const timer2 = env1.global.setInterval(() => {}, 0); [timer1, timer2].forEach(timer => { + // @ts-ignore expect(timer.id).not.toBeUndefined(); expect(typeof timer.ref).toBe('function'); expect(typeof timer.unref).toBe('function'); }); }); + + it('has Lolex fake timers implementation', () => { + const env = new NodeEnvironment(makeProjectConfig()); + + expect(env.fakeTimersLolex).toBeDefined(); + }); }); diff --git a/packages/jest-environment-node/src/index.ts b/packages/jest-environment-node/src/index.ts index e33a92dc2ba5..0e2166acf6a0 100644 --- a/packages/jest-environment-node/src/index.ts +++ b/packages/jest-environment-node/src/index.ts @@ -9,7 +9,10 @@ import {Context, Script, createContext, runInContext} from 'vm'; import {Config, Global} from '@jest/types'; import {ModuleMocker} from 'jest-mock'; import {installCommonGlobals} from 'jest-util'; -import {JestFakeTimers as FakeTimers} from '@jest/fake-timers'; +import { + JestFakeTimers as LegacyFakeTimers, + LolexFakeTimers, +} from '@jest/fake-timers'; import {JestEnvironment} from '@jest/environment'; type Timer = { @@ -20,7 +23,8 @@ type Timer = { class NodeEnvironment implements JestEnvironment { context: Context | null; - fakeTimers: FakeTimers | null; + fakeTimers: LegacyFakeTimers | null; + fakeTimersLolex: LolexFakeTimers | null; global: Global.Global; moduleMocker: ModuleMocker | null; @@ -70,25 +74,28 @@ class NodeEnvironment implements JestEnvironment { refToId: timerRefToId, }; - this.fakeTimers = new FakeTimers({ + this.fakeTimers = new LegacyFakeTimers({ config, global, moduleMocker: this.moduleMocker, timerConfig, }); - } - setup() { - return Promise.resolve(); + this.fakeTimersLolex = new LolexFakeTimers({config, global}); } - teardown() { + async setup() {} + + async teardown() { if (this.fakeTimers) { this.fakeTimers.dispose(); } + if (this.fakeTimersLolex) { + this.fakeTimersLolex.dispose(); + } this.context = null; this.fakeTimers = null; - return Promise.resolve(); + this.fakeTimersLolex = null; } // TS infers the return type to be `any`, since that's what `runInContext` diff --git a/packages/jest-environment/src/index.ts b/packages/jest-environment/src/index.ts index 374ce164ee82..2dd7fa911480 100644 --- a/packages/jest-environment/src/index.ts +++ b/packages/jest-environment/src/index.ts @@ -9,7 +9,10 @@ import {Script} from 'vm'; import {Circus, Config, Global} from '@jest/types'; import jestMock = require('jest-mock'); import {ScriptTransformer} from '@jest/transform'; -import {JestFakeTimers as FakeTimers} from '@jest/fake-timers'; +import { + JestFakeTimers as LegacyFakeTimers, + LolexFakeTimers, +} from '@jest/fake-timers'; type JestMockFn = typeof jestMock.fn; type JestMockSpyOn = typeof jestMock.spyOn; @@ -37,7 +40,8 @@ export type ModuleWrapper = ( export declare class JestEnvironment { constructor(config: Config.ProjectConfig, context?: EnvironmentContext); global: Global.Global; - fakeTimers: FakeTimers | null; + fakeTimers: LegacyFakeTimers | null; + fakeTimersLolex: LolexFakeTimers | null; moduleMocker: jestMock.ModuleMocker | null; runScript( script: Script, diff --git a/packages/jest-fake-timers/src/FakeTimersLolex.ts b/packages/jest-fake-timers/src/FakeTimersLolex.ts index 7964e0ccf8cd..816fdddafa6a 100644 --- a/packages/jest-fake-timers/src/FakeTimersLolex.ts +++ b/packages/jest-fake-timers/src/FakeTimersLolex.ts @@ -94,11 +94,11 @@ export default class FakeTimers { } useFakeTimers() { - const toFake = Object.keys(this._lolex.timers) as Array< - keyof LolexWithContext['timers'] - >; - if (!this._fakingTime) { + const toFake = Object.keys(this._lolex.timers) as Array< + keyof LolexWithContext['timers'] + >; + this._clock = this._lolex.install({ loopLimit: this._maxLoops, now: Date.now(), diff --git a/packages/jest-transform/src/__tests__/__snapshots__/script_transformer.test.js.snap b/packages/jest-transform/src/__tests__/__snapshots__/script_transformer.test.js.snap index d181fd0528a6..49de0f86ac1c 100644 --- a/packages/jest-transform/src/__tests__/__snapshots__/script_transformer.test.js.snap +++ b/packages/jest-transform/src/__tests__/__snapshots__/script_transformer.test.js.snap @@ -55,7 +55,7 @@ Object { "\\\\.test\\\\.js$", ], "testRunner": "jest-jasmine2", - "testURL": "", + "testURL": "http://localhost", "timers": "real", "transform": Array [ Array [ @@ -218,7 +218,7 @@ exports[`ScriptTransformer uses multiple preprocessors 1`] = ` const TRANSFORMED = { filename: '/fruits/banana.js', script: 'module.exports = \\"banana\\";', - config: '{\\"automock\\":false,\\"browser\\":false,\\"cache\\":true,\\"cacheDirectory\\":\\"/cache/\\",\\"clearMocks\\":false,\\"coveragePathIgnorePatterns\\":[],\\"cwd\\":\\"/test_root_dir/\\",\\"detectLeaks\\":false,\\"detectOpenHandles\\":false,\\"errorOnDeprecated\\":false,\\"extraGlobals\\":[],\\"filter\\":null,\\"forceCoverageMatch\\":[],\\"globalSetup\\":null,\\"globalTeardown\\":null,\\"globals\\":{},\\"haste\\":{\\"providesModuleNodeModules\\":[]},\\"moduleDirectories\\":[],\\"moduleFileExtensions\\":[\\"js\\"],\\"moduleLoader\\":\\"/test_module_loader_path\\",\\"moduleNameMapper\\":[],\\"modulePathIgnorePatterns\\":[],\\"modulePaths\\":[],\\"name\\":\\"test\\",\\"prettierPath\\":\\"prettier\\",\\"resetMocks\\":false,\\"resetModules\\":false,\\"resolver\\":null,\\"restoreMocks\\":false,\\"rootDir\\":\\"/\\",\\"roots\\":[],\\"runner\\":\\"jest-runner\\",\\"setupFiles\\":[],\\"setupFilesAfterEnv\\":[],\\"skipFilter\\":false,\\"skipNodeResolution\\":false,\\"snapshotResolver\\":null,\\"snapshotSerializers\\":[],\\"testEnvironment\\":\\"node\\",\\"testEnvironmentOptions\\":{},\\"testLocationInResults\\":false,\\"testMatch\\":[],\\"testPathIgnorePatterns\\":[],\\"testRegex\\":[\\"\\\\\\\\.test\\\\\\\\.js$\\"],\\"testRunner\\":\\"jest-jasmine2\\",\\"testURL\\":\\"\\",\\"timers\\":\\"real\\",\\"transform\\":[[\\"^.+\\\\\\\\.js$\\",\\"test_preprocessor\\"],[\\"^.+\\\\\\\\.css$\\",\\"css-preprocessor\\"]],\\"transformIgnorePatterns\\":[\\"/node_modules/\\"],\\"unmockedModulePathPatterns\\":null,\\"watchPathIgnorePatterns\\":[]}', + config: '{\\"automock\\":false,\\"browser\\":false,\\"cache\\":true,\\"cacheDirectory\\":\\"/cache/\\",\\"clearMocks\\":false,\\"coveragePathIgnorePatterns\\":[],\\"cwd\\":\\"/test_root_dir/\\",\\"detectLeaks\\":false,\\"detectOpenHandles\\":false,\\"errorOnDeprecated\\":false,\\"extraGlobals\\":[],\\"filter\\":null,\\"forceCoverageMatch\\":[],\\"globalSetup\\":null,\\"globalTeardown\\":null,\\"globals\\":{},\\"haste\\":{\\"providesModuleNodeModules\\":[]},\\"moduleDirectories\\":[],\\"moduleFileExtensions\\":[\\"js\\"],\\"moduleLoader\\":\\"/test_module_loader_path\\",\\"moduleNameMapper\\":[],\\"modulePathIgnorePatterns\\":[],\\"modulePaths\\":[],\\"name\\":\\"test\\",\\"prettierPath\\":\\"prettier\\",\\"resetMocks\\":false,\\"resetModules\\":false,\\"resolver\\":null,\\"restoreMocks\\":false,\\"rootDir\\":\\"/\\",\\"roots\\":[],\\"runner\\":\\"jest-runner\\",\\"setupFiles\\":[],\\"setupFilesAfterEnv\\":[],\\"skipFilter\\":false,\\"skipNodeResolution\\":false,\\"snapshotResolver\\":null,\\"snapshotSerializers\\":[],\\"testEnvironment\\":\\"node\\",\\"testEnvironmentOptions\\":{},\\"testLocationInResults\\":false,\\"testMatch\\":[],\\"testPathIgnorePatterns\\":[],\\"testRegex\\":[\\"\\\\\\\\.test\\\\\\\\.js$\\"],\\"testRunner\\":\\"jest-jasmine2\\",\\"testURL\\":\\"http://localhost\\",\\"timers\\":\\"real\\",\\"transform\\":[[\\"^.+\\\\\\\\.js$\\",\\"test_preprocessor\\"],[\\"^.+\\\\\\\\.css$\\",\\"css-preprocessor\\"]],\\"transformIgnorePatterns\\":[\\"/node_modules/\\"],\\"unmockedModulePathPatterns\\":null,\\"watchPathIgnorePatterns\\":[]}', }; }});" @@ -244,7 +244,7 @@ exports[`ScriptTransformer uses the supplied preprocessor 1`] = ` const TRANSFORMED = { filename: '/fruits/banana.js', script: 'module.exports = \\"banana\\";', - config: '{\\"automock\\":false,\\"browser\\":false,\\"cache\\":true,\\"cacheDirectory\\":\\"/cache/\\",\\"clearMocks\\":false,\\"coveragePathIgnorePatterns\\":[],\\"cwd\\":\\"/test_root_dir/\\",\\"detectLeaks\\":false,\\"detectOpenHandles\\":false,\\"errorOnDeprecated\\":false,\\"extraGlobals\\":[],\\"filter\\":null,\\"forceCoverageMatch\\":[],\\"globalSetup\\":null,\\"globalTeardown\\":null,\\"globals\\":{},\\"haste\\":{\\"providesModuleNodeModules\\":[]},\\"moduleDirectories\\":[],\\"moduleFileExtensions\\":[\\"js\\"],\\"moduleLoader\\":\\"/test_module_loader_path\\",\\"moduleNameMapper\\":[],\\"modulePathIgnorePatterns\\":[],\\"modulePaths\\":[],\\"name\\":\\"test\\",\\"prettierPath\\":\\"prettier\\",\\"resetMocks\\":false,\\"resetModules\\":false,\\"resolver\\":null,\\"restoreMocks\\":false,\\"rootDir\\":\\"/\\",\\"roots\\":[],\\"runner\\":\\"jest-runner\\",\\"setupFiles\\":[],\\"setupFilesAfterEnv\\":[],\\"skipFilter\\":false,\\"skipNodeResolution\\":false,\\"snapshotResolver\\":null,\\"snapshotSerializers\\":[],\\"testEnvironment\\":\\"node\\",\\"testEnvironmentOptions\\":{},\\"testLocationInResults\\":false,\\"testMatch\\":[],\\"testPathIgnorePatterns\\":[],\\"testRegex\\":[\\"\\\\\\\\.test\\\\\\\\.js$\\"],\\"testRunner\\":\\"jest-jasmine2\\",\\"testURL\\":\\"\\",\\"timers\\":\\"real\\",\\"transform\\":[[\\"^.+\\\\\\\\.js$\\",\\"test_preprocessor\\"]],\\"transformIgnorePatterns\\":[\\"/node_modules/\\"],\\"unmockedModulePathPatterns\\":null,\\"watchPathIgnorePatterns\\":[]}', + config: '{\\"automock\\":false,\\"browser\\":false,\\"cache\\":true,\\"cacheDirectory\\":\\"/cache/\\",\\"clearMocks\\":false,\\"coveragePathIgnorePatterns\\":[],\\"cwd\\":\\"/test_root_dir/\\",\\"detectLeaks\\":false,\\"detectOpenHandles\\":false,\\"errorOnDeprecated\\":false,\\"extraGlobals\\":[],\\"filter\\":null,\\"forceCoverageMatch\\":[],\\"globalSetup\\":null,\\"globalTeardown\\":null,\\"globals\\":{},\\"haste\\":{\\"providesModuleNodeModules\\":[]},\\"moduleDirectories\\":[],\\"moduleFileExtensions\\":[\\"js\\"],\\"moduleLoader\\":\\"/test_module_loader_path\\",\\"moduleNameMapper\\":[],\\"modulePathIgnorePatterns\\":[],\\"modulePaths\\":[],\\"name\\":\\"test\\",\\"prettierPath\\":\\"prettier\\",\\"resetMocks\\":false,\\"resetModules\\":false,\\"resolver\\":null,\\"restoreMocks\\":false,\\"rootDir\\":\\"/\\",\\"roots\\":[],\\"runner\\":\\"jest-runner\\",\\"setupFiles\\":[],\\"setupFilesAfterEnv\\":[],\\"skipFilter\\":false,\\"skipNodeResolution\\":false,\\"snapshotResolver\\":null,\\"snapshotSerializers\\":[],\\"testEnvironment\\":\\"node\\",\\"testEnvironmentOptions\\":{},\\"testLocationInResults\\":false,\\"testMatch\\":[],\\"testPathIgnorePatterns\\":[],\\"testRegex\\":[\\"\\\\\\\\.test\\\\\\\\.js$\\"],\\"testRunner\\":\\"jest-jasmine2\\",\\"testURL\\":\\"http://localhost\\",\\"timers\\":\\"real\\",\\"transform\\":[[\\"^.+\\\\\\\\.js$\\",\\"test_preprocessor\\"]],\\"transformIgnorePatterns\\":[\\"/node_modules/\\"],\\"unmockedModulePathPatterns\\":null,\\"watchPathIgnorePatterns\\":[]}', }; }});" From 70df308f646b2ef9409448c5e8fedc3284fa4fa8 Mon Sep 17 00:00:00 2001 From: d4vidi Date: Mon, 9 Sep 2019 15:34:32 +0300 Subject: [PATCH 35/97] chore: fix NodeEnvironment import in README.md (#8933) --- packages/jest-circus/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-circus/README.md b/packages/jest-circus/README.md index 0c5e282ffc3e..61a4519e4a23 100644 --- a/packages/jest-circus/README.md +++ b/packages/jest-circus/README.md @@ -12,7 +12,7 @@ Circus is a flux-based test runner for Jest that is fast, easy to maintain, and Circus allows you to bind to events via an optional event handler on any [custom environment](https://jestjs.io/docs/en/configuration#testenvironment-string). See the [type definitions](https://github.com/facebook/jest/blob/master/packages/jest-circus/src/types.ts) for more information on the events and state data currently available. ```js -import {NodeEnvironment} from 'jest-environment-node'; +import NodeEnvironment from 'jest-environment-node'; import {Event, State} from 'jest-circus'; class MyCustomEnvironment extends NodeEnvironment { From 736edd2ea6c9aadfb6e8794ecdc8a726f8a76b1a Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Mon, 9 Sep 2019 09:53:54 -0400 Subject: [PATCH 36/97] jest-diff: Add trailingSpaceFormatter option and replace cyan with commonColor (#8927) * jest-diff: Add trailingSpaceFormatter option and replace cyan with commonColor * Update CHANGELOG.md --- CHANGELOG.md | 1 + .../__snapshots__/matchers.test.js.snap | 6 +- packages/jest-diff/README.md | 135 +++++++++----- .../__tests__/__snapshots__/diff.test.ts.snap | 109 +++-------- packages/jest-diff/src/__tests__/diff.test.ts | 175 +++--------------- packages/jest-diff/src/diffLines.ts | 120 +++--------- .../jest-diff/src/normalizeDiffOptions.ts | 1 + packages/jest-diff/src/printDiffs.ts | 27 +-- packages/jest-diff/src/types.ts | 2 + .../printDiffOrStringify.test.ts.snap | 8 +- .../printDiffOrStringified.test.ts.snap | 4 +- .../__tests__/printDiffOrStringified.test.ts | 3 + 12 files changed, 195 insertions(+), 396 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8697dd4ac315..707d04f364d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - `[jest-diff]` [**BREAKING**] Export as ECMAScript module ([#8873](https://github.com/facebook/jest/pull/8873)) - `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) - `[jest-diff]` Add `changeColor` and `patchColor` options ([#8911](https://github.com/facebook/jest/pull/8911)) +- `[jest-diff]` Add `trailingSpaceFormatter` option and replace cyan with `commonColor` ([#8927](https://github.com/facebook/jest/pull/8927)) - `[jest-environment-jsdom]` Add `fakeTimersLolex` ([#8925](https://github.com/facebook/jest/pull/8925)) - `[jest-environment-node]` Add `fakeTimersLolex` ([#8925](https://github.com/facebook/jest/pull/8925)) - `[@jest/fake-timers]` Add Lolex as implementation of fake timers ([#8897](https://github.com/facebook/jest/pull/8897)) diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index 736c6547c1e9..ee4aea692b94 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -325,7 +325,7 @@ trailing space" and "without trailing space" 1`] = ` + Received - without trailing space -+ with· ++ with + trailing space" `; @@ -3603,8 +3603,8 @@ exports[`.toStrictEqual() displays substring diff for multiple lines 1`] = ` - Expected + Received -- 69 |· -+ 68 |· +- 69 | ++ 68 | - 70 | test('assert.doesNotThrow', () => { + 69 | test('assert.doesNotThrow', () => { - > 71 | assert.doesNotThrow(() => { diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md index 32d2670572ff..15262adea62d 100644 --- a/packages/jest-diff/README.md +++ b/packages/jest-diff/README.md @@ -18,7 +18,7 @@ To add this package as a dependency of a project, run either of the following co ## Usage of default export -Given values and optional options, `diffLinesUnified(a, b, options?)` does the following: +Given values and optional options, `diffDefault(a, b, options?)` does the following: - **serialize** the values as strings using the `pretty-format` package - **compare** the strings line-by-line using the `diff-sequences` package @@ -26,16 +26,16 @@ Given values and optional options, `diffLinesUnified(a, b, options?)` does the f To use this function, write either of the following: -- `const diffLinesUnified = require('jest-diff').default;` in CommonJS modules -- `import diffLinesUnified from 'jest-diff';` in ECMAScript modules +- `const diffDefault = require('jest-diff').default;` in CommonJS modules +- `import diffDefault from 'jest-diff';` in ECMAScript modules ### Example of default export ```js -const a = ['delete', 'change from', 'common']; -const b = ['change to', 'insert', 'common']; +const a = ['delete', 'changed from', 'common']; +const b = ['changed to', 'insert', 'common']; -const difference = diffLinesUnified(a, b); +const difference = diffDefault(a, b); ``` The returned **string** consists of: @@ -49,8 +49,8 @@ The returned **string** consists of: Array [ - "delete", -- "change from", -+ "change to", +- "changed from", ++ "changed to", + "insert", "common", ] @@ -82,8 +82,8 @@ Write either of the following: ### Example of diffStringsUnified ```js -const a = 'change from\ncommon'; -const b = 'change to\ncommon'; +const a = 'changed from\ncommon'; +const b = 'changed to\ncommon'; const difference = diffStringsUnified(a, b); ``` @@ -97,8 +97,8 @@ The returned **string** consists of: - Expected + Received -- change from -+ change to +- changed from ++ changed to common ``` @@ -146,11 +146,11 @@ The value at index `1` is a substring of `a` or `b` or both. ### Example of diffStringsRaw with cleanup ```js -const diffs = diffStringsRaw('change from', 'change to', true); +const diffs = diffStringsRaw('changed from', 'changed to', true); /* diffs[0][0] === 0 // DIFF_EQUAL -diffs[0][1] === 'change ' +diffs[0][1] === 'changed ' diffs[1][0] === -1 // DIFF_DELETE diffs[1][1] === 'from' @@ -163,11 +163,11 @@ diffs[2][1] === 'to' ### Example of diffStringsRaw without cleanup ```js -const diffs = diffStringsRaw('change from', 'change to', false); +const diffs = diffStringsRaw('changed from', 'changed to', false); /* diffs[0][0] === 0 // DIFF_EQUAL -diffs[0][1] === 'change ' +diffs[0][1] === 'changed ' diffs[1][0] === -1 // DIFF_DELETE diffs[1][1] === 'fr' @@ -196,7 +196,7 @@ To write a **formatting** function, you might need the named constants (and `Dif If you write an application-specific **cleanup** algorithm, then you might need to call the `Diff` constructor: ```js -const diffCommon = new Diff(DIFF_EQUAL, 'change '); +const diffCommon = new Diff(DIFF_EQUAL, 'changed '); const diffDelete = new Diff(DIFF_DELETE, 'from'); const diffInsert = new Diff(DIFF_INSERT, 'to'); ``` @@ -207,27 +207,30 @@ The default options are for the report when an assertion fails from the `expect` For other applications, you can provide an options object as a third argument: -- `diffLinesUnified(a, b, options)` +- `diffDefault(a, b, options)` - `diffStringsUnified(a, b, options)` ### Properties of options object -| name | default | -| :-------------------- | :-------------- | -| `aAnnotation` | `'Expected'` | -| `aColor` | `chalk.green` | -| `aIndicator` | `'-'` | -| `bAnnotation` | `'Received'` | -| `bColor` | `chalk.red` | -| `bIndicator` | `'+'` | -| `changeColor` | `chalk.inverse` | -| `commonColor` | `chalk.dim` | -| `commonIndicator` | `' '` | -| `contextLines` | `5` | -| `expand` | `true` | -| `includeChangeCounts` | `false` | -| `omitAnnotationLines` | `false` | -| `patchColor` | `chalk.yellow` | +| name | default | +| :----------------------- | :--------------- | +| `aAnnotation` | `'Expected'` | +| `aColor` | `chalk.green` | +| `aIndicator` | `'-'` | +| `bAnnotation` | `'Received'` | +| `bColor` | `chalk.red` | +| `bIndicator` | `'+'` | +| `changeColor` | `chalk.inverse` | +| `commonColor` | `chalk.dim` | +| `commonIndicator` | `' '` | +| `contextLines` | `5` | +| `expand` | `true` | +| `includeChangeCounts` | `false` | +| `omitAnnotationLines` | `false` | +| `patchColor` | `chalk.yellow` | +| `trailingSpaceFormatter` | `chalk.bgYellow` | + +For more information about the options, see the following examples. ### Example of options for labels @@ -240,6 +243,15 @@ const options = { }; ``` +```diff +- Original ++ Modified + +- changed from ++ changed to + common +``` + The `jest-diff` package does not assume that the 2 labels have equal length. ### Example of options for colors of changed lines @@ -257,29 +269,46 @@ const options = { ### Example of option for color of changed substrings -Although the default inverse of foreground and background colors is hard to beat for changed substrings **within lines**, especially because it highlights spaces, if you want bold font weight on yellow background: +Although the default inverse of foreground and background colors is hard to beat for changed substrings **within lines**, especially because it highlights spaces, if you want bold font weight on yellow background color: ```js +import chalk from 'chalk'; + const options = { changeColor: chalk.bold.bgAnsi256(226), // #ffff00 }; ``` +### Example of option to format trailing spaces + +Because the default export does not display substring differences within lines, formatting can help you see when lines differ by the presence or absence of trailing spaces found by `/\s+$/` regular expression. + +The formatter is a function, which given a string, returns a string. + +If instead of yellowish background color, you want to replace trailing spaces with middle dot characters: + +```js +const options = { + trailingSpaceFormatter: string => '·'.repeat(string.length), +}; +``` + ### Example of options for no colors -The value of a color option is a function, which given a string, returns a string. +The value of a color or formatter option is a function, which given a string, returns a string. To store the difference in a file without escape codes for colors, provide an identity function: ```js -const identity = string => string; +const noColor = string => string; const options = { - aColor: identity, - bColor: identity, - changeColor: identity, - commonColor: identity, - patchColor: identity, + aColor: noColor, + bColor: noColor, + changeColor: noColor, + commonColor: noColor, + patchColor: noColor, + trailingSpaceFormatter: noColor, }; ``` @@ -316,6 +345,8 @@ A patch mark like `@@ -12,7 +12,9 @@` accounts for omitted common lines. If you want patch marks to have the same dim color as common lines: ```js +import chalk from 'chalk'; + const options = { expand: false, patchColor: chalk.dim, @@ -327,13 +358,14 @@ const options = { To display the number of changed lines at the right of annotation lines: ```js -const a = ['change from', 'common']; -const b = ['change to', 'insert', 'common']; +const a = ['changed from', 'common']; +const b = ['changed to', 'insert', 'common']; + const options = { includeChangeCounts: true, }; -const difference = diffLinesUnified(a, b, options); +const difference = diffDefault(a, b, options); ``` ```diff @@ -341,8 +373,8 @@ const difference = diffLinesUnified(a, b, options); + Received 2 + Array [ -- "change from", -+ "change to", +- "changed from", ++ "changed to", + "insert", "common", ] @@ -353,8 +385,9 @@ const difference = diffLinesUnified(a, b, options); To display only the comparison lines: ```js -const a = 'change from\ncommon'; -const b = 'change to\ncommon'; +const a = 'changed from\ncommon'; +const b = 'changed to\ncommon'; + const options = { omitAnnotationLines: true, }; @@ -363,7 +396,7 @@ const difference = diffStringsUnified(a, b, options); ``` ```diff -- change from -+ change to +- changed from ++ changed to common ``` diff --git a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap index 8a9e97253172..eb7c2a247d46 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap @@ -1,71 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`background color of spaces cyan for inchanged (expanded) 1`] = ` -"- Expected -+ Received - -
-+

- - following string consists of a space: - - line has preceding space only - line has both preceding and following space - line has following space only - -+

-
" -`; - -exports[`background color of spaces green for removed (expanded) 1`] = ` -"- Expected -+ Received - -
- -- following string consists of a space: -- -- line has preceding space only -- line has both preceding and following space -- line has following space only -+ - -
" -`; - -exports[`background color of spaces red for added (expanded) 1`] = ` -"- Expected -+ Received - -
- -- -+ following string consists of a space: -+ -+ line has preceding space only -+ line has both preceding and following space -+ line has following space only - -
" -`; - -exports[`background color of spaces yellow for unchanged (expanded) 1`] = ` -"- Expected -+ Received - -
-- -+

- following string consists of a space: - - line has preceding space only - line has both preceding and following space - line has following space only -- -+

-
" -`; - exports[`collapses big diffs to patch format 1`] = ` "- Expected + Received @@ -92,9 +26,9 @@ exports[`color of text (expanded) 1`] = ` - \\"sorting\\": Object { + \\"sorting\\": Array [ + Object { - \\"descending\\": false, - \\"fieldKey\\": \\"what\\", - }, + \\"descending\\": false, + \\"fieldKey\\": \\"what\\", + }, + ], }" `; @@ -257,21 +191,6 @@ exports[`falls back to not call toJSON if serialization has no differences but t }" `; -exports[`highlight only the last in odd length of leading spaces (expanded) 1`] = ` -"- Expected -+ Received - -
--   attributes.reduce(function (props, attribute) {
--    props[attribute.name] = attribute.value;
-+   attributes.reduce((props, {name, value}) => {
-+   props[name] = value;
-    return props;
--  }, {});
-+ }, {});
-  
" -`; - exports[`oneline strings 1`] = ` "- Expected 1 - + Received 1 + @@ -443,3 +362,25 @@ exports[`options omitAnnotationLines true diffStringsUnified and includeChangeCo `; exports[`options omitAnnotationLines true diffStringsUnified empty strings 1`] = `""`; + +exports[`options trailingSpaceFormatter diffDefault default yellowish 1`] = ` +"- Expected ++ Received + +- delete 1 trailing space: ++ delete 1 trailing space: + common 2 trailing spaces: +- insert 1 trailing space: ++ insert 1 trailing space: " +`; + +exports[`options trailingSpaceFormatter diffDefault middle dot 1`] = ` +"- Expected ++ Received + +- delete 1 trailing space:· ++ delete 1 trailing space: + common 2 trailing spaces:·· +- insert 1 trailing space: ++ insert 1 trailing space:·" +`; diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index 68cb65845b66..cfde5f7069d2 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -676,156 +676,6 @@ describe('trailing newline in multiline string not enclosed in quotes', () => { }); }); -describe('background color of spaces', () => { - const baseline = { - $$typeof: elementSymbol, - props: { - children: [ - { - $$typeof: elementSymbol, - props: { - children: [''], - }, - type: 'span', - }, - ], - }, - type: 'div', - }; - const lines = [ - 'following string consists of a space:', - ' ', - ' line has preceding space only', - ' line has both preceding and following space ', - 'line has following space only ', - ]; - const examples = { - $$typeof: elementSymbol, - props: { - children: [ - { - $$typeof: elementSymbol, - props: { - children: lines, - }, - type: 'span', - }, - ], - }, - type: 'div', - }; - const unchanged = { - $$typeof: elementSymbol, - props: { - children: [ - { - $$typeof: elementSymbol, - props: { - children: lines, - }, - type: 'p', - }, - ], - }, - type: 'div', - }; - const inchanged = { - $$typeof: elementSymbol, - props: { - children: [ - { - $$typeof: elementSymbol, - props: { - children: [ - { - $$typeof: elementSymbol, - props: { - children: [lines], - }, - type: 'span', - }, - ], - }, - type: 'p', - }, - ], - }, - type: 'div', - }; - - // Expect same results, unless diff is long enough to require patch marks. - describe('cyan for inchanged', () => { - const received = diff(examples, inchanged, expanded); - test('(expanded)', () => { - expect(received).toMatchSnapshot(); - }); - test('(unexpanded)', () => { - expect(diff(examples, inchanged, unexpanded)).toBe(received); - }); - }); - describe('green for removed', () => { - const received = diff(examples, baseline, expanded); - test('(expanded)', () => { - expect(received).toMatchSnapshot(); - }); - test('(unexpanded)', () => { - expect(diff(examples, baseline, unexpanded)).toBe(received); - }); - }); - describe('red for added', () => { - const received = diff(baseline, examples, expanded); - test('(expanded)', () => { - expect(received).toMatchSnapshot(); - }); - test('(unexpanded)', () => { - expect(diff(baseline, examples, unexpanded)).toBe(received); - }); - }); - describe('yellow for unchanged', () => { - const received = diff(examples, unchanged, expanded); - test('(expanded)', () => { - expect(received).toMatchSnapshot(); - }); - test('(unexpanded)', () => { - expect(diff(examples, unchanged, unexpanded)).toBe(received); - }); - }); -}); - -describe('highlight only the last in odd length of leading spaces', () => { - const pre5 = { - $$typeof: elementSymbol, - props: { - children: [ - 'attributes.reduce(function (props, attribute) {', - ' props[attribute.name] = attribute.value;', // 3 leading spaces - ' return props;', // 2 leading spaces - ' }, {});', // 1 leading space - ].join('\n'), - }, - type: 'pre', - }; - const pre6 = { - $$typeof: elementSymbol, - props: { - children: [ - 'attributes.reduce((props, {name, value}) => {', - ' props[name] = value;', // from 3 to 2 leading spaces - ' return props;', // unchanged 2 leading spaces - '}, {});', // from 1 to 0 leading spaces - ].join('\n'), - }, - type: 'pre', - }; - const received = diff(pre5, pre6, expanded); - test('(expanded)', () => { - expect(received).toMatchSnapshot(); - }); - test('(unexpanded)', () => { - expect(diff(pre5, pre6, unexpanded)).toBe(received); - }); -}); - test('collapses big diffs to patch format', () => { const result = diff( {test: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, @@ -1036,4 +886,29 @@ describe('options', () => { expect(diffStringsUnified('', '', options)).toMatchSnapshot(); }); }); + + describe('trailingSpaceFormatter', () => { + const aTrailingSpaces = [ + 'delete 1 trailing space: ', + 'common 2 trailing spaces: ', + 'insert 1 trailing space:', + ].join('\n'); + const bTrailingSpaces = [ + 'delete 1 trailing space:', + 'common 2 trailing spaces: ', + 'insert 1 trailing space: ', + ].join('\n'); + + test('diffDefault default yellowish', () => { + expect(diff(aTrailingSpaces, bTrailingSpaces)).toMatchSnapshot(); + }); + + test('diffDefault middle dot', () => { + const options = { + trailingSpaceFormatter: string => '·'.repeat(string.length), + }; + + expect(diff(aTrailingSpaces, bTrailingSpaces, options)).toMatchSnapshot(); + }); + }); }); diff --git a/packages/jest-diff/src/diffLines.ts b/packages/jest-diff/src/diffLines.ts index 3855f7d2e935..81969db24183 100644 --- a/packages/jest-diff/src/diffLines.ts +++ b/packages/jest-diff/src/diffLines.ts @@ -5,10 +5,14 @@ * LICENSE file in the root directory of this source tree. */ -import chalk, {Chalk} from 'chalk'; import diff, {Callbacks} from 'diff-sequences'; import {NO_DIFF_MESSAGE} from './constants'; -import {ChangeCounts, createPatchMark, printAnnotation} from './printDiffs'; +import { + ChangeCounts, + createPatchMark, + formatTrailingSpaces, + printAnnotation, +} from './printDiffs'; import {DiffOptionsNormalized} from './types'; type Original = { @@ -16,28 +20,6 @@ type Original = { b: string; }; -const fgIndent = chalk.cyan; // common lines (only indentation different) -const bgCommon = chalk.bgYellow; // edge spaces in common line (even indentation same) -const bgInverse = chalk.inverse; // edge spaces in any other lines - -// ONLY trailing if expected value is snapshot or multiline string. -const highlightTrailingSpaces = (line: string, bgColor: Chalk): string => - line.replace(/\s+$/, bgColor('$&')); - -// BOTH leading AND trailing if expected value is data structure. -const highlightLeadingTrailingSpaces = (line: string, bgColor: Chalk): string => - // If line consists of ALL spaces: highlight all of them. - highlightTrailingSpaces(line, bgColor).replace( - // If line has an ODD length of leading spaces: highlight only the LAST. - /^(\s\s)*(\s)(?=[^\s])/, - '$1' + bgColor('$2'), - ); - -type Highlight = (line: string, bgColor: Chalk) => string; - -const getHighlightSpaces = (bothEdges: boolean): Highlight => - bothEdges ? highlightLeadingTrailingSpaces : highlightTrailingSpaces; - type Put = (line: string) => void; // Given index interval in expected lines, put formatted delete lines. @@ -46,10 +28,9 @@ const formatDelete = ( aEnd: number, aLinesUn: Array, aLinesIn: Array, - {aColor, aIndicator}: DiffOptionsNormalized, + {aColor, aIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, put: Put, ) => { - const highlightSpaces = getHighlightSpaces(aLinesUn !== aLinesIn); for (let aIndex = aStart; aIndex !== aEnd; aIndex += 1) { const aLineUn = aLinesUn[aIndex]; const aLineIn = aLinesIn[aIndex]; @@ -57,7 +38,10 @@ const formatDelete = ( put( aColor( - aIndicator + ' ' + indentation + highlightSpaces(aLineUn, bgInverse), + aIndicator + + ' ' + + indentation + + formatTrailingSpaces(aLineUn, trailingSpaceFormatter), ), ); } @@ -69,10 +53,9 @@ const formatInsert = ( bEnd: number, bLinesUn: Array, bLinesIn: Array, - {bColor, bIndicator}: DiffOptionsNormalized, + {bColor, bIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, put: Put, ) => { - const highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); for (let bIndex = bStart; bIndex !== bEnd; bIndex += 1) { const bLineUn = bLinesUn[bIndex]; const bLineIn = bLinesIn[bIndex]; @@ -80,7 +63,10 @@ const formatInsert = ( put( bColor( - bIndicator + ' ' + indentation + highlightSpaces(bLineUn, bgInverse), + bIndicator + + ' ' + + indentation + + formatTrailingSpaces(bLineUn, trailingSpaceFormatter), ), ); } @@ -92,14 +78,11 @@ const formatCommon = ( nCommon: number, aCommon: number, bCommon: number, - // aLinesUn has lines that are equal to bLinesUn within a common subsequence - aLinesIn: Array, bLinesUn: Array, bLinesIn: Array, - {commonColor, commonIndicator}: DiffOptionsNormalized, + {commonColor, commonIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, put: Put, ) => { - const highlightSpaces = getHighlightSpaces(bLinesUn !== bLinesIn); for (; nCommon !== 0; nCommon -= 1, aCommon += 1, bCommon += 1) { const bLineUn = bLinesUn[bCommon]; const bLineIn = bLinesIn[bCommon]; @@ -108,12 +91,14 @@ const formatCommon = ( // For common lines, received indentation seems more intuitive. const indentation = bLineIn.slice(0, bLineInLength - bLineUn.length); - // Color shows whether expected and received line has same indentation. - const hasSameIndentation = aLinesIn[aCommon].length === bLineInLength; - const fg = hasSameIndentation ? commonColor : fgIndent; - const bg = hasSameIndentation ? bgCommon : bgInverse; - - put(fg(commonIndicator + ' ' + indentation + highlightSpaces(bLineUn, bg))); + put( + commonColor( + commonIndicator + + ' ' + + indentation + + formatTrailingSpaces(bLineUn, trailingSpaceFormatter), + ), + ); } }; @@ -151,16 +136,7 @@ const diffExpand = ( changeCounts.b += bCommon - bStart; formatDelete(aStart, aCommon, aLinesUn, aLinesIn, options, put); formatInsert(bStart, bCommon, bLinesUn, bLinesIn, options, put); - formatCommon( - nCommon, - aCommon, - bCommon, - aLinesIn, - bLinesUn, - bLinesIn, - options, - put, - ); + formatCommon(nCommon, aCommon, bCommon, bLinesUn, bLinesIn, options, put); aStart = aCommon + nCommon; bStart = bCommon + nCommon; }; @@ -233,16 +209,7 @@ const diffNoExpand = ( aStart = aEndCommon - nLines; bStart = bEndCommon - nLines; - formatCommon( - nLines, - aStart, - bStart, - aLinesIn, - bLinesUn, - bLinesIn, - options, - put, - ); + formatCommon(nLines, aStart, bStart, bLinesUn, bLinesIn, options, put); aEnd = aEndCommon; bEnd = bEndCommon; return; @@ -262,32 +229,14 @@ const diffNoExpand = ( if (nCommon <= maxContextLines) { // The patch includes all lines in the common subsequence. - formatCommon( - nCommon, - aEnd, - bEnd, - aLinesIn, - bLinesUn, - bLinesIn, - options, - put, - ); + formatCommon(nCommon, aEnd, bEnd, bLinesUn, bLinesIn, options, put); aEnd += nCommon; bEnd += nCommon; return; } // The patch ends because context is less than number of common lines. - formatCommon( - nContextLines, - aEnd, - bEnd, - aLinesIn, - bLinesUn, - bLinesIn, - options, - put, - ); + formatCommon(nContextLines, aEnd, bEnd, bLinesUn, bLinesIn, options, put); aEnd += nContextLines; bEnd += nContextLines; @@ -302,16 +251,7 @@ const diffNoExpand = ( aStart = aEndCommon - nLines; bStart = bEndCommon - nLines; - formatCommon( - nLines, - aStart, - bStart, - aLinesIn, - bLinesUn, - bLinesIn, - options, - put, - ); + formatCommon(nLines, aStart, bStart, bLinesUn, bLinesIn, options, put); aEnd = aEndCommon; bEnd = bEndCommon; } diff --git a/packages/jest-diff/src/normalizeDiffOptions.ts b/packages/jest-diff/src/normalizeDiffOptions.ts index 4433edb8f84c..8ee795dcfb71 100644 --- a/packages/jest-diff/src/normalizeDiffOptions.ts +++ b/packages/jest-diff/src/normalizeDiffOptions.ts @@ -26,6 +26,7 @@ const OPTIONS_DEFAULT: DiffOptionsNormalized = { includeChangeCounts: false, omitAnnotationLines: false, patchColor: chalk.yellow, + trailingSpaceFormatter: chalk.bgYellow, }; const getContextLines = (contextLines?: number): number => diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index 93ada7d8e8e1..cc5ed53c562c 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -20,33 +20,32 @@ import { joinAlignedDiffsNoExpand, } from './joinAlignedDiffs'; import {normalizeDiffOptions} from './normalizeDiffOptions'; -import {DiffOptions, DiffOptionsNormalized} from './types'; +import {DiffOptions, DiffOptionsColor, DiffOptionsNormalized} from './types'; const NEWLINE_SYMBOL = '\u{21B5}'; // downwards arrow with corner leftwards -const SPACE_SYMBOL = '\u{00B7}'; // middle dot -// Instead of inverse highlight which now implies a change, -// replace common spaces with middle dot at the end of the line. -const replaceSpacesAtEnd = (line: string): string => - line.replace(/\s+$/, spaces => SPACE_SYMBOL.repeat(spaces.length)); +export const formatTrailingSpaces = ( + line: string, + trailingSpaceFormatter: DiffOptionsColor, +): string => line.replace(/\s+$/, match => trailingSpaceFormatter(match)); export const printDeleteLine = ( line: string, - {aColor, aIndicator}: DiffOptionsNormalized, + {aColor, aIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, ): string => aColor( line.length !== 0 - ? aIndicator + ' ' + replaceSpacesAtEnd(line) + ? aIndicator + ' ' + formatTrailingSpaces(line, trailingSpaceFormatter) : aIndicator, ); export const printInsertLine = ( line: string, - {bColor, bIndicator}: DiffOptionsNormalized, + {bColor, bIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, ): string => bColor( line.length !== 0 - ? bIndicator + ' ' + replaceSpacesAtEnd(line) + ? bIndicator + ' ' + formatTrailingSpaces(line, trailingSpaceFormatter) : bIndicator, ); @@ -54,10 +53,14 @@ export const printInsertLine = ( export const printCommonLine = ( line: string, isFirstOrLast: boolean, - {commonColor, commonIndicator}: DiffOptionsNormalized, + {commonColor, commonIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, ): string => line.length !== 0 - ? commonColor(commonIndicator + ' ' + replaceSpacesAtEnd(line)) + ? commonColor( + commonIndicator + + ' ' + + formatTrailingSpaces(line, trailingSpaceFormatter), + ) : isFirstOrLast ? commonColor(commonIndicator + ' ' + NEWLINE_SYMBOL) : ''; diff --git a/packages/jest-diff/src/types.ts b/packages/jest-diff/src/types.ts index f79ff163c956..60ae940c7992 100644 --- a/packages/jest-diff/src/types.ts +++ b/packages/jest-diff/src/types.ts @@ -22,6 +22,7 @@ export type DiffOptions = { includeChangeCounts?: boolean; omitAnnotationLines?: boolean; patchColor?: DiffOptionsColor; + trailingSpaceFormatter?: DiffOptionsColor; }; export type DiffOptionsNormalized = { @@ -39,4 +40,5 @@ export type DiffOptionsNormalized = { includeChangeCounts: boolean; omitAnnotationLines: boolean; patchColor: DiffOptionsColor; + trailingSpaceFormatter: DiffOptionsColor; }; diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap index ccb387fcd85c..753d46e62662 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap @@ -4,12 +4,12 @@ exports[`printDiffOrStringify expected and received are multi line with trailing "- Expected + Received -- delete· -+ insert· +- delete ++ insert - common expected common + common received common -- prev· -+ next·" +- prev ++ next " `; exports[`printDiffOrStringify expected and received are single line with multiple changes 1`] = ` diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap index 7c00b08fe37b..6115bed35c90 100644 --- a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap +++ b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap @@ -194,8 +194,8 @@ exports[`multi line small changes 1`] = ` - Snapshot + Received -- 69 |· -+ 68 |· +- 69 | ++ 68 | - 70 | test('assert.doesNotThrow', () => { + 69 | test('assert.doesNotThrow', () => { - > 71 | assert.doesNotThrow(() => { diff --git a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts index e9bcfc5caab9..862e5a52e9a7 100644 --- a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts +++ b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts @@ -34,11 +34,14 @@ const convertStyles = (val: string): string => return ''; case style.yellow.open: return ''; + case style.bgYellow.open: + return ''; case style.dim.close: case style.green.close: case style.red.close: case style.yellow.close: + case style.bgYellow.close: return ''; default: From f90550727761e56177f1573384f3f7984a0f61d8 Mon Sep 17 00:00:00 2001 From: Jake Jarvis Date: Thu, 12 Sep 2019 01:06:24 -0400 Subject: [PATCH 37/97] Use rel="noopener" on backer links (#8944) --- website/pages/en/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/pages/en/index.js b/website/pages/en/index.js index 44532762992e..65068c138190 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -66,7 +66,7 @@ const Backer = ({ className="backer-item" title={`$${totalDonations.value} by ${name || slug}`} target="_blank" - rel="nofollow" + rel="nofollow noopener" href={website || `https://opencollective.com/${slug}`} > { From 8b2a60733c4c0c1d0356a4cfa27b0f784555e959 Mon Sep 17 00:00:00 2001 From: Caleb Everett Date: Wed, 11 Sep 2019 22:09:14 -0700 Subject: [PATCH 38/97] feat: make node-notifier an optional dependency (#8918) * feat: make node-notifier an optional dependency * Update CHANGELOG.md --- CHANGELOG.md | 1 + packages/jest-reporters/package.json | 4 +- .../src/__tests__/notify_reporter.test.ts | 42 +++++++++++++++++++ .../jest-reporters/src/notify_reporter.ts | 22 ++++++++-- 4 files changed, 64 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 707d04f364d6..46792cc676dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ - `[jest-fake-timers]` `getTimerCount` will not include cancelled immediates ([#8764](https://github.com/facebook/jest/pull/8764)) - `[jest-leak-detector]` [**BREAKING**] Use `weak-napi` instead of `weak` package ([#8686](https://github.com/facebook/jest/pull/8686)) - `[jest-mock]` Fix for mockReturnValue overriding mockImplementationOnce ([#8398](https://github.com/facebook/jest/pull/8398)) +- `[jest-reporters]` Make node-notifer an optional dependency ([#8918](https://github.com/facebook/jest/pull/8918)) - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) - `[jest-snapshot]` Distinguish empty string from external snapshot not written ([#8880](https://github.com/facebook/jest/pull/8880)) - `[jest-snapshot]` [**BREAKING**] Distinguish empty string from internal snapshot not written ([#8898](https://github.com/facebook/jest/pull/8898)) diff --git a/packages/jest-reporters/package.json b/packages/jest-reporters/package.json index d6f3cb2f3eb8..26e2478139ab 100644 --- a/packages/jest-reporters/package.json +++ b/packages/jest-reporters/package.json @@ -23,7 +23,6 @@ "jest-runtime": "^24.9.0", "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.4.3", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^3.1.0" @@ -39,6 +38,9 @@ "@types/node-notifier": "^5.4.0", "strip-ansi": "^5.0.0" }, + "optionalDependencies": { + "node-notifier": "^5.4.3" + }, "engines": { "node": ">= 8" }, diff --git a/packages/jest-reporters/src/__tests__/notify_reporter.test.ts b/packages/jest-reporters/src/__tests__/notify_reporter.test.ts index 3c04db68af5c..e1a86899adc9 100644 --- a/packages/jest-reporters/src/__tests__/notify_reporter.test.ts +++ b/packages/jest-reporters/src/__tests__/notify_reporter.test.ts @@ -207,6 +207,48 @@ test('test failure-change with moduleName', () => { }); }); +describe('node-notifier is an optional dependency', () => { + beforeEach(() => { + jest.resetModules(); + }); + + const ctor = () => { + const config = makeGlobalConfig({ + notify: true, + notifyMode: 'success', + rootDir: 'some-test', + }); + return new NotifyReporter(config, () => {}, initialContext); + }; + + test('without node-notifier uses mock function that throws an error', () => { + jest.doMock('node-notifier', () => { + const error: any = new Error("Cannot find module 'node-notifier'"); + error.code = 'MODULE_NOT_FOUND'; + throw error; + }); + + expect(ctor).toThrow( + 'notify reporter requires optional dependeny node-notifier but it was not found', + ); + }); + + test('throws the error when require throws an unexpected error', () => { + const error = new Error('unexpected require error'); + jest.doMock('node-notifier', () => { + throw error; + }); + expect(ctor).toThrow(error); + }); + + test('uses node-notifier when it is available', () => { + const mockNodeNotifier = {notify: jest.fn()}; + jest.doMock('node-notifier', () => mockNodeNotifier); + const result = ctor(); + expect(result['_notifier']).toBe(mockNodeNotifier); + }); +}); + afterEach(() => { jest.clearAllMocks(); }); diff --git a/packages/jest-reporters/src/notify_reporter.ts b/packages/jest-reporters/src/notify_reporter.ts index 7735baaf2d81..70d22e1c1d8f 100644 --- a/packages/jest-reporters/src/notify_reporter.ts +++ b/packages/jest-reporters/src/notify_reporter.ts @@ -10,7 +10,6 @@ import * as util from 'util'; import exit = require('exit'); import {Config} from '@jest/types'; import {AggregatedResult} from '@jest/test-result'; -import {notify} from 'node-notifier'; import {Context, TestSchedulerContext} from './types'; import BaseReporter from './base_reporter'; @@ -19,6 +18,7 @@ const isDarwin = process.platform === 'darwin'; const icon = path.resolve(__dirname, '../assets/jest_logo.png'); export default class NotifyReporter extends BaseReporter { + private _notifier = loadNotifier(); private _startRun: (globalConfig: Config.GlobalConfig) => any; private _globalConfig: Config.GlobalConfig; private _context: TestSchedulerContext; @@ -78,7 +78,7 @@ export default class NotifyReporter extends BaseReporter { result.numPassedTests, ); - notify({icon, message, title}); + this._notifier.notify({icon, message, title}); } else if ( testsHaveRun && !success && @@ -106,9 +106,9 @@ export default class NotifyReporter extends BaseReporter { const quitAnswer = 'Exit tests'; if (!watchMode) { - notify({icon, message, title}); + this._notifier.notify({icon, message, title}); } else { - notify( + this._notifier.notify( { actions: [restartAnswer, quitAnswer], closeLabel: 'Close', @@ -137,3 +137,17 @@ export default class NotifyReporter extends BaseReporter { this._context.firstRun = false; } } + +function loadNotifier(): typeof import('node-notifier') { + try { + return require('node-notifier'); + } catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') { + throw err; + } else { + throw Error( + 'notify reporter requires optional dependeny node-notifier but it was not found', + ); + } + } +} From aa10c19883f00398927e4b5aaf9e269c19779695 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 12 Sep 2019 19:25:20 +0200 Subject: [PATCH 39/97] chore: update ts eslint (#8948) --- package.json | 4 ++-- yarn.lock | 56 +++++++++++++++++++++++++++------------------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index bab8176bcdad..59800d2ecbc8 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "@types/babel__template": "^7.0.0", "@types/jest": "24.0.2", "@types/node": "*", - "@typescript-eslint/eslint-plugin": "^2.0.0", - "@typescript-eslint/parser": "^2.0.0", + "@typescript-eslint/eslint-plugin": "^2.2.0", + "@typescript-eslint/parser": "^2.2.0", "ansi-regex": "^4.0.0", "ansi-styles": "^4.0.0", "babel-eslint": "^10.0.3", diff --git a/yarn.lock b/yarn.lock index 3f0c0c749558..088ebbe5df8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2177,25 +2177,25 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.0.0.tgz#609a5d7b00ce21a6f94d7ef282eba9da57ca1e42" - integrity sha512-Mo45nxTTELODdl7CgpZKJISvLb+Fu64OOO2ZFc2x8sYSnUpFrBUW3H+H/ZGYmEkfnL6VkdtOSxgdt+Av79j0sA== +"@typescript-eslint/eslint-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.2.0.tgz#cba8caa6ad8df544c46bca674125a31af8c9ac2f" + integrity sha512-rOodtI+IvaO8USa6ValYOrdWm9eQBgqwsY+B0PPiB+aSiK6p6Z4l9jLn/jI3z3WM4mkABAhKIqvGIBl0AFRaLQ== dependencies: - "@typescript-eslint/experimental-utils" "2.0.0" - eslint-utils "^1.4.0" + "@typescript-eslint/experimental-utils" "2.2.0" + eslint-utils "^1.4.2" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" - tsutils "^3.14.0" + tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.0.0.tgz#f3d298bb411357f35c4184e24280b256b6321949" - integrity sha512-XGJG6GNBXIEx/mN4eTRypN/EUmsd0VhVGQ1AG+WTgdvjHl0G8vHhVBHrd/5oI6RRYBRnedNymSYWW1HAdivtmg== +"@typescript-eslint/experimental-utils@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.2.0.tgz#31d855fbc425168ecf56960c777aacfcca391cff" + integrity sha512-IMhbewFs27Frd/ICHBRfIcsUCK213B8MsEUqvKFK14SDPjPR5JF6jgOGPlroybFTrGWpMvN5tMZdXAf+xcmxsA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.0.0" - eslint-scope "^4.0.0" + "@typescript-eslint/typescript-estree" "2.2.0" + eslint-scope "^5.0.0" "@typescript-eslint/experimental-utils@^1.13.0": version "1.13.0" @@ -2206,15 +2206,15 @@ "@typescript-eslint/typescript-estree" "1.13.0" eslint-scope "^4.0.0" -"@typescript-eslint/parser@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.0.0.tgz#4273bb19d03489daf8372cdaccbc8042e098178f" - integrity sha512-ibyMBMr0383ZKserIsp67+WnNVoM402HKkxqXGlxEZsXtnGGurbnY90pBO3e0nBUM7chEEOcxUhgw9aPq7fEBA== +"@typescript-eslint/parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.2.0.tgz#3cd758ed85ae9be06667beb61bbdf8060f274fb7" + integrity sha512-0mf893kj9L65O5sA7wP6EoYvTybefuRFavUNhT7w9kjhkdZodoViwVS+k3D+ZxKhvtL7xGtP/y/cNMJX9S8W4A== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.0.0" - "@typescript-eslint/typescript-estree" "2.0.0" - eslint-visitor-keys "^1.0.0" + "@typescript-eslint/experimental-utils" "2.2.0" + "@typescript-eslint/typescript-estree" "2.2.0" + eslint-visitor-keys "^1.1.0" "@typescript-eslint/typescript-estree@1.13.0": version "1.13.0" @@ -2224,13 +2224,15 @@ lodash.unescape "4.0.1" semver "5.5.0" -"@typescript-eslint/typescript-estree@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.0.0.tgz#c9f6c0efd1b11475540d6a55dc973cc5b9a67e77" - integrity sha512-NXbmzA3vWrSgavymlzMWNecgNOuiMMp62MO3kI7awZRLRcsA1QrYWo6q08m++uuAGVbXH/prZi2y1AWuhSu63w== +"@typescript-eslint/typescript-estree@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.2.0.tgz#1e2aad5ed573f9f7a8e3261eb79404264c4fc57f" + integrity sha512-9/6x23A3HwWWRjEQbuR24on5XIfVmV96cDpGR9671eJv1ebFKHj2sGVVAwkAVXR2UNuhY1NeKS2QMv5P8kQb2Q== dependencies: + glob "^7.1.4" + is-glob "^4.0.1" lodash.unescape "4.0.1" - semver "^6.2.0" + semver "^6.3.0" "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -5652,7 +5654,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.0, eslint-utils@^1.4.2: +eslint-utils@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== @@ -13538,7 +13540,7 @@ tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tsutils@^3.14.0: +tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== From 5a4517162326df7c045ee9ac1530e13434d07b17 Mon Sep 17 00:00:00 2001 From: Rahul Roy Date: Fri, 13 Sep 2019 13:22:25 +0530 Subject: [PATCH 40/97] Fix example code on `using matchers` docs (#8953) * Fix example code on `using matchers` docs * Change UsingMatchers docs for version-22.x as well --- docs/UsingMatchers.md | 4 ++-- website/versioned_docs/version-22.x/UsingMatchers.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/UsingMatchers.md b/docs/UsingMatchers.md index d6fab01b4dc9..ef52762c91fa 100644 --- a/docs/UsingMatchers.md +++ b/docs/UsingMatchers.md @@ -142,12 +142,12 @@ If you want to test that a particular function throws an error when it's called, ```js function compileAndroidCode() { - throw new ConfigError('you are using the wrong JDK'); + throw new Error('you are using the wrong JDK'); } test('compiling android goes as expected', () => { expect(compileAndroidCode).toThrow(); - expect(compileAndroidCode).toThrow(ConfigError); + expect(compileAndroidCode).toThrow(Error); // You can also use the exact error message or a regexp expect(compileAndroidCode).toThrow('you are using the wrong JDK'); diff --git a/website/versioned_docs/version-22.x/UsingMatchers.md b/website/versioned_docs/version-22.x/UsingMatchers.md index 001537780915..2a6b40c532fb 100644 --- a/website/versioned_docs/version-22.x/UsingMatchers.md +++ b/website/versioned_docs/version-22.x/UsingMatchers.md @@ -143,12 +143,12 @@ If you want to test that a particular function throws an error when it's called, ```js function compileAndroidCode() { - throw new ConfigError('you are using the wrong JDK'); + throw new Error('you are using the wrong JDK'); } test('compiling android goes as expected', () => { expect(compileAndroidCode).toThrow(); - expect(compileAndroidCode).toThrow(ConfigError); + expect(compileAndroidCode).toThrow(Error); // You can also use the exact error message or a regexp expect(compileAndroidCode).toThrow('you are using the wrong JDK'); From 6c0a16ab2f88ea645c04880a5491b3a8c2dfc66b Mon Sep 17 00:00:00 2001 From: Tim Perry Date: Fri, 13 Sep 2019 13:01:11 +0200 Subject: [PATCH 41/97] Don't include unref'd timers in --detectOpenHandles results (#8941) --- CHANGELOG.md | 1 + e2e/__tests__/detectOpenHandles.ts | 14 ++++++++ e2e/detect-open-handles/__tests__/unref.js | 12 +++++++ packages/jest-core/src/collectHandles.ts | 37 +++++++++++++++++++--- packages/test-utils/src/ConditionalTest.ts | 12 +++++++ packages/test-utils/src/index.ts | 1 + 6 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 e2e/detect-open-handles/__tests__/unref.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 46792cc676dc..c020577ef04b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ ### Fixes - `[expect]` Display expectedDiff more carefully in toBeCloseTo ([#8389](https://github.com/facebook/jest/pull/8389)) +- `[jest-core]` Don't include unref'd timers in --detectOpenHandles results ([#8941](https://github.com/facebook/jest/pull/8941)) - `[jest-diff]` Do not inverse format if line consists of one change ([#8903](https://github.com/facebook/jest/pull/8903)) - `[jest-fake-timers]` `getTimerCount` will not include cancelled immediates ([#8764](https://github.com/facebook/jest/pull/8764)) - `[jest-leak-detector]` [**BREAKING**] Use `weak-napi` instead of `weak` package ([#8686](https://github.com/facebook/jest/pull/8686)) diff --git a/e2e/__tests__/detectOpenHandles.ts b/e2e/__tests__/detectOpenHandles.ts index d5384d44feeb..f77ffd933c17 100644 --- a/e2e/__tests__/detectOpenHandles.ts +++ b/e2e/__tests__/detectOpenHandles.ts @@ -7,6 +7,7 @@ import {wrap} from 'jest-snapshot-serializer-raw'; import runJest, {until} from '../runJest'; +import {onNodeVersions} from '../../packages/test-utils'; try { require('async_hooks'); @@ -69,6 +70,19 @@ it('does not report promises', () => { expect(textAfterTest).toBe(''); }); +onNodeVersions('>=11', () => { + it('does not report timeouts using unref', () => { + // The test here is basically that it exits cleanly without reporting anything (does not need `until`) + const {stderr} = runJest('detect-open-handles', [ + 'unref', + '--detectOpenHandles', + ]); + const textAfterTest = getTextAfterTest(stderr); + + expect(textAfterTest).toBe(''); + }); +}); + it('prints out info about open handlers from inside tests', async () => { const {stderr} = await until( 'detect-open-handles', diff --git a/e2e/detect-open-handles/__tests__/unref.js b/e2e/detect-open-handles/__tests__/unref.js new file mode 100644 index 000000000000..b81c359366b3 --- /dev/null +++ b/e2e/detect-open-handles/__tests__/unref.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +test('something', () => { + const timeout = setTimeout(() => {}, 30000); + timeout.unref(); + expect(true).toBe(true); +}); diff --git a/packages/jest-core/src/collectHandles.ts b/packages/jest-core/src/collectHandles.ts index b7653056a6ae..e0cd0010fbdc 100644 --- a/packages/jest-core/src/collectHandles.ts +++ b/packages/jest-core/src/collectHandles.ts @@ -34,10 +34,15 @@ function stackIsFromUser(stack: string) { return false; } +const alwaysActive = () => true; + // Inspired by https://github.com/mafintosh/why-is-node-running/blob/master/index.js // Extracted as we want to format the result ourselves export default function collectHandles(): () => Array { - const activeHandles: Map = new Map(); + const activeHandles: Map< + number, + {error: Error; isActive: () => boolean} + > = new Map(); let hook: AsyncHook; @@ -47,14 +52,34 @@ export default function collectHandles(): () => Array { destroy(asyncId) { activeHandles.delete(asyncId); }, - init: function initHook(asyncId, type) { + init: function initHook( + asyncId, + type, + _triggerAsyncId, + resource: {} | NodeJS.Timeout, + ) { if (type === 'PROMISE' || type === 'TIMERWRAP') { return; } const error = new ErrorWithStack(type, initHook); if (stackIsFromUser(error.stack || '')) { - activeHandles.set(asyncId, error); + let isActive: () => boolean; + + if (type === 'Timeout' || type === 'Immediate') { + if ('hasRef' in resource) { + // Timer that supports hasRef (Node v11+) + isActive = resource.hasRef.bind(resource); + } else { + // Timer that doesn't support hasRef + isActive = alwaysActive; + } + } else { + // Any other async resource + isActive = alwaysActive; + } + + activeHandles.set(asyncId, {error, isActive}); } }, }); @@ -74,7 +99,11 @@ export default function collectHandles(): () => Array { return () => { hook.disable(); - const result = Array.from(activeHandles.values()); + // Get errors for every async resource still referenced at this moment + const result = Array.from(activeHandles.values()) + .filter(({isActive}) => isActive()) + .map(({error}) => error); + activeHandles.clear(); return result; }; diff --git a/packages/test-utils/src/ConditionalTest.ts b/packages/test-utils/src/ConditionalTest.ts index da7afd008bc6..2e503a89684b 100644 --- a/packages/test-utils/src/ConditionalTest.ts +++ b/packages/test-utils/src/ConditionalTest.ts @@ -7,6 +7,8 @@ /* eslint-disable jest/no-focused-tests */ +import semver = require('semver'); + export function isJestCircusRun() { return process.env.JEST_CIRCUS === '1'; } @@ -34,3 +36,13 @@ export function skipSuiteOnWindows() { }); } } + +export function onNodeVersions(versionRange: string, testBody: () => void) { + if (!semver.satisfies(process.versions.node, versionRange)) { + describe.skip(`[SKIP] tests that require node ${versionRange}`, () => { + testBody(); + }); + } else { + testBody(); + } +} diff --git a/packages/test-utils/src/index.ts b/packages/test-utils/src/index.ts index d262ec646730..0eb78d2fc053 100644 --- a/packages/test-utils/src/index.ts +++ b/packages/test-utils/src/index.ts @@ -10,4 +10,5 @@ export { skipSuiteOnJasmine, skipSuiteOnJestCircus, skipSuiteOnWindows, + onNodeVersions, } from './ConditionalTest'; From bc0f55ddd2b25949f6a096c7a74aa6b74c45d7e0 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Tue, 17 Sep 2019 12:16:54 -0400 Subject: [PATCH 42/97] chore: Align snapshots in jest-diff (#8959) --- .../__tests__/__snapshots__/diff.test.ts.snap | 510 +++++++++--------- packages/jest-diff/src/__tests__/diff.test.ts | 179 +++--- 2 files changed, 367 insertions(+), 322 deletions(-) diff --git a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap index eb7c2a247d46..981f946af1cc 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap @@ -1,386 +1,386 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`collapses big diffs to patch format 1`] = ` -"- Expected -+ Received - -@@ -6,9 +6,9 @@ - 4, - 5, - 6, - 7, - 8, -- 9, - 10, -+ 9, - ], - }" +- Expected ++ Received + +@@ -6,9 +6,9 @@ + 4, + 5, + 6, + 7, + 8, +- 9, + 10, ++ 9, + ], + } `; exports[`color of text (expanded) 1`] = ` -"- Expected -+ Received +- Expected ++ Received - Object { - \\"searching\\": \\"\\", -- \\"sorting\\": Object { -+ \\"sorting\\": Array [ -+ Object { - \\"descending\\": false, - \\"fieldKey\\": \\"what\\", - }, -+ ], - }" + Object { + "searching": "", +- "sorting": Object { ++ "sorting": Array [ ++ Object { + "descending": false, + "fieldKey": "what", + }, ++ ], + } `; exports[`context number of lines: -1 (5 default) 1`] = ` -"- Expected 1 - -+ Received 1 + - -@@ -6,9 +6,9 @@ - 4, - 5, - 6, - 7, - 8, -- 9, - 10, -+ 9, - ], - }" +- Expected 1 - ++ Received 1 + + +@@ -6,9 +6,9 @@ + 4, + 5, + 6, + 7, + 8, +- 9, + 10, ++ 9, + ], + } `; exports[`context number of lines: 0 1`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + -@@ -11,1 +11,0 @@ -- 9, -@@ -13,0 +12,1 @@ -+ 9," +@@ -11,1 +11,0 @@ +- 9, +@@ -13,0 +12,1 @@ ++ 9, `; exports[`context number of lines: 1 1`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + -@@ -10,4 +10,4 @@ - 8, -- 9, - 10, -+ 9, - ]," +@@ -10,4 +10,4 @@ + 8, +- 9, + 10, ++ 9, + ], `; exports[`context number of lines: 2 1`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + -@@ -9,6 +9,6 @@ - 7, - 8, -- 9, - 10, -+ 9, - ], - }" +@@ -9,6 +9,6 @@ + 7, + 8, +- 9, + 10, ++ 9, + ], + } `; exports[`context number of lines: 3.1 (5 default) 1`] = ` -"- Expected 1 - -+ Received 1 + - -@@ -6,9 +6,9 @@ - 4, - 5, - 6, - 7, - 8, -- 9, - 10, -+ 9, - ], - }" +- Expected 1 - ++ Received 1 + + +@@ -6,9 +6,9 @@ + 4, + 5, + 6, + 7, + 8, +- 9, + 10, ++ 9, + ], + } `; exports[`context number of lines: undefined (5 default) 1`] = ` -"- Expected 1 - -+ Received 1 + - -@@ -6,9 +6,9 @@ - 4, - 5, - 6, - 7, - 8, -- 9, - 10, -+ 9, - ], - }" +- Expected 1 - ++ Received 1 + + +@@ -6,9 +6,9 @@ + 4, + 5, + 6, + 7, + 8, +- 9, + 10, ++ 9, + ], + } `; exports[`diffStringsUnified edge cases empty both a and b 1`] = ` -"- Expected 0 - -+ Received 0 + +- Expected 0 - ++ Received 0 + + -" `; exports[`diffStringsUnified edge cases empty only a 1`] = ` -"- Expected 0 - -+ Received 1 + +- Expected 0 - ++ Received 1 + -+ one-line string" ++ one-line string `; exports[`diffStringsUnified edge cases empty only b 1`] = ` -"- Expected 1 - -+ Received 0 + +- Expected 1 - ++ Received 0 + -- one-line string" +- one-line string `; exports[`diffStringsUnified edge cases equal both non-empty 1`] = ` -"- Expected 0 - -+ Received 0 + +- Expected 0 - ++ Received 0 + - one-line string" + one-line string `; exports[`diffStringsUnified edge cases multiline has no common after clean up chaff 1`] = ` -"- Expected 2 - -+ Received 2 + +- Expected 2 - ++ Received 2 + -- delete -- two -+ insert -+ 2" +- delete +- two ++ insert ++ 2 `; exports[`diffStringsUnified edge cases one-line has no common after clean up chaff 1`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + -- delete -+ insert" +- delete ++ insert `; exports[`falls back to not call toJSON if it throws and then objects have differences 1`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + - Object { -- \\"line\\": 1, -+ \\"line\\": 2, - \\"toJSON\\": [Function toJSON], - }" + Object { +- "line": 1, ++ "line": 2, + "toJSON": [Function toJSON], + } `; exports[`falls back to not call toJSON if serialization has no differences but then objects have differences 1`] = ` -"Compared values serialize to the same structure. -Printing internal object structure without calling \`toJSON\` instead. +Compared values serialize to the same structure. +Printing internal object structure without calling \`toJSON\` instead. -- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + - Object { -- \\"line\\": 1, -+ \\"line\\": 2, - \\"toJSON\\": [Function toJSON], - }" + Object { +- "line": 1, ++ "line": 2, + "toJSON": [Function toJSON], + } `; exports[`oneline strings 1`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + -- ab -+ aa" +- ab ++ aa `; exports[`oneline strings 2`] = ` -"- Expected 1 - -+ Received 1 + +- Expected 1 - ++ Received 1 + -- 123456789 -+ 234567890" +- 123456789 ++ 234567890 `; exports[`oneline strings 3`] = ` -"- Expected 1 - -+ Received 2 + +- Expected 1 - ++ Received 2 + -- oneline -+ multi -+ line" +- oneline ++ multi ++ line `; exports[`oneline strings 4`] = ` -"- Expected 2 - -+ Received 1 + +- Expected 2 - ++ Received 1 + -- multi -- line -+ oneline" +- multi +- line ++ oneline `; exports[`options 7980 diff 1`] = ` -"- Original -+ Modified +- Original ++ Modified -- \`\${Ti.App.name} \${Ti.App.version} \${Ti.Platform.name} \${Ti.Platform.version}\` -+ \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\`" +- \`\${Ti.App.name} \${Ti.App.version} \${Ti.Platform.name} \${Ti.Platform.version}\` ++ \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\` `; exports[`options 7980 diffStringsUnified 1`] = ` -"- Original -+ Modified +- Original ++ Modified -- \`\${Ti.App.name} \${Ti.App.version} \${Ti.Platform.name} \${Ti.Platform.version}\` -+ \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\`" +- \`\${Ti.App.name} \${Ti.App.version} \${Ti.Platform.name} \${Ti.Platform.version}\` ++ \`\${Ti.App.getName()} \${Ti.App.getVersion()} \${Ti.Platform.getName()} \${Ti.Platform.getVersion()}\` `; exports[`options change color diffStringsUnified 1`] = ` -"- Expected -+ Received +- Expected ++ Received -- delete -- changed from -+ changed to -+ insert - common" +- delete +- changed from ++ changed to ++ insert + common `; exports[`options change indicators diff 1`] = ` -"< Expected -> Received +< Expected +> Received - Array [ -< \\"delete\\", -< \\"change from\\", -> \\"change to\\", -> \\"insert\\", - \\"common\\", - ]" + Array [ +< "delete", +< "change from", +> "change to", +> "insert", + "common", + ] `; exports[`options common diff 1`] = ` -"- Expected -+ Received +- Expected ++ Received = Array [ -- \\"delete\\", -- \\"change from\\", -+ \\"change to\\", -+ \\"insert\\", -= \\"common\\", -= ]" +- "delete", +- "change from", ++ "change to", ++ "insert", += "common", += ] `; exports[`options includeChangeCounts false diffLinesUnified 1`] = ` -"- Expected -+ Received +- Expected ++ Received - Array [ -- \\"delete\\", -- \\"change from\\", -+ \\"change to\\", -+ \\"insert\\", - \\"common\\", - ]" + Array [ +- "delete", +- "change from", ++ "change to", ++ "insert", + "common", + ] `; exports[`options includeChangeCounts false diffStringsUnified 1`] = ` -"- Expected -+ Received +- Expected ++ Received -- change from -+ change to - common" +- change from ++ change to + common `; exports[`options includeChangeCounts true padding diffLinesUnified a has 2 digits 1`] = ` -"- Before 10 - -+ After 1 + - - common -- a -- a -- a -- a -- a -- a -- a -- a -- a -- a -+ b" +- Before 10 - ++ After 1 + + + common +- a +- a +- a +- a +- a +- a +- a +- a +- a +- a ++ b `; exports[`options includeChangeCounts true padding diffLinesUnified b has 2 digits 1`] = ` -"- Before 1 - -+ After 10 + - - common -- a -+ b -+ b -+ b -+ b -+ b -+ b -+ b -+ b -+ b -+ b" +- Before 1 - ++ After 10 + + + common +- a ++ b ++ b ++ b ++ b ++ b ++ b ++ b ++ b ++ b ++ b `; exports[`options includeChangeCounts true padding diffStringsUnified 1`] = ` -"- Before 1 - -+ After 1 + +- Before 1 - ++ After 1 + -- change from -+ change to - common" +- change from ++ change to + common `; exports[`options omitAnnotationLines true diff 1`] = ` -" Array [ -- \\"delete\\", -- \\"change from\\", -+ \\"change to\\", -+ \\"insert\\", - \\"common\\", - ]" + Array [ +- "delete", +- "change from", ++ "change to", ++ "insert", + "common", + ] `; exports[`options omitAnnotationLines true diffStringsUnified and includeChangeCounts true 1`] = ` -"- change from -+ change to - common" +- change from ++ change to + common `; -exports[`options omitAnnotationLines true diffStringsUnified empty strings 1`] = `""`; +exports[`options omitAnnotationLines true diffStringsUnified empty strings 1`] = ``; exports[`options trailingSpaceFormatter diffDefault default yellowish 1`] = ` -"- Expected -+ Received +- Expected ++ Received -- delete 1 trailing space: -+ delete 1 trailing space: - common 2 trailing spaces: -- insert 1 trailing space: -+ insert 1 trailing space: " +- delete 1 trailing space: ++ delete 1 trailing space: + common 2 trailing spaces: +- insert 1 trailing space: ++ insert 1 trailing space: `; exports[`options trailingSpaceFormatter diffDefault middle dot 1`] = ` -"- Expected -+ Received - -- delete 1 trailing space:· -+ delete 1 trailing space: - common 2 trailing spaces:·· -- insert 1 trailing space: -+ insert 1 trailing space:·" +- Expected ++ Received + +- delete 1 trailing space:· ++ delete 1 trailing space: + common 2 trailing spaces:·· +- insert 1 trailing space: ++ insert 1 trailing space:· `; diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index cfde5f7069d2..dcea872dcdeb 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import ansiRegex = require('ansi-regex'); +import * as style from 'ansi-styles'; import chalk from 'chalk'; import stripAnsi from 'strip-ansi'; @@ -12,20 +14,78 @@ import diff from '../'; import {diffStringsUnified} from '../printDiffs'; import {DiffOptions} from '../types'; -const optionsCounts = { +const optionsCounts: DiffOptions = { includeChangeCounts: true, }; const NO_DIFF_MESSAGE = 'Compared values have no visual difference.'; -const stripped = (a: unknown, b: unknown, options?: DiffOptions) => - stripAnsi(diff(a, b, options) || ''); +// Use only in toBe assertions for edge case messages. +const stripped = (a: unknown, b: unknown) => stripAnsi(diff(a, b) || ''); +// Use in toBe assertions for comparison lines. +const noColor = (string: string) => string; +const optionsBe: DiffOptions = { + aColor: noColor, + bColor: noColor, + commonColor: noColor, + omitAnnotationLines: true, +}; +const unexpandedBe: DiffOptions = { + ...optionsBe, + expand: false, +}; +const expandedBe: DiffOptions = { + ...optionsBe, + expand: true, +}; + +// Use for toMatchSnapshot assertions. const unexpanded = {expand: false}; const expanded = {expand: true}; const elementSymbol = Symbol.for('react.element'); +expect.addSnapshotSerializer({ + serialize(val: string): string { + return val.replace(ansiRegex(), match => { + switch (match) { + case style.inverse.open: + return ''; + case style.inverse.close: + return ''; + + case style.bold.open: + return ''; + case style.dim.open: + return ''; + case style.green.open: + return ''; + case style.red.open: + return ''; + case style.yellow.open: + return ''; + case style.bgYellow.open: + return ''; + + case style.bold.close: + case style.dim.close: + case style.green.close: + case style.red.close: + case style.yellow.close: + case style.bgYellow.close: + return ''; + + default: + return match; + } + }); + }, + test(val: any): val is string { + return typeof val === 'string'; + }, +}); + describe('different types', () => { [ [1, 'a', 'number', 'string'], @@ -66,13 +126,8 @@ describe('no visual difference', () => { ].forEach(values => { test(`'${JSON.stringify(values[0])}' and '${JSON.stringify( values[1], - )}' (unexpanded)`, () => { - expect(stripped(values[0], values[1], unexpanded)).toBe(NO_DIFF_MESSAGE); - }); - test(`'${JSON.stringify(values[0])}' and '${JSON.stringify( - values[1], - )}' (expanded)`, () => { - expect(stripped(values[0], values[1], expanded)).toBe(NO_DIFF_MESSAGE); + )}'`, () => { + expect(stripped(values[0], values[1])).toBe(NO_DIFF_MESSAGE); }); }); @@ -134,7 +189,7 @@ describe('falls back to not call toJSON', () => { }); // Some of the following assertions seem complex, but compare to alternatives: -// * toMatch instead of toMatchSnapshot: +// * toBe instead of toMatchSnapshot: // * to avoid visual complexity of escaped quotes in expected string // * to omit Expected/Received heading which is an irrelevant detail // * join lines of expected string instead of multiline string: @@ -158,10 +213,10 @@ line 4`; ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -180,42 +235,36 @@ describe('objects', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); test('numbers', () => { - expect(stripped(1, 2)).toEqual(expect.stringContaining('- 1\n+ 2')); + expect(diff(1, 2, optionsBe)).toBe('- 1\n+ 2'); }); test('-0 and 0', () => { - expect(stripped(-0, 0)).toEqual(expect.stringContaining('- -0\n+ 0')); + expect(diff(-0, 0, optionsBe)).toBe('- -0\n+ 0'); }); test('booleans', () => { - expect(stripped(false, true)).toEqual( - expect.stringContaining('- false\n+ true'), - ); + expect(diff(false, true, optionsBe)).toBe('- false\n+ true'); }); describe('multiline string non-snapshot', () => { // For example, CLI output // toBe or toEqual for a string isn’t enclosed in double quotes. - const a = ` -Options: + const a = `Options: --help, -h Show help [boolean] --bail, -b Exit the test suite immediately upon the first - failing test. [boolean] -`; - const b = ` -Options: + failing test. [boolean]`; + const b = `Options: --help, -h Show help [boolean] --bail, -b Exit the test suite immediately upon the first - failing test. [boolean] -`; + failing test. [boolean]`; const expected = [ ' Options:', '- --help, -h Show help [boolean]', @@ -227,32 +276,28 @@ Options: ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); describe('multiline string snapshot', () => { // For example, CLI output // A snapshot of a string is enclosed in double quotes. - const a = ` -" + const a = `" Options: --help, -h Show help [boolean] --bail, -b Exit the test suite immediately upon the first - failing test. [boolean]" -`; - const b = ` -" + failing test. [boolean]"`; + const b = `" Options: --help, -h Show help [boolean] --bail, -b Exit the test suite immediately upon the first - failing test. [boolean]" -`; + failing test. [boolean]"`; const expected = [ - ' "', + ' "', ' Options:', '- --help, -h Show help [boolean]', '- --bail, -b Exit the test suite immediately upon the first', @@ -263,10 +308,10 @@ Options: ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -297,10 +342,10 @@ describe('React elements', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -324,10 +369,10 @@ describe('multiline string as value of object property', () => { points: '0.5,0.460\n0.5,0.875\n0.25,0.875', }; test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -348,10 +393,10 @@ describe('multiline string as value of object property', () => { '}', ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); }); @@ -387,10 +432,10 @@ describe('indentation in JavaScript structures', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -410,10 +455,10 @@ describe('indentation in JavaScript structures', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(b, a, unexpanded)).toMatch(expected); + expect(diff(b, a, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(b, a, expanded)).toMatch(expected); + expect(diff(b, a, expandedBe)).toBe(expected); }); }); }); @@ -487,10 +532,10 @@ describe('indentation in React elements (non-snapshot)', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -507,10 +552,10 @@ describe('indentation in React elements (non-snapshot)', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(b, a, unexpanded)).toMatch(expected); + expect(diff(b, a, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(b, a, expanded)).toMatch(expected); + expect(diff(b, a, expandedBe)).toBe(expected); }); }); }); @@ -550,10 +595,10 @@ describe('indentation in React elements (snapshot)', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -573,10 +618,10 @@ describe('indentation in React elements (snapshot)', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(b, a, unexpanded)).toMatch(expected); + expect(diff(b, a, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(b, a, expanded)).toMatch(expected); + expect(diff(b, a, expandedBe)).toBe(expected); }); }); }); @@ -620,10 +665,10 @@ describe('outer React element (non-snapshot)', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -641,10 +686,10 @@ describe('outer React element (non-snapshot)', () => { ].join('\n'); test('(unexpanded)', () => { - expect(stripped(b, a, unexpanded)).toMatch(expected); + expect(diff(b, a, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(b, a, expanded)).toMatch(expected); + expect(diff(b, a, expandedBe)).toBe(expected); }); }); }); @@ -657,10 +702,10 @@ describe('trailing newline in multiline string not enclosed in quotes', () => { const expected = [' line 1', ' line 2', ' line 3', '+ '].join('\n'); test('(unexpanded)', () => { - expect(stripped(a, b, unexpanded)).toMatch(expected); + expect(diff(a, b, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(a, b, expanded)).toMatch(expected); + expect(diff(a, b, expandedBe)).toBe(expected); }); }); @@ -668,10 +713,10 @@ describe('trailing newline in multiline string not enclosed in quotes', () => { const expected = [' line 1', ' line 2', ' line 3', '- '].join('\n'); test('(unexpanded)', () => { - expect(stripped(b, a, unexpanded)).toMatch(expected); + expect(diff(b, a, unexpandedBe)).toBe(expected); }); test('(expanded)', () => { - expect(stripped(b, a, expanded)).toMatch(expected); + expect(diff(b, a, expandedBe)).toBe(expected); }); }); }); From 16930281c466ef3ac7a07d9777d47b2d208ce16e Mon Sep 17 00:00:00 2001 From: Vinicius Date: Wed, 18 Sep 2019 11:29:46 -0300 Subject: [PATCH 43/97] [React Test Example] Fixed babel to example tests (#8963) --- examples/react/.babelrc.js | 8 ++++++++ examples/react/package.json | 1 + 2 files changed, 9 insertions(+) diff --git a/examples/react/.babelrc.js b/examples/react/.babelrc.js index 7256ac590a22..1bd66ce106ef 100644 --- a/examples/react/.babelrc.js +++ b/examples/react/.babelrc.js @@ -2,4 +2,12 @@ module.exports = { presets: ['@babel/preset-env', '@babel/preset-react'], + "plugins": [ + [ + "@babel/plugin-proposal-class-properties", + { + "loose": true + } + ] + ] }; diff --git a/examples/react/package.json b/examples/react/package.json index 252d22a29c4f..c3752e4dbc0f 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -8,6 +8,7 @@ }, "devDependencies": { "@babel/core": "*", + "@babel/plugin-proposal-class-properties": "*", "@babel/preset-env": "*", "@babel/preset-react": "*", "babel-jest": "*", From 95830607c0ffbab6efd1695ed0bdc217d2f37b5b Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Sat, 21 Sep 2019 14:02:47 -0400 Subject: [PATCH 44/97] jest-diff: Add firstOrLastEmptyLineReplacement option and export 3 diffLines functions (#8955) * jest-diff: Add trimmableLineReplacement option and export 3 diffLines functions * Fix prettier lint error in README.md * Update CHANGELOG.md * Rename function and remove unneeded export * Add splitLines0 as a named export * Fix prettier error in README.md * Move edge cases and splitLines0 after diffLinesUnified * Rename trimmableLineReplacement as firstOrLastEmptyLineReplacement * Fix prettier error in diff.test.ts file * Rename option in CHANGELOG.md --- CHANGELOG.md | 1 + packages/jest-diff/README.md | 338 ++++++++++++---- packages/jest-diff/src/__tests__/diff.test.ts | 35 +- packages/jest-diff/src/diffLines.ts | 378 ++++-------------- packages/jest-diff/src/index.ts | 98 +++-- packages/jest-diff/src/joinAlignedDiffs.ts | 17 +- .../jest-diff/src/normalizeDiffOptions.ts | 1 + packages/jest-diff/src/printDiffs.ts | 186 +++++---- packages/jest-diff/src/types.ts | 2 + .../printDiffOrStringified.test.ts.snap | 4 +- 10 files changed, 536 insertions(+), 524 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c020577ef04b..8d7e33a102ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - `[jest-diff]` Add `includeChangeCounts` and rename `Indicator` options ([#8881](https://github.com/facebook/jest/pull/8881)) - `[jest-diff]` Add `changeColor` and `patchColor` options ([#8911](https://github.com/facebook/jest/pull/8911)) - `[jest-diff]` Add `trailingSpaceFormatter` option and replace cyan with `commonColor` ([#8927](https://github.com/facebook/jest/pull/8927)) +- `[jest-diff]` Add `firstOrLastEmptyLineReplacement` option and export 3 `diffLines` functions ([#8955](https://github.com/facebook/jest/pull/8955)) - `[jest-environment-jsdom]` Add `fakeTimersLolex` ([#8925](https://github.com/facebook/jest/pull/8925)) - `[jest-environment-node]` Add `fakeTimersLolex` ([#8925](https://github.com/facebook/jest/pull/8925)) - `[@jest/fake-timers]` Add Lolex as implementation of fake timers ([#8897](https://github.com/facebook/jest/pull/8897)) diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md index 15262adea62d..108fbd673aa6 100644 --- a/packages/jest-diff/README.md +++ b/packages/jest-diff/README.md @@ -2,13 +2,18 @@ Display differences clearly so people can review changes confidently. -The default export serializes JavaScript **values** and compares them line-by-line. +The default export serializes JavaScript **values**, compares them line-by-line, and returns a string which includes comparison lines. Two named exports compare **strings** character-by-character: -- `diffStringsUnified` returns a string which includes comparison lines. +- `diffStringsUnified` returns a string. - `diffStringsRaw` returns an array of `Diff` objects. +Three named exports compare **arrays of strings** line-by-line: + +- `diffLinesUnified` and `diffLinesUnified2` return a string. +- `diffLinesRaw` returns an array of `Diff` objects. + ## Installation To add this package as a dependency of a project, run either of the following commands: @@ -18,11 +23,11 @@ To add this package as a dependency of a project, run either of the following co ## Usage of default export -Given values and optional options, `diffDefault(a, b, options?)` does the following: +Given JavaScript **values**, `diffDefault(a, b, options?)` does the following: -- **serialize** the values as strings using the `pretty-format` package -- **compare** the strings line-by-line using the `diff-sequences` package -- **format** the changed or common lines using the `chalk` package +1. **serialize** the values as strings using the `pretty-format` package +2. **compare** the strings line-by-line using the `diff-sequences` package +3. **format** the changed or common lines using the `chalk` package To use this function, write either of the following: @@ -32,8 +37,8 @@ To use this function, write either of the following: ### Example of default export ```js -const a = ['delete', 'changed from', 'common']; -const b = ['changed to', 'insert', 'common']; +const a = ['delete', 'common', 'changed from']; +const b = ['common', 'changed to', 'insert']; const difference = diffDefault(a, b); ``` @@ -49,10 +54,10 @@ The returned **string** consists of: Array [ - "delete", + "common", - "changed from", + "changed to", + "insert", - "common", ] ``` @@ -66,11 +71,11 @@ Here are edge cases for the return value: ## Usage of diffStringsUnified -Given strings and optional options, `diffStringsUnified(a, b, options?)` does the following: +Given **strings**, `diffStringsUnified(a, b, options?)` does the following: -- **compare** the strings character-by-character using the `diff-sequences` package -- **clean up** small (often coincidental) common substrings, also known as chaff -- **format** the changed or common lines using the `chalk` package +1. **compare** the strings character-by-character using the `diff-sequences` package +2. **clean up** small (often coincidental) common substrings, also known as chaff +3. **format** the changed or common lines using the `chalk` package Although the function is mainly for **multiline** strings, it compares any strings. @@ -82,8 +87,8 @@ Write either of the following: ### Example of diffStringsUnified ```js -const a = 'changed from\ncommon'; -const b = 'changed to\ncommon'; +const a = 'common\nchanged from'; +const b = 'common\nchanged to'; const difference = diffStringsUnified(a, b); ``` @@ -91,43 +96,175 @@ const difference = diffStringsUnified(a, b); The returned **string** consists of: - annotation lines: describe the two change indicators with labels, and a blank line -- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverse** foreground and background colors (which the following example does not show) +- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverse** foreground and background colors (that is, `from` has white-on-green and `to` has white-on-red, which the following example does not show) ```diff - Expected + Received + common - changed from + changed to +``` + +### Performance of diffStringsUnified + +To get the benefit of **changed substrings** within the comparison lines, a character-by-character comparison has a higher computational cost (in time and space) than a line-by-line comparison. + +If the input strings can have **arbitrary length**, we recommend that the calling code set a limit, beyond which splits the strings, and then calls `diffLinesUnified` instead. For example, Jest falls back to line-by-line comparison if either string has length greater than 20K characters. + +## Usage of diffLinesUnified + +Given **arrays of strings**, `diffLinesUnified(aLines, bLines, options?)` does the following: + +1. **compare** the arrays line-by-line using the `diff-sequences` package +2. **format** the changed or common lines using the `chalk` package + +You might call this function when strings have been split into lines and you do not need to see changed substrings within lines. + +### Example of diffLinesUnified + +```js +const aLines = ['delete', 'common', 'changed from']; +const bLines = ['common', 'changed to', 'insert']; + +const difference = diffLinesUnified(aLines, bLines); +``` + +```diff +- Expected ++ Received + +- delete common +- changed from ++ changed to ++ insert ``` -### Edge cases of diffStringsUnified +### Edge cases of diffLinesUnified or diffStringsUnified -Here are edge cases for the return value: +Here are edge cases for arguments and return values: - both `a` and `b` are empty strings: no comparison lines - only `a` is empty string: all comparison lines have `bColor` and `bIndicator` (see Options) - only `b` is empty string: all comparison lines have `aColor` and `aIndicator` (see Options) - `a` and `b` are equal non-empty strings: all comparison lines have `commonColor` and `commonIndicator` (see Options) -### Performance of diffStringsUnified +To get the comparison lines described above from the `diffLineUnified` function, call `splitLines0(string)` instead of `string.split('\n')` -To get the benefit of **changed substrings** within the comparison lines, a character-by-character comparison has a higher computational cost (in time and space) than a line-by-line comparison. +```js +export const splitLines0 = string => + string.length === 0 ? [] : string.split('\n'); +``` -If the input strings can have **arbitrary length**, we recommend that the calling code set a limit, beyond which it calls the default export instead. For example, Jest falls back to line-by-line comparison if either string has length greater than 20K characters. +### Example of splitLines0 function -## Usage of diffStringsRaw +```js +import {diffLinesUnified, splitLines0} from 'jest-diff'; + +const a = 'multi\nline\nstring'; +const b = ''; +const options = {includeChangeCounts: true}; // see Options + +const difference = diffLinesUnified(splitLines0(a), splitLines0(b), options); +``` + +Given an empty string, `splitLines0(b)` returns `[]` an empty array, formatted as no `Received` lines: + +```diff +- Expected 3 ++ Received 0 + +- multi +- line +- string +``` -Given strings and boolean, `diffStringsRaw(a, b, cleanup)` does the following: +### Example of split method -- **compare** the strings character-by-character using the `diff-sequences` package -- optionally **clean up** small (often coincidental) common substrings, also known as chaff +```js +const a = 'multi\nline\nstring'; +const b = ''; +const options = {includeChangeCounts: true}; // see Options + +const difference = diffLinesUnified(a.split('\n'), b.split('\n'), options); +``` + +Given an empty string, `b.split('\n')` returns `['']` an array that contains an empty string, formatted as one empty `Received` line, which is **ambiguous** with an empty line: + +```diff +- Expected 3 ++ Received 1 + +- multi +- line +- string ++ +``` + +## Usage of diffLinesUnified2 + +Given two **pairs** of arrays of strings, `diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options?)` does the following: + +1. **compare** the pair of `Compare` arrays line-by-line using the `diff-sequences` package +2. **format** the corresponding lines in the pair of `Display` arrays using the `chalk` package -Write one of the following: +Jest calls this function to consider lines as common instead of changed if the only difference is indentation. -- `const {diffStringsRaw} = require('jest-diff');` in CommonJS modules -- `import {diffStringsRaw} from 'jest-diff';` in ECMAScript modules +You might call this function for case insensitive or Unicode equivalence comparison of lines. + +### Example of diffLinesUnified2 + +```js +import format from 'pretty-format'; + +const a = { + action: 'MOVE_TO', + x: 1, + y: 2, +}; +const b = { + action: 'MOVE_TO', + payload: { + x: 1, + y: 2, + }, +}; + +const difference = diffLinesUnified2( + // serialize with indentation to display lines + format(a).split('\n'), + format(b).split('\n'), + // serialize without indentation to compare lines + format(a, {indent: 0}).split('\n'), + format(b, {indent: 0}).split('\n'), +); +``` + +The `x` and `y` properties are common, because their only difference is indentation: + +```diff +- Expected ++ Received + + Object { + action: 'MOVE_TO', ++ payload: Object { + x: 1, + y: 2, ++ }, + } +``` + +The preceding example illustrates why (at least for indentation) it seems more intuitive that the function returns the common line from the `bLinesDisplay` array instead of from the `aLinesDisplay` array. + +## Usage of diffStringsRaw + +Given **strings** and a boolean option, `diffStringsRaw(a, b, cleanup)` does the following: + +1. **compare** the strings character-by-character using the `diff-sequences` package +2. optionally **clean up** small (often coincidental) common substrings, also known as chaff Because `diffStringsRaw` returns the difference as **data** instead of a string, you can format it as your application requires (for example, enclosed in HTML markup for browser instead of escape sequences for console). @@ -147,46 +284,31 @@ The value at index `1` is a substring of `a` or `b` or both. ```js const diffs = diffStringsRaw('changed from', 'changed to', true); - -/* -diffs[0][0] === 0 // DIFF_EQUAL -diffs[0][1] === 'changed ' - -diffs[1][0] === -1 // DIFF_DELETE -diffs[1][1] === 'from' - -diffs[2][0] === 1 // DIFF_INSERT -diffs[2][1] === 'to' -*/ ``` +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :------------ | +| `0` | `0` | `'changed '` | +| `1` | `-1` | `'from'` | +| `2` | `1` | `'to'` | + ### Example of diffStringsRaw without cleanup ```js const diffs = diffStringsRaw('changed from', 'changed to', false); - -/* -diffs[0][0] === 0 // DIFF_EQUAL -diffs[0][1] === 'changed ' - -diffs[1][0] === -1 // DIFF_DELETE -diffs[1][1] === 'fr' - -diffs[2][0] === 1 // DIFF_INSERT -diffs[2][1] === 't' - -// Here is a small coincidental common substring: -diffs[3][0] === 0 // DIFF_EQUAL -diffs[3][1] === 'o' - -diffs[4][0] === -1 // DIFF_DELETE -diffs[4][1] === 'm' -*/ ``` +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :------------ | +| `0` | `0` | `'changed '` | +| `1` | `-1` | `'fr'` | +| `2` | `1` | `'t'` | +| `3` | `0` | `'o'` | +| `4` | `-1` | `'m'` | + ### Advanced import for diffStringsRaw -Here are all the named imports for the `diffStringsRaw` function: +Here are all the named imports that you might need for the `diffStringsRaw` function: - `const {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} = require('jest-diff');` in CommonJS modules - `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from 'jest-diff';` in ECMAScript modules @@ -201,6 +323,31 @@ const diffDelete = new Diff(DIFF_DELETE, 'from'); const diffInsert = new Diff(DIFF_INSERT, 'to'); ``` +## Usage of diffLinesRaw + +Given **arrays of strings**, `diffLinesRaw(aLines, bLines)` does the following: + +- **compare** the arrays line-by-line using the `diff-sequences` package + +Because `diffLinesRaw` returns the difference as **data** instead of a string, you can format it as your application requires. + +### Example of diffLinesRaw + +```js +const aLines = ['delete', 'common', 'changed from']; +const bLines = ['common', 'changed to', 'insert']; + +const diffs = diffLinesRaw(aLines, bLines); +``` + +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :--------------- | +| `0` | `-1` | `'delete'` | +| `1` | `0` | `'common'` | +| `2` | `-1` | `'changed from'` | +| `3` | `1` | `'changed to'` | +| `4` | `1` | `'insert'` | + ## Options The default options are for the report when an assertion fails from the `expect` package used by Jest. @@ -209,26 +356,29 @@ For other applications, you can provide an options object as a third argument: - `diffDefault(a, b, options)` - `diffStringsUnified(a, b, options)` +- `diffLinesUnified(aLines, bLines, options)` +- `diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options)` ### Properties of options object -| name | default | -| :----------------------- | :--------------- | -| `aAnnotation` | `'Expected'` | -| `aColor` | `chalk.green` | -| `aIndicator` | `'-'` | -| `bAnnotation` | `'Received'` | -| `bColor` | `chalk.red` | -| `bIndicator` | `'+'` | -| `changeColor` | `chalk.inverse` | -| `commonColor` | `chalk.dim` | -| `commonIndicator` | `' '` | -| `contextLines` | `5` | -| `expand` | `true` | -| `includeChangeCounts` | `false` | -| `omitAnnotationLines` | `false` | -| `patchColor` | `chalk.yellow` | -| `trailingSpaceFormatter` | `chalk.bgYellow` | +| name | default | +| :-------------------------------- | :--------------- | +| `aAnnotation` | `'Expected'` | +| `aColor` | `chalk.green` | +| `aIndicator` | `'-'` | +| `bAnnotation` | `'Received'` | +| `bColor` | `chalk.red` | +| `bIndicator` | `'+'` | +| `changeColor` | `chalk.inverse` | +| `commonColor` | `chalk.dim` | +| `commonIndicator` | `' '` | +| `contextLines` | `5` | +| `expand` | `true` | +| `firstOrLastEmptyLineReplacement` | `'↵'` | +| `includeChangeCounts` | `false` | +| `omitAnnotationLines` | `false` | +| `patchColor` | `chalk.yellow` | +| `trailingSpaceFormatter` | `chalk.bgYellow` | For more information about the options, see the following examples. @@ -247,9 +397,9 @@ const options = { - Original + Modified + common - changed from + changed to - common ``` The `jest-diff` package does not assume that the 2 labels have equal length. @@ -358,8 +508,8 @@ const options = { To display the number of changed lines at the right of annotation lines: ```js -const a = ['changed from', 'common']; -const b = ['changed to', 'insert', 'common']; +const a = ['common', 'changed from']; +const b = ['common', 'changed to', 'insert']; const options = { includeChangeCounts: true, @@ -373,10 +523,10 @@ const difference = diffDefault(a, b, options); + Received 2 + Array [ + "common", - "changed from", + "changed to", + "insert", - "common", ] ``` @@ -385,8 +535,8 @@ const difference = diffDefault(a, b, options); To display only the comparison lines: ```js -const a = 'changed from\ncommon'; -const b = 'changed to\ncommon'; +const a = 'common\nchanged from'; +const b = 'common\nchanged to'; const options = { omitAnnotationLines: true, @@ -396,7 +546,31 @@ const difference = diffStringsUnified(a, b, options); ``` ```diff + common - changed from + changed to - common ``` + +### Example of option not to replace first or last empty lines + +If the **first** or **last** comparison line is **empty**, because the content is empty and the indicator is a space, you might not notice it. + +Also, because Jest trims the report when a matcher fails, it deletes an empty last line. + +The replacement is a string whose default value is `'↵'` U+21B5 downwards arrow with corner leftwards. + +To store the difference in a file without a replacement, because it could be ambiguous with the content of the arguments, provide an empty string: + +```js +const options = { + firstOrLastEmptyLineReplacement: '', +}; +``` + +If a content line is empty, then the corresponding comparison line is automatically trimmed to remove the margin space (represented as a middle dot below) for the default indicators: + +| Indicator | untrimmed | trimmed | +| ----------------: | :-------- | :------ | +| `aIndicator` | `'-·'` | `'-'` | +| `bIndicator` | `'+·'` | `'+'` | +| `commonIndicator` | `' ·'` | `''` | diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index dcea872dcdeb..d75390fc9dc3 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -699,7 +699,7 @@ describe('trailing newline in multiline string not enclosed in quotes', () => { const b = a + '\n'; describe('from less to more', () => { - const expected = [' line 1', ' line 2', ' line 3', '+ '].join('\n'); + const expected = [' line 1', ' line 2', ' line 3', '+'].join('\n'); test('(unexpanded)', () => { expect(diff(a, b, unexpandedBe)).toBe(expected); @@ -710,7 +710,7 @@ describe('trailing newline in multiline string not enclosed in quotes', () => { }); describe('from more to less', () => { - const expected = [' line 1', ' line 2', ' line 3', '- '].join('\n'); + const expected = [' line 1', ' line 2', ' line 3', '-'].join('\n'); test('(unexpanded)', () => { expect(diff(b, a, unexpandedBe)).toBe(expected); @@ -956,4 +956,35 @@ describe('options', () => { expect(diff(aTrailingSpaces, bTrailingSpaces, options)).toMatchSnapshot(); }); }); + + describe('firstOrLastEmptyLineReplacement', () => { + const noColor = (string: string) => string; + const options = { + aColor: noColor, + bColor: noColor, + changeColor: noColor, + commonColor: noColor, + firstOrLastEmptyLineReplacement: '', + omitAnnotationLines: true, + }; + + const aEmpty = '\ncommon\nchanged from\n'; + const bEmpty = '\ncommon\nchanged to\n'; + + const expected = [ + '', + ' common', + '- changed from', + '+ changed to', + '', + ].join('\n'); + + test('diffDefault', () => { + expect(diff(aEmpty, bEmpty, options)).toBe(expected); + }); + + test('diffStringsUnified', () => { + expect(diffStringsUnified(aEmpty, bEmpty, options)).toBe(expected); + }); + }); }); diff --git a/packages/jest-diff/src/diffLines.ts b/packages/jest-diff/src/diffLines.ts index 81969db24183..6e5f5b467563 100644 --- a/packages/jest-diff/src/diffLines.ts +++ b/packages/jest-diff/src/diffLines.ts @@ -5,313 +5,105 @@ * LICENSE file in the root directory of this source tree. */ -import diff, {Callbacks} from 'diff-sequences'; -import {NO_DIFF_MESSAGE} from './constants'; -import { - ChangeCounts, - createPatchMark, - formatTrailingSpaces, - printAnnotation, -} from './printDiffs'; -import {DiffOptionsNormalized} from './types'; - -type Original = { - a: string; - b: string; -}; - -type Put = (line: string) => void; - -// Given index interval in expected lines, put formatted delete lines. -const formatDelete = ( - aStart: number, - aEnd: number, - aLinesUn: Array, - aLinesIn: Array, - {aColor, aIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, - put: Put, -) => { - for (let aIndex = aStart; aIndex !== aEnd; aIndex += 1) { - const aLineUn = aLinesUn[aIndex]; - const aLineIn = aLinesIn[aIndex]; - const indentation = aLineIn.slice(0, aLineIn.length - aLineUn.length); - - put( - aColor( - aIndicator + - ' ' + - indentation + - formatTrailingSpaces(aLineUn, trailingSpaceFormatter), - ), - ); - } -}; - -// Given index interval in received lines, put formatted insert lines. -const formatInsert = ( - bStart: number, - bEnd: number, - bLinesUn: Array, - bLinesIn: Array, - {bColor, bIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, - put: Put, -) => { - for (let bIndex = bStart; bIndex !== bEnd; bIndex += 1) { - const bLineUn = bLinesUn[bIndex]; - const bLineIn = bLinesIn[bIndex]; - const indentation = bLineIn.slice(0, bLineIn.length - bLineUn.length); - - put( - bColor( - bIndicator + - ' ' + - indentation + - formatTrailingSpaces(bLineUn, trailingSpaceFormatter), - ), - ); +import diff from 'diff-sequences'; +import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff} from './cleanupSemantic'; +import {normalizeDiffOptions} from './normalizeDiffOptions'; +import {printDiffLines} from './printDiffs'; +import {DiffOptions} from './types'; + +// Compare two arrays of strings line-by-line. Format as comparison lines. +export const diffLinesUnified = ( + aLines: Array, + bLines: Array, + options?: DiffOptions, +): string => + printDiffLines(diffLinesRaw(aLines, bLines), normalizeDiffOptions(options)); + +// Given two pairs of arrays of strings: +// Compare the pair of comparison arrays line-by-line. +// Format the corresponding lines in the pair of displayable arrays. +export const diffLinesUnified2 = ( + aLinesDisplay: Array, + bLinesDisplay: Array, + aLinesCompare: Array, + bLinesCompare: Array, + options?: DiffOptions, +): string => { + if ( + aLinesDisplay.length !== aLinesCompare.length || + bLinesDisplay.length !== bLinesCompare.length + ) { + // Fall back to diff of display lines. + return diffLinesUnified(aLinesDisplay, bLinesDisplay, options); } -}; - -// Given the number of items and starting indexes of a common subsequence, -// put formatted common lines. -const formatCommon = ( - nCommon: number, - aCommon: number, - bCommon: number, - bLinesUn: Array, - bLinesIn: Array, - {commonColor, commonIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, - put: Put, -) => { - for (; nCommon !== 0; nCommon -= 1, aCommon += 1, bCommon += 1) { - const bLineUn = bLinesUn[bCommon]; - const bLineIn = bLinesIn[bCommon]; - const bLineInLength = bLineIn.length; - // For common lines, received indentation seems more intuitive. - const indentation = bLineIn.slice(0, bLineInLength - bLineUn.length); + const diffs = diffLinesRaw(aLinesCompare, bLinesCompare); + + // Replace comparison lines with displayable lines. + let aIndex = 0; + let bIndex = 0; + diffs.forEach((diff: Diff) => { + switch (diff[0]) { + case DIFF_DELETE: + diff[1] = aLinesDisplay[aIndex]; + aIndex += 1; + break; + + case DIFF_INSERT: + diff[1] = bLinesDisplay[bIndex]; + bIndex += 1; + break; + + default: + diff[1] = bLinesDisplay[bIndex]; + aIndex += 1; + bIndex += 1; + } + }); - put( - commonColor( - commonIndicator + - ' ' + - indentation + - formatTrailingSpaces(bLineUn, trailingSpaceFormatter), - ), - ); - } + return printDiffLines(diffs, normalizeDiffOptions(options)); }; -// jest --expand -// Return formatted diff as joined string of all lines. -const diffExpand = ( - aLinesUn: Array, - bLinesUn: Array, - aLinesIn: Array, - bLinesIn: Array, - options: DiffOptionsNormalized, -): string => { - const isCommon: Callbacks['isCommon'] = (aIndex, bIndex) => - aLinesUn[aIndex] === bLinesUn[bIndex]; - - const array: Array = []; - const put = (line: string) => { - array.push(line); - }; - - const changeCounts: ChangeCounts = { - a: 0, - b: 0, - }; - - let aStart = 0; - let bStart = 0; - - const foundSubsequence: Callbacks['foundSubsequence'] = ( - nCommon, - aCommon, - bCommon, +// Compare two arrays of strings line-by-line. +export const diffLinesRaw = ( + aLines: Array, + bLines: Array, +): Array => { + const aLength = aLines.length; + const bLength = bLines.length; + + const isCommon = (aIndex: number, bIndex: number) => + aLines[aIndex] === bLines[bIndex]; + + const diffs: Array = []; + let aIndex = 0; + let bIndex = 0; + + const foundSubsequence = ( + nCommon: number, + aCommon: number, + bCommon: number, ) => { - changeCounts.a += aCommon - aStart; - changeCounts.b += bCommon - bStart; - formatDelete(aStart, aCommon, aLinesUn, aLinesIn, options, put); - formatInsert(bStart, bCommon, bLinesUn, bLinesIn, options, put); - formatCommon(nCommon, aCommon, bCommon, bLinesUn, bLinesIn, options, put); - aStart = aCommon + nCommon; - bStart = bCommon + nCommon; - }; - - const aLength = aLinesUn.length; - const bLength = bLinesUn.length; - - diff(aLength, bLength, isCommon, foundSubsequence); - - // After the last common subsequence, format remaining change lines. - changeCounts.a += aLength - aStart; - changeCounts.b += bLength - bStart; - formatDelete(aStart, aLength, aLinesUn, aLinesIn, options, put); - formatInsert(bStart, bLength, bLinesUn, bLinesIn, options, put); - - return printAnnotation(options, changeCounts) + array.join('\n'); -}; - -// jest --no-expand -// Return joined string of formatted diff for all change lines, -// but if some common lines are omitted because there are more than the context, -// then a “patch mark” precedes each set of adjacent changed and common lines. -const diffNoExpand = ( - aLinesUn: Array, - bLinesUn: Array, - aLinesIn: Array, - bLinesIn: Array, - options: DiffOptionsNormalized, -): string => { - const isCommon: Callbacks['isCommon'] = (aIndex, bIndex) => - aLinesUn[aIndex] === bLinesUn[bIndex]; - - let iPatchMark = 0; // index of placeholder line for patch mark - const array = ['']; - const put = (line: string) => { - array.push(line); - }; - - let isAtEnd = false; - const aLength = aLinesUn.length; - const bLength = bLinesUn.length; - const nContextLines = options.contextLines; - const nContextLines2 = nContextLines + nContextLines; - const changeCounts: ChangeCounts = { - a: 0, - b: 0, - }; - - // Initialize the first patch for changes at the start, - // especially for edge case in which there is no common subsequence. - let aStart = 0; - let aEnd = 0; - let bStart = 0; - let bEnd = 0; - - // Given the number of items and starting indexes of each common subsequence, - // format any preceding change lines, and then common context lines. - const foundSubsequence: Callbacks['foundSubsequence'] = ( - nCommon, - aStartCommon, - bStartCommon, - ) => { - const aEndCommon = aStartCommon + nCommon; - const bEndCommon = bStartCommon + nCommon; - isAtEnd = aEndCommon === aLength && bEndCommon === bLength; - - // If common subsequence is at start, re-initialize the first patch. - if (aStartCommon === 0 && bStartCommon === 0) { - const nLines = nContextLines < nCommon ? nContextLines : nCommon; - aStart = aEndCommon - nLines; - bStart = bEndCommon - nLines; - - formatCommon(nLines, aStart, bStart, bLinesUn, bLinesIn, options, put); - aEnd = aEndCommon; - bEnd = bEndCommon; - return; + for (; aIndex !== aCommon; aIndex += 1) { + diffs.push(new Diff(DIFF_DELETE, aLines[aIndex])); } - - // Format preceding change lines. - changeCounts.a += aStartCommon - aEnd; - changeCounts.b += bStartCommon - bEnd; - formatDelete(aEnd, aStartCommon, aLinesUn, aLinesIn, options, put); - formatInsert(bEnd, bStartCommon, bLinesUn, bLinesIn, options, put); - aEnd = aStartCommon; - bEnd = bStartCommon; - - // If common subsequence is at end, then context follows preceding changes; - // else context follows preceding changes AND precedes following changes. - const maxContextLines = isAtEnd ? nContextLines : nContextLines2; - - if (nCommon <= maxContextLines) { - // The patch includes all lines in the common subsequence. - formatCommon(nCommon, aEnd, bEnd, bLinesUn, bLinesIn, options, put); - aEnd += nCommon; - bEnd += nCommon; - return; + for (; bIndex !== bCommon; bIndex += 1) { + diffs.push(new Diff(DIFF_INSERT, bLines[bIndex])); } - - // The patch ends because context is less than number of common lines. - formatCommon(nContextLines, aEnd, bEnd, bLinesUn, bLinesIn, options, put); - aEnd += nContextLines; - bEnd += nContextLines; - - array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); - - // If common subsequence is not at end, another patch follows it. - if (!isAtEnd) { - iPatchMark = array.length; // index of placeholder line - array[iPatchMark] = ''; - - const nLines = nContextLines < nCommon ? nContextLines : nCommon; - aStart = aEndCommon - nLines; - bStart = bEndCommon - nLines; - - formatCommon(nLines, aStart, bStart, bLinesUn, bLinesIn, options, put); - aEnd = aEndCommon; - bEnd = bEndCommon; + for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) { + diffs.push(new Diff(DIFF_EQUAL, bLines[bIndex])); } }; diff(aLength, bLength, isCommon, foundSubsequence); - // If no common subsequence or last was not at end, format remaining change lines. - if (!isAtEnd) { - changeCounts.a += aLength - aEnd; - changeCounts.b += bLength - bEnd; - formatDelete(aEnd, aLength, aLinesUn, aLinesIn, options, put); - formatInsert(bEnd, bLength, bLinesUn, bLinesIn, options, put); - aEnd = aLength; - bEnd = bLength; - } - - if (aStart === 0 && aEnd === aLength && bStart === 0 && bEnd === bLength) { - array.splice(0, 1); // delete placeholder line for patch mark - } else { - array[iPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); - } - - return printAnnotation(options, changeCounts) + array.join('\n'); -}; - -export default ( - a: string, - b: string, - options: DiffOptionsNormalized, - original?: Original, -): string => { - if (a === b) { - return NO_DIFF_MESSAGE; + // After the last common subsequence, push remaining change items. + for (; aIndex !== aLength; aIndex += 1) { + diffs.push(new Diff(DIFF_DELETE, aLines[aIndex])); } - - let aLinesUn = a.split('\n'); - let bLinesUn = b.split('\n'); - - // Indentation is unknown if expected value is snapshot or multiline string. - let aLinesIn = aLinesUn; - let bLinesIn = bLinesUn; - - if (original) { - // Indentation is known if expected value is data structure: - // Compare lines without indentation and format lines with indentation. - aLinesIn = original.a.split('\n'); - bLinesIn = original.b.split('\n'); - - if ( - aLinesUn.length !== aLinesIn.length || - bLinesUn.length !== bLinesIn.length - ) { - // Fall back if unindented and indented lines are inconsistent. - aLinesUn = aLinesIn; - bLinesUn = bLinesIn; - } + for (; bIndex !== bLength; bIndex += 1) { + diffs.push(new Diff(DIFF_INSERT, bLines[bIndex])); } - return options.expand - ? diffExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options) - : diffNoExpand(aLinesUn, bLinesUn, aLinesIn, bLinesIn, options); + return diffs; }; diff --git a/packages/jest-diff/src/index.ts b/packages/jest-diff/src/index.ts index 76cbb7c34dae..5ccf52c6d9ea 100644 --- a/packages/jest-diff/src/index.ts +++ b/packages/jest-diff/src/index.ts @@ -9,15 +9,15 @@ import prettyFormat = require('pretty-format'); import chalk from 'chalk'; import getType = require('jest-get-type'); import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff} from './cleanupSemantic'; -import diffLines from './diffLines'; -import {normalizeDiffOptions} from './normalizeDiffOptions'; -import {diffStringsRaw, diffStringsUnified} from './printDiffs'; +import {diffLinesRaw, diffLinesUnified, diffLinesUnified2} from './diffLines'; +import {diffStringsRaw, diffStringsUnified, splitLines0} from './printDiffs'; import {NO_DIFF_MESSAGE, SIMILAR_MESSAGE} from './constants'; -import {DiffOptionsNormalized, DiffOptions as ImportDiffOptions} from './types'; +import {DiffOptions as ImportDiffOptions} from './types'; export type DiffOptions = ImportDiffOptions; -export {diffStringsRaw, diffStringsUnified}; +export {diffLinesRaw, diffLinesUnified, diffLinesUnified2}; +export {diffStringsRaw, diffStringsUnified, splitLines0}; export {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff}; const { @@ -85,32 +85,31 @@ function diff(a: any, b: any, options?: DiffOptions): string | null { return null; } - const optionsNormalized = normalizeDiffOptions(options); switch (aType) { case 'string': - return diffLines(a, b, optionsNormalized); + return diffLinesUnified(splitLines0(a), splitLines0(b), options); case 'boolean': case 'number': - return comparePrimitive(a, b, optionsNormalized); + return comparePrimitive(a, b, options); case 'map': - return compareObjects(sortMap(a), sortMap(b), optionsNormalized); + return compareObjects(sortMap(a), sortMap(b), options); case 'set': - return compareObjects(sortSet(a), sortSet(b), optionsNormalized); + return compareObjects(sortSet(a), sortSet(b), options); default: - return compareObjects(a, b, optionsNormalized); + return compareObjects(a, b, options); } } function comparePrimitive( a: number | boolean, b: number | boolean, - options: DiffOptionsNormalized, + options?: DiffOptions, ) { - return diffLines( - prettyFormat(a, FORMAT_OPTIONS), - prettyFormat(b, FORMAT_OPTIONS), - options, - ); + const aFormat = prettyFormat(a, FORMAT_OPTIONS); + const bFormat = prettyFormat(b, FORMAT_OPTIONS); + return aFormat === bFormat + ? NO_DIFF_MESSAGE + : diffLinesUnified(splitLines0(aFormat), splitLines0(bFormat), options); } function sortMap(map: Map) { @@ -124,43 +123,60 @@ function sortSet(set: Set) { function compareObjects( a: Record, b: Record, - options: DiffOptionsNormalized, + options?: DiffOptions, ) { - let diffMessage; + let difference; let hasThrown = false; try { - diffMessage = diffLines( - prettyFormat(a, FORMAT_OPTIONS_0), - prettyFormat(b, FORMAT_OPTIONS_0), - options, - { - a: prettyFormat(a, FORMAT_OPTIONS), - b: prettyFormat(b, FORMAT_OPTIONS), - }, - ); + const aCompare = prettyFormat(a, FORMAT_OPTIONS_0); + const bCompare = prettyFormat(b, FORMAT_OPTIONS_0); + + if (aCompare === bCompare) { + difference = NO_DIFF_MESSAGE; + } else { + const aDisplay = prettyFormat(a, FORMAT_OPTIONS); + const bDisplay = prettyFormat(b, FORMAT_OPTIONS); + + difference = diffLinesUnified2( + aDisplay.split('\n'), + bDisplay.split('\n'), + aCompare.split('\n'), + bCompare.split('\n'), + options, + ); + } } catch (e) { hasThrown = true; } // If the comparison yields no results, compare again but this time // without calling `toJSON`. It's also possible that toJSON might throw. - if (!diffMessage || diffMessage === NO_DIFF_MESSAGE) { - diffMessage = diffLines( - prettyFormat(a, FALLBACK_FORMAT_OPTIONS_0), - prettyFormat(b, FALLBACK_FORMAT_OPTIONS_0), - options, - { - a: prettyFormat(a, FALLBACK_FORMAT_OPTIONS), - b: prettyFormat(b, FALLBACK_FORMAT_OPTIONS), - }, - ); - if (diffMessage !== NO_DIFF_MESSAGE && !hasThrown) { - diffMessage = SIMILAR_MESSAGE + '\n\n' + diffMessage; + if (difference === undefined || difference === NO_DIFF_MESSAGE) { + const aCompare = prettyFormat(a, FALLBACK_FORMAT_OPTIONS_0); + const bCompare = prettyFormat(b, FALLBACK_FORMAT_OPTIONS_0); + + if (aCompare === bCompare) { + difference = NO_DIFF_MESSAGE; + } else { + const aDisplay = prettyFormat(a, FALLBACK_FORMAT_OPTIONS); + const bDisplay = prettyFormat(b, FALLBACK_FORMAT_OPTIONS); + + difference = diffLinesUnified2( + aDisplay.split('\n'), + bDisplay.split('\n'), + aCompare.split('\n'), + bCompare.split('\n'), + options, + ); + } + + if (difference !== NO_DIFF_MESSAGE && !hasThrown) { + difference = SIMILAR_MESSAGE + '\n\n' + difference; } } - return diffMessage; + return difference; } export default diff; diff --git a/packages/jest-diff/src/joinAlignedDiffs.ts b/packages/jest-diff/src/joinAlignedDiffs.ts index 7ae7a9b41ff4..ebfb69078c18 100644 --- a/packages/jest-diff/src/joinAlignedDiffs.ts +++ b/packages/jest-diff/src/joinAlignedDiffs.ts @@ -95,12 +95,14 @@ export const joinAlignedDiffsNoExpand = ( }; const pushDeleteLine = (line: string): void => { - lines.push(printDeleteLine(line, options)); + const j = lines.length; + lines.push(printDeleteLine(line, j === 0 || j === jLast, options)); aEnd += 1; }; const pushInsertLine = (line: string): void => { - lines.push(printInsertLine(line, options)); + const j = lines.length; + lines.push(printInsertLine(line, j === 0 || j === jLast, options)); bEnd += 1; }; @@ -200,20 +202,17 @@ export const joinAlignedDiffsExpand = ( diffs .map((diff: Diff, i: number, diffs: Array): string => { const line = diff[1]; + const isFirstOrLast = i === 0 || i === diffs.length - 1; switch (diff[0]) { case DIFF_DELETE: - return printDeleteLine(line, options); + return printDeleteLine(line, isFirstOrLast, options); case DIFF_INSERT: - return printInsertLine(line, options); + return printInsertLine(line, isFirstOrLast, options); default: - return printCommonLine( - line, - i === 0 || i === diffs.length - 1, - options, - ); + return printCommonLine(line, isFirstOrLast, options); } }) .join('\n'); diff --git a/packages/jest-diff/src/normalizeDiffOptions.ts b/packages/jest-diff/src/normalizeDiffOptions.ts index 8ee795dcfb71..410a18029507 100644 --- a/packages/jest-diff/src/normalizeDiffOptions.ts +++ b/packages/jest-diff/src/normalizeDiffOptions.ts @@ -23,6 +23,7 @@ const OPTIONS_DEFAULT: DiffOptionsNormalized = { commonIndicator: ' ', contextLines: DIFF_CONTEXT_DEFAULT, expand: true, + firstOrLastEmptyLineReplacement: '\u{21B5}', // downwards arrow with corner leftwards includeChangeCounts: false, omitAnnotationLines: false, patchColor: chalk.yellow, diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index cc5ed53c562c..1c3c975f15d7 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -12,7 +12,7 @@ import { Diff, cleanupSemantic, } from './cleanupSemantic'; -import diffLines from './diffLines'; +import {diffLinesUnified} from './diffLines'; import diffStrings from './diffStrings'; import getAlignedDiffs from './getAlignedDiffs'; import { @@ -22,48 +22,85 @@ import { import {normalizeDiffOptions} from './normalizeDiffOptions'; import {DiffOptions, DiffOptionsColor, DiffOptionsNormalized} from './types'; -const NEWLINE_SYMBOL = '\u{21B5}'; // downwards arrow with corner leftwards - -export const formatTrailingSpaces = ( +const formatTrailingSpaces = ( line: string, trailingSpaceFormatter: DiffOptionsColor, ): string => line.replace(/\s+$/, match => trailingSpaceFormatter(match)); +const printDiffLine = ( + line: string, + isFirstOrLast: boolean, + color: DiffOptionsColor, + indicator: string, + firstOrLastEmptyLineReplacement: string, + trailingSpaceFormatter: DiffOptionsColor, +): string => + line.length !== 0 + ? color( + indicator + ' ' + formatTrailingSpaces(line, trailingSpaceFormatter), + ) + : indicator !== ' ' + ? color(indicator) + : isFirstOrLast && firstOrLastEmptyLineReplacement.length !== 0 + ? color(indicator + ' ' + firstOrLastEmptyLineReplacement) + : ''; + export const printDeleteLine = ( line: string, - {aColor, aIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, + isFirstOrLast: boolean, + { + aColor, + aIndicator, + firstOrLastEmptyLineReplacement, + trailingSpaceFormatter, + }: DiffOptionsNormalized, ): string => - aColor( - line.length !== 0 - ? aIndicator + ' ' + formatTrailingSpaces(line, trailingSpaceFormatter) - : aIndicator, + printDiffLine( + line, + isFirstOrLast, + aColor, + aIndicator, + firstOrLastEmptyLineReplacement, + trailingSpaceFormatter, ); export const printInsertLine = ( line: string, - {bColor, bIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, + isFirstOrLast: boolean, + { + bColor, + bIndicator, + firstOrLastEmptyLineReplacement, + trailingSpaceFormatter, + }: DiffOptionsNormalized, ): string => - bColor( - line.length !== 0 - ? bIndicator + ' ' + formatTrailingSpaces(line, trailingSpaceFormatter) - : bIndicator, + printDiffLine( + line, + isFirstOrLast, + bColor, + bIndicator, + firstOrLastEmptyLineReplacement, + trailingSpaceFormatter, ); -// Prevent visually ambiguous empty line as the first or the last. export const printCommonLine = ( line: string, isFirstOrLast: boolean, - {commonColor, commonIndicator, trailingSpaceFormatter}: DiffOptionsNormalized, + { + commonColor, + commonIndicator, + firstOrLastEmptyLineReplacement, + trailingSpaceFormatter, + }: DiffOptionsNormalized, ): string => - line.length !== 0 - ? commonColor( - commonIndicator + - ' ' + - formatTrailingSpaces(line, trailingSpaceFormatter), - ) - : isFirstOrLast - ? commonColor(commonIndicator + ' ' + NEWLINE_SYMBOL) - : ''; + printDiffLine( + line, + isFirstOrLast, + commonColor, + commonIndicator, + firstOrLastEmptyLineReplacement, + trailingSpaceFormatter, + ); export const hasCommonDiff = (diffs: Array, isMultiline: boolean) => { if (isMultiline) { @@ -82,7 +119,7 @@ export type ChangeCounts = { b: number; }; -const countChanges = (diffs: Array): ChangeCounts => { +export const countChanges = (diffs: Array): ChangeCounts => { let a = 0; let b = 0; @@ -145,6 +182,15 @@ export const printAnnotation = ( ); }; +export const printDiffLines = ( + diffs: Array, + options: DiffOptionsNormalized, +): string => + printAnnotation(options, countChanges(diffs)) + + (options.expand + ? joinAlignedDiffsExpand(diffs, options) + : joinAlignedDiffsNoExpand(diffs, options)); + // In GNU diff format, indexes are one-based instead of zero-based. export const createPatchMark = ( aStart: number, @@ -157,89 +203,39 @@ export const createPatchMark = ( `@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`, ); -// Given two string arguments, compare them character-by-character. +export const splitLines0 = (string: string) => + string.length === 0 ? [] : string.split('\n'); + +// Compare two strings character-by-character. // Format as comparison lines in which changed substrings have inverse colors. export const diffStringsUnified = ( a: string, b: string, options?: DiffOptions, ): string => { - const optionsNormalized = normalizeDiffOptions(options); - - if (a.length === 0 || b.length === 0) { - const lines: Array = []; - const changeCounts: ChangeCounts = { - a: 0, - b: 0, - }; - - if (a.length !== 0) { - // All comparison lines have aColor and aIndicator. - a.split('\n').forEach(line => { - lines.push(printDeleteLine(line, optionsNormalized)); - }); - changeCounts.a = lines.length; - } - - if (b.length !== 0) { - // All comparison lines have bColor and bIndicator. - b.split('\n').forEach(line => { - lines.push(printInsertLine(line, optionsNormalized)); - }); - changeCounts.b = lines.length; - } - - // Else if both are empty strings, there are no comparison lines. - - return printAnnotation(optionsNormalized, changeCounts) + lines.join('\n'); - } - - if (a === b) { - const lines = a.split('\n'); - const iLast = lines.length - 1; - const changeCounts = { - a: 0, - b: 0, - }; - - // All comparison lines have commonColor and commonIndicator. - return ( - printAnnotation(optionsNormalized, changeCounts) + - lines - .map((line, i) => - printCommonLine(line, i === 0 || i === iLast, optionsNormalized), - ) - .join('\n') + if (a !== b && a.length !== 0 && b.length !== 0) { + const isMultiline = a.includes('\n') || b.includes('\n'); + + // getAlignedDiffs assumes that a newline was appended to the strings. + const diffs = diffStringsRaw( + isMultiline ? a + '\n' : a, + isMultiline ? b + '\n' : b, + true, // cleanupSemantic ); - } - const isMultiline = a.includes('\n') || b.includes('\n'); - - // getAlignedDiffs assumes that a newline was appended to the strings. - const diffs = diffStringsRaw( - isMultiline ? a + '\n' : a, - isMultiline ? b + '\n' : b, - true, // cleanupSemantic - ); - - if (hasCommonDiff(diffs, isMultiline)) { - const lines = getAlignedDiffs(diffs, optionsNormalized.changeColor); - return ( - printAnnotation(optionsNormalized, countChanges(lines)) + - (optionsNormalized.expand - ? joinAlignedDiffsExpand(lines, optionsNormalized) - : joinAlignedDiffsNoExpand(lines, optionsNormalized)) - ); + if (hasCommonDiff(diffs, isMultiline)) { + const optionsNormalized = normalizeDiffOptions(options); + const lines = getAlignedDiffs(diffs, optionsNormalized.changeColor); + return printDiffLines(lines, optionsNormalized); + } } // Fall back to line-by-line diff. - // Given strings, it returns a string, not null. - return diffLines(a, b, optionsNormalized) as string; + return diffLinesUnified(splitLines0(a), splitLines0(b), options); }; -// Given two string arguments, compare them character-by-character. +// Compare two strings character-by-character. // Optionally clean up small common substrings, also known as chaff. -// Return an array of diff objects. export const diffStringsRaw = ( a: string, b: string, diff --git a/packages/jest-diff/src/types.ts b/packages/jest-diff/src/types.ts index 60ae940c7992..7c54ad591211 100644 --- a/packages/jest-diff/src/types.ts +++ b/packages/jest-diff/src/types.ts @@ -23,6 +23,7 @@ export type DiffOptions = { omitAnnotationLines?: boolean; patchColor?: DiffOptionsColor; trailingSpaceFormatter?: DiffOptionsColor; + firstOrLastEmptyLineReplacement?: string; }; export type DiffOptionsNormalized = { @@ -41,4 +42,5 @@ export type DiffOptionsNormalized = { omitAnnotationLines: boolean; patchColor: DiffOptionsColor; trailingSpaceFormatter: DiffOptionsColor; + firstOrLastEmptyLineReplacement: string; }; diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap index 6115bed35c90..d26c80eb8b56 100644 --- a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap +++ b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap @@ -97,11 +97,11 @@ exports[`fallback to line diff 1`] = ` [...a, ...b,]; [...a, ...b]; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ ++ + =====================================output===================================== [...a, ...b]; [...a, ...b]; - + + ================================================================================ `; From bfb48052d33091ee428c9ff2f64cf5f9166e6552 Mon Sep 17 00:00:00 2001 From: John Carmichael Date: Sun, 22 Sep 2019 12:38:53 +0200 Subject: [PATCH 45/97] docs: Add `setupFilesAfterEnv` and `jest.setTimeout` example * docs: setupFilesAfterEnv arr expansion and updated reference in JestObjectApi * docs: latest pr added to changelog * docs: Configuration naming convention from setup to jest.setup * docs: Tweaking timeout docs to better explain when it can be applied universally * cleanup --- CHANGELOG.md | 1 + docs/Configuration.md | 13 +++++++++++++ docs/JestObjectAPI.md | 2 +- .../versioned_docs/version-22.x/JestObjectAPI.md | 2 +- .../versioned_docs/version-23.x/JestObjectAPI.md | 2 +- .../versioned_docs/version-24.0/Configuration.md | 13 +++++++++++++ .../versioned_docs/version-24.0/JestObjectAPI.md | 2 +- .../versioned_docs/version-24.1/Configuration.md | 13 +++++++++++++ .../versioned_docs/version-24.6/Configuration.md | 13 +++++++++++++ .../versioned_docs/version-24.8/Configuration.md | 13 +++++++++++++ .../versioned_docs/version-24.9/Configuration.md | 13 +++++++++++++ .../versioned_docs/version-24.9/JestObjectAPI.md | 2 +- 12 files changed, 84 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d7e33a102ee..c1bf053cde4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ - `[*]` [**BREAKING**] Upgrade to Micromatch v4 ([#8852](https://github.com/facebook/jest/pull/8852)) - `[babel-plugin-jest-hoist]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) - `[docs]` Fix broken link pointing to legacy JS file in "Snapshot Testing". +- `[docs]` Add `setupFilesAfterEnv` and `jest.setTimeout` example ([#8971](https://github.com/facebook/jest/pull/8971)) - `[jest]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) - `[jest-cli]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) - `[jest-cli]` [**BREAKING**] Remove re-exports from `@jest/core` ([#8874](https://github.com/facebook/jest/pull/8874)) diff --git a/docs/Configuration.md b/docs/Configuration.md index 85ec47c164d4..6e03ff749b23 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -754,6 +754,19 @@ For example, Jest ships with several plug-ins to `jasmine` that work by monkey-p _Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ +Example `setupFilesAfterEnv` array in a jest.config.js: + +```js +module.exports = { + setupFilesAfterEnv: ['./jest.setup.js'], +} +``` + +Example `jest.setup.js` file +```js +jest.setTimeout(10000); // in milliseconds +``` + ### `snapshotResolver` [string] Default: `undefined` diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 6919fcb905f6..66a6aac0e645 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -647,7 +647,7 @@ Set the default timeout interval for tests and before/after hooks in millisecond _Note: The default timeout interval is 5 seconds if this method is not called._ -_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ +_Note: If you want to set the timeout for all test files, a good place to do this is in `setupFilesAfterEnv`._ Example: diff --git a/website/versioned_docs/version-22.x/JestObjectAPI.md b/website/versioned_docs/version-22.x/JestObjectAPI.md index 576548e9828b..899bfc399285 100644 --- a/website/versioned_docs/version-22.x/JestObjectAPI.md +++ b/website/versioned_docs/version-22.x/JestObjectAPI.md @@ -542,7 +542,7 @@ Set the default timeout interval for tests and before/after hooks in millisecond _Note: The default timeout interval is 5 seconds if this method is not called._ -_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ +_Note: If you want to set the timeout for all test files, a good place to do this is in `setupFilesAfterEnv`._ Example: diff --git a/website/versioned_docs/version-23.x/JestObjectAPI.md b/website/versioned_docs/version-23.x/JestObjectAPI.md index 854bae59aaf4..050344bc0463 100644 --- a/website/versioned_docs/version-23.x/JestObjectAPI.md +++ b/website/versioned_docs/version-23.x/JestObjectAPI.md @@ -558,7 +558,7 @@ Set the default timeout interval for tests and before/after hooks in millisecond _Note: The default timeout interval is 5 seconds if this method is not called._ -_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ +_Note: If you want to set the timeout for all test files, a good place to do this is in `setupFilesAfterEnv`._ Example: diff --git a/website/versioned_docs/version-24.0/Configuration.md b/website/versioned_docs/version-24.0/Configuration.md index 9a1727bf45a3..545d3d284c24 100644 --- a/website/versioned_docs/version-24.0/Configuration.md +++ b/website/versioned_docs/version-24.0/Configuration.md @@ -727,6 +727,19 @@ For example, Jest ships with several plug-ins to `jasmine` that work by monkey-p _Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ +Example `setupFilesAfterEnv` array in a jest.config.js: + +```js +module.exports = { + setupFilesAfterEnv: ['./jest.setup.js'], +} +``` + +Example `jest.setup.js` file +```js +jest.setTimeout(10000); // in milliseconds +``` + ### `snapshotResolver` [string] Default: `undefined` diff --git a/website/versioned_docs/version-24.0/JestObjectAPI.md b/website/versioned_docs/version-24.0/JestObjectAPI.md index 7a526f687c49..9e4ed5a90280 100644 --- a/website/versioned_docs/version-24.0/JestObjectAPI.md +++ b/website/versioned_docs/version-24.0/JestObjectAPI.md @@ -642,7 +642,7 @@ Set the default timeout interval for tests and before/after hooks in millisecond _Note: The default timeout interval is 5 seconds if this method is not called._ -_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ +_Note: If you want to set the timeout for all test files, a good place to do this is in `setupFilesAfterEnv`._ Example: diff --git a/website/versioned_docs/version-24.1/Configuration.md b/website/versioned_docs/version-24.1/Configuration.md index fe5f2697497a..b28af46f47bd 100644 --- a/website/versioned_docs/version-24.1/Configuration.md +++ b/website/versioned_docs/version-24.1/Configuration.md @@ -736,6 +736,19 @@ For example, Jest ships with several plug-ins to `jasmine` that work by monkey-p _Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ +Example `setupFilesAfterEnv` array in a jest.config.js: + +```js +module.exports = { + setupFilesAfterEnv: ['./jest.setup.js'], +} +``` + +Example `jest.setup.js` file +```js +jest.setTimeout(10000); // in milliseconds +``` + ### `snapshotResolver` [string] Default: `undefined` diff --git a/website/versioned_docs/version-24.6/Configuration.md b/website/versioned_docs/version-24.6/Configuration.md index 0eb0f5c27eba..0997f5fe5e23 100644 --- a/website/versioned_docs/version-24.6/Configuration.md +++ b/website/versioned_docs/version-24.6/Configuration.md @@ -755,6 +755,19 @@ For example, Jest ships with several plug-ins to `jasmine` that work by monkey-p _Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ +Example `setupFilesAfterEnv` array in a jest.config.js: + +```js +module.exports = { + setupFilesAfterEnv: ['./jest.setup.js'], +} +``` + +Example `jest.setup.js` file +```js +jest.setTimeout(10000); // in milliseconds +``` + ### `snapshotResolver` [string] Default: `undefined` diff --git a/website/versioned_docs/version-24.8/Configuration.md b/website/versioned_docs/version-24.8/Configuration.md index efde4119d638..5faa85fd3b8a 100644 --- a/website/versioned_docs/version-24.8/Configuration.md +++ b/website/versioned_docs/version-24.8/Configuration.md @@ -755,6 +755,19 @@ For example, Jest ships with several plug-ins to `jasmine` that work by monkey-p _Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ +Example `setupFilesAfterEnv` array in a jest.config.js: + +```js +module.exports = { + setupFilesAfterEnv: ['./jest.setup.js'], +} +``` + +Example `jest.setup.js` file +```js +jest.setTimeout(10000); // in milliseconds +``` + ### `snapshotResolver` [string] Default: `undefined` diff --git a/website/versioned_docs/version-24.9/Configuration.md b/website/versioned_docs/version-24.9/Configuration.md index b271b512fceb..3e4ec1bca240 100644 --- a/website/versioned_docs/version-24.9/Configuration.md +++ b/website/versioned_docs/version-24.9/Configuration.md @@ -755,6 +755,19 @@ For example, Jest ships with several plug-ins to `jasmine` that work by monkey-p _Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ +Example `setupFilesAfterEnv` array in a jest.config.js: + +```js +module.exports = { + setupFilesAfterEnv: ['./jest.setup.js'], +} +``` + +Example `jest.setup.js` file +```js +jest.setTimeout(10000); // in milliseconds +``` + ### `snapshotResolver` [string] Default: `undefined` diff --git a/website/versioned_docs/version-24.9/JestObjectAPI.md b/website/versioned_docs/version-24.9/JestObjectAPI.md index ea45b871e780..587be011b8c6 100644 --- a/website/versioned_docs/version-24.9/JestObjectAPI.md +++ b/website/versioned_docs/version-24.9/JestObjectAPI.md @@ -648,7 +648,7 @@ Set the default timeout interval for tests and before/after hooks in millisecond _Note: The default timeout interval is 5 seconds if this method is not called._ -_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ +_Note: If you want to set the timeout for all test files, a good place to do this is in `setupFilesAfterEnv`._ Example: From 3dd26b4e9e2f3f70ce75522d71b0c12e5baed530 Mon Sep 17 00:00:00 2001 From: Tim Seckinger Date: Sun, 22 Sep 2019 13:12:14 +0200 Subject: [PATCH 46/97] chore: fix docs formatting --- docs/Configuration.md | 3 ++- website/versioned_docs/version-24.0/Configuration.md | 3 ++- website/versioned_docs/version-24.1/Configuration.md | 3 ++- website/versioned_docs/version-24.6/Configuration.md | 3 ++- website/versioned_docs/version-24.8/Configuration.md | 3 ++- website/versioned_docs/version-24.9/Configuration.md | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index 6e03ff749b23..7c01a406c27b 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -759,10 +759,11 @@ Example `setupFilesAfterEnv` array in a jest.config.js: ```js module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], -} +}; ``` Example `jest.setup.js` file + ```js jest.setTimeout(10000); // in milliseconds ``` diff --git a/website/versioned_docs/version-24.0/Configuration.md b/website/versioned_docs/version-24.0/Configuration.md index 545d3d284c24..8777065905ff 100644 --- a/website/versioned_docs/version-24.0/Configuration.md +++ b/website/versioned_docs/version-24.0/Configuration.md @@ -732,10 +732,11 @@ Example `setupFilesAfterEnv` array in a jest.config.js: ```js module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], -} +}; ``` Example `jest.setup.js` file + ```js jest.setTimeout(10000); // in milliseconds ``` diff --git a/website/versioned_docs/version-24.1/Configuration.md b/website/versioned_docs/version-24.1/Configuration.md index b28af46f47bd..ba8150cc0ce3 100644 --- a/website/versioned_docs/version-24.1/Configuration.md +++ b/website/versioned_docs/version-24.1/Configuration.md @@ -741,10 +741,11 @@ Example `setupFilesAfterEnv` array in a jest.config.js: ```js module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], -} +}; ``` Example `jest.setup.js` file + ```js jest.setTimeout(10000); // in milliseconds ``` diff --git a/website/versioned_docs/version-24.6/Configuration.md b/website/versioned_docs/version-24.6/Configuration.md index 0997f5fe5e23..9f87317043d7 100644 --- a/website/versioned_docs/version-24.6/Configuration.md +++ b/website/versioned_docs/version-24.6/Configuration.md @@ -760,10 +760,11 @@ Example `setupFilesAfterEnv` array in a jest.config.js: ```js module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], -} +}; ``` Example `jest.setup.js` file + ```js jest.setTimeout(10000); // in milliseconds ``` diff --git a/website/versioned_docs/version-24.8/Configuration.md b/website/versioned_docs/version-24.8/Configuration.md index 5faa85fd3b8a..3dc6f24909ea 100644 --- a/website/versioned_docs/version-24.8/Configuration.md +++ b/website/versioned_docs/version-24.8/Configuration.md @@ -760,10 +760,11 @@ Example `setupFilesAfterEnv` array in a jest.config.js: ```js module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], -} +}; ``` Example `jest.setup.js` file + ```js jest.setTimeout(10000); // in milliseconds ``` diff --git a/website/versioned_docs/version-24.9/Configuration.md b/website/versioned_docs/version-24.9/Configuration.md index 3e4ec1bca240..e59960732e52 100644 --- a/website/versioned_docs/version-24.9/Configuration.md +++ b/website/versioned_docs/version-24.9/Configuration.md @@ -760,10 +760,11 @@ Example `setupFilesAfterEnv` array in a jest.config.js: ```js module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], -} +}; ``` Example `jest.setup.js` file + ```js jest.setTimeout(10000); // in milliseconds ``` From 3adb67ba4b85134987b8cdb7f9a80e07776eeaca Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Tue, 24 Sep 2019 11:05:20 -0400 Subject: [PATCH 47/97] chore: Align snapshots in jest-matcher-utils (#8957) * chore: Align snapshots in jest-matcher-utils * Use new ConvertAnsi1 plugin in jest-diff and jest-matcher-utils * Add ConvertAnsi1.ts under plugins in pretty-format * Delete unneeded .ts file name extension in import statements * Add alignedAnsiStyleSerializer to test-utils * Delete ConvertAnsi1 from pretty-format * Fix prettier lint error * Add reference to test-utils in tsconfig.json files --- packages/jest-diff/src/__tests__/diff.test.ts | 43 +------- packages/jest-diff/tsconfig.json | 3 +- .../__snapshots__/index.test.ts.snap | 102 +++++++++--------- .../printDiffOrStringify.test.ts.snap | 48 ++++----- .../src/__tests__/index.test.ts | 16 +-- .../__tests__/printDiffOrStringify.test.ts | 3 + packages/jest-matcher-utils/tsconfig.json | 3 +- packages/test-utils/README.md | 35 +++--- packages/test-utils/package.json | 10 +- .../src/alignedAnsiStyleSerializer.ts | 50 +++++++++ packages/test-utils/src/index.ts | 2 + yarn.lock | 2 +- 12 files changed, 174 insertions(+), 143 deletions(-) create mode 100644 packages/test-utils/src/alignedAnsiStyleSerializer.ts diff --git a/packages/jest-diff/src/__tests__/diff.test.ts b/packages/jest-diff/src/__tests__/diff.test.ts index d75390fc9dc3..75b975ecfed0 100644 --- a/packages/jest-diff/src/__tests__/diff.test.ts +++ b/packages/jest-diff/src/__tests__/diff.test.ts @@ -5,10 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -import ansiRegex = require('ansi-regex'); -import * as style from 'ansi-styles'; import chalk from 'chalk'; import stripAnsi from 'strip-ansi'; +import {alignedAnsiStyleSerializer} from '@jest/test-utils'; import diff from '../'; import {diffStringsUnified} from '../printDiffs'; @@ -46,45 +45,7 @@ const expanded = {expand: true}; const elementSymbol = Symbol.for('react.element'); -expect.addSnapshotSerializer({ - serialize(val: string): string { - return val.replace(ansiRegex(), match => { - switch (match) { - case style.inverse.open: - return ''; - case style.inverse.close: - return ''; - - case style.bold.open: - return ''; - case style.dim.open: - return ''; - case style.green.open: - return ''; - case style.red.open: - return ''; - case style.yellow.open: - return ''; - case style.bgYellow.open: - return ''; - - case style.bold.close: - case style.dim.close: - case style.green.close: - case style.red.close: - case style.yellow.close: - case style.bgYellow.close: - return ''; - - default: - return match; - } - }); - }, - test(val: any): val is string { - return typeof val === 'string'; - }, -}); +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); describe('different types', () => { [ diff --git a/packages/jest-diff/tsconfig.json b/packages/jest-diff/tsconfig.json index 15ec4c0eff44..0e6330874c83 100644 --- a/packages/jest-diff/tsconfig.json +++ b/packages/jest-diff/tsconfig.json @@ -7,6 +7,7 @@ "references": [ {"path": "../diff-sequences"}, {"path": "../jest-get-type"}, - {"path": "../pretty-format"} + {"path": "../pretty-format"}, + {"path": "../test-utils"} ] } diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap index 63845c6c1b4a..c930a2254670 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap @@ -1,106 +1,102 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`.ensureNoExpected() throws error when expected is not undefined with matcherName 1`] = ` -"expect(received)[.not].toBeDefined() +exports[`ensureNoExpected() throws error when expected is not undefined with matcherName 1`] = ` +expect(received)[.not].toBeDefined() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: object -Expected has value: {\\"a\\": 1}" +Expected has value: {"a": 1} `; -exports[`.ensureNoExpected() throws error when expected is not undefined with matcherName and options 1`] = ` -"expect(received).not.toBeDefined() +exports[`ensureNoExpected() throws error when expected is not undefined with matcherName and options 1`] = ` +expect(received).not.toBeDefined() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: object -Expected has value: {\\"a\\": 1}" +Expected has value: {"a": 1} `; -exports[`.ensureNumbers() throws error when expected is not a number (backward compatibility) 1`] = ` -"expect(received)[.not].toBeCloseTo(expected) +exports[`ensureNumbers() throws error when expected is not a number (backward compatibility) 1`] = ` +expect(received)[.not].toBeCloseTo(expected) -Matcher error: expected value must be a number or bigint +Matcher error: expected value must be a number or bigint Expected has type: string -Expected has value: \\"not_a_number\\"" +Expected has value: "not_a_number" `; -exports[`.ensureNumbers() throws error when received is not a number (backward compatibility) 1`] = ` -"expect(received)[.not].toBeCloseTo(expected) +exports[`ensureNumbers() throws error when received is not a number (backward compatibility) 1`] = ` +expect(received)[.not].toBeCloseTo(expected) -Matcher error: received value must be a number or bigint +Matcher error: received value must be a number or bigint Received has type: string -Received has value: \\"not_a_number\\"" +Received has value: "not_a_number" `; -exports[`.ensureNumbers() with options promise empty isNot false received 1`] = ` -"expect(received).toBeCloseTo(expected, precision) +exports[`ensureNumbers() with options promise empty isNot false received 1`] = ` +expect(received).toBeCloseTo(expected, precision) -Matcher error: received value must be a number or bigint +Matcher error: received value must be a number or bigint Received has type: string -Received has value: \\"\\"" +Received has value: "" `; -exports[`.ensureNumbers() with options promise empty isNot true expected 1`] = ` -"expect(received).not.toBeCloseTo(expected) +exports[`ensureNumbers() with options promise empty isNot true expected 1`] = ` +expect(received).not.toBeCloseTo(expected) -Matcher error: expected value must be a number or bigint +Matcher error: expected value must be a number or bigint -Expected has value: undefined" +Expected has value: undefined `; -exports[`.ensureNumbers() with options promise rejects isNot false expected 1`] = ` -"expect(received).rejects.toBeCloseTo(expected) +exports[`ensureNumbers() with options promise rejects isNot false expected 1`] = ` +expect(received).rejects.toBeCloseTo(expected) -Matcher error: expected value must be a number or bigint +Matcher error: expected value must be a number or bigint Expected has type: string -Expected has value: \\"0\\"" +Expected has value: "0" `; -exports[`.ensureNumbers() with options promise rejects isNot true received 1`] = ` -"expect(received).rejects.not.toBeCloseTo(expected) +exports[`ensureNumbers() with options promise rejects isNot true received 1`] = ` +expect(received).rejects.not.toBeCloseTo(expected) -Matcher error: received value must be a number or bigint +Matcher error: received value must be a number or bigint Received has type: symbol -Received has value: Symbol(0.1)" +Received has value: Symbol(0.1) `; -exports[`.ensureNumbers() with options promise resolves isNot false received 1`] = ` -"expect(received).resolves.toBeCloseTo(expected) +exports[`ensureNumbers() with options promise resolves isNot false received 1`] = ` +expect(received).resolves.toBeCloseTo(expected) -Matcher error: received value must be a number or bigint +Matcher error: received value must be a number or bigint Received has type: boolean -Received has value: false" +Received has value: false `; -exports[`.ensureNumbers() with options promise resolves isNot true expected 1`] = ` -"expect(received).resolves.not.toBeCloseTo(expected) +exports[`ensureNumbers() with options promise resolves isNot true expected 1`] = ` +expect(received).resolves.not.toBeCloseTo(expected) -Matcher error: expected value must be a number or bigint +Matcher error: expected value must be a number or bigint -Expected has value: null" +Expected has value: null `; -exports[`.stringify() reduces maxDepth if stringifying very large objects 1`] = `"{\\"a\\": 1, \\"b\\": [Object]}"`; +exports[`stringify() toJSON errors when comparing two objects 1`] = ` +expect(received).toEqual(expected) // deep equality -exports[`.stringify() reduces maxDepth if stringifying very large objects 2`] = `"{\\"a\\": 1, \\"b\\": {\\"0\\": \\"test\\", \\"1\\": \\"test\\", \\"2\\": \\"test\\", \\"3\\": \\"test\\", \\"4\\": \\"test\\", \\"5\\": \\"test\\", \\"6\\": \\"test\\", \\"7\\": \\"test\\", \\"8\\": \\"test\\", \\"9\\": \\"test\\"}}"`; +- Expected ++ Received -exports[`.stringify() toJSON errors when comparing two objects 1`] = ` -"expect(received).toEqual(expected) // deep equality - -- Expected -+ Received - - Object { -- \\"b\\": 1, -+ \\"a\\": 1, - \\"toJSON\\": [Function toJSON], - }" + Object { +- "b": 1, ++ "a": 1, + "toJSON": [Function toJSON], + } `; diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap index 753d46e62662..a7b07ed744fe 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap @@ -1,44 +1,44 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`printDiffOrStringify expected and received are multi line with trailing spaces 1`] = ` -"- Expected -+ Received - -- delete -+ insert -- common expected common -+ common received common -- prev -+ next " +- Expected ++ Received + +- delete ++ insert +- common expected common ++ common received common +- prev ++ next `; exports[`printDiffOrStringify expected and received are single line with multiple changes 1`] = ` -"Expected: \\"delete common expected common prev\\" -Received: \\"insert common received common next\\"" +Expected: "delete common expected common prev" +Received: "insert common received common next" `; exports[`printDiffOrStringify expected is empty and received is single line 1`] = ` -"Expected: \\"\\" -Received: \\"single line\\"" +Expected: "" +Received: "single line" `; exports[`printDiffOrStringify expected is multi line and received is empty 1`] = ` -"Expected: \\"multi -line\\" -Received: \\"\\"" +Expected: "multi +line" +Received: "" `; exports[`printDiffOrStringify has no common after clean up chaff multiline 1`] = ` -"- Expected -+ Received +- Expected ++ Received -- delete -- two -+ insert -+ 2" +- delete +- two ++ insert ++ 2 `; exports[`printDiffOrStringify has no common after clean up chaff one-line 1`] = ` -"Expected: \\"delete\\" -Received: \\"insert\\"" +Expected: "delete" +Received: "insert" `; diff --git a/packages/jest-matcher-utils/src/__tests__/index.test.ts b/packages/jest-matcher-utils/src/__tests__/index.test.ts index 8ab83984bdfb..681472a20080 100644 --- a/packages/jest-matcher-utils/src/__tests__/index.test.ts +++ b/packages/jest-matcher-utils/src/__tests__/index.test.ts @@ -7,6 +7,8 @@ */ import chalk from 'chalk'; +import prettyFormat = require('pretty-format'); +import {alignedAnsiStyleSerializer} from '@jest/test-utils'; import { MatcherHintOptions, diff, @@ -21,7 +23,9 @@ import { /* global BigInt */ const isBigIntDefined = typeof BigInt === 'function'; -describe('.stringify()', () => { +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + +describe('stringify()', () => { [ [[], '[]'], [{}, '{}'], @@ -93,12 +97,12 @@ describe('.stringify()', () => { small.b[i] = 'test'; } - expect(stringify(big)).toMatchSnapshot(); - expect(stringify(small)).toMatchSnapshot(); + expect(stringify(big)).toBe(prettyFormat(big, {maxDepth: 1, min: true})); + expect(stringify(small)).toBe(prettyFormat(small, {min: true})); }); }); -describe('.ensureNumbers()', () => { +describe('ensureNumbers()', () => { test('dont throw error when variables are numbers', () => { expect(() => { // @ts-ignore @@ -198,7 +202,7 @@ describe('.ensureNumbers()', () => { }); }); -describe('.ensureNoExpected()', () => { +describe('ensureNoExpected()', () => { test('dont throw error when undefined', () => { expect(() => { // @ts-ignore @@ -251,7 +255,7 @@ describe('diff', () => { } }); -describe('.pluralize()', () => { +describe('pluralize()', () => { test('one', () => expect(pluralize('apple', 1)).toEqual('one apple')); test('two', () => expect(pluralize('apple', 2)).toEqual('two apples')); test('20', () => expect(pluralize('apple', 20)).toEqual('20 apples')); diff --git a/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts b/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts index a8e985dd5329..adaf7d7608ea 100644 --- a/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts +++ b/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts @@ -5,8 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import {alignedAnsiStyleSerializer} from '@jest/test-utils'; import {EXPECTED_COLOR, INVERTED_COLOR, printDiffOrStringify} from '../index'; +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + describe('printDiffOrStringify', () => { const testDiffOrStringify = (expected: string, received: string): string => printDiffOrStringify(expected, received, 'Expected', 'Received', true); diff --git a/packages/jest-matcher-utils/tsconfig.json b/packages/jest-matcher-utils/tsconfig.json index 2248b5ff7fa1..febd499d97ae 100644 --- a/packages/jest-matcher-utils/tsconfig.json +++ b/packages/jest-matcher-utils/tsconfig.json @@ -7,6 +7,7 @@ "references": [ {"path": "../jest-diff"}, {"path": "../jest-get-type"}, - {"path": "../pretty-format"} + {"path": "../pretty-format"}, + {"path": "../test-utils"} ] } diff --git a/packages/test-utils/README.md b/packages/test-utils/README.md index f9003764d794..738b2da08c43 100644 --- a/packages/test-utils/README.md +++ b/packages/test-utils/README.md @@ -1,25 +1,30 @@ -# babel-jest +# test-utils -[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin +Private package exports utilities for multiple end-to-end tests or packages. -## Usage +## alignedAnsiStyleSerializer -If you are already using `jest-cli`, just add `babel-jest` and it will automatically compile JavaScript code using Babel. +Display colors concisely and clearly so we can review changes quickly and confidently: -```bash -yarn add --dev babel-jest @babel/core -``` +- reports when matchers fail +- annotation and comparison lines from differences -If you would like to write your own preprocessor, uninstall and delete babel-jest and set the [config.transform](https://jestjs.io/docs/configuration#transform-object-string-string) option to your preprocessor. +Raw snapshot avoids distracting `\\` or `\"` escape sequences from default string serialization. -## Setup +Tag names have consistent length to align columns like `Expected` and `Received` or comparison lines: -_Note: this step is only required if you are using `babel-jest` with additional code preprocessors._ +| | style | +| --: | :--------- | +| `b` | `bold` | +| `d` | `dim` | +| `g` | `green` | +| `i` | `inverse` | +| `r` | `red` | +| `y` | `yellow` | +| `Y` | `bgYellow` | -To explicitly define `babel-jest` as a transformer for your JavaScript code, map _.js_ files to the `babel-jest` module. +```js +import {alignedAnsiStyleSerializer} from '@jest/test-utils'; -```json -"transform": { - "^.+\\.jsx?$": "babel-jest" -}, +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); ``` diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 5e0ac3ca25f3..10a6a68664a5 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -4,5 +4,13 @@ "private": true, "license": "MIT", "main": "build/index.js", - "types": "build/index.d.ts" + "types": "build/index.d.ts", + "dependencies": { + "ansi-regex": "^4.1.0", + "ansi-styles": "^4.1.0" + }, + "devDependencies": { + "@types/ansi-regex": "^4.0.0", + "@types/ansi-styles": "^3.2.1" + } } diff --git a/packages/test-utils/src/alignedAnsiStyleSerializer.ts b/packages/test-utils/src/alignedAnsiStyleSerializer.ts new file mode 100644 index 000000000000..99ea8900d842 --- /dev/null +++ b/packages/test-utils/src/alignedAnsiStyleSerializer.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import ansiRegex = require('ansi-regex'); +import * as style from 'ansi-styles'; + +export const alignedAnsiStyleSerializer = { + serialize(val: string): string { + // Return the string itself, not escaped nor enclosed in double quote marks. + return val.replace(ansiRegex(), match => { + switch (match) { + case style.inverse.open: + return ''; + case style.inverse.close: + return ''; + + case style.bold.open: + return ''; + case style.dim.open: + return ''; + case style.green.open: + return ''; + case style.red.open: + return ''; + case style.yellow.open: + return ''; + case style.bgYellow.open: + return ''; + + case style.bold.close: + case style.dim.close: + case style.green.close: + case style.red.close: + case style.yellow.close: + case style.bgYellow.close: + return ''; + + default: + return match; // unexpected escape sequence + } + }); + }, + test(val: any): val is string { + return typeof val === 'string'; + }, +}; diff --git a/packages/test-utils/src/index.ts b/packages/test-utils/src/index.ts index 0eb78d2fc053..971dc5bede6f 100644 --- a/packages/test-utils/src/index.ts +++ b/packages/test-utils/src/index.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +export {alignedAnsiStyleSerializer} from './alignedAnsiStyleSerializer'; + export { isJestCircusRun, skipSuiteOnJasmine, diff --git a/yarn.lock b/yarn.lock index 088ebbe5df8e..efb2690bd15d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2617,7 +2617,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.1.0.tgz#d3ba8047b818293eaaa7978321dd61bff9842cfc" integrity sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ== From 630350aeb0b14ae98b5705ddabba278c2345c8e3 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Tue, 24 Sep 2019 18:36:46 -0400 Subject: [PATCH 48/97] chore: Align snapshots in expect (#8976) --- .../assertionCounts.test.js.snap | 6 +- .../__snapshots__/extend.test.js.snap | 62 +- .../__snapshots__/matchers.test.js.snap | 3878 ++++++++--------- .../__snapshots__/spyMatchers.test.js.snap | 2268 +++++----- .../toThrowMatchers.test.ts.snap | 548 +-- .../src/__tests__/assertionCounts.test.js | 3 + packages/expect/src/__tests__/extend.test.js | 3 + .../expect/src/__tests__/matchers.test.js | 3 + .../expect/src/__tests__/spyMatchers.test.js | 3 + .../src/__tests__/toThrowMatchers.test.ts | 3 + packages/expect/tsconfig.json | 3 +- 11 files changed, 3398 insertions(+), 3382 deletions(-) diff --git a/packages/expect/src/__tests__/__snapshots__/assertionCounts.test.js.snap b/packages/expect/src/__tests__/__snapshots__/assertionCounts.test.js.snap index 8f2f6f1f5eb0..bc3c19a852c8 100644 --- a/packages/expect/src/__tests__/__snapshots__/assertionCounts.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/assertionCounts.test.js.snap @@ -1,10 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`.hasAssertions() throws if expected is not undefined 1`] = ` -"expect(received)[.not].hasAssertions() +expect(received)[.not].hasAssertions() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 2" +Expected has value: 2 `; diff --git a/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap b/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap index 4705aef06b68..c912d6a569cf 100644 --- a/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap @@ -1,55 +1,55 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`defines asymmetric unary matchers 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"value\\": toBeDivisibleBy<2>, -+ \\"value\\": 3, - }" + Object { +- "value": toBeDivisibleBy<2>, ++ "value": 3, + } `; exports[`defines asymmetric unary matchers that can be prefixed by not 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"value\\": not.toBeDivisibleBy<2>, -+ \\"value\\": 2, - }" + Object { +- "value": not.toBeDivisibleBy<2>, ++ "value": 2, + } `; exports[`defines asymmetric variadic matchers 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"value\\": toBeWithinRange<4, 11>, -+ \\"value\\": 3, - }" + Object { +- "value": toBeWithinRange<4, 11>, ++ "value": 3, + } `; exports[`defines asymmetric variadic matchers that can be prefixed by not 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"value\\": not.toBeWithinRange<1, 3>, -+ \\"value\\": 2, - }" + Object { +- "value": not.toBeWithinRange<1, 3>, ++ "value": 2, + } `; -exports[`is available globally when matcher is unary 1`] = `"expected 15 to be divisible by 2"`; +exports[`is available globally when matcher is unary 1`] = `expected 15 to be divisible by 2`; -exports[`is available globally when matcher is variadic 1`] = `"expected 15 to be within range 1 - 3"`; +exports[`is available globally when matcher is variadic 1`] = `expected 15 to be within range 1 - 3`; -exports[`is ok if there is no message specified 1`] = `"No message was specified for this matcher."`; +exports[`is ok if there is no message specified 1`] = `No message was specified for this matcher.`; diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index ee4aea692b94..29b749077cf7 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -1,295 +1,295 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`.rejects fails for promise that resolves 1`] = ` -"expect(received).rejects.toBe() +expect(received).rejects.toBe() Received promise resolved instead of rejected -Resolved to value: 4" +Resolved to value: 4 `; exports[`.rejects fails non-promise value "a" 1`] = ` -"expect(received).rejects.toBeDefined() +expect(received).rejects.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: string -Received has value: \\"a\\"" +Received has value: "a" `; exports[`.rejects fails non-promise value [1] 1`] = ` -"expect(received).rejects.toBeDefined() +expect(received).rejects.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: array -Received has value: [1]" +Received has value: [1] `; exports[`.rejects fails non-promise value [Function anonymous] 1`] = ` -"expect(received).rejects.toBeDefined() +expect(received).rejects.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: function -Received has value: [Function anonymous]" +Received has value: [Function anonymous] `; exports[`.rejects fails non-promise value {"a": 1} 1`] = ` -"expect(received).rejects.toBeDefined() +expect(received).rejects.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: object -Received has value: {\\"a\\": 1}" +Received has value: {"a": 1} `; exports[`.rejects fails non-promise value 4 1`] = ` -"expect(received).rejects.not.toBeDefined() +expect(received).rejects.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: number -Received has value: 4" +Received has value: 4 `; exports[`.rejects fails non-promise value null 1`] = ` -"expect(received).rejects.not.toBeDefined() +expect(received).rejects.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise -Received has value: null" +Received has value: null `; exports[`.rejects fails non-promise value true 1`] = ` -"expect(received).rejects.not.toBeDefined() +expect(received).rejects.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: boolean -Received has value: true" +Received has value: true `; exports[`.rejects fails non-promise value undefined 1`] = ` -"expect(received).rejects.not.toBeDefined() +expect(received).rejects.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise -Received has value: undefined" +Received has value: undefined `; exports[`.resolves fails for promise that rejects 1`] = ` -"expect(received).resolves.toBe() +expect(received).resolves.toBe() Received promise rejected instead of resolved -Rejected to value: 4" +Rejected to value: 4 `; exports[`.resolves fails non-promise value "a" 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: string -Received has value: \\"a\\"" +Received has value: "a" `; exports[`.resolves fails non-promise value "a" synchronously 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: string -Received has value: \\"a\\"" +Received has value: "a" `; exports[`.resolves fails non-promise value [1] 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: array -Received has value: [1]" +Received has value: [1] `; exports[`.resolves fails non-promise value [1] synchronously 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: array -Received has value: [1]" +Received has value: [1] `; exports[`.resolves fails non-promise value [Function anonymous] 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: function -Received has value: [Function anonymous]" +Received has value: [Function anonymous] `; exports[`.resolves fails non-promise value [Function anonymous] synchronously 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: function -Received has value: [Function anonymous]" +Received has value: [Function anonymous] `; exports[`.resolves fails non-promise value {"a": 1} 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: object -Received has value: {\\"a\\": 1}" +Received has value: {"a": 1} `; exports[`.resolves fails non-promise value {"a": 1} synchronously 1`] = ` -"expect(received).resolves.toBeDefined() +expect(received).resolves.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: object -Received has value: {\\"a\\": 1}" +Received has value: {"a": 1} `; exports[`.resolves fails non-promise value 4 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: number -Received has value: 4" +Received has value: 4 `; exports[`.resolves fails non-promise value 4 synchronously 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: number -Received has value: 4" +Received has value: 4 `; exports[`.resolves fails non-promise value null 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise -Received has value: null" +Received has value: null `; exports[`.resolves fails non-promise value null synchronously 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise -Received has value: null" +Received has value: null `; exports[`.resolves fails non-promise value true 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: boolean -Received has value: true" +Received has value: true `; exports[`.resolves fails non-promise value true synchronously 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise Received has type: boolean -Received has value: true" +Received has value: true `; exports[`.resolves fails non-promise value undefined 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise -Received has value: undefined" +Received has value: undefined `; exports[`.resolves fails non-promise value undefined synchronously 1`] = ` -"expect(received).resolves.not.toBeDefined() +expect(received).resolves.not.toBeDefined() -Matcher error: received value must be a promise +Matcher error: received value must be a promise -Received has value: undefined" +Received has value: undefined `; exports[`.toBe() does not crash on circular references 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected ++ Received -- Object {} -+ Object { -+ \\"circular\\": [Circular], -+ }" +- Object {} ++ Object { ++ "circular": [Circular], ++ } `; exports[`.toBe() fails for '"a"' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not \\"a\\"" +Expected: not "a" `; exports[`.toBe() fails for '[]' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not []" +Expected: not [] `; exports[`.toBe() fails for '{}' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not {}" +Expected: not {} `; exports[`.toBe() fails for '1' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not 1" +Expected: not 1 `; exports[`.toBe() fails for 'false' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not false" +Expected: not false `; exports[`.toBe() fails for 'null' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not null" +Expected: not null `; exports[`.toBe() fails for 'undefined' with '.not' 1`] = ` -"expect(received).not.toBe(expected) // Object.is equality +expect(received).not.toBe(expected) // Object.is equality -Expected: not undefined" +Expected: not undefined `; exports[`.toBe() fails for: "" and "compare one-line string to empty string" 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: \\"compare one-line string to empty string\\" -Received: \\"\\"" +Expected: "compare one-line string to empty string" +Received: "" `; exports[`.toBe() fails for: "abc" and "cde" 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: \\"cde\\" -Received: \\"abc\\"" +Expected: "cde" +Received: "abc" `; exports[`.toBe() fails for: "four @@ -298,2836 +298,2836 @@ line string" and "3 line string" 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected ++ Received -- 3 -+ four -+ 4 - line - string" +- 3 ++ four ++ 4 + line + string `; exports[`.toBe() fails for: "painless JavaScript testing" and "delightful JavaScript testing" 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: \\"delightful JavaScript testing\\" -Received: \\"painless JavaScript testing\\"" +Expected: "delightful JavaScript testing" +Received: "painless JavaScript testing" `; exports[`.toBe() fails for: "with trailing space" and "without trailing space" 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected ++ Received -- without trailing space -+ with -+ trailing space" +- without trailing space ++ with ++ trailing space `; exports[`.toBe() fails for: /received/ and /expected/ 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: /expected/ -Received: /received/" +Expected: /expected/ +Received: /received/ `; exports[`.toBe() fails for: [] and [] 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\" +If it should pass with deep equality, replace "toBe" with "toStrictEqual" -Expected: [] -Received: serializes to the same string" +Expected: [] +Received: serializes to the same string `; exports[`.toBe() fails for: [Error: received] and [Error: expected] 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: [Error: expected] -Received: [Error: received]" +Expected: [Error: expected] +Received: [Error: received] `; exports[`.toBe() fails for: [Function anonymous] and [Function anonymous] 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: [Function anonymous] -Received: serializes to the same string" +Expected: [Function anonymous] +Received: serializes to the same string `; exports[`.toBe() fails for: {"a": [Function a], "b": 2} and {"a": Any, "b": 2} 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\" +If it should pass with deep equality, replace "toBe" with "toStrictEqual" -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": Any, -+ \\"a\\": [Function a], - \\"b\\": 2, - }" + Object { +- "a": Any, ++ "a": [Function a], + "b": 2, + } `; exports[`.toBe() fails for: {"a": 1} and {"a": 1} 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\" +If it should pass with deep equality, replace "toBe" with "toStrictEqual" -Expected: {\\"a\\": 1} -Received: serializes to the same string" +Expected: {"a": 1} +Received: serializes to the same string `; exports[`.toBe() fails for: {"a": 1} and {"a": 5} 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": 5, -+ \\"a\\": 1, - }" + Object { +- "a": 5, ++ "a": 1, + } `; exports[`.toBe() fails for: {"a": undefined, "b": 2} and {"b": 2} 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -If it should pass with deep equality, replace \\"toBe\\" with \\"toEqual\\" +If it should pass with deep equality, replace "toBe" with "toEqual" -- Expected -+ Received +- Expected ++ Received - Object { -+ \\"a\\": undefined, - \\"b\\": 2, - }" + Object { ++ "a": undefined, + "b": 2, + } `; exports[`.toBe() fails for: {} and {} 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\" +If it should pass with deep equality, replace "toBe" with "toStrictEqual" -Expected: {} -Received: serializes to the same string" +Expected: {} +Received: serializes to the same string `; exports[`.toBe() fails for: -0 and 0 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: 0 -Received: -0" +Expected: 0 +Received: -0 `; exports[`.toBe() fails for: 1 and 2 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: 2 -Received: 1" +Expected: 2 +Received: 1 `; exports[`.toBe() fails for: 2020-02-20T00:00:00.000Z and 2020-02-20T00:00:00.000Z 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\" +If it should pass with deep equality, replace "toBe" with "toStrictEqual" -Expected: 2020-02-20T00:00:00.000Z -Received: serializes to the same string" +Expected: 2020-02-20T00:00:00.000Z +Received: serializes to the same string `; exports[`.toBe() fails for: 2020-02-21T00:00:00.000Z and 2020-02-20T00:00:00.000Z 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: 2020-02-20T00:00:00.000Z -Received: 2020-02-21T00:00:00.000Z" +Expected: 2020-02-20T00:00:00.000Z +Received: 2020-02-21T00:00:00.000Z `; exports[`.toBe() fails for: Symbol(received) and Symbol(expected) 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: Symbol(expected) -Received: Symbol(received)" +Expected: Symbol(expected) +Received: Symbol(received) `; exports[`.toBe() fails for: null and undefined 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: undefined -Received: null" +Expected: undefined +Received: null `; exports[`.toBe() fails for: true and false 1`] = ` -"expect(received).toBe(expected) // Object.is equality +expect(received).toBe(expected) // Object.is equality -Expected: false -Received: true" +Expected: false +Received: true `; exports[`.toBeCloseTo {pass: false} expect(-Infinity).toBeCloseTo(-1.23) 1`] = ` -"expect(received).toBeCloseTo(expected) +expect(received).toBeCloseTo(expected) -Expected: -1.23 -Received: -Infinity +Expected: -1.23 +Received: -Infinity Expected precision: 2 -Expected difference: < 0.005 -Received difference: Infinity" +Expected difference: < 0.005 +Received difference: Infinity `; exports[`.toBeCloseTo {pass: false} expect(0).toBeCloseTo(0.01) 1`] = ` -"expect(received).toBeCloseTo(expected) +expect(received).toBeCloseTo(expected) -Expected: 0.01 -Received: 0 +Expected: 0.01 +Received: 0 Expected precision: 2 -Expected difference: < 0.005 -Received difference: 0.01" +Expected difference: < 0.005 +Received difference: 0.01 `; exports[`.toBeCloseTo {pass: false} expect(1).toBeCloseTo(1.23) 1`] = ` -"expect(received).toBeCloseTo(expected) +expect(received).toBeCloseTo(expected) -Expected: 1.23 -Received: 1 +Expected: 1.23 +Received: 1 Expected precision: 2 -Expected difference: < 0.005 -Received difference: 0.22999999999999998" +Expected difference: < 0.005 +Received difference: 0.22999999999999998 `; exports[`.toBeCloseTo {pass: false} expect(1.23).toBeCloseTo(1.2249999) 1`] = ` -"expect(received).toBeCloseTo(expected) +expect(received).toBeCloseTo(expected) -Expected: 1.2249999 -Received: 1.23 +Expected: 1.2249999 +Received: 1.23 Expected precision: 2 -Expected difference: < 0.005 -Received difference: 0.005000099999999952" +Expected difference: < 0.005 +Received difference: 0.005000099999999952 `; exports[`.toBeCloseTo {pass: false} expect(3.141592e-7).toBeCloseTo(3e-7, 8) 1`] = ` -"expect(received).toBeCloseTo(expected, precision) +expect(received).toBeCloseTo(expected, precision) -Expected: 3e-7 -Received: 3.141592e-7 +Expected: 3e-7 +Received: 3.141592e-7 Expected precision: 8 -Expected difference: < 5e-9 -Received difference: 1.4159200000000025e-8" +Expected difference: < 5e-9 +Received difference: 1.4159200000000025e-8 `; exports[`.toBeCloseTo {pass: false} expect(56789).toBeCloseTo(51234, -4) 1`] = ` -"expect(received).toBeCloseTo(expected, precision) +expect(received).toBeCloseTo(expected, precision) -Expected: 51234 -Received: 56789 +Expected: 51234 +Received: 56789 Expected precision: -4 -Expected difference: < 5000 -Received difference: 5555" +Expected difference: < 5000 +Received difference: 5555 `; exports[`.toBeCloseTo {pass: false} expect(Infinity).toBeCloseTo(-Infinity) 1`] = ` -"expect(received).toBeCloseTo(expected) +expect(received).toBeCloseTo(expected) -Expected: -Infinity -Received: Infinity +Expected: -Infinity +Received: Infinity Expected precision: 2 -Expected difference: < 0.005 -Received difference: Infinity" +Expected difference: < 0.005 +Received difference: Infinity `; exports[`.toBeCloseTo {pass: false} expect(Infinity).toBeCloseTo(1.23) 1`] = ` -"expect(received).toBeCloseTo(expected) +expect(received).toBeCloseTo(expected) -Expected: 1.23 -Received: Infinity +Expected: 1.23 +Received: Infinity Expected precision: 2 -Expected difference: < 0.005 -Received difference: Infinity" +Expected difference: < 0.005 +Received difference: Infinity `; exports[`.toBeCloseTo {pass: true} expect(-Infinity).toBeCloseTo(-Infinity) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) + +Expected: not -Infinity -Expected: not -Infinity -" `; exports[`.toBeCloseTo {pass: true} expect(0).toBeCloseTo(0) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) + +Expected: not 0 -Expected: not 0 -" `; exports[`.toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.000004, 5) 1`] = ` -"expect(received).not.toBeCloseTo(expected, precision) +expect(received).not.toBeCloseTo(expected, precision) -Expected: not 0.000004 -Received: 0 +Expected: not 0.000004 +Received: 0 Expected precision: 5 -Expected difference: not < 0.000005 -Received difference: 0.000004" +Expected difference: not < 0.000005 +Received difference: 0.000004 `; exports[`.toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.0001, 3) 1`] = ` -"expect(received).not.toBeCloseTo(expected, precision) +expect(received).not.toBeCloseTo(expected, precision) -Expected: not 0.0001 -Received: 0 +Expected: not 0.0001 +Received: 0 Expected precision: 3 -Expected difference: not < 0.0005 -Received difference: 0.0001" +Expected difference: not < 0.0005 +Received difference: 0.0001 `; exports[`.toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.001) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) -Expected: not 0.001 -Received: 0 +Expected: not 0.001 +Received: 0 Expected precision: 2 -Expected difference: not < 0.005 -Received difference: 0.001" +Expected difference: not < 0.005 +Received difference: 0.001 `; exports[`.toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.1, 0) 1`] = ` -"expect(received).not.toBeCloseTo(expected, precision) +expect(received).not.toBeCloseTo(expected, precision) -Expected: not 0.1 -Received: 0 +Expected: not 0.1 +Received: 0 Expected precision: 0 -Expected difference: not < 0.5 -Received difference: 0.1" +Expected difference: not < 0.5 +Received difference: 0.1 `; exports[`.toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.225) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) -Expected: not 1.225 -Received: 1.23 +Expected: not 1.225 +Received: 1.23 Expected precision: 2 -Expected difference: not < 0.005 -Received difference: 0.004999999999999893" +Expected difference: not < 0.005 +Received difference: 0.004999999999999893 `; exports[`.toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.226) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) -Expected: not 1.226 -Received: 1.23 +Expected: not 1.226 +Received: 1.23 Expected precision: 2 -Expected difference: not < 0.005 -Received difference: 0.0040000000000000036" +Expected difference: not < 0.005 +Received difference: 0.0040000000000000036 `; exports[`.toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.229) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) -Expected: not 1.229 -Received: 1.23 +Expected: not 1.229 +Received: 1.23 Expected precision: 2 -Expected difference: not < 0.005 -Received difference: 0.0009999999999998899" +Expected difference: not < 0.005 +Received difference: 0.0009999999999998899 `; exports[`.toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.234) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) -Expected: not 1.234 -Received: 1.23 +Expected: not 1.234 +Received: 1.23 Expected precision: 2 -Expected difference: not < 0.005 -Received difference: 0.0040000000000000036" +Expected difference: not < 0.005 +Received difference: 0.0040000000000000036 `; exports[`.toBeCloseTo {pass: true} expect(2.0000002).toBeCloseTo(2, 5) 1`] = ` -"expect(received).not.toBeCloseTo(expected, precision) +expect(received).not.toBeCloseTo(expected, precision) -Expected: not 2 -Received: 2.0000002 +Expected: not 2 +Received: 2.0000002 Expected precision: 5 -Expected difference: not < 5e-6 -Received difference: 2.0000000011677344e-7" +Expected difference: not < 5e-6 +Received difference: 2.0000000011677344e-7 `; exports[`.toBeCloseTo {pass: true} expect(Infinity).toBeCloseTo(Infinity) 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) + +Expected: not Infinity -Expected: not Infinity -" `; exports[`.toBeCloseTo throws: Matcher error promise empty isNot false received 1`] = ` -"expect(received).toBeCloseTo(expected, precision) +expect(received).toBeCloseTo(expected, precision) -Matcher error: received value must be a number +Matcher error: received value must be a number Received has type: string -Received has value: \\"\\"" +Received has value: "" `; exports[`.toBeCloseTo throws: Matcher error promise empty isNot true expected 1`] = ` -"expect(received).not.toBeCloseTo(expected) +expect(received).not.toBeCloseTo(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a number -Expected has value: undefined" +Expected has value: undefined `; exports[`.toBeCloseTo throws: Matcher error promise rejects isNot false expected 1`] = ` -"expect(received).rejects.toBeCloseTo(expected) +expect(received).rejects.toBeCloseTo(expected) -Matcher error: expected value must be a number +Matcher error: expected value must be a number Expected has type: string -Expected has value: \\"0\\"" +Expected has value: "0" `; exports[`.toBeCloseTo throws: Matcher error promise rejects isNot true received 1`] = ` -"expect(received).rejects.not.toBeCloseTo(expected) +expect(received).rejects.not.toBeCloseTo(expected) -Matcher error: received value must be a number +Matcher error: received value must be a number Received has type: symbol -Received has value: Symbol(0.1)" +Received has value: Symbol(0.1) `; exports[`.toBeCloseTo throws: Matcher error promise resolves isNot false received 1`] = ` -"expect(received).resolves.toBeCloseTo(expected, precision) +expect(received).resolves.toBeCloseTo(expected, precision) -Matcher error: received value must be a number +Matcher error: received value must be a number Received has type: boolean -Received has value: false" +Received has value: false `; exports[`.toBeCloseTo throws: Matcher error promise resolves isNot true expected 1`] = ` -"expect(received).resolves.not.toBeCloseTo(expected, precision) +expect(received).resolves.not.toBeCloseTo(expected, precision) -Matcher error: expected value must be a number +Matcher error: expected value must be a number -Expected has value: null" +Expected has value: null `; exports[`.toBeDefined(), .toBeUndefined() '"a"' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: \\"a\\"" +Received: "a" `; exports[`.toBeDefined(), .toBeUndefined() '"a"' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: \\"a\\"" +Received: "a" `; exports[`.toBeDefined(), .toBeUndefined() '[]' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: []" +Received: [] `; exports[`.toBeDefined(), .toBeUndefined() '[]' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: []" +Received: [] `; exports[`.toBeDefined(), .toBeUndefined() '[Function anonymous]' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: [Function anonymous]" +Received: [Function anonymous] `; exports[`.toBeDefined(), .toBeUndefined() '[Function anonymous]' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: [Function anonymous]" +Received: [Function anonymous] `; exports[`.toBeDefined(), .toBeUndefined() '{}' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: {}" +Received: {} `; exports[`.toBeDefined(), .toBeUndefined() '{}' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: {}" +Received: {} `; exports[`.toBeDefined(), .toBeUndefined() '0.5' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: 0.5" +Received: 0.5 `; exports[`.toBeDefined(), .toBeUndefined() '0.5' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: 0.5" +Received: 0.5 `; exports[`.toBeDefined(), .toBeUndefined() '1' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: 1" +Received: 1 `; exports[`.toBeDefined(), .toBeUndefined() '1' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: 1" +Received: 1 `; exports[`.toBeDefined(), .toBeUndefined() 'Infinity' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: Infinity" +Received: Infinity `; exports[`.toBeDefined(), .toBeUndefined() 'Infinity' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: Infinity" +Received: Infinity `; exports[`.toBeDefined(), .toBeUndefined() 'Map {}' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: Map {}" +Received: Map {} `; exports[`.toBeDefined(), .toBeUndefined() 'Map {}' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: Map {}" +Received: Map {} `; exports[`.toBeDefined(), .toBeUndefined() 'true' is defined 1`] = ` -"expect(received).not.toBeDefined() +expect(received).not.toBeDefined() -Received: true" +Received: true `; exports[`.toBeDefined(), .toBeUndefined() 'true' is defined 2`] = ` -"expect(received).toBeUndefined() +expect(received).toBeUndefined() -Received: true" +Received: true `; exports[`.toBeDefined(), .toBeUndefined() undefined is undefined 1`] = ` -"expect(received).toBeDefined() +expect(received).toBeDefined() -Received: undefined" +Received: undefined `; exports[`.toBeDefined(), .toBeUndefined() undefined is undefined 2`] = ` -"expect(received).not.toBeUndefined() +expect(received).not.toBeUndefined() -Received: undefined" +Received: undefined `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [-Infinity, -Infinity] 1`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= -Infinity -Received: -Infinity" +Expected: not >= -Infinity +Received: -Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [-Infinity, -Infinity] 2`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= -Infinity -Received: -Infinity" +Expected: not <= -Infinity +Received: -Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1, 1] 1`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 1 -Received: 1" +Expected: not >= 1 +Received: 1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1, 1] 2`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 1 -Received: 1" +Expected: not <= 1 +Received: 1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308] 1`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 1.7976931348623157e+308 -Received: 1.7976931348623157e+308" +Expected: not >= 1.7976931348623157e+308 +Received: 1.7976931348623157e+308 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308] 2`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 1.7976931348623157e+308 -Received: 1.7976931348623157e+308" +Expected: not <= 1.7976931348623157e+308 +Received: 1.7976931348623157e+308 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [5e-324, 5e-324] 1`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 5e-324 -Received: 5e-324" +Expected: not >= 5e-324 +Received: 5e-324 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [5e-324, 5e-324] 2`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 5e-324 -Received: 5e-324" +Expected: not <= 5e-324 +Received: 5e-324 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [Infinity, Infinity] 1`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= Infinity -Received: Infinity" +Expected: not >= Infinity +Received: Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [Infinity, Infinity] 2`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= Infinity -Received: Infinity" +Expected: not <= Infinity +Received: Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > Infinity -Received: -Infinity" +Expected: > Infinity +Received: -Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < Infinity -Received: -Infinity" +Expected: not < Infinity +Received: -Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > -Infinity -Received: Infinity" +Expected: not > -Infinity +Received: Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < -Infinity -Received: Infinity" +Expected: < -Infinity +Received: Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= Infinity -Received: -Infinity" +Expected: >= Infinity +Received: -Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= Infinity -Received: -Infinity" +Expected: not <= Infinity +Received: -Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= -Infinity -Received: Infinity" +Expected: not >= -Infinity +Received: Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= -Infinity -Received: Infinity" +Expected: <= -Infinity +Received: Infinity `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > 0.2 -Received: 0.1" +Expected: > 0.2 +Received: 0.1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < 0.2 -Received: 0.1" +Expected: not < 0.2 +Received: 0.1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > 0.1 -Received: 0.2" +Expected: not > 0.1 +Received: 0.2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < 0.1 -Received: 0.2" +Expected: < 0.1 +Received: 0.2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= 0.2 -Received: 0.1" +Expected: >= 0.2 +Received: 0.1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 0.2 -Received: 0.1" +Expected: not <= 0.2 +Received: 0.1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 0.1 -Received: 0.2" +Expected: not >= 0.1 +Received: 0.2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= 0.1 -Received: 0.2" +Expected: <= 0.1 +Received: 0.2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > 2 -Received: 1" +Expected: > 2 +Received: 1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < 2 -Received: 1" +Expected: not < 2 +Received: 1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > 1 -Received: 2" +Expected: not > 1 +Received: 2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < 1 -Received: 2" +Expected: < 1 +Received: 2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= 2 -Received: 1" +Expected: >= 2 +Received: 1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 2 -Received: 1" +Expected: not <= 2 +Received: 1 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 1 -Received: 2" +Expected: not >= 1 +Received: 2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= 1 -Received: 2" +Expected: <= 1 +Received: 2 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > 7 -Received: 3" +Expected: > 7 +Received: 3 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < 7 -Received: 3" +Expected: not < 7 +Received: 3 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > 3 -Received: 7" +Expected: not > 3 +Received: 7 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < 3 -Received: 7" +Expected: < 3 +Received: 7 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= 7 -Received: 3" +Expected: >= 7 +Received: 3 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 7 -Received: 3" +Expected: not <= 7 +Received: 3 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 3 -Received: 7" +Expected: not >= 3 +Received: 7 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= 3 -Received: 7" +Expected: <= 3 +Received: 7 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > 1.7976931348623157e+308 -Received: 5e-324" +Expected: > 1.7976931348623157e+308 +Received: 5e-324 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < 1.7976931348623157e+308 -Received: 5e-324" +Expected: not < 1.7976931348623157e+308 +Received: 5e-324 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > 5e-324 -Received: 1.7976931348623157e+308" +Expected: not > 5e-324 +Received: 1.7976931348623157e+308 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < 5e-324 -Received: 1.7976931348623157e+308" +Expected: < 5e-324 +Received: 1.7976931348623157e+308 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= 1.7976931348623157e+308 -Received: 5e-324" +Expected: >= 1.7976931348623157e+308 +Received: 5e-324 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 1.7976931348623157e+308 -Received: 5e-324" +Expected: not <= 1.7976931348623157e+308 +Received: 5e-324 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 5e-324 -Received: 1.7976931348623157e+308" +Expected: not >= 5e-324 +Received: 1.7976931348623157e+308 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= 5e-324 -Received: 1.7976931348623157e+308" +Expected: <= 5e-324 +Received: 1.7976931348623157e+308 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > 18 -Received: 9" +Expected: > 18 +Received: 9 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < 18 -Received: 9" +Expected: not < 18 +Received: 9 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > 9 -Received: 18" +Expected: not > 9 +Received: 18 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < 9 -Received: 18" +Expected: < 9 +Received: 18 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= 18 -Received: 9" +Expected: >= 18 +Received: 9 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 18 -Received: 9" +Expected: not <= 18 +Received: 9 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 9 -Received: 18" +Expected: not >= 9 +Received: 18 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= 9 -Received: 18" +Expected: <= 9 +Received: 18 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 1`] = ` -"expect(received).toBeGreaterThan(expected) +expect(received).toBeGreaterThan(expected) -Expected: > 34 -Received: 17" +Expected: > 34 +Received: 17 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 2`] = ` -"expect(received).not.toBeLessThan(expected) +expect(received).not.toBeLessThan(expected) -Expected: not < 34 -Received: 17" +Expected: not < 34 +Received: 17 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 3`] = ` -"expect(received).not.toBeGreaterThan(expected) +expect(received).not.toBeGreaterThan(expected) -Expected: not > 17 -Received: 34" +Expected: not > 17 +Received: 34 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 4`] = ` -"expect(received).toBeLessThan(expected) +expect(received).toBeLessThan(expected) -Expected: < 17 -Received: 34" +Expected: < 17 +Received: 34 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 5`] = ` -"expect(received).toBeGreaterThanOrEqual(expected) +expect(received).toBeGreaterThanOrEqual(expected) -Expected: >= 34 -Received: 17" +Expected: >= 34 +Received: 17 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 6`] = ` -"expect(received).not.toBeLessThanOrEqual(expected) +expect(received).not.toBeLessThanOrEqual(expected) -Expected: not <= 34 -Received: 17" +Expected: not <= 34 +Received: 17 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 7`] = ` -"expect(received).not.toBeGreaterThanOrEqual(expected) +expect(received).not.toBeGreaterThanOrEqual(expected) -Expected: not >= 17 -Received: 34" +Expected: not >= 17 +Received: 34 `; exports[`.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] 8`] = ` -"expect(received).toBeLessThanOrEqual(expected) +expect(received).toBeLessThanOrEqual(expected) -Expected: <= 17 -Received: 34" +Expected: <= 17 +Received: 34 `; exports[`.toBeInstanceOf() failing "a" and [Function String] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: String +Expected constructor: String Received value has no prototype -Received value: \\"a\\"" +Received value: "a" `; exports[`.toBeInstanceOf() failing /\\w+/ and [Function anonymous] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) Expected constructor name is an empty string -Received constructor: RegExp -" +Received constructor: RegExp + `; exports[`.toBeInstanceOf() failing {} and [Function A] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: A +Expected constructor: A Received value has no prototype -Received value: {}" +Received value: {} `; exports[`.toBeInstanceOf() failing {} and [Function B] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) + +Expected constructor: B +Received constructor: A -Expected constructor: B -Received constructor: A -" `; exports[`.toBeInstanceOf() failing {} and [Function RegExp] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: RegExp +Expected constructor: RegExp Received constructor name is an empty string -" + `; exports[`.toBeInstanceOf() failing 1 and [Function Number] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: Number +Expected constructor: Number Received value has no prototype -Received value: 1" +Received value: 1 `; exports[`.toBeInstanceOf() failing null and [Function String] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: String +Expected constructor: String Received value has no prototype -Received value: null" +Received value: null `; exports[`.toBeInstanceOf() failing true and [Function Boolean] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: Boolean +Expected constructor: Boolean Received value has no prototype -Received value: true" +Received value: true `; exports[`.toBeInstanceOf() failing undefined and [Function String] 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Expected constructor: String +Expected constructor: String Received value has no prototype -Received value: undefined" +Received value: undefined `; exports[`.toBeInstanceOf() passing [] and [Function Array] 1`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not Array -Expected constructor: not Array -" `; exports[`.toBeInstanceOf() passing {} and [Function A] 1`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not A -Expected constructor: not A -" `; exports[`.toBeInstanceOf() passing {} and [Function B] 1`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not B +Received constructor: C extends B -Expected constructor: not B -Received constructor: C extends B -" `; exports[`.toBeInstanceOf() passing {} and [Function B] 2`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not B +Received constructor: E extends … extends B -Expected constructor: not B -Received constructor: E extends … extends B -" `; exports[`.toBeInstanceOf() passing {} and [Function B] 3`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) -Expected constructor: not B +Expected constructor: not B Received constructor name is not a string -" + `; exports[`.toBeInstanceOf() passing {} and [Function anonymous] 1`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) Expected constructor name is an empty string -Received constructor: SubHasNameProp -" +Received constructor: SubHasNameProp + `; exports[`.toBeInstanceOf() passing {} and [Function name() {}] 1`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) Expected constructor name is not a string -" + `; exports[`.toBeInstanceOf() passing Map {} and [Function Map] 1`] = ` -"expect(received).not.toBeInstanceOf(expected) +expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not Map -Expected constructor: not Map -" `; exports[`.toBeInstanceOf() throws if constructor is not a function 1`] = ` -"expect(received).toBeInstanceOf(expected) +expect(received).toBeInstanceOf(expected) -Matcher error: expected value must be a function +Matcher error: expected value must be a function Expected has type: number -Expected has value: 4" +Expected has value: 4 `; exports[`.toBeNaN() {pass: true} expect(NaN).toBeNaN() 1`] = ` -"expect(received).not.toBeNaN() +expect(received).not.toBeNaN() -Received: NaN" +Received: NaN `; exports[`.toBeNaN() {pass: true} expect(NaN).toBeNaN() 2`] = ` -"expect(received).not.toBeNaN() +expect(received).not.toBeNaN() -Received: NaN" +Received: NaN `; exports[`.toBeNaN() {pass: true} expect(NaN).toBeNaN() 3`] = ` -"expect(received).not.toBeNaN() +expect(received).not.toBeNaN() -Received: NaN" +Received: NaN `; exports[`.toBeNaN() {pass: true} expect(NaN).toBeNaN() 4`] = ` -"expect(received).not.toBeNaN() +expect(received).not.toBeNaN() -Received: NaN" +Received: NaN `; exports[`.toBeNaN() throws 1`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: 1" +Received: 1 `; exports[`.toBeNaN() throws 2`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: \\"\\"" +Received: "" `; exports[`.toBeNaN() throws 3`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: null" +Received: null `; exports[`.toBeNaN() throws 4`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: undefined" +Received: undefined `; exports[`.toBeNaN() throws 5`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: {}" +Received: {} `; exports[`.toBeNaN() throws 6`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: []" +Received: [] `; exports[`.toBeNaN() throws 7`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: 0.2" +Received: 0.2 `; exports[`.toBeNaN() throws 8`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: 0" +Received: 0 `; exports[`.toBeNaN() throws 9`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: Infinity" +Received: Infinity `; exports[`.toBeNaN() throws 10`] = ` -"expect(received).toBeNaN() +expect(received).toBeNaN() -Received: -Infinity" +Received: -Infinity `; exports[`.toBeNull() fails for '"a"' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: \\"a\\"" +Received: "a" `; exports[`.toBeNull() fails for '[]' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: []" +Received: [] `; exports[`.toBeNull() fails for '[Function anonymous]' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: [Function anonymous]" +Received: [Function anonymous] `; exports[`.toBeNull() fails for '{}' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: {}" +Received: {} `; exports[`.toBeNull() fails for '0.5' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: 0.5" +Received: 0.5 `; exports[`.toBeNull() fails for '1' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: 1" +Received: 1 `; exports[`.toBeNull() fails for 'Infinity' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: Infinity" +Received: Infinity `; exports[`.toBeNull() fails for 'Map {}' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: Map {}" +Received: Map {} `; exports[`.toBeNull() fails for 'true' 1`] = ` -"expect(received).toBeNull() +expect(received).toBeNull() -Received: true" +Received: true `; exports[`.toBeNull() fails for null with .not 1`] = ` -"expect(received).not.toBeNull() +expect(received).not.toBeNull() -Received: null" +Received: null `; exports[`.toBeTruthy(), .toBeFalsy() '""' is falsy 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Received: \\"\\"" +Received: "" `; exports[`.toBeTruthy(), .toBeFalsy() '""' is falsy 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Received: \\"\\"" +Received: "" `; exports[`.toBeTruthy(), .toBeFalsy() '"a"' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: \\"a\\"" +Received: "a" `; exports[`.toBeTruthy(), .toBeFalsy() '"a"' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: \\"a\\"" +Received: "a" `; exports[`.toBeTruthy(), .toBeFalsy() '[]' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: []" +Received: [] `; exports[`.toBeTruthy(), .toBeFalsy() '[]' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: []" +Received: [] `; exports[`.toBeTruthy(), .toBeFalsy() '[Function anonymous]' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: [Function anonymous]" +Received: [Function anonymous] `; exports[`.toBeTruthy(), .toBeFalsy() '[Function anonymous]' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: [Function anonymous]" +Received: [Function anonymous] `; exports[`.toBeTruthy(), .toBeFalsy() '{}' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: {}" +Received: {} `; exports[`.toBeTruthy(), .toBeFalsy() '{}' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: {}" +Received: {} `; exports[`.toBeTruthy(), .toBeFalsy() '0' is falsy 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Received: 0" +Received: 0 `; exports[`.toBeTruthy(), .toBeFalsy() '0' is falsy 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Received: 0" +Received: 0 `; exports[`.toBeTruthy(), .toBeFalsy() '0.5' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: 0.5" +Received: 0.5 `; exports[`.toBeTruthy(), .toBeFalsy() '0.5' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: 0.5" +Received: 0.5 `; exports[`.toBeTruthy(), .toBeFalsy() '1' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: 1" +Received: 1 `; exports[`.toBeTruthy(), .toBeFalsy() '1' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: 1" +Received: 1 `; exports[`.toBeTruthy(), .toBeFalsy() 'Infinity' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: Infinity" +Received: Infinity `; exports[`.toBeTruthy(), .toBeFalsy() 'Infinity' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: Infinity" +Received: Infinity `; exports[`.toBeTruthy(), .toBeFalsy() 'Map {}' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: Map {}" +Received: Map {} `; exports[`.toBeTruthy(), .toBeFalsy() 'Map {}' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: Map {}" +Received: Map {} `; exports[`.toBeTruthy(), .toBeFalsy() 'NaN' is falsy 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Received: NaN" +Received: NaN `; exports[`.toBeTruthy(), .toBeFalsy() 'NaN' is falsy 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Received: NaN" +Received: NaN `; exports[`.toBeTruthy(), .toBeFalsy() 'false' is falsy 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Received: false" +Received: false `; exports[`.toBeTruthy(), .toBeFalsy() 'false' is falsy 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Received: false" +Received: false `; exports[`.toBeTruthy(), .toBeFalsy() 'null' is falsy 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Received: null" +Received: null `; exports[`.toBeTruthy(), .toBeFalsy() 'null' is falsy 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Received: null" +Received: null `; exports[`.toBeTruthy(), .toBeFalsy() 'true' is truthy 1`] = ` -"expect(received).not.toBeTruthy() +expect(received).not.toBeTruthy() -Received: true" +Received: true `; exports[`.toBeTruthy(), .toBeFalsy() 'true' is truthy 2`] = ` -"expect(received).toBeFalsy() +expect(received).toBeFalsy() -Received: true" +Received: true `; exports[`.toBeTruthy(), .toBeFalsy() 'undefined' is falsy 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Received: undefined" +Received: undefined `; exports[`.toBeTruthy(), .toBeFalsy() 'undefined' is falsy 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Received: undefined" +Received: undefined `; exports[`.toBeTruthy(), .toBeFalsy() does not accept arguments 1`] = ` -"expect(received).toBeTruthy() +expect(received).toBeTruthy() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument -Expected has value: null" +Expected has value: null `; exports[`.toBeTruthy(), .toBeFalsy() does not accept arguments 2`] = ` -"expect(received).not.toBeFalsy() +expect(received).not.toBeFalsy() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument -Expected has value: null" +Expected has value: null `; exports[`.toContain(), .toContainEqual() '"11112111"' contains '"2"' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected substring: not \\"2\\" -Received string: \\"11112111\\"" +Expected substring: not "2" +Received string: "11112111" `; exports[`.toContain(), .toContainEqual() '"abcdef"' contains '"abc"' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected substring: not \\"abc\\" -Received string: \\"abcdef\\"" +Expected substring: not "abc" +Received string: "abcdef" `; exports[`.toContain(), .toContainEqual() '["a", "b", "c", "d"]' contains '"a"' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not \\"a\\" -Received array: [\\"a\\", \\"b\\", \\"c\\", \\"d\\"]" +Expected value: not "a" +Received array: ["a", "b", "c", "d"] `; exports[`.toContain(), .toContainEqual() '["a", "b", "c", "d"]' contains a value equal to '"a"' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not \\"a\\" -Received array: [\\"a\\", \\"b\\", \\"c\\", \\"d\\"]" +Expected value: not "a" +Received array: ["a", "b", "c", "d"] `; exports[`.toContain(), .toContainEqual() '[{"a": "b"}, {"a": "c"}]' contains a value equal to '{"a": "b"}' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not {\\"a\\": \\"b\\"} -Received array: [{\\"a\\": \\"b\\"}, {\\"a\\": \\"c\\"}]" +Expected value: not {"a": "b"} +Received array: [{"a": "b"}, {"a": "c"}] `; exports[`.toContain(), .toContainEqual() '[{"a": "b"}, {"a": "c"}]' does not contain a value equal to'{"a": "d"}' 1`] = ` -"expect(received).toContainEqual(expected) // deep equality +expect(received).toContainEqual(expected) // deep equality -Expected value: {\\"a\\": \\"d\\"} -Received array: [{\\"a\\": \\"b\\"}, {\\"a\\": \\"c\\"}]" +Expected value: {"a": "d"} +Received array: [{"a": "b"}, {"a": "c"}] `; exports[`.toContain(), .toContainEqual() '[{}, []]' does not contain '[]' 1`] = ` -"expect(received).toContain(expected) // indexOf +expect(received).toContain(expected) // indexOf -Expected value: [] -Received array: [{}, []] +Expected value: [] +Received array: [{}, []] -Looks like you wanted to test for object/array equality with the stricter \`toContain\` matcher. You probably need to use \`toContainEqual\` instead." +Looks like you wanted to test for object/array equality with the stricter \`toContain\` matcher. You probably need to use \`toContainEqual\` instead. `; exports[`.toContain(), .toContainEqual() '[{}, []]' does not contain '{}' 1`] = ` -"expect(received).toContain(expected) // indexOf +expect(received).toContain(expected) // indexOf -Expected value: {} -Received array: [{}, []] +Expected value: {} +Received array: [{}, []] -Looks like you wanted to test for object/array equality with the stricter \`toContain\` matcher. You probably need to use \`toContainEqual\` instead." +Looks like you wanted to test for object/array equality with the stricter \`toContain\` matcher. You probably need to use \`toContainEqual\` instead. `; exports[`.toContain(), .toContainEqual() '[0, 1]' contains '1' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not 1 -Received object: [0, 1]" +Expected value: not 1 +Received object: [0, 1] `; exports[`.toContain(), .toContainEqual() '[0, 1]' contains a value equal to '1' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not 1 -Received object: [0, 1]" +Expected value: not 1 +Received object: [0, 1] `; exports[`.toContain(), .toContainEqual() '[1, 2, 3, 4]' contains '1' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not 1 -Received array: [1, 2, 3, 4]" +Expected value: not 1 +Received array: [1, 2, 3, 4] `; exports[`.toContain(), .toContainEqual() '[1, 2, 3, 4]' contains a value equal to '1' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not 1 -Received array: [1, 2, 3, 4]" +Expected value: not 1 +Received array: [1, 2, 3, 4] `; exports[`.toContain(), .toContainEqual() '[1, 2, 3]' does not contain '4' 1`] = ` -"expect(received).toContain(expected) // indexOf +expect(received).toContain(expected) // indexOf -Expected value: 4 -Received array: [1, 2, 3]" +Expected value: 4 +Received array: [1, 2, 3] `; exports[`.toContain(), .toContainEqual() '[Symbol(a)]' contains 'Symbol(a)' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not Symbol(a) -Received array: [Symbol(a)]" +Expected value: not Symbol(a) +Received array: [Symbol(a)] `; exports[`.toContain(), .toContainEqual() '[Symbol(a)]' contains a value equal to 'Symbol(a)' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not Symbol(a) -Received array: [Symbol(a)]" +Expected value: not Symbol(a) +Received array: [Symbol(a)] `; exports[`.toContain(), .toContainEqual() '[null, undefined]' does not contain '1' 1`] = ` -"expect(received).toContain(expected) // indexOf +expect(received).toContain(expected) // indexOf -Expected value: 1 -Received array: [null, undefined]" +Expected value: 1 +Received array: [null, undefined] `; exports[`.toContain(), .toContainEqual() '[undefined, null]' contains 'null' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not null -Received array: [undefined, null]" +Expected value: not null +Received array: [undefined, null] `; exports[`.toContain(), .toContainEqual() '[undefined, null]' contains 'undefined' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not undefined -Received array: [undefined, null]" +Expected value: not undefined +Received array: [undefined, null] `; exports[`.toContain(), .toContainEqual() '[undefined, null]' contains a value equal to 'null' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not null -Received array: [undefined, null]" +Expected value: not null +Received array: [undefined, null] `; exports[`.toContain(), .toContainEqual() '[undefined, null]' contains a value equal to 'undefined' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not undefined -Received array: [undefined, null]" +Expected value: not undefined +Received array: [undefined, null] `; exports[`.toContain(), .toContainEqual() 'Set {"abc", "def"}' contains '"abc"' 1`] = ` -"expect(received).not.toContain(expected) // indexOf +expect(received).not.toContain(expected) // indexOf -Expected value: not \\"abc\\" -Received set: Set {\\"abc\\", \\"def\\"}" +Expected value: not "abc" +Received set: Set {"abc", "def"} `; exports[`.toContain(), .toContainEqual() 'Set {1, 2, 3, 4}' contains a value equal to '1' 1`] = ` -"expect(received).not.toContainEqual(expected) // deep equality +expect(received).not.toContainEqual(expected) // deep equality -Expected value: not 1 -Received set: Set {1, 2, 3, 4}" +Expected value: not 1 +Received set: Set {1, 2, 3, 4} `; exports[`.toContain(), .toContainEqual() error cases 1`] = ` -"expect(received).toContain(expected) // indexOf +expect(received).toContain(expected) // indexOf -Matcher error: received value must not be null nor undefined +Matcher error: received value must not be null nor undefined -Received has value: null" +Received has value: null `; exports[`.toContain(), .toContainEqual() error cases for toContainEqual 1`] = ` -"expect(received).toContainEqual(expected) // deep equality +expect(received).toContainEqual(expected) // deep equality -Matcher error: received value must not be null nor undefined +Matcher error: received value must not be null nor undefined -Received has value: null" +Received has value: null `; exports[`.toEqual() {pass: false} expect("1 234,57 $").toEqual("1 234,57 $") 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: \\"1 234,57 $\\" -Received: \\"1 234,57 $\\"" +Expected: "1 234,57 $" +Received: "1 234,57 $" `; exports[`.toEqual() {pass: false} expect("Eve").toEqual({"asymmetricMatch": [Function asymmetricMatch]}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: {\\"asymmetricMatch\\": [Function asymmetricMatch]} -Received: \\"Eve\\"" +Expected: {"asymmetricMatch": [Function asymmetricMatch]} +Received: "Eve" `; exports[`.toEqual() {pass: false} expect("abd").toEqual(StringContaining "bc") 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: StringContaining \\"bc\\" -Received: \\"abd\\"" +Expected: StringContaining "bc" +Received: "abd" `; exports[`.toEqual() {pass: false} expect("abd").toEqual(StringMatching /bc/i) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: StringMatching /bc/i -Received: \\"abd\\"" +Expected: StringMatching /bc/i +Received: "abd" `; exports[`.toEqual() {pass: false} expect("banana").toEqual("apple") 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: \\"apple\\" -Received: \\"banana\\"" +Expected: "apple" +Received: "banana" `; exports[`.toEqual() {pass: false} expect("type TypeName = T extends Function ? \\"function\\" : \\"object\\";").toEqual("type TypeName = T extends Function ? \\"function\\" : \\"object\\";") 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received -- type TypeName = T extends Function -- ? \\"function\\" -- : \\"object\\"; -+ type TypeName = T extends Function ? \\"function\\" : \\"object\\";" +- type TypeName = T extends Function +- ? "function" +- : "object"; ++ type TypeName = T extends Function ? "function" : "object"; `; exports[`.toEqual() {pass: false} expect([1, 2]).toEqual([2, 1]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Array [ -- 2, - 1, -+ 2, - ]" + Array [ +- 2, + 1, ++ 2, + ] `; exports[`.toEqual() {pass: false} expect([1, 3]).toEqual(ArrayContaining [1, 2]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: ArrayContaining [1, 2] -Received: [1, 3]" +Expected: ArrayContaining [1, 2] +Received: [1, 3] `; exports[`.toEqual() {pass: false} expect([1]).toEqual([2]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Array [ -- 2, -+ 1, - ]" + Array [ +- 2, ++ 1, + ] `; exports[`.toEqual() {pass: false} expect({"a": 1, "b": 2}).toEqual(ObjectContaining {"a": 2}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: ObjectContaining {\\"a\\": 2} -Received: {\\"a\\": 1, \\"b\\": 2}" +Expected: ObjectContaining {"a": 2} +Received: {"a": 1, "b": 2} `; exports[`.toEqual() {pass: false} expect({"a": 1}).toEqual({"a": 2}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": 2, -+ \\"a\\": 1, - }" + Object { +- "a": 2, ++ "a": 1, + } `; exports[`.toEqual() {pass: false} expect({"a": 5}).toEqual({"b": 6}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"b\\": 6, -+ \\"a\\": 5, - }" + Object { +- "b": 6, ++ "a": 5, + } `; exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).toEqual({"nodeName": "p", "nodeType": 1}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"nodeName\\": \\"p\\", -+ \\"nodeName\\": \\"div\\", - \\"nodeType\\": 1, - }" + Object { +- "nodeName": "p", ++ "nodeName": "div", + "nodeType": 1, + } `; exports[`.toEqual() {pass: false} expect({"target": {"nodeType": 1, "value": "a"}}).toEqual({"target": {"nodeType": 1, "value": "b"}}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { - \\"target\\": Object { - \\"nodeType\\": 1, -- \\"value\\": \\"b\\", -+ \\"value\\": \\"a\\", - }, - }" + Object { + "target": Object { + "nodeType": 1, +- "value": "b", ++ "value": "a", + }, + } `; exports[`.toEqual() {pass: false} expect(0).toEqual(-0) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: -0 -Received: 0" +Expected: -0 +Received: 0 `; exports[`.toEqual() {pass: false} expect(0).toEqual(5e-324) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: 5e-324 -Received: 0" +Expected: 5e-324 +Received: 0 `; exports[`.toEqual() {pass: false} expect(1).toEqual(2) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: 2 -Received: 1" +Expected: 2 +Received: 1 `; exports[`.toEqual() {pass: false} expect(1).toEqual(ArrayContaining [1, 2]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: ArrayContaining [1, 2] -Received: 1" +Expected: ArrayContaining [1, 2] +Received: 1 `; exports[`.toEqual() {pass: false} expect(5e-324).toEqual(0) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: 0 -Received: 5e-324" +Expected: 0 +Received: 5e-324 `; exports[`.toEqual() {pass: false} expect(Immutable.List [1, 2]).toEqual(Immutable.List [2, 1]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.List [ -- 2, - 1, -+ 2, - ]" + Immutable.List [ +- 2, + 1, ++ 2, + ] `; exports[`.toEqual() {pass: false} expect(Immutable.List [1]).toEqual(Immutable.List [2]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.List [ -- 2, -+ 1, - ]" + Immutable.List [ +- 2, ++ 1, + ] `; exports[`.toEqual() {pass: false} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 11}}}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.Map { - \\"1\\": Immutable.Map { - \\"2\\": Object { -- \\"a\\": 11, -+ \\"a\\": 99, - }, - }, - }" + Immutable.Map { + "1": Immutable.Map { + "2": Object { +- "a": 11, ++ "a": 99, + }, + }, + } `; exports[`.toEqual() {pass: false} expect(Immutable.Map {"a": 0}).toEqual(Immutable.Map {"b": 0}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.Map { -- \\"b\\": 0, -+ \\"a\\": 0, - }" + Immutable.Map { +- "b": 0, ++ "a": 0, + } `; exports[`.toEqual() {pass: false} expect(Immutable.Map {"v": 1}).toEqual(Immutable.Map {"v": 2}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.Map { -- \\"v\\": 2, -+ \\"v\\": 1, - }" + Immutable.Map { +- "v": 2, ++ "v": 1, + } `; exports[`.toEqual() {pass: false} expect(Immutable.OrderedMap {1: "one", 2: "two"}).toEqual(Immutable.OrderedMap {2: "two", 1: "one"}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.OrderedMap { -- 2: \\"two\\", - 1: \\"one\\", -+ 2: \\"two\\", - }" + Immutable.OrderedMap { +- 2: "two", + 1: "one", ++ 2: "two", + } `; exports[`.toEqual() {pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Immutable.OrderedSet [2, 1]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.OrderedSet [ -- 2, - 1, -+ 2, - ]" + Immutable.OrderedSet [ +- 2, + 1, ++ 2, + ] `; exports[`.toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set []) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received -- Immutable.Set [] -+ Immutable.Set [ -+ 1, -+ 2, -+ ]" +- Immutable.Set [] ++ Immutable.Set [ ++ 1, ++ 2, ++ ] `; exports[`.toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [1, 2, 3]) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Immutable.Set [ - 1, - 2, -- 3, - ]" + Immutable.Set [ + 1, + 2, +- 3, + ] `; exports[`.toEqual() {pass: false} expect(Map {"a" => 0}).toEqual(Map {"b" => 0}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Map { -- \\"b\\" => 0, -+ \\"a\\" => 0, - }" + Map { +- "b" => 0, ++ "a" => 0, + } `; exports[`.toEqual() {pass: false} expect(Map {"v" => 1}).toEqual(Map {"v" => 2}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Map { -- \\"v\\" => 2, -+ \\"v\\" => 1, - }" + Map { +- "v" => 2, ++ "v" => 1, + } `; exports[`.toEqual() {pass: false} expect(Map {["v"] => 1}).toEqual(Map {["v"] => 2}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Map { - Array [ - \\"v\\", -- ] => 2, -+ ] => 1, - }" + Map { + Array [ + "v", +- ] => 2, ++ ] => 1, + } `; exports[`.toEqual() {pass: false} expect(Map {[1] => Map {[1] => "one"}}).toEqual(Map {[1] => Map {[1] => "two"}}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received -@@ -2,8 +2,8 @@ - Array [ - 1, - ] => Map { - Array [ - 1, -- ] => \\"two\\", -+ ] => \\"one\\", - }, - }" +@@ -2,8 +2,8 @@ + Array [ + 1, + ] => Map { + Array [ + 1, +- ] => "two", ++ ] => "one", + }, + } `; exports[`.toEqual() {pass: false} expect(Map {}).toEqual(Set {}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: Set {} -Received: Map {}" +Expected: Set {} +Received: Map {} `; exports[`.toEqual() {pass: false} expect(Map {1 => "one", 2 => "two"}).toEqual(Map {1 => "one"}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Map { - 1 => \\"one\\", -+ 2 => \\"two\\", - }" + Map { + 1 => "one", ++ 2 => "two", + } `; exports[`.toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [2]}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received -@@ -3,9 +3,6 @@ - 1, - ], - Array [ - 2, - ], -- Array [ -- 2, -- ], - }" +@@ -3,9 +3,6 @@ + 1, + ], + Array [ + 2, + ], +- Array [ +- 2, +- ], + } `; exports[`.toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [3]}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received -@@ -3,9 +3,6 @@ - 1, - ], - Array [ - 2, - ], -- Array [ -- 3, -- ], - }" +@@ -3,9 +3,6 @@ + 1, + ], + Array [ + 2, + ], +- Array [ +- 3, +- ], + } `; exports[`.toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received -- Set {} -+ Set { -+ 1, -+ 2, -+ }" +- Set {} ++ Set { ++ 1, ++ 2, ++ } `; exports[`.toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Set { - 1, - 2, -- 3, - }" + Set { + 1, + 2, +- 3, + } `; exports[`.toEqual() {pass: false} expect(Set {Set {1}, Set {2}}).toEqual(Set {Set {1}, Set {3}}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Set { - Set { - 1, - }, - Set { -- 3, -+ 2, - }, - }" + Set { + Set { + 1, + }, + Set { +- 3, ++ 2, + }, + } `; exports[`.toEqual() {pass: false} expect(false).toEqual(ObjectContaining {"a": 2}) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: ObjectContaining {\\"a\\": 2} -Received: false" +Expected: ObjectContaining {"a": 2} +Received: false `; exports[`.toEqual() {pass: false} expect(null).toEqual(undefined) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: undefined -Received: null" +Expected: undefined +Received: null `; exports[`.toEqual() {pass: false} expect(true).toEqual(false) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: false -Received: true" +Expected: false +Received: true `; exports[`.toEqual() {pass: false} expect(undefined).toEqual(Any) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: Any -Received: undefined" +Expected: Any +Received: undefined `; exports[`.toEqual() {pass: false} expect(undefined).toEqual(Anything) 1`] = ` -"expect(received).toEqual(expected) // deep equality +expect(received).toEqual(expected) // deep equality -Expected: Anything -Received: undefined" +Expected: Anything +Received: undefined `; exports[`.toEqual() {pass: true} expect("Alice").not.toEqual({"asymmetricMatch": [Function asymmetricMatch]}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not {\\"asymmetricMatch\\": [Function asymmetricMatch]} -Received: \\"Alice\\"" +Expected: not {"asymmetricMatch": [Function asymmetricMatch]} +Received: "Alice" `; exports[`.toEqual() {pass: true} expect("abc").not.toEqual("abc") 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not "abc" -Expected: not \\"abc\\" -" `; exports[`.toEqual() {pass: true} expect("abc").not.toEqual({"0": "a", "1": "b", "2": "c"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not {\\"0\\": \\"a\\", \\"1\\": \\"b\\", \\"2\\": \\"c\\"} -Received: \\"abc\\"" +Expected: not {"0": "a", "1": "b", "2": "c"} +Received: "abc" `; exports[`.toEqual() {pass: true} expect("abcd").not.toEqual(StringContaining "bc") 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not StringContaining \\"bc\\" -Received: \\"abcd\\"" +Expected: not StringContaining "bc" +Received: "abcd" `; exports[`.toEqual() {pass: true} expect("abcd").not.toEqual(StringMatching /bc/) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not StringMatching /bc/ -Received: \\"abcd\\"" +Expected: not StringMatching /bc/ +Received: "abcd" `; exports[`.toEqual() {pass: true} expect([1, 2, 3]).not.toEqual(ArrayContaining [2, 3]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not ArrayContaining [2, 3] -Received: [1, 2, 3]" +Expected: not ArrayContaining [2, 3] +Received: [1, 2, 3] `; exports[`.toEqual() {pass: true} expect([1, 2]).not.toEqual([1, 2]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, 2] -Expected: not [1, 2] -" `; exports[`.toEqual() {pass: true} expect([1]).not.toEqual([1]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not [1] -Expected: not [1] -" `; exports[`.toEqual() {pass: true} expect([Function anonymous]).not.toEqual(Any) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Any -Received: [Function anonymous]" +Expected: not Any +Received: [Function anonymous] `; exports[`.toEqual() {pass: true} expect({"0": "a", "1": "b", "2": "c"}).not.toEqual("abc") 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not \\"abc\\" -Received: {\\"0\\": \\"a\\", \\"1\\": \\"b\\", \\"2\\": \\"c\\"}" +Expected: not "abc" +Received: {"0": "a", "1": "b", "2": "c"} `; exports[`.toEqual() {pass: true} expect({"a": 1, "b": [Function b], "c": true}).not.toEqual({"a": 1, "b": Any, "c": Anything}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not {\\"a\\": 1, \\"b\\": Any, \\"c\\": Anything} -Received: {\\"a\\": 1, \\"b\\": [Function b], \\"c\\": true}" +Expected: not {"a": 1, "b": Any, "c": Anything} +Received: {"a": 1, "b": [Function b], "c": true} `; exports[`.toEqual() {pass: true} expect({"a": 1, "b": 2}).not.toEqual(ObjectContaining {"a": 1}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not ObjectContaining {\\"a\\": 1} -Received: {\\"a\\": 1, \\"b\\": 2}" +Expected: not ObjectContaining {"a": 1} +Received: {"a": 1, "b": 2} `; exports[`.toEqual() {pass: true} expect({"a": 99}).not.toEqual({"a": 99}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 99} -Expected: not {\\"a\\": 99} -" `; exports[`.toEqual() {pass: true} expect({"nodeName": "div", "nodeType": 1}).not.toEqual({"nodeName": "div", "nodeType": 1}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not {"nodeName": "div", "nodeType": 1} -Expected: not {\\"nodeName\\": \\"div\\", \\"nodeType\\": 1} -" `; exports[`.toEqual() {pass: true} expect({}).not.toEqual({}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not {} -Expected: not {} -" `; exports[`.toEqual() {pass: true} expect({}).not.toEqual(0) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not 0 -Received: {}" +Expected: not 0 +Received: {} `; exports[`.toEqual() {pass: true} expect(0).not.toEqual({}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not {} -Received: 0" +Expected: not {} +Received: 0 `; exports[`.toEqual() {pass: true} expect(1).not.toEqual(1) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not 1 -Expected: not 1 -" `; exports[`.toEqual() {pass: true} expect(Immutable.List [1, 2]).not.toEqual(Immutable.List [1, 2]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.List [1, 2] -Expected: not Immutable.List [1, 2] -" `; exports[`.toEqual() {pass: true} expect(Immutable.List [1]).not.toEqual(Immutable.List [1]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.List [1] -Expected: not Immutable.List [1] -" `; exports[`.toEqual() {pass: true} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).not.toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}} -Expected: not Immutable.Map {\\"1\\": Immutable.Map {\\"2\\": {\\"a\\": 99}}} -" `; exports[`.toEqual() {pass: true} expect(Immutable.Map {}).not.toEqual(Immutable.Map {}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {} -Expected: not Immutable.Map {} -" `; exports[`.toEqual() {pass: true} expect(Immutable.Map {1: "one", 2: "two"}).not.toEqual(Immutable.Map {1: "one", 2: "two"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {1: "one", 2: "two"} -Expected: not Immutable.Map {1: \\"one\\", 2: \\"two\\"} -" `; exports[`.toEqual() {pass: true} expect(Immutable.Map {1: "one", 2: "two"}).not.toEqual(Immutable.Map {2: "two", 1: "one"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Immutable.Map {2: \\"two\\", 1: \\"one\\"} -Received: Immutable.Map {1: \\"one\\", 2: \\"two\\"}" +Expected: not Immutable.Map {2: "two", 1: "one"} +Received: Immutable.Map {1: "one", 2: "two"} `; exports[`.toEqual() {pass: true} expect(Immutable.OrderedMap {1: "one", 2: "two"}).not.toEqual(Immutable.OrderedMap {1: "one", 2: "two"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.OrderedMap {1: "one", 2: "two"} -Expected: not Immutable.OrderedMap {1: \\"one\\", 2: \\"two\\"} -" `; exports[`.toEqual() {pass: true} expect(Immutable.OrderedSet []).not.toEqual(Immutable.OrderedSet []) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.OrderedSet [] -Expected: not Immutable.OrderedSet [] -" `; exports[`.toEqual() {pass: true} expect(Immutable.OrderedSet [1, 2]).not.toEqual(Immutable.OrderedSet [1, 2]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.OrderedSet [1, 2] -Expected: not Immutable.OrderedSet [1, 2] -" `; exports[`.toEqual() {pass: true} expect(Immutable.Set []).not.toEqual(Immutable.Set []) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Set [] -Expected: not Immutable.Set [] -" `; exports[`.toEqual() {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [1, 2]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Set [1, 2] -Expected: not Immutable.Set [1, 2] -" `; exports[`.toEqual() {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [2, 1]) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Immutable.Set [2, 1] -Received: Immutable.Set [1, 2]" +Expected: not Immutable.Set [2, 1] +Received: Immutable.Set [1, 2] `; exports[`.toEqual() {pass: true} expect(Map {[1] => "one", [2] => "two", [3] => "three", [3] => "four"}).not.toEqual(Map {[3] => "three", [3] => "four", [2] => "two", [1] => "one"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Map {[3] => \\"three\\", [3] => \\"four\\", [2] => \\"two\\", [1] => \\"one\\"} -Received: Map {[1] => \\"one\\", [2] => \\"two\\", [3] => \\"three\\", [3] => \\"four\\"}" +Expected: not Map {[3] => "three", [3] => "four", [2] => "two", [1] => "one"} +Received: Map {[1] => "one", [2] => "two", [3] => "three", [3] => "four"} `; exports[`.toEqual() {pass: true} expect(Map {[1] => "one", [2] => "two"}).not.toEqual(Map {[2] => "two", [1] => "one"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Map {[2] => \\"two\\", [1] => \\"one\\"} -Received: Map {[1] => \\"one\\", [2] => \\"two\\"}" +Expected: not Map {[2] => "two", [1] => "one"} +Received: Map {[1] => "one", [2] => "two"} `; exports[`.toEqual() {pass: true} expect(Map {[1] => Map {[1] => "one"}, [2] => Map {[2] => "two"}}).not.toEqual(Map {[2] => Map {[2] => "two"}, [1] => Map {[1] => "one"}}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Map {[2] => Map {[2] => \\"two\\"}, [1] => Map {[1] => \\"one\\"}} -Received: Map {[1] => Map {[1] => \\"one\\"}, [2] => Map {[2] => \\"two\\"}}" +Expected: not Map {[2] => Map {[2] => "two"}, [1] => Map {[1] => "one"}} +Received: Map {[1] => Map {[1] => "one"}, [2] => Map {[2] => "two"}} `; exports[`.toEqual() {pass: true} expect(Map {{"a": 1} => "one", {"b": 2} => "two"}).not.toEqual(Map {{"b": 2} => "two", {"a": 1} => "one"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Map {{\\"b\\": 2} => \\"two\\", {\\"a\\": 1} => \\"one\\"} -Received: Map {{\\"a\\": 1} => \\"one\\", {\\"b\\": 2} => \\"two\\"}" +Expected: not Map {{"b": 2} => "two", {"a": 1} => "one"} +Received: Map {{"a": 1} => "one", {"b": 2} => "two"} `; exports[`.toEqual() {pass: true} expect(Map {}).not.toEqual(Map {}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {} -Expected: not Map {} -" `; exports[`.toEqual() {pass: true} expect(Map {1 => "one", 2 => "two"}).not.toEqual(Map {1 => "one", 2 => "two"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {1 => "one", 2 => "two"} -Expected: not Map {1 => \\"one\\", 2 => \\"two\\"} -" `; exports[`.toEqual() {pass: true} expect(Map {1 => "one", 2 => "two"}).not.toEqual(Map {2 => "two", 1 => "one"}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Map {2 => \\"two\\", 1 => \\"one\\"} -Received: Map {1 => \\"one\\", 2 => \\"two\\"}" +Expected: not Map {2 => "two", 1 => "one"} +Received: Map {1 => "one", 2 => "two"} `; exports[`.toEqual() {pass: true} expect(Map {1 => ["one"], 2 => ["two"]}).not.toEqual(Map {2 => ["two"], 1 => ["one"]}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Map {2 => [\\"two\\"], 1 => [\\"one\\"]} -Received: Map {1 => [\\"one\\"], 2 => [\\"two\\"]}" +Expected: not Map {2 => ["two"], 1 => ["one"]} +Received: Map {1 => ["one"], 2 => ["two"]} `; exports[`.toEqual() {pass: true} expect(NaN).not.toEqual(NaN) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not NaN -Expected: not NaN -" `; exports[`.toEqual() {pass: true} expect(Set {[1], [2], [3], [3]}).not.toEqual(Set {[3], [3], [2], [1]}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Set {[3], [3], [2], [1]} -Received: Set {[1], [2], [3], [3]}" +Expected: not Set {[3], [3], [2], [1]} +Received: Set {[1], [2], [3], [3]} `; exports[`.toEqual() {pass: true} expect(Set {[1], [2]}).not.toEqual(Set {[2], [1]}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Set {[2], [1]} -Received: Set {[1], [2]}" +Expected: not Set {[2], [1]} +Received: Set {[1], [2]} `; exports[`.toEqual() {pass: true} expect(Set {{"a": 1}, {"b": 2}}).not.toEqual(Set {{"b": 2}, {"a": 1}}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Set {{\\"b\\": 2}, {\\"a\\": 1}} -Received: Set {{\\"a\\": 1}, {\\"b\\": 2}}" +Expected: not Set {{"b": 2}, {"a": 1}} +Received: Set {{"a": 1}, {"b": 2}} `; exports[`.toEqual() {pass: true} expect(Set {}).not.toEqual(Set {}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {} -Expected: not Set {} -" `; exports[`.toEqual() {pass: true} expect(Set {1, 2}).not.toEqual(Set {1, 2}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {1, 2} -Expected: not Set {1, 2} -" `; exports[`.toEqual() {pass: true} expect(Set {1, 2}).not.toEqual(Set {2, 1}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Set {2, 1} -Received: Set {1, 2}" +Expected: not Set {2, 1} +Received: Set {1, 2} `; exports[`.toEqual() {pass: true} expect(Set {Set {[1]}, Set {[2]}}).not.toEqual(Set {Set {[2]}, Set {[1]}}) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Set {Set {[2]}, Set {[1]}} -Received: Set {Set {[1]}, Set {[2]}}" +Expected: not Set {Set {[2]}, Set {[1]}} +Received: Set {Set {[1]}, Set {[2]}} `; exports[`.toEqual() {pass: true} expect(true).not.toEqual(Anything) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality -Expected: not Anything -Received: true" +Expected: not Anything +Received: true `; exports[`.toEqual() {pass: true} expect(true).not.toEqual(true) 1`] = ` -"expect(received).not.toEqual(expected) // deep equality +expect(received).not.toEqual(expected) // deep equality + +Expected: not true -Expected: not true -" `; exports[`.toHaveLength {pass: false} expect("").toHaveLength(1) 1`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Expected length: 1 -Received length: 0 -Received string: \\"\\"" +Expected length: 1 +Received length: 0 +Received string: "" `; exports[`.toHaveLength {pass: false} expect("abc").toHaveLength(66) 1`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Expected length: 66 -Received length: 3 -Received string: \\"abc\\"" +Expected length: 66 +Received length: 3 +Received string: "abc" `; exports[`.toHaveLength {pass: false} expect(["a", "b"]).toHaveLength(99) 1`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Expected length: 99 -Received length: 2 -Received array: [\\"a\\", \\"b\\"]" +Expected length: 99 +Received length: 2 +Received array: ["a", "b"] `; exports[`.toHaveLength {pass: false} expect([]).toHaveLength(1) 1`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Expected length: 1 -Received length: 0 -Received array: []" +Expected length: 1 +Received length: 0 +Received array: [] `; exports[`.toHaveLength {pass: false} expect([1, 2]).toHaveLength(3) 1`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Expected length: 3 -Received length: 2 -Received array: [1, 2]" +Expected length: 3 +Received length: 2 +Received array: [1, 2] `; exports[`.toHaveLength {pass: true} expect("").toHaveLength(0) 1`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Expected length: not 0 -Received string: \\"\\"" +Expected length: not 0 +Received string: "" `; exports[`.toHaveLength {pass: true} expect("abc").toHaveLength(3) 1`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Expected length: not 3 -Received string: \\"abc\\"" +Expected length: not 3 +Received string: "abc" `; exports[`.toHaveLength {pass: true} expect(["a", "b"]).toHaveLength(2) 1`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Expected length: not 2 -Received array: [\\"a\\", \\"b\\"]" +Expected length: not 2 +Received array: ["a", "b"] `; exports[`.toHaveLength {pass: true} expect([]).toHaveLength(0) 1`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Expected length: not 0 -Received array: []" +Expected length: not 0 +Received array: [] `; exports[`.toHaveLength {pass: true} expect([1, 2]).toHaveLength(2) 1`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Expected length: not 2 -Received array: [1, 2]" +Expected length: not 2 +Received array: [1, 2] `; exports[`.toHaveLength error cases 1`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Matcher error: received value must have a length property whose value must be a number +Matcher error: received value must have a length property whose value must be a number Received has type: object -Received has value: {\\"a\\": 9}" +Received has value: {"a": 9} `; exports[`.toHaveLength error cases 2`] = ` -"expect(received).toHaveLength(expected) +expect(received).toHaveLength(expected) -Matcher error: received value must have a length property whose value must be a number +Matcher error: received value must have a length property whose value must be a number Received has type: number -Received has value: 0" +Received has value: 0 `; exports[`.toHaveLength error cases 3`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Matcher error: received value must have a length property whose value must be a number +Matcher error: received value must have a length property whose value must be a number -Received has value: undefined" +Received has value: undefined `; exports[`.toHaveLength matcher error expected length not number 1`] = ` -"expect(received).not.toHaveLength(expected) +expect(received).not.toHaveLength(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"3\\"" +Expected has value: "3" `; exports[`.toHaveLength matcher error expected length number Infinity 1`] = ` -"expect(received).rejects.toHaveLength(expected) +expect(received).rejects.toHaveLength(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: number -Expected has value: Infinity" +Expected has value: Infinity `; exports[`.toHaveLength matcher error expected length number NaN 1`] = ` -"expect(received).rejects.not.toHaveLength(expected) +expect(received).rejects.not.toHaveLength(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: number -Expected has value: NaN" +Expected has value: NaN `; exports[`.toHaveLength matcher error expected length number float 1`] = ` -"expect(received).resolves.toHaveLength(expected) +expect(received).resolves.toHaveLength(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: number -Expected has value: 0.5" +Expected has value: 0.5 `; exports[`.toHaveLength matcher error expected length number negative integer 1`] = ` -"expect(received).resolves.not.toHaveLength(expected) +expect(received).resolves.not.toHaveLength(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: number -Expected has value: -3" +Expected has value: -3 `; exports[`.toHaveProperty() {error} expect({"a": {"b": {}}}).toHaveProperty('1') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Matcher error: expected path must be a string or array +Matcher error: expected path must be a string or array Expected has type: number -Expected has value: 1" +Expected has value: 1 `; exports[`.toHaveProperty() {error} expect({"a": {"b": {}}}).toHaveProperty('null') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Matcher error: expected path must be a string or array +Matcher error: expected path must be a string or array -Expected has value: null" +Expected has value: null `; exports[`.toHaveProperty() {error} expect({"a": {"b": {}}}).toHaveProperty('undefined') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Matcher error: expected path must be a string or array +Matcher error: expected path must be a string or array -Expected has value: undefined" +Expected has value: undefined `; exports[`.toHaveProperty() {error} expect({}).toHaveProperty('') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Matcher error: expected path must not be an empty array +Matcher error: expected path must not be an empty array Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`.toHaveProperty() {error} expect(null).toHaveProperty('a.b') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Matcher error: received value must not be null nor undefined +Matcher error: received value must not be null nor undefined -Received has value: null" +Received has value: null `; exports[`.toHaveProperty() {error} expect(undefined).toHaveProperty('a') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Matcher error: received value must not be null nor undefined +Matcher error: received value must not be null nor undefined -Received has value: undefined" +Received has value: undefined `; exports[`.toHaveProperty() {pass: false} expect("").toHaveProperty('key') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"key\\" -Received path: [] +Expected path: "key" +Received path: [] -Received value: \\"\\"" +Received value: "" `; exports[`.toHaveProperty() {pass: false} expect("abc").toHaveProperty('a.b.c') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"a.b.c\\" -Received path: [] +Expected path: "a.b.c" +Received path: [] -Received value: \\"abc\\"" +Received value: "abc" `; exports[`.toHaveProperty() {pass: false} expect("abc").toHaveProperty('a.b.c', {"a": 5}) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.c\\" -Received path: [] +Expected path: "a.b.c" +Received path: [] -Expected value: {\\"a\\": 5} -Received value: \\"abc\\"" +Expected value: {"a": 5} +Received value: "abc" `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d', 2) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: [\\"a\\", \\"b\\", \\"c\\", \\"d\\"] +Expected path: ["a", "b", "c", "d"] -Expected value: 2 -Received value: 1" +Expected value: 2 +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d', 2) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.c.d\\" +Expected path: "a.b.c.d" -Expected value: 2 -Received value: 1" +Expected value: 2 +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.ttt.d', 1) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.ttt.d\\" -Received path: \\"a.b\\" +Expected path: "a.b.ttt.d" +Received path: "a.b" -Expected value: 1 -Received value: {\\"c\\": {\\"d\\": 1}}" +Expected value: 1 +Received value: {"c": {"d": 1}} `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": {}}}}).toHaveProperty('a.b.c.d') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"a.b.c.d\\" -Received path: \\"a.b.c\\" +Expected path: "a.b.c.d" +Received path: "a.b.c" -Received value: {}" +Received value: {} `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": {}}}}).toHaveProperty('a.b.c.d', 1) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.c.d\\" -Received path: \\"a.b.c\\" +Expected path: "a.b.c.d" +Received path: "a.b.c" -Expected value: 1 -Received value: {}" +Expected value: 1 +Received value: {} `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": 5}}}).toHaveProperty('a.b', {"c": 4}) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b\\" +Expected path: "a.b" -- Expected value -+ Received value +- Expected value ++ Received value - Object { -- \\"c\\": 4, -+ \\"c\\": 5, - }" + Object { +- "c": 4, ++ "c": 5, + } `; exports[`.toHaveProperty() {pass: false} expect({"a": {"b": 3}}).toHaveProperty('a.b', undefined) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b\\" +Expected path: "a.b" -Expected value: undefined -Received value: 3" +Expected value: undefined +Received value: 3 `; exports[`.toHaveProperty() {pass: false} expect({"a": 1}).toHaveProperty('a.b.c.d') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"a.b.c.d\\" -Received path: \\"a\\" +Expected path: "a.b.c.d" +Received path: "a" -Received value: 1" +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect({"a": 1}).toHaveProperty('a.b.c.d', 5) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.c.d\\" -Received path: \\"a\\" +Expected path: "a.b.c.d" +Received path: "a" -Expected value: 5 -Received value: 1" +Expected value: 5 +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 2) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.c.d\\" -Received path: [] +Expected path: "a.b.c.d" +Received path: [] -Expected value: 2 -Received value: {\\"a.b.c.d\\": 1}" +Expected value: 2 +Received value: {"a.b.c.d": 1} `; exports[`.toHaveProperty() {pass: false} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 2) 2`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: [\\"a.b.c.d\\"] +Expected path: ["a.b.c.d"] -Expected value: 2 -Received value: 1" +Expected value: 2 +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect({"children": ["\\"That cartoon\\""], "props": null, "type": "p"}).toHaveProperty('children,0', "\\"That cat cartoon\\"") 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: [\\"children\\", 0] +Expected path: ["children", 0] -Expected value: \\"\\\\\\"That cat cartoon\\\\\\"\\" -Received value: \\"\\\\\\"That cartoon\\\\\\"\\"" +Expected value: "\\"That cat cartoon\\"" +Received value: "\\"That cartoon\\"" `; exports[`.toHaveProperty() {pass: false} expect({"children": ["Roses are red. @@ -3135,1200 +3135,1200 @@ 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.") 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: [\\"children\\", 0] +Expected path: ["children", 0] -- Expected value -+ Received value +- Expected value ++ Received value -- Roses are red, violets are blue. -+ Roses are red. -+ Violets are blue. -- Testing with Jest -- Is good for you. -+ Testing with Jest is good for you." +- Roses are red, violets are blue. ++ Roses are red. ++ Violets are blue. +- Testing with Jest +- Is good for you. ++ Testing with Jest is good for you. `; exports[`.toHaveProperty() {pass: false} expect({"key": 1}).toHaveProperty('not') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"not\\" -Received path: [] +Expected path: "not" +Received path: [] -Received value: {\\"key\\": 1}" +Received value: {"key": 1} `; exports[`.toHaveProperty() {pass: false} expect({}).toHaveProperty('a') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"a\\" -Received path: [] +Expected path: "a" +Received path: [] -Received value: {}" +Received value: {} `; exports[`.toHaveProperty() {pass: false} expect({}).toHaveProperty('a', "a") 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a\\" +Expected path: "a" -Expected value: \\"a\\" -Received value: undefined" +Expected value: "a" +Received value: undefined `; exports[`.toHaveProperty() {pass: false} expect({}).toHaveProperty('a', "test") 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a\\" -Received path: [] +Expected path: "a" +Received path: [] -Expected value: \\"test\\" -Received value: {}" +Expected value: "test" +Received value: {} `; exports[`.toHaveProperty() {pass: false} expect({}).toHaveProperty('b', undefined) 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"b\\" +Expected path: "b" -Expected value: undefined -Received value: \\"b\\"" +Expected value: undefined +Received value: "b" `; exports[`.toHaveProperty() {pass: false} expect(0).toHaveProperty('key') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"key\\" -Received path: [] +Expected path: "key" +Received path: [] -Received value: 0" +Received value: 0 `; exports[`.toHaveProperty() {pass: false} expect(1).toHaveProperty('a.b.c') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"a.b.c\\" -Received path: [] +Expected path: "a.b.c" +Received path: [] -Received value: 1" +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect(1).toHaveProperty('a.b.c', "test") 1`] = ` -"expect(received).toHaveProperty(path, value) +expect(received).toHaveProperty(path, value) -Expected path: \\"a.b.c\\" -Received path: [] +Expected path: "a.b.c" +Received path: [] -Expected value: \\"test\\" -Received value: 1" +Expected value: "test" +Received value: 1 `; exports[`.toHaveProperty() {pass: false} expect(Symbol()).toHaveProperty('key') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"key\\" -Received path: [] +Expected path: "key" +Received path: [] -Received value: Symbol()" +Received value: Symbol() `; exports[`.toHaveProperty() {pass: false} expect(false).toHaveProperty('key') 1`] = ` -"expect(received).toHaveProperty(path) +expect(received).toHaveProperty(path) -Expected path: \\"key\\" -Received path: [] +Expected path: "key" +Received path: [] -Received value: false" +Received value: false `; exports[`.toHaveProperty() {pass: true} expect("").toHaveProperty('length', 0) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"length\\" +Expected path: "length" -Expected value: not 0" +Expected value: not 0 `; exports[`.toHaveProperty() {pass: true} expect([Function memoized]).toHaveProperty('memo', []) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"memo\\" +Expected path: "memo" -Expected value: not []" +Expected value: not [] `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1') 1`] = ` -"expect(received).not.toHaveProperty(path) +expect(received).not.toHaveProperty(path) -Expected path: not [\\"a\\", \\"b\\", 1] +Expected path: not ["a", "b", 1] -Received value: 2" +Received value: 2 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1', 2) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: [\\"a\\", \\"b\\", 1] +Expected path: ["a", "b", 1] -Expected value: not 2" +Expected value: not 2 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1', Any) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: [\\"a\\", \\"b\\", 1] +Expected path: ["a", "b", 1] -Expected value: not Any -Received value: 2" +Expected value: not Any +Received value: 2 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d') 1`] = ` -"expect(received).not.toHaveProperty(path) +expect(received).not.toHaveProperty(path) -Expected path: not [\\"a\\", \\"b\\", \\"c\\", \\"d\\"] +Expected path: not ["a", "b", "c", "d"] -Received value: 1" +Received value: 1 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d', 1) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: [\\"a\\", \\"b\\", \\"c\\", \\"d\\"] +Expected path: ["a", "b", "c", "d"] -Expected value: not 1" +Expected value: not 1 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d') 1`] = ` -"expect(received).not.toHaveProperty(path) +expect(received).not.toHaveProperty(path) -Expected path: not \\"a.b.c.d\\" +Expected path: not "a.b.c.d" -Received value: 1" +Received value: 1 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d', 1) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a.b.c.d\\" +Expected path: "a.b.c.d" -Expected value: not 1" +Expected value: not 1 `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": {"c": 5}}}).toHaveProperty('a.b', {"c": 5}) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a.b\\" +Expected path: "a.b" -Expected value: not {\\"c\\": 5}" +Expected value: not {"c": 5} `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": undefined}}).toHaveProperty('a.b') 1`] = ` -"expect(received).not.toHaveProperty(path) +expect(received).not.toHaveProperty(path) -Expected path: not \\"a.b\\" +Expected path: not "a.b" -Received value: undefined" +Received value: undefined `; exports[`.toHaveProperty() {pass: true} expect({"a": {"b": undefined}}).toHaveProperty('a.b', undefined) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a.b\\" +Expected path: "a.b" -Expected value: not undefined" +Expected value: not undefined `; exports[`.toHaveProperty() {pass: true} expect({"a": {}}).toHaveProperty('a.b', undefined) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a.b\\" -Received path: \\"a\\" +Expected path: "a.b" +Received path: "a" -Expected value: not undefined -Received value: {} +Expected value: not undefined +Received value: {} -Because a positive assertion passes for expected value undefined if the property does not exist, this negative assertion fails unless the property does exist and has a defined value" +Because a positive assertion passes for expected value undefined if the property does not exist, this negative assertion fails unless the property does exist and has a defined value `; exports[`.toHaveProperty() {pass: true} expect({"a": 0}).toHaveProperty('a') 1`] = ` -"expect(received).not.toHaveProperty(path) +expect(received).not.toHaveProperty(path) -Expected path: not \\"a\\" +Expected path: not "a" -Received value: 0" +Received value: 0 `; exports[`.toHaveProperty() {pass: true} expect({"a": 0}).toHaveProperty('a', 0) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a\\" +Expected path: "a" -Expected value: not 0" +Expected value: not 0 `; exports[`.toHaveProperty() {pass: true} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d') 1`] = ` -"expect(received).not.toHaveProperty(path) +expect(received).not.toHaveProperty(path) -Expected path: not [\\"a.b.c.d\\"] +Expected path: not ["a.b.c.d"] -Received value: 1" +Received value: 1 `; exports[`.toHaveProperty() {pass: true} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 1) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: [\\"a.b.c.d\\"] +Expected path: ["a.b.c.d"] -Expected value: not 1" +Expected value: not 1 `; exports[`.toHaveProperty() {pass: true} expect({"nodeName": "DIV"}).toHaveProperty('nodeType', 1) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"nodeType\\" +Expected path: "nodeType" -Expected value: not 1" +Expected value: not 1 `; exports[`.toHaveProperty() {pass: true} expect({"property": 1}).toHaveProperty('property', 1) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"property\\" +Expected path: "property" -Expected value: not 1" +Expected value: not 1 `; exports[`.toHaveProperty() {pass: true} expect({"val": true}).toHaveProperty('a', undefined) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a\\" +Expected path: "a" -Expected value: not undefined" +Expected value: not undefined `; exports[`.toHaveProperty() {pass: true} expect({"val": true}).toHaveProperty('c', "c") 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"c\\" +Expected path: "c" -Expected value: not \\"c\\"" +Expected value: not "c" `; exports[`.toHaveProperty() {pass: true} expect({"val": true}).toHaveProperty('val', true) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"val\\" +Expected path: "val" -Expected value: not true" +Expected value: not true `; exports[`.toHaveProperty() {pass: true} expect({}).toHaveProperty('a', undefined) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"a\\" +Expected path: "a" -Expected value: not undefined" +Expected value: not undefined `; exports[`.toHaveProperty() {pass: true} expect({}).toHaveProperty('b', "b") 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"b\\" +Expected path: "b" -Expected value: not \\"b\\"" +Expected value: not "b" `; exports[`.toHaveProperty() {pass: true} expect({}).toHaveProperty('setter', undefined) 1`] = ` -"expect(received).not.toHaveProperty(path, value) +expect(received).not.toHaveProperty(path, value) -Expected path: \\"setter\\" +Expected path: "setter" -Expected value: not undefined" +Expected value: not undefined `; exports[`.toMatch() {pass: true} expect(Foo bar).toMatch(/^foo/i) 1`] = ` -"expect(received).not.toMatch(expected) +expect(received).not.toMatch(expected) -Expected pattern: not /^foo/i -Received string: \\"Foo bar\\"" +Expected pattern: not /^foo/i +Received string: "Foo bar" `; exports[`.toMatch() {pass: true} expect(foo).toMatch(foo) 1`] = ` -"expect(received).not.toMatch(expected) +expect(received).not.toMatch(expected) -Expected substring: not \\"foo\\" -Received string: \\"foo\\"" +Expected substring: not "foo" +Received string: "foo" `; exports[`.toMatch() throws if non String actual value passed: [/foo/i, "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string Received has type: regexp -Received has value: /foo/i" +Received has value: /foo/i `; exports[`.toMatch() throws if non String actual value passed: [[], "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string Received has type: array -Received has value: []" +Received has value: [] `; exports[`.toMatch() throws if non String actual value passed: [[Function anonymous], "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string Received has type: function -Received has value: [Function anonymous]" +Received has value: [Function anonymous] `; exports[`.toMatch() throws if non String actual value passed: [{}, "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string Received has type: object -Received has value: {}" +Received has value: {} `; exports[`.toMatch() throws if non String actual value passed: [1, "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string Received has type: number -Received has value: 1" +Received has value: 1 `; exports[`.toMatch() throws if non String actual value passed: [true, "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string Received has type: boolean -Received has value: true" +Received has value: true `; exports[`.toMatch() throws if non String actual value passed: [undefined, "foo"] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: received value must be a string +Matcher error: received value must be a string -Received has value: undefined" +Received has value: undefined `; exports[`.toMatch() throws if non String/RegExp expected value passed: ["foo", []] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: expected value must be a string or regular expression +Matcher error: expected value must be a string or regular expression Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`.toMatch() throws if non String/RegExp expected value passed: ["foo", [Function anonymous]] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: expected value must be a string or regular expression +Matcher error: expected value must be a string or regular expression Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`.toMatch() throws if non String/RegExp expected value passed: ["foo", {}] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: expected value must be a string or regular expression +Matcher error: expected value must be a string or regular expression Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`.toMatch() throws if non String/RegExp expected value passed: ["foo", 1] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: expected value must be a string or regular expression +Matcher error: expected value must be a string or regular expression Expected has type: number -Expected has value: 1" +Expected has value: 1 `; exports[`.toMatch() throws if non String/RegExp expected value passed: ["foo", true] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: expected value must be a string or regular expression +Matcher error: expected value must be a string or regular expression Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`.toMatch() throws if non String/RegExp expected value passed: ["foo", undefined] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Matcher error: expected value must be a string or regular expression +Matcher error: expected value must be a string or regular expression -Expected has value: undefined" +Expected has value: undefined `; exports[`.toMatch() throws: [bar, /foo/] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Expected pattern: /foo/ -Received string: \\"bar\\"" +Expected pattern: /foo/ +Received string: "bar" `; exports[`.toMatch() throws: [bar, foo] 1`] = ` -"expect(received).toMatch(expected) +expect(received).toMatch(expected) -Expected substring: \\"foo\\" -Received string: \\"bar\\"" +Expected substring: "foo" +Received string: "bar" `; exports[`.toStrictEqual() displays substring diff 1`] = ` -"expect(received).toStrictEqual(expected) // deep equality +expect(received).toStrictEqual(expected) // deep equality -Expected: \\"Another caveat is that Jest will not typecheck your tests.\\" -Received: \\"Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they run.\\"" +Expected: "Another caveat is that Jest will not typecheck your tests." +Received: "Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they run." `; exports[`.toStrictEqual() displays substring diff for multiple lines 1`] = ` -"expect(received).toStrictEqual(expected) // deep equality - -- Expected -+ Received - -- 69 | -+ 68 | -- 70 | test('assert.doesNotThrow', () => { -+ 69 | test('assert.doesNotThrow', () => { -- > 71 | assert.doesNotThrow(() => { -+ > 70 | assert.doesNotThrow(() => { - | ^ -- 72 | throw Error('err!'); -+ 71 | throw Error('err!'); -- 73 | }); -+ 72 | }); -- 74 | }); -+ 73 | }); -- at Object.doesNotThrow (__tests__/assertionError.test.js:71:10) -+ at Object.doesNotThrow (__tests__/assertionError.test.js:70:10)" +expect(received).toStrictEqual(expected) // deep equality + +- Expected ++ Received + +- 69 | ++ 68 | +- 70 | test('assert.doesNotThrow', () => { ++ 69 | test('assert.doesNotThrow', () => { +- > 71 | assert.doesNotThrow(() => { ++ > 70 | assert.doesNotThrow(() => { + | ^ +- 72 | throw Error('err!'); ++ 71 | throw Error('err!'); +- 73 | }); ++ 72 | }); +- 74 | }); ++ 73 | }); +- at Object.doesNotThrow (__tests__/assertionError.test.js:71:10) ++ at Object.doesNotThrow (__tests__/assertionError.test.js:70:10) `; exports[`.toStrictEqual() matches the expected snapshot when it fails 1`] = ` -"expect(received).toStrictEqual(expected) // deep equality +expect(received).toStrictEqual(expected) // deep equality -- Expected -+ Received +- Expected ++ Received - Object { -- \\"test\\": TestClassA { -- \\"a\\": 1, -- \\"b\\": 2, -- }, -+ \\"test\\": 2, - }" + Object { +- "test": TestClassA { +- "a": 1, +- "b": 2, +- }, ++ "test": 2, + } `; exports[`.toStrictEqual() matches the expected snapshot when it fails 2`] = ` -"expect(received).not.toStrictEqual(expected) // deep equality +expect(received).not.toStrictEqual(expected) // deep equality + +Expected: not {"test": {"a": 1, "b": 2}} -Expected: not {\\"test\\": {\\"a\\": 1, \\"b\\": 2}} -" `; exports[`toMatchObject() {pass: false} expect([0]).toMatchObject([-0]) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Array [ -- -0, -+ 0, - ]" + Array [ +- -0, ++ 0, + ] `; exports[`toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2]) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Array [ - 1, - 2, -- 2, -+ 3, - ]" + Array [ + 1, + 2, +- 2, ++ 3, + ] `; exports[`toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1]) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Array [ -+ 1, - 2, - 3, -- 1, - ]" + Array [ ++ 1, + 2, + 3, +- 1, + ] `; exports[`toMatchObject() {pass: false} expect([1, 2]).toMatchObject([1, 3]) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Array [ - 1, -- 3, -+ 2, - ]" + Array [ + 1, +- 3, ++ 2, + ] `; exports[`toMatchObject() {pass: false} expect([Error: foo]).toMatchObject([Error: bar]) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Expected: [Error: bar] -Received: [Error: foo]" +Expected: [Error: bar] +Received: [Error: foo] `; exports[`toMatchObject() {pass: false} expect({"a": "a", "c": "d"}).toMatchObject({"a": Any}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": Any, -+ \\"a\\": \\"a\\", - }" + Object { +- "a": Any, ++ "a": "a", + } `; exports[`toMatchObject() {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b!", "c": "d"}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": \\"b!\\", -+ \\"a\\": \\"b\\", - \\"c\\": \\"d\\", - }" + Object { +- "a": "b!", ++ "a": "b", + "c": "d", + } `; exports[`toMatchObject() {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"e": "b"}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"e\\": \\"b\\", -+ \\"a\\": \\"b\\", -+ \\"c\\": \\"d\\", - }" + Object { +- "e": "b", ++ "a": "b", ++ "c": "d", + } `; exports[`toMatchObject() {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": [3]}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"a\\": \\"b\\", - \\"t\\": Object { -- \\"z\\": Array [ -- 3, -- ], -+ \\"z\\": \\"z\\", - }, - }" + Object { + "a": "b", + "t": Object { +- "z": Array [ +- 3, +- ], ++ "z": "z", + }, + } `; exports[`toMatchObject() {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"l": {"r": "r"}}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"t\\": Object { -- \\"l\\": Object { -+ \\"x\\": Object { - \\"r\\": \\"r\\", - }, -+ \\"z\\": \\"z\\", - }, - }" + Object { + "t": Object { +- "l": Object { ++ "x": Object { + "r": "r", + }, ++ "z": "z", + }, + } `; exports[`toMatchObject() {pass: false} expect({"a": "b"}).toMatchObject({"c": "d"}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"c\\": \\"d\\", -+ \\"a\\": \\"b\\", - }" + Object { +- "c": "d", ++ "a": "b", + } `; exports[`toMatchObject() {pass: false} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "c"}]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"a\\": Array [ - Object { -- \\"a\\": \\"c\\", -+ \\"a\\": \\"a\\", - }, - ], - }" + Object { + "a": Array [ + Object { +- "a": "c", ++ "a": "a", + }, + ], + } `; exports[`toMatchObject() {pass: false} expect({"a": [3, 4, "v"], "b": "b"}).toMatchObject({"a": ["v"]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"a\\": Array [ -+ 3, -+ 4, - \\"v\\", - ], - }" + Object { + "a": Array [ ++ 3, ++ 4, + "v", + ], + } `; exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5, 6]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"a\\": Array [ - 3, - 4, - 5, -- 6, - ], - }" + Object { + "a": Array [ + 3, + 4, + 5, +- 6, + ], + } `; exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"a\\": Array [ - 3, - 4, -+ 5, - ], - }" + Object { + "a": Array [ + 3, + 4, ++ 5, + ], + } `; exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": 4}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": Object { -- \\"b\\": 4, -- }, -+ \\"a\\": Array [ -+ 3, -+ 4, -+ 5, -+ ], - }" + Object { +- "a": Object { +- "b": 4, +- }, ++ "a": Array [ ++ 3, ++ 4, ++ 5, ++ ], + } `; exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": Any}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": Object { -- \\"b\\": Any, -- }, -+ \\"a\\": Array [ -+ 3, -+ 4, -+ 5, -+ ], - }" + Object { +- "a": Object { +- "b": Any, +- }, ++ "a": Array [ ++ 3, ++ 4, ++ 5, ++ ], + } `; exports[`toMatchObject() {pass: false} expect({"a": 1, "b": 1, "c": 1, "d": {"e": {"f": 555}}}).toMatchObject({"d": {"e": {"f": 222}}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"d\\": Object { - \\"e\\": Object { -- \\"f\\": 222, -+ \\"f\\": 555, - }, - }, - }" + Object { + "d": Object { + "e": Object { +- "f": 222, ++ "f": 555, + }, + }, + } `; exports[`toMatchObject() {pass: false} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-10-10T00:00:00.000Z}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": 2015-10-10T00:00:00.000Z, -+ \\"a\\": 2015-11-30T00:00:00.000Z, - }" + Object { +- "a": 2015-10-10T00:00:00.000Z, ++ "a": 2015-11-30T00:00:00.000Z, + } `; exports[`toMatchObject() {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": "4"}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": \\"4\\", -+ \\"a\\": null, - }" + Object { +- "a": "4", ++ "a": null, + } `; exports[`toMatchObject() {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": undefined}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": undefined, -+ \\"a\\": null, - }" + Object { +- "a": undefined, ++ "a": null, + } `; exports[`toMatchObject() {pass: false} expect({"a": undefined}).toMatchObject({"a": null}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": null, -+ \\"a\\": undefined, - }" + Object { +- "a": null, ++ "a": undefined, + } `; exports[`toMatchObject() {pass: false} expect({}).toMatchObject({"a": undefined}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received -- Object { -- \\"a\\": undefined, -- } -+ Object {}" +- Object { +- "a": undefined, +- } ++ Object {} `; exports[`toMatchObject() {pass: false} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-10-10T00:00:00.000Z) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Expected: 2015-10-10T00:00:00.000Z -Received: 2015-11-30T00:00:00.000Z" +Expected: 2015-10-10T00:00:00.000Z +Received: 2015-11-30T00:00:00.000Z `; exports[`toMatchObject() {pass: false} expect(Set {1, 2}).toMatchObject(Set {2}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Set { -+ 1, - 2, - }" + Set { ++ 1, + 2, + } `; exports[`toMatchObject() {pass: true} expect([]).toMatchObject([]) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not []" +Expected: not [] `; exports[`toMatchObject() {pass: true} expect([1, 2]).toMatchObject([1, 2]) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not [1, 2]" +Expected: not [1, 2] `; exports[`toMatchObject() {pass: true} expect([Error: bar]).toMatchObject({"message": "bar"}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"message\\": \\"bar\\"} -Received: [Error: bar]" +Expected: not {"message": "bar"} +Received: [Error: bar] `; exports[`toMatchObject() {pass: true} expect([Error: foo]).toMatchObject([Error: foo]) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not [Error: foo]" +Expected: not [Error: foo] `; exports[`toMatchObject() {pass: true} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b", "c": "d"}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": \\"b\\", \\"c\\": \\"d\\"}" +Expected: not {"a": "b", "c": "d"} `; exports[`toMatchObject() {pass: true} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b"}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": \\"b\\"} -Received: {\\"a\\": \\"b\\", \\"c\\": \\"d\\"}" +Expected: not {"a": "b"} +Received: {"a": "b", "c": "d"} `; exports[`toMatchObject() {pass: true} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": "z"}}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": \\"b\\", \\"t\\": {\\"z\\": \\"z\\"}} -Received: {\\"a\\": \\"b\\", \\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}, \\"z\\": \\"z\\"}}" +Expected: not {"a": "b", "t": {"z": "z"}} +Received: {"a": "b", "t": {"x": {"r": "r"}, "z": "z"}} `; exports[`toMatchObject() {pass: true} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"x": {"r": "r"}}}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}}} -Received: {\\"a\\": \\"b\\", \\"t\\": {\\"x\\": {\\"r\\": \\"r\\"}, \\"z\\": \\"z\\"}}" +Expected: not {"t": {"x": {"r": "r"}}} +Received: {"a": "b", "t": {"x": {"r": "r"}, "z": "z"}} `; exports[`toMatchObject() {pass: true} expect({"a": "b"}).toMatchObject({"a": "b"}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": \\"b\\"}" +Expected: not {"a": "b"} `; exports[`toMatchObject() {pass: true} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "a"}]}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": [{\\"a\\": \\"a\\"}]} -Received: {\\"a\\": [{\\"a\\": \\"a\\", \\"b\\": \\"b\\"}]}" +Expected: not {"a": [{"a": "a"}]} +Received: {"a": [{"a": "a", "b": "b"}]} `; exports[`toMatchObject() {pass: true} expect({"a": [3, 4, 5, "v"], "b": "b"}).toMatchObject({"a": [3, 4, 5, "v"]}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": [3, 4, 5, \\"v\\"]} -Received: {\\"a\\": [3, 4, 5, \\"v\\"], \\"b\\": \\"b\\"}" +Expected: not {"a": [3, 4, 5, "v"]} +Received: {"a": [3, 4, 5, "v"], "b": "b"} `; exports[`toMatchObject() {pass: true} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5]}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": [3, 4, 5]} -Received: {\\"a\\": [3, 4, 5], \\"b\\": \\"b\\"}" +Expected: not {"a": [3, 4, 5]} +Received: {"a": [3, 4, 5], "b": "b"} `; exports[`toMatchObject() {pass: true} expect({"a": {"x": "x", "y": "y"}}).toMatchObject({"a": {"x": Any}}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": {\\"x\\": Any}} -Received: {\\"a\\": {\\"x\\": \\"x\\", \\"y\\": \\"y\\"}}" +Expected: not {"a": {"x": Any}} +Received: {"a": {"x": "x", "y": "y"}} `; exports[`toMatchObject() {pass: true} expect({"a": 1, "c": 2}).toMatchObject({"a": Any}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": Any} -Received: {\\"a\\": 1, \\"c\\": 2}" +Expected: not {"a": Any} +Received: {"a": 1, "c": 2} `; exports[`toMatchObject() {pass: true} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-11-30T00:00:00.000Z}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": 2015-11-30T00:00:00.000Z} -Received: {\\"a\\": 2015-11-30T00:00:00.000Z, \\"b\\": \\"b\\"}" +Expected: not {"a": 2015-11-30T00:00:00.000Z} +Received: {"a": 2015-11-30T00:00:00.000Z, "b": "b"} `; exports[`toMatchObject() {pass: true} expect({"a": null, "b": "b"}).toMatchObject({"a": null}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": null} -Received: {\\"a\\": null, \\"b\\": \\"b\\"}" +Expected: not {"a": null} +Received: {"a": null, "b": "b"} `; exports[`toMatchObject() {pass: true} expect({"a": undefined, "b": "b"}).toMatchObject({"a": undefined}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": undefined} -Received: {\\"a\\": undefined, \\"b\\": \\"b\\"}" +Expected: not {"a": undefined} +Received: {"a": undefined, "b": "b"} `; exports[`toMatchObject() {pass: true} expect({"a": undefined}).toMatchObject({"a": undefined}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": undefined}" +Expected: not {"a": undefined} `; exports[`toMatchObject() {pass: true} expect({}).toMatchObject({"a": undefined, "b": "b"}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": undefined, \\"b\\": \\"b\\"} -Received: {}" +Expected: not {"a": undefined, "b": "b"} +Received: {} `; exports[`toMatchObject() {pass: true} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-11-30T00:00:00.000Z) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not 2015-11-30T00:00:00.000Z" +Expected: not 2015-11-30T00:00:00.000Z `; exports[`toMatchObject() {pass: true} expect(Set {1, 2}).toMatchObject(Set {1, 2}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not Set {1, 2}" +Expected: not Set {1, 2} `; exports[`toMatchObject() {pass: true} expect(Set {1, 2}).toMatchObject(Set {2, 1}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not Set {2, 1} -Received: Set {1, 2}" +Expected: not Set {2, 1} +Received: Set {1, 2} `; exports[`toMatchObject() circular references simple circular references {pass: false} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "world", "ref": [Circular]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": \\"world\\", -+ \\"a\\": \\"hello\\", - \\"ref\\": [Circular], - }" + Object { +- "a": "world", ++ "a": "hello", + "ref": [Circular], + } `; exports[`toMatchObject() circular references simple circular references {pass: false} expect({"ref": "not a ref"}).toMatchObject({"a": "hello", "ref": [Circular]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": \\"hello\\", -- \\"ref\\": [Circular], -+ \\"ref\\": \\"not a ref\\", - }" + Object { +- "a": "hello", +- "ref": [Circular], ++ "ref": "not a ref", + } `; exports[`toMatchObject() circular references simple circular references {pass: false} expect({}).toMatchObject({"a": "hello", "ref": [Circular]}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received -- Object { -- \\"a\\": \\"hello\\", -- \\"ref\\": [Circular], -- } -+ Object {}" +- Object { +- "a": "hello", +- "ref": [Circular], +- } ++ Object {} `; exports[`toMatchObject() circular references simple circular references {pass: true} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "hello", "ref": [Circular]}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": \\"hello\\", \\"ref\\": [Circular]}" +Expected: not {"a": "hello", "ref": [Circular]} `; exports[`toMatchObject() circular references simple circular references {pass: true} expect({"a": "hello", "ref": [Circular]}).toMatchObject({}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {} -Received: {\\"a\\": \\"hello\\", \\"ref\\": [Circular]}" +Expected: not {} +Received: {"a": "hello", "ref": [Circular]} `; exports[`toMatchObject() circular references transitive circular references {pass: false} expect({"a": "world", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": \\"hello\\", -+ \\"a\\": \\"world\\", - \\"nestedObj\\": Object { - \\"parentObj\\": [Circular], - }, - }" + Object { +- "a": "hello", ++ "a": "world", + "nestedObj": Object { + "parentObj": [Circular], + }, + } `; exports[`toMatchObject() circular references transitive circular references {pass: false} expect({"nestedObj": {"parentObj": "not the parent ref"}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { -- \\"a\\": \\"hello\\", - \\"nestedObj\\": Object { -- \\"parentObj\\": [Circular], -+ \\"parentObj\\": \\"not the parent ref\\", - }, - }" + Object { +- "a": "hello", + "nestedObj": Object { +- "parentObj": [Circular], ++ "parentObj": "not the parent ref", + }, + } `; exports[`toMatchObject() circular references transitive circular references {pass: false} expect({}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received -- Object { -- \\"a\\": \\"hello\\", -- \\"nestedObj\\": Object { -- \\"parentObj\\": [Circular], -- }, -- } -+ Object {}" +- Object { +- "a": "hello", +- "nestedObj": Object { +- "parentObj": [Circular], +- }, +- } ++ Object {} `; exports[`toMatchObject() circular references transitive circular references {pass: true} expect({"a": "hello", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}}" +Expected: not {"a": "hello", "nestedObj": {"parentObj": [Circular]}} `; exports[`toMatchObject() circular references transitive circular references {pass: true} expect({"a": "hello", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({}) 1`] = ` -"expect(received).not.toMatchObject(expected) +expect(received).not.toMatchObject(expected) -Expected: not {} -Received: {\\"a\\": \\"hello\\", \\"nestedObj\\": {\\"parentObj\\": [Circular]}}" +Expected: not {} +Received: {"a": "hello", "nestedObj": {"parentObj": [Circular]}} `; exports[`toMatchObject() does not match properties up in the prototype chain 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected ++ Received - Object { - \\"other\\": \\"child\\", -- \\"ref\\": [Circular], - }" + Object { + "other": "child", +- "ref": [Circular], + } `; exports[`toMatchObject() throws expect("44").toMatchObject({}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: received value must be a non-null object +Matcher error: received value must be a non-null object Received has type: string -Received has value: \\"44\\"" +Received has value: "44" `; exports[`toMatchObject() throws expect({}).toMatchObject("some string") 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: expected value must be a non-null object +Matcher error: expected value must be a non-null object Expected has type: string -Expected has value: \\"some string\\"" +Expected has value: "some string" `; exports[`toMatchObject() throws expect({}).toMatchObject(4) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: expected value must be a non-null object +Matcher error: expected value must be a non-null object Expected has type: number -Expected has value: 4" +Expected has value: 4 `; exports[`toMatchObject() throws expect({}).toMatchObject(null) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: expected value must be a non-null object +Matcher error: expected value must be a non-null object -Expected has value: null" +Expected has value: null `; exports[`toMatchObject() throws expect({}).toMatchObject(true) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: expected value must be a non-null object +Matcher error: expected value must be a non-null object Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toMatchObject() throws expect({}).toMatchObject(undefined) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: expected value must be a non-null object +Matcher error: expected value must be a non-null object -Expected has value: undefined" +Expected has value: undefined `; exports[`toMatchObject() throws expect(4).toMatchObject({}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: received value must be a non-null object +Matcher error: received value must be a non-null object Received has type: number -Received has value: 4" +Received has value: 4 `; exports[`toMatchObject() throws expect(null).toMatchObject({}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: received value must be a non-null object +Matcher error: received value must be a non-null object -Received has value: null" +Received has value: null `; exports[`toMatchObject() throws expect(true).toMatchObject({}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: received value must be a non-null object +Matcher error: received value must be a non-null object Received has type: boolean -Received has value: true" +Received has value: true `; exports[`toMatchObject() throws expect(undefined).toMatchObject({}) 1`] = ` -"expect(received).toMatchObject(expected) +expect(received).toMatchObject(expected) -Matcher error: received value must be a non-null object +Matcher error: received value must be a non-null object -Received has value: undefined" +Received has value: undefined `; diff --git a/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap index 5236afb7b8d8..a4ae10ac4328 100644 --- a/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap @@ -1,2877 +1,2877 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`lastCalledWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.lastCalledWith(...expected) +expect(named-mock).not.lastCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works only on spies or jest.fn 1`] = ` -"expect(received).lastCalledWith(...expected) +expect(received).lastCalledWith(...expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`lastCalledWith works when not called 1`] = ` -"expect(jest.fn()).lastCalledWith(...expected) +expect(jest.fn()).lastCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" -Number of calls: 0" +Number of calls: 0 `; exports[`lastCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.lastCalledWith(...expected) +expect(jest.fn()).not.lastCalledWith(...expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.lastCalledWith(...expected) +expect(jest.fn()).not.lastCalledWith(...expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with Map 2`] = ` -"expect(jest.fn()).lastCalledWith(...expected) +expect(jest.fn()).lastCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Map { -- \\"a\\" => \\"b\\", -- \\"b\\" => \\"a\\", -+ 1 => 2, -+ 2 => 1, - }, + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.lastCalledWith(...expected) +expect(jest.fn()).not.lastCalledWith(...expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with Set 2`] = ` -"expect(jest.fn()).lastCalledWith(...expected) +expect(jest.fn()).lastCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Set { -- 3, -- 4, -+ 1, -+ 2, - }, + Set { +- 3, +- 4, ++ 1, ++ 2, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).lastCalledWith(...expected) +expect(jest.fn()).lastCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" -Received: \\"foo\\", \\"bar1\\" +Expected: "foo", "bar" +Received: "foo", "bar1" -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.lastCalledWith(...expected) +expect(jest.fn()).not.lastCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`lastCalledWith works with many arguments 1`] = ` -"expect(jest.fn()).not.lastCalledWith(...expected) +expect(jest.fn()).not.lastCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" Received - 2: \\"foo\\", \\"bar1\\" --> 3: \\"foo\\", \\"bar\\" + 2: "foo", "bar1" +-> 3: "foo", "bar" -Number of calls: 3" +Number of calls: 3 `; exports[`lastCalledWith works with many arguments that don't match 1`] = ` -"expect(jest.fn()).lastCalledWith(...expected) +expect(jest.fn()).lastCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" Received - 2: \\"foo\\", \\"bar2\\" --> 3: \\"foo\\", \\"bar3\\" + 2: "foo", "bar2" +-> 3: "foo", "bar3" -Number of calls: 3" +Number of calls: 3 `; exports[`lastCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).lastCalledWith(...expected) +expect(jest.fn()).lastCalledWith(...expected) -Expected: \\"foo\\" -Received: \\"foo\\", undefined +Expected: "foo" +Received: "foo", undefined -Number of calls: 1" +Number of calls: 1 `; exports[`lastReturnedWith a call that throws is not considered to have returned 1`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`lastReturnedWith a call that throws undefined is not considered to have returned 1`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`lastReturnedWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).lastReturnedWith(expected) +expect(named-mock).lastReturnedWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`lastReturnedWith lastReturnedWith incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: 0 +Expected: 0 Received 3: function call has not returned yet -> 4: function call has not returned yet -Number of returns: 0 -Number of calls: 4" +Number of returns: 0 +Number of calls: 4 `; exports[`lastReturnedWith lastReturnedWith works with three calls 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not \\"foo3\\" +Expected: not "foo3" Received - 2: \\"foo2\\" --> 3: \\"foo3\\" + 2: "foo2" +-> 3: "foo3" -Number of returns: 3" +Number of returns: 3 `; exports[`lastReturnedWith works only on spies or jest.fn 1`] = ` -"expect(received).lastReturnedWith(expected) +expect(received).lastReturnedWith(expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`lastReturnedWith works when not called 1`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`lastReturnedWith works with Immutable.js objects directly created 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with Immutable.js objects indirectly created 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with Map 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with Map 2`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} -Received: Map {1 => 2, 2 => 1} +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with Set 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with Set 2`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: Set {3, 4} -Received: Set {1, 2} +Expected: Set {3, 4} +Received: Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with argument that does match 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not \\"foo\\" +Expected: not "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with argument that does not match 1`] = ` -"expect(jest.fn()).lastReturnedWith(expected) +expect(jest.fn()).lastReturnedWith(expected) -Expected: \\"bar\\" -Received: \\"foo\\" +Expected: "bar" +Received: "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`lastReturnedWith works with undefined 1`] = ` -"expect(jest.fn()).not.lastReturnedWith(expected) +expect(jest.fn()).not.lastReturnedWith(expected) -Expected: not undefined +Expected: not undefined -Number of returns: 1" +Number of returns: 1 `; exports[`nthCalledWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.nthCalledWith(n, ...expected) +expect(named-mock).not.nthCalledWith(n, ...expected) n: 1 -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith negative throw matcher error for n that is not integer 1`] = ` -"expect(received).not.nthCalledWith(n, ...expected) +expect(received).not.nthCalledWith(n, ...expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: Infinity" +n has value: Infinity `; exports[`nthCalledWith positive throw matcher error for n that is not integer 1`] = ` -"expect(received).nthCalledWith(n, ...expected) +expect(received).nthCalledWith(n, ...expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0.1" +n has value: 0.1 `; exports[`nthCalledWith positive throw matcher error for n that is not positive integer 1`] = ` -"expect(received).nthCalledWith(n, ...expected) +expect(received).nthCalledWith(n, ...expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0" +n has value: 0 `; exports[`nthCalledWith works only on spies or jest.fn 1`] = ` -"expect(received).nthCalledWith(n, ...expected) +expect(received).nthCalledWith(n, ...expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`nthCalledWith works when not called 1`] = ` -"expect(jest.fn()).nthCalledWith(n, ...expected) +expect(jest.fn()).nthCalledWith(n, ...expected) n: 1 -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" -Number of calls: 0" +Number of calls: 0 `; exports[`nthCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.nthCalledWith(n, ...expected) +expect(jest.fn()).not.nthCalledWith(n, ...expected) n: 1 -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.nthCalledWith(n, ...expected) +expect(jest.fn()).not.nthCalledWith(n, ...expected) n: 1 -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with Map 2`] = ` -"expect(jest.fn()).nthCalledWith(n, ...expected) +expect(jest.fn()).nthCalledWith(n, ...expected) n: 1 -- Expected -+ Received +- Expected ++ Received - Map { -- \\"a\\" => \\"b\\", -- \\"b\\" => \\"a\\", -+ 1 => 2, -+ 2 => 1, - }, + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.nthCalledWith(n, ...expected) +expect(jest.fn()).not.nthCalledWith(n, ...expected) n: 1 -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with Set 2`] = ` -"expect(jest.fn()).nthCalledWith(n, ...expected) +expect(jest.fn()).nthCalledWith(n, ...expected) n: 1 -- Expected -+ Received +- Expected ++ Received - Set { -- 3, -- 4, -+ 1, -+ 2, - }, + Set { +- 3, +- 4, ++ 1, ++ 2, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).nthCalledWith(n, ...expected) +expect(jest.fn()).nthCalledWith(n, ...expected) n: 1 -Expected: \\"foo\\", \\"bar\\" -Received: \\"foo\\", \\"bar1\\" +Expected: "foo", "bar" +Received: "foo", "bar1" -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.nthCalledWith(n, ...expected) +expect(jest.fn()).not.nthCalledWith(n, ...expected) n: 1 -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`nthCalledWith works with three calls 1`] = ` -"expect(jest.fn()).not.nthCalledWith(n, ...expected) +expect(jest.fn()).not.nthCalledWith(n, ...expected) n: 1 -Expected: not \\"foo1\\", \\"bar\\" +Expected: not "foo1", "bar" Received --> 1: \\"foo1\\", \\"bar\\" - 2: \\"foo\\", \\"bar1\\" +-> 1: "foo1", "bar" + 2: "foo", "bar1" -Number of calls: 3" +Number of calls: 3 `; exports[`nthCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).nthCalledWith(n, ...expected) +expect(jest.fn()).nthCalledWith(n, ...expected) n: 1 -Expected: \\"foo\\" -Received: \\"foo\\", undefined +Expected: "foo" +Received: "foo", undefined -Number of calls: 1" +Number of calls: 1 `; exports[`nthReturnedWith a call that throws is not considered to have returned 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`nthReturnedWith a call that throws undefined is not considered to have returned 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`nthReturnedWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).nthReturnedWith(n, expected) +expect(named-mock).nthReturnedWith(n, expected) n: 1 -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: 6 +Expected: 6 Received -> 1: function call has not returned yet 2: function call has not returned yet -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 2`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 2 -Expected: 3 +Expected: 3 Received 1: function call has not returned yet -> 2: function call has not returned yet - 3: 1 + 3: 1 -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 3`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 3 -Expected: not 1 +Expected: not 1 Received 2: function call has not returned yet --> 3: 1 - 4: 0 +-> 3: 1 + 4: 0 -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 4`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 4 -Expected: not 0 +Expected: not 0 Received - 3: 1 --> 4: 0 + 3: 1 +-> 4: 0 -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`nthReturnedWith nthReturnedWith negative throw matcher error for n that is not number 1`] = ` -"expect(received).not.nthReturnedWith(n, expected) +expect(received).not.nthReturnedWith(n, expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer -n has value: undefined" +n has value: undefined `; exports[`nthReturnedWith nthReturnedWith positive throw matcher error for n that is not integer 1`] = ` -"expect(received).nthReturnedWith(n, expected) +expect(received).nthReturnedWith(n, expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0.1" +n has value: 0.1 `; exports[`nthReturnedWith nthReturnedWith positive throw matcher error for n that is not positive integer 1`] = ` -"expect(received).nthReturnedWith(n, expected) +expect(received).nthReturnedWith(n, expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0" +n has value: 0 `; exports[`nthReturnedWith nthReturnedWith should reject nth value greater than number of calls 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 4 -Expected: \\"foo\\" +Expected: "foo" Received - 3: \\"foo\\" + 3: "foo" -Number of returns: 3" +Number of returns: 3 `; exports[`nthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: \\"bar1\\" +Expected: "bar1" Received --> 1: \\"foo1\\" - 2: \\"foo2\\" +-> 1: "foo1" + 2: "foo2" -Number of returns: 3" +Number of returns: 3 `; exports[`nthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third 2`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not \\"foo1\\" +Expected: not "foo1" Received --> 1: \\"foo1\\" - 2: \\"foo2\\" +-> 1: "foo1" + 2: "foo2" -Number of returns: 3" +Number of returns: 3 `; exports[`nthReturnedWith nthReturnedWith works with three calls 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not \\"foo1\\" +Expected: not "foo1" Received --> 1: \\"foo1\\" - 2: \\"foo2\\" +-> 1: "foo1" + 2: "foo2" -Number of returns: 3" +Number of returns: 3 `; exports[`nthReturnedWith works only on spies or jest.fn 1`] = ` -"expect(received).nthReturnedWith(n, expected) +expect(received).nthReturnedWith(n, expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`nthReturnedWith works when not called 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`nthReturnedWith works with Immutable.js objects directly created 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with Immutable.js objects indirectly created 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with Map 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with Map 2`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} -Received: Map {1 => 2, 2 => 1} +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with Set 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with Set 2`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: Set {3, 4} -Received: Set {1, 2} +Expected: Set {3, 4} +Received: Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with argument that does match 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not \\"foo\\" +Expected: not "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with argument that does not match 1`] = ` -"expect(jest.fn()).nthReturnedWith(n, expected) +expect(jest.fn()).nthReturnedWith(n, expected) n: 1 -Expected: \\"bar\\" -Received: \\"foo\\" +Expected: "bar" +Received: "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`nthReturnedWith works with undefined 1`] = ` -"expect(jest.fn()).not.nthReturnedWith(n, expected) +expect(jest.fn()).not.nthReturnedWith(n, expected) n: 1 -Expected: not undefined +Expected: not undefined -Number of returns: 1" +Number of returns: 1 `; exports[`toBeCalled .not fails with any argument passed 1`] = ` -"expect(received).not.toBeCalled() +expect(received).not.toBeCalled() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toBeCalled .not passes when called 1`] = ` -"expect(spy).toBeCalled() +expect(spy).toBeCalled() -Expected number of calls: >= 1 -Received number of calls: 0" +Expected number of calls: >= 1 +Received number of calls: 0 `; exports[`toBeCalled fails with any argument passed 1`] = ` -"expect(received).toBeCalled() +expect(received).toBeCalled() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toBeCalled includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toBeCalled() +expect(named-mock).not.toBeCalled() -Expected number of calls: 0 -Received number of calls: 1 +Expected number of calls: 0 +Received number of calls: 1 -1: called with 0 arguments" +1: called with 0 arguments `; exports[`toBeCalled passes when called 1`] = ` -"expect(jest.fn()).not.toBeCalled() +expect(jest.fn()).not.toBeCalled() -Expected number of calls: 0 -Received number of calls: 1 +Expected number of calls: 0 +Received number of calls: 1 -1: \\"arg0\\", \\"arg1\\", \\"arg2\\"" +1: "arg0", "arg1", "arg2" `; exports[`toBeCalled works only on spies or jest.fn 1`] = ` -"expect(received).toBeCalled() +expect(received).toBeCalled() -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toBeCalledTimes .not only accepts a number argument 1`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toBeCalledTimes .not only accepts a number argument 2`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toBeCalledTimes .not only accepts a number argument 3`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toBeCalledTimes .not only accepts a number argument 4`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toBeCalledTimes .not only accepts a number argument 5`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toBeCalledTimes .not only accepts a number argument 6`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toBeCalledTimes .not passes if function called less than expected times 1`] = ` -"expect(jest.fn()).toBeCalledTimes(expected) +expect(jest.fn()).toBeCalledTimes(expected) -Expected number of calls: 2 -Received number of calls: 1" +Expected number of calls: 2 +Received number of calls: 1 `; exports[`toBeCalledTimes .not passes if function called more than expected times 1`] = ` -"expect(jest.fn()).toBeCalledTimes(expected) +expect(jest.fn()).toBeCalledTimes(expected) -Expected number of calls: 2 -Received number of calls: 3" +Expected number of calls: 2 +Received number of calls: 3 `; exports[`toBeCalledTimes .not works only on spies or jest.fn 1`] = ` -"expect(received).not.toBeCalledTimes(expected) +expect(received).not.toBeCalledTimes(expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toBeCalledTimes includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toBeCalledTimes(expected) +expect(named-mock).toBeCalledTimes(expected) -Expected number of calls: 2 -Received number of calls: 1" +Expected number of calls: 2 +Received number of calls: 1 `; exports[`toBeCalledTimes only accepts a number argument 1`] = ` -"expect(received).toBeCalledTimes(expected) +expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toBeCalledTimes only accepts a number argument 2`] = ` -"expect(received).toBeCalledTimes(expected) +expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toBeCalledTimes only accepts a number argument 3`] = ` -"expect(received).toBeCalledTimes(expected) +expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toBeCalledTimes only accepts a number argument 4`] = ` -"expect(received).toBeCalledTimes(expected) +expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toBeCalledTimes only accepts a number argument 5`] = ` -"expect(received).toBeCalledTimes(expected) +expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toBeCalledTimes only accepts a number argument 6`] = ` -"expect(received).toBeCalledTimes(expected) +expect(received).toBeCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toBeCalledTimes passes if function called equal to expected times 1`] = ` -"expect(spy).not.toBeCalledTimes(expected) +expect(spy).not.toBeCalledTimes(expected) -Expected number of calls: not 2" +Expected number of calls: not 2 `; exports[`toBeCalledWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toBeCalledWith(...expected) +expect(named-mock).not.toBeCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works only on spies or jest.fn 1`] = ` -"expect(received).toBeCalledWith(...expected) +expect(received).toBeCalledWith(...expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toBeCalledWith works when not called 1`] = ` -"expect(jest.fn()).toBeCalledWith(...expected) +expect(jest.fn()).toBeCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" -Number of calls: 0" +Number of calls: 0 `; exports[`toBeCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.toBeCalledWith(...expected) +expect(jest.fn()).not.toBeCalledWith(...expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.toBeCalledWith(...expected) +expect(jest.fn()).not.toBeCalledWith(...expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with Map 2`] = ` -"expect(jest.fn()).toBeCalledWith(...expected) +expect(jest.fn()).toBeCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Map { -- \\"a\\" => \\"b\\", -- \\"b\\" => \\"a\\", -+ 1 => 2, -+ 2 => 1, - }, + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.toBeCalledWith(...expected) +expect(jest.fn()).not.toBeCalledWith(...expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with Set 2`] = ` -"expect(jest.fn()).toBeCalledWith(...expected) +expect(jest.fn()).toBeCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Set { -- 3, -- 4, -+ 1, -+ 2, - }, + Set { +- 3, +- 4, ++ 1, ++ 2, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).toBeCalledWith(...expected) +expect(jest.fn()).toBeCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" -Received: \\"foo\\", \\"bar1\\" +Expected: "foo", "bar" +Received: "foo", "bar1" -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.toBeCalledWith(...expected) +expect(jest.fn()).not.toBeCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toBeCalledWith works with many arguments 1`] = ` -"expect(jest.fn()).not.toBeCalledWith(...expected) +expect(jest.fn()).not.toBeCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" Received - 3: \\"foo\\", \\"bar\\" + 3: "foo", "bar" -Number of calls: 3" +Number of calls: 3 `; exports[`toBeCalledWith works with many arguments that don't match 1`] = ` -"expect(jest.fn()).toBeCalledWith(...expected) +expect(jest.fn()).toBeCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" Received - 1: \\"foo\\", \\"bar1\\" - 2: \\"foo\\", \\"bar2\\" - 3: \\"foo\\", \\"bar3\\" + 1: "foo", "bar1" + 2: "foo", "bar2" + 3: "foo", "bar3" -Number of calls: 3" +Number of calls: 3 `; exports[`toBeCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).toBeCalledWith(...expected) +expect(jest.fn()).toBeCalledWith(...expected) -Expected: \\"foo\\" -Received: \\"foo\\", undefined +Expected: "foo" +Received: "foo", undefined -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalled .not fails with any argument passed 1`] = ` -"expect(received).not.toHaveBeenCalled() +expect(received).not.toHaveBeenCalled() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toHaveBeenCalled .not passes when called 1`] = ` -"expect(spy).toHaveBeenCalled() +expect(spy).toHaveBeenCalled() -Expected number of calls: >= 1 -Received number of calls: 0" +Expected number of calls: >= 1 +Received number of calls: 0 `; exports[`toHaveBeenCalled fails with any argument passed 1`] = ` -"expect(received).toHaveBeenCalled() +expect(received).toHaveBeenCalled() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toHaveBeenCalled includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toHaveBeenCalled() +expect(named-mock).not.toHaveBeenCalled() -Expected number of calls: 0 -Received number of calls: 1 +Expected number of calls: 0 +Received number of calls: 1 -1: called with 0 arguments" +1: called with 0 arguments `; exports[`toHaveBeenCalled passes when called 1`] = ` -"expect(jest.fn()).not.toHaveBeenCalled() +expect(jest.fn()).not.toHaveBeenCalled() -Expected number of calls: 0 -Received number of calls: 1 +Expected number of calls: 0 +Received number of calls: 1 -1: \\"arg0\\", \\"arg1\\", \\"arg2\\"" +1: "arg0", "arg1", "arg2" `; exports[`toHaveBeenCalled works only on spies or jest.fn 1`] = ` -"expect(received).toHaveBeenCalled() +expect(received).toHaveBeenCalled() -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveBeenCalledTimes .not only accepts a number argument 1`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toHaveBeenCalledTimes .not only accepts a number argument 2`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toHaveBeenCalledTimes .not only accepts a number argument 3`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toHaveBeenCalledTimes .not only accepts a number argument 4`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toHaveBeenCalledTimes .not only accepts a number argument 5`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toHaveBeenCalledTimes .not only accepts a number argument 6`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toHaveBeenCalledTimes .not passes if function called less than expected times 1`] = ` -"expect(jest.fn()).toHaveBeenCalledTimes(expected) +expect(jest.fn()).toHaveBeenCalledTimes(expected) -Expected number of calls: 2 -Received number of calls: 1" +Expected number of calls: 2 +Received number of calls: 1 `; exports[`toHaveBeenCalledTimes .not passes if function called more than expected times 1`] = ` -"expect(jest.fn()).toHaveBeenCalledTimes(expected) +expect(jest.fn()).toHaveBeenCalledTimes(expected) -Expected number of calls: 2 -Received number of calls: 3" +Expected number of calls: 2 +Received number of calls: 3 `; exports[`toHaveBeenCalledTimes .not works only on spies or jest.fn 1`] = ` -"expect(received).not.toHaveBeenCalledTimes(expected) +expect(received).not.toHaveBeenCalledTimes(expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveBeenCalledTimes includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toHaveBeenCalledTimes(expected) +expect(named-mock).toHaveBeenCalledTimes(expected) -Expected number of calls: 2 -Received number of calls: 1" +Expected number of calls: 2 +Received number of calls: 1 `; exports[`toHaveBeenCalledTimes only accepts a number argument 1`] = ` -"expect(received).toHaveBeenCalledTimes(expected) +expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toHaveBeenCalledTimes only accepts a number argument 2`] = ` -"expect(received).toHaveBeenCalledTimes(expected) +expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toHaveBeenCalledTimes only accepts a number argument 3`] = ` -"expect(received).toHaveBeenCalledTimes(expected) +expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toHaveBeenCalledTimes only accepts a number argument 4`] = ` -"expect(received).toHaveBeenCalledTimes(expected) +expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toHaveBeenCalledTimes only accepts a number argument 5`] = ` -"expect(received).toHaveBeenCalledTimes(expected) +expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toHaveBeenCalledTimes only accepts a number argument 6`] = ` -"expect(received).toHaveBeenCalledTimes(expected) +expect(received).toHaveBeenCalledTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toHaveBeenCalledTimes passes if function called equal to expected times 1`] = ` -"expect(spy).not.toHaveBeenCalledTimes(expected) +expect(spy).not.toHaveBeenCalledTimes(expected) -Expected number of calls: not 2" +Expected number of calls: not 2 `; exports[`toHaveBeenCalledWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toHaveBeenCalledWith(...expected) +expect(named-mock).not.toHaveBeenCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works only on spies or jest.fn 1`] = ` -"expect(received).toHaveBeenCalledWith(...expected) +expect(received).toHaveBeenCalledWith(...expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveBeenCalledWith works when not called 1`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(...expected) +expect(jest.fn()).toHaveBeenCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" -Number of calls: 0" +Number of calls: 0 `; exports[`toHaveBeenCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenCalledWith(...expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenCalledWith(...expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with Map 2`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(...expected) +expect(jest.fn()).toHaveBeenCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Map { -- \\"a\\" => \\"b\\", -- \\"b\\" => \\"a\\", -+ 1 => 2, -+ 2 => 1, - }, + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenCalledWith(...expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with Set 2`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(...expected) +expect(jest.fn()).toHaveBeenCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Set { -- 3, -- 4, -+ 1, -+ 2, - }, + Set { +- 3, +- 4, ++ 1, ++ 2, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(...expected) +expect(jest.fn()).toHaveBeenCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" -Received: \\"foo\\", \\"bar1\\" +Expected: "foo", "bar" +Received: "foo", "bar1" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenCalledWith works with many arguments 1`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" Received - 3: \\"foo\\", \\"bar\\" + 3: "foo", "bar" -Number of calls: 3" +Number of calls: 3 `; exports[`toHaveBeenCalledWith works with many arguments that don't match 1`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(...expected) +expect(jest.fn()).toHaveBeenCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" Received - 1: \\"foo\\", \\"bar1\\" - 2: \\"foo\\", \\"bar2\\" - 3: \\"foo\\", \\"bar3\\" + 1: "foo", "bar1" + 2: "foo", "bar2" + 3: "foo", "bar3" -Number of calls: 3" +Number of calls: 3 `; exports[`toHaveBeenCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(...expected) +expect(jest.fn()).toHaveBeenCalledWith(...expected) -Expected: \\"foo\\" -Received: \\"foo\\", undefined +Expected: "foo" +Received: "foo", undefined -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toHaveBeenLastCalledWith(...expected) +expect(named-mock).not.toHaveBeenLastCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works only on spies or jest.fn 1`] = ` -"expect(received).toHaveBeenLastCalledWith(...expected) +expect(received).toHaveBeenLastCalledWith(...expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveBeenLastCalledWith works when not called 1`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).toHaveBeenLastCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" -Number of calls: 0" +Number of calls: 0 `; exports[`toHaveBeenLastCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with Map 2`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).toHaveBeenLastCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Map { -- \\"a\\" => \\"b\\", -- \\"b\\" => \\"a\\", -+ 1 => 2, -+ 2 => 1, - }, + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with Set 2`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).toHaveBeenLastCalledWith(...expected) -- Expected -+ Received +- Expected ++ Received - Set { -- 3, -- 4, -+ 1, -+ 2, - }, + Set { +- 3, +- 4, ++ 1, ++ 2, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).toHaveBeenLastCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" -Received: \\"foo\\", \\"bar1\\" +Expected: "foo", "bar" +Received: "foo", "bar1" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenLastCalledWith works with many arguments 1`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" Received - 2: \\"foo\\", \\"bar1\\" --> 3: \\"foo\\", \\"bar\\" + 2: "foo", "bar1" +-> 3: "foo", "bar" -Number of calls: 3" +Number of calls: 3 `; exports[`toHaveBeenLastCalledWith works with many arguments that don't match 1`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).toHaveBeenLastCalledWith(...expected) -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" Received - 2: \\"foo\\", \\"bar2\\" --> 3: \\"foo\\", \\"bar3\\" + 2: "foo", "bar2" +-> 3: "foo", "bar3" -Number of calls: 3" +Number of calls: 3 `; exports[`toHaveBeenLastCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(...expected) +expect(jest.fn()).toHaveBeenLastCalledWith(...expected) -Expected: \\"foo\\" -Received: \\"foo\\", undefined +Expected: "foo" +Received: "foo", undefined -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toHaveBeenNthCalledWith(n, ...expected) +expect(named-mock).not.toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith negative throw matcher error for n that is not integer 1`] = ` -"expect(received).not.toHaveBeenNthCalledWith(n, ...expected) +expect(received).not.toHaveBeenNthCalledWith(n, ...expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: Infinity" +n has value: Infinity `; exports[`toHaveBeenNthCalledWith positive throw matcher error for n that is not integer 1`] = ` -"expect(received).toHaveBeenNthCalledWith(n, ...expected) +expect(received).toHaveBeenNthCalledWith(n, ...expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0.1" +n has value: 0.1 `; exports[`toHaveBeenNthCalledWith positive throw matcher error for n that is not positive integer 1`] = ` -"expect(received).toHaveBeenNthCalledWith(n, ...expected) +expect(received).toHaveBeenNthCalledWith(n, ...expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0" +n has value: 0 `; exports[`toHaveBeenNthCalledWith works only on spies or jest.fn 1`] = ` -"expect(received).toHaveBeenNthCalledWith(n, ...expected) +expect(received).toHaveBeenNthCalledWith(n, ...expected) -Matcher error: received value must be a mock or spy function +Matcher error: received value must be a mock or spy function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveBeenNthCalledWith works when not called 1`] = ` -"expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: \\"foo\\", \\"bar\\" +Expected: "foo", "bar" -Number of calls: 0" +Number of calls: 0 `; exports[`toHaveBeenNthCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with Map 2`] = ` -"expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) n: 1 -- Expected -+ Received +- Expected ++ Received - Map { -- \\"a\\" => \\"b\\", -- \\"b\\" => \\"a\\", -+ 1 => 2, -+ 2 => 1, - }, + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with Set 2`] = ` -"expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) n: 1 -- Expected -+ Received +- Expected ++ Received - Set { -- 3, -- 4, -+ 1, -+ 2, - }, + Set { +- 3, +- 4, ++ 1, ++ 2, + }, -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: \\"foo\\", \\"bar\\" -Received: \\"foo\\", \\"bar1\\" +Expected: "foo", "bar" +Received: "foo", "bar1" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: not \\"foo\\", \\"bar\\" +Expected: not "foo", "bar" -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveBeenNthCalledWith works with three calls 1`] = ` -"expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: not \\"foo1\\", \\"bar\\" +Expected: not "foo1", "bar" Received --> 1: \\"foo1\\", \\"bar\\" - 2: \\"foo\\", \\"bar1\\" +-> 1: "foo1", "bar" + 2: "foo", "bar1" -Number of calls: 3" +Number of calls: 3 `; exports[`toHaveBeenNthCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) +expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) n: 1 -Expected: \\"foo\\" -Received: \\"foo\\", undefined +Expected: "foo" +Received: "foo", undefined -Number of calls: 1" +Number of calls: 1 `; exports[`toHaveLastReturnedWith a call that throws is not considered to have returned 1`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toHaveLastReturnedWith a call that throws undefined is not considered to have returned 1`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toHaveLastReturnedWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toHaveLastReturnedWith(expected) +expect(named-mock).toHaveLastReturnedWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toHaveLastReturnedWith lastReturnedWith incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: 0 +Expected: 0 Received 3: function call has not returned yet -> 4: function call has not returned yet -Number of returns: 0 -Number of calls: 4" +Number of returns: 0 +Number of calls: 4 `; exports[`toHaveLastReturnedWith lastReturnedWith works with three calls 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not \\"foo3\\" +Expected: not "foo3" Received - 2: \\"foo2\\" --> 3: \\"foo3\\" + 2: "foo2" +-> 3: "foo3" -Number of returns: 3" +Number of returns: 3 `; exports[`toHaveLastReturnedWith works only on spies or jest.fn 1`] = ` -"expect(received).toHaveLastReturnedWith(expected) +expect(received).toHaveLastReturnedWith(expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveLastReturnedWith works when not called 1`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toHaveLastReturnedWith works with Immutable.js objects directly created 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with Immutable.js objects indirectly created 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with Map 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with Map 2`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} -Received: Map {1 => 2, 2 => 1} +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with Set 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with Set 2`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: Set {3, 4} -Received: Set {1, 2} +Expected: Set {3, 4} +Received: Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with argument that does match 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not \\"foo\\" +Expected: not "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with argument that does not match 1`] = ` -"expect(jest.fn()).toHaveLastReturnedWith(expected) +expect(jest.fn()).toHaveLastReturnedWith(expected) -Expected: \\"bar\\" -Received: \\"foo\\" +Expected: "bar" +Received: "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveLastReturnedWith works with undefined 1`] = ` -"expect(jest.fn()).not.toHaveLastReturnedWith(expected) +expect(jest.fn()).not.toHaveLastReturnedWith(expected) -Expected: not undefined +Expected: not undefined -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith a call that throws is not considered to have returned 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toHaveNthReturnedWith a call that throws undefined is not considered to have returned 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toHaveNthReturnedWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toHaveNthReturnedWith(n, expected) +expect(named-mock).toHaveNthReturnedWith(n, expected) n: 1 -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: 6 +Expected: 6 Received -> 1: function call has not returned yet 2: function call has not returned yet -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 2`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 2 -Expected: 3 +Expected: 3 Received 1: function call has not returned yet -> 2: function call has not returned yet - 3: 1 + 3: 1 -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 3`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 3 -Expected: not 1 +Expected: not 1 Received 2: function call has not returned yet --> 3: 1 - 4: 0 +-> 3: 1 + 4: 0 -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly 4`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 4 -Expected: not 0 +Expected: not 0 Received - 3: 1 --> 4: 0 + 3: 1 +-> 4: 0 -Number of returns: 2 -Number of calls: 4" +Number of returns: 2 +Number of calls: 4 `; exports[`toHaveNthReturnedWith nthReturnedWith negative throw matcher error for n that is not number 1`] = ` -"expect(received).not.toHaveNthReturnedWith(n, expected) +expect(received).not.toHaveNthReturnedWith(n, expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer -n has value: undefined" +n has value: undefined `; exports[`toHaveNthReturnedWith nthReturnedWith positive throw matcher error for n that is not integer 1`] = ` -"expect(received).toHaveNthReturnedWith(n, expected) +expect(received).toHaveNthReturnedWith(n, expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0.1" +n has value: 0.1 `; exports[`toHaveNthReturnedWith nthReturnedWith positive throw matcher error for n that is not positive integer 1`] = ` -"expect(received).toHaveNthReturnedWith(n, expected) +expect(received).toHaveNthReturnedWith(n, expected) -Matcher error: n must be a positive integer +Matcher error: n must be a positive integer n has type: number -n has value: 0" +n has value: 0 `; exports[`toHaveNthReturnedWith nthReturnedWith should reject nth value greater than number of calls 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 4 -Expected: \\"foo\\" +Expected: "foo" Received - 3: \\"foo\\" + 3: "foo" -Number of returns: 3" +Number of returns: 3 `; exports[`toHaveNthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: \\"bar1\\" +Expected: "bar1" Received --> 1: \\"foo1\\" - 2: \\"foo2\\" +-> 1: "foo1" + 2: "foo2" -Number of returns: 3" +Number of returns: 3 `; exports[`toHaveNthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third 2`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not \\"foo1\\" +Expected: not "foo1" Received --> 1: \\"foo1\\" - 2: \\"foo2\\" +-> 1: "foo1" + 2: "foo2" -Number of returns: 3" +Number of returns: 3 `; exports[`toHaveNthReturnedWith nthReturnedWith works with three calls 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not \\"foo1\\" +Expected: not "foo1" Received --> 1: \\"foo1\\" - 2: \\"foo2\\" +-> 1: "foo1" + 2: "foo2" -Number of returns: 3" +Number of returns: 3 `; exports[`toHaveNthReturnedWith works only on spies or jest.fn 1`] = ` -"expect(received).toHaveNthReturnedWith(n, expected) +expect(received).toHaveNthReturnedWith(n, expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveNthReturnedWith works when not called 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toHaveNthReturnedWith works with Immutable.js objects directly created 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with Immutable.js objects indirectly created 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with Map 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with Map 2`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} -Received: Map {1 => 2, 2 => 1} +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with Set 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with Set 2`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: Set {3, 4} -Received: Set {1, 2} +Expected: Set {3, 4} +Received: Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with argument that does match 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not \\"foo\\" +Expected: not "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with argument that does not match 1`] = ` -"expect(jest.fn()).toHaveNthReturnedWith(n, expected) +expect(jest.fn()).toHaveNthReturnedWith(n, expected) n: 1 -Expected: \\"bar\\" -Received: \\"foo\\" +Expected: "bar" +Received: "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveNthReturnedWith works with undefined 1`] = ` -"expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) +expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) n: 1 -Expected: not undefined +Expected: not undefined -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturned .not fails with any argument passed 1`] = ` -"expect(received).not.toHaveReturned() +expect(received).not.toHaveReturned() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toHaveReturned .not passes when a call throws undefined 1`] = ` -"expect(jest.fn()).toHaveReturned() +expect(jest.fn()).toHaveReturned() -Expected number of returns: >= 1 -Received number of returns: 0 -Received number of calls: 1" +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 1 `; exports[`toHaveReturned .not passes when all calls throw 1`] = ` -"expect(jest.fn()).toHaveReturned() +expect(jest.fn()).toHaveReturned() -Expected number of returns: >= 1 -Received number of returns: 0 -Received number of calls: 2" +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 2 `; exports[`toHaveReturned .not passes when not returned 1`] = ` -"expect(jest.fn()).toHaveReturned() +expect(jest.fn()).toHaveReturned() -Expected number of returns: >= 1 -Received number of returns: 0" +Expected number of returns: >= 1 +Received number of returns: 0 `; exports[`toHaveReturned .not works only on jest.fn 1`] = ` -"expect(received).not.toHaveReturned() +expect(received).not.toHaveReturned() -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveReturned fails with any argument passed 1`] = ` -"expect(received).toHaveReturned() +expect(received).toHaveReturned() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toHaveReturned includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toHaveReturned() +expect(named-mock).not.toHaveReturned() -Expected number of returns: 0 -Received number of returns: 1 +Expected number of returns: 0 +Received number of returns: 1 -1: 42" +1: 42 `; exports[`toHaveReturned incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).toHaveReturned() +expect(jest.fn()).toHaveReturned() -Expected number of returns: >= 1 -Received number of returns: 0 -Received number of calls: 4" +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 4 `; exports[`toHaveReturned passes when at least one call does not throw 1`] = ` -"expect(jest.fn()).not.toHaveReturned() +expect(jest.fn()).not.toHaveReturned() -Expected number of returns: 0 -Received number of returns: 2 +Expected number of returns: 0 +Received number of returns: 2 -1: 42 -3: 42 +1: 42 +3: 42 -Received number of calls: 3" +Received number of calls: 3 `; exports[`toHaveReturned passes when returned 1`] = ` -"expect(jest.fn()).not.toHaveReturned() +expect(jest.fn()).not.toHaveReturned() -Expected number of returns: 0 -Received number of returns: 1 +Expected number of returns: 0 +Received number of returns: 1 -1: 42" +1: 42 `; exports[`toHaveReturned passes when undefined is returned 1`] = ` -"expect(jest.fn()).not.toHaveReturned() +expect(jest.fn()).not.toHaveReturned() -Expected number of returns: 0 -Received number of returns: 1 +Expected number of returns: 0 +Received number of returns: 1 -1: undefined" +1: undefined `; exports[`toHaveReturned throw matcher error if received is spy 1`] = ` -"expect(received).toHaveReturned() +expect(received).toHaveReturned() -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function spy]" +Received has value: [Function spy] `; exports[`toHaveReturnedTimes .not only accepts a number argument 1`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toHaveReturnedTimes .not only accepts a number argument 2`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toHaveReturnedTimes .not only accepts a number argument 3`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toHaveReturnedTimes .not only accepts a number argument 4`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toHaveReturnedTimes .not only accepts a number argument 5`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toHaveReturnedTimes .not only accepts a number argument 6`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toHaveReturnedTimes .not passes if function called less than expected times 1`] = ` -"expect(jest.fn()).toHaveReturnedTimes(expected) +expect(jest.fn()).toHaveReturnedTimes(expected) -Expected number of returns: 2 -Received number of returns: 1" +Expected number of returns: 2 +Received number of returns: 1 `; exports[`toHaveReturnedTimes .not passes if function returned more than expected times 1`] = ` -"expect(jest.fn()).toHaveReturnedTimes(expected) +expect(jest.fn()).toHaveReturnedTimes(expected) -Expected number of returns: 2 -Received number of returns: 3" +Expected number of returns: 2 +Received number of returns: 3 `; exports[`toHaveReturnedTimes calls that return undefined are counted as returns 1`] = ` -"expect(jest.fn()).not.toHaveReturnedTimes(expected) +expect(jest.fn()).not.toHaveReturnedTimes(expected) -Expected number of returns: not 2" +Expected number of returns: not 2 `; exports[`toHaveReturnedTimes calls that throw are not counted 1`] = ` -"expect(jest.fn()).toHaveReturnedTimes(expected) +expect(jest.fn()).toHaveReturnedTimes(expected) -Expected number of returns: 3 -Received number of returns: 2 -Received number of calls: 3" +Expected number of returns: 3 +Received number of returns: 2 +Received number of calls: 3 `; exports[`toHaveReturnedTimes calls that throw undefined are not counted 1`] = ` -"expect(jest.fn()).not.toHaveReturnedTimes(expected) +expect(jest.fn()).not.toHaveReturnedTimes(expected) -Expected number of returns: not 2 +Expected number of returns: not 2 -Received number of calls: 3" +Received number of calls: 3 `; exports[`toHaveReturnedTimes includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toHaveReturnedTimes(expected) +expect(named-mock).toHaveReturnedTimes(expected) -Expected number of returns: 1 -Received number of returns: 2" +Expected number of returns: 1 +Received number of returns: 2 `; exports[`toHaveReturnedTimes incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).not.toHaveReturnedTimes(expected) +expect(jest.fn()).not.toHaveReturnedTimes(expected) -Expected number of returns: not 2 +Expected number of returns: not 2 -Received number of calls: 4" +Received number of calls: 4 `; exports[`toHaveReturnedTimes only accepts a number argument 1`] = ` -"expect(received).toHaveReturnedTimes(expected) +expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toHaveReturnedTimes only accepts a number argument 2`] = ` -"expect(received).toHaveReturnedTimes(expected) +expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toHaveReturnedTimes only accepts a number argument 3`] = ` -"expect(received).toHaveReturnedTimes(expected) +expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toHaveReturnedTimes only accepts a number argument 4`] = ` -"expect(received).toHaveReturnedTimes(expected) +expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toHaveReturnedTimes only accepts a number argument 5`] = ` -"expect(received).toHaveReturnedTimes(expected) +expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toHaveReturnedTimes only accepts a number argument 6`] = ` -"expect(received).toHaveReturnedTimes(expected) +expect(received).toHaveReturnedTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toHaveReturnedTimes passes if function returned equal to expected times 1`] = ` -"expect(jest.fn()).not.toHaveReturnedTimes(expected) +expect(jest.fn()).not.toHaveReturnedTimes(expected) -Expected number of returns: not 2" +Expected number of returns: not 2 `; exports[`toHaveReturnedTimes throw matcher error if received is spy 1`] = ` -"expect(received).not.toHaveReturnedTimes(expected) +expect(received).not.toHaveReturnedTimes(expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function spy]" +Received has value: [Function spy] `; exports[`toHaveReturnedWith a call that throws is not considered to have returned 1`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toHaveReturnedWith a call that throws undefined is not considered to have returned 1`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toHaveReturnedWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toHaveReturnedWith(expected) +expect(named-mock).toHaveReturnedWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toHaveReturnedWith returnedWith incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: undefined +Expected: undefined Received 1: function call has not returned yet 2: function call has not returned yet 3: function call has not returned yet -Number of returns: 0 -Number of calls: 4" +Number of returns: 0 +Number of calls: 4 `; exports[`toHaveReturnedWith returnedWith works with more calls than the limit 1`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: \\"bar\\" +Expected: "bar" Received - 1: \\"foo1\\" - 2: \\"foo2\\" - 3: \\"foo3\\" + 1: "foo1" + 2: "foo2" + 3: "foo3" -Number of returns: 6" +Number of returns: 6 `; exports[`toHaveReturnedWith works only on spies or jest.fn 1`] = ` -"expect(received).toHaveReturnedWith(expected) +expect(received).toHaveReturnedWith(expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toHaveReturnedWith works when not called 1`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toHaveReturnedWith works with Immutable.js objects directly created 1`] = ` -"expect(jest.fn()).not.toHaveReturnedWith(expected) +expect(jest.fn()).not.toHaveReturnedWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with Immutable.js objects indirectly created 1`] = ` -"expect(jest.fn()).not.toHaveReturnedWith(expected) +expect(jest.fn()).not.toHaveReturnedWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with Map 1`] = ` -"expect(jest.fn()).not.toHaveReturnedWith(expected) +expect(jest.fn()).not.toHaveReturnedWith(expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with Map 2`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} -Received: Map {1 => 2, 2 => 1} +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with Set 1`] = ` -"expect(jest.fn()).not.toHaveReturnedWith(expected) +expect(jest.fn()).not.toHaveReturnedWith(expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with Set 2`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: Set {3, 4} -Received: Set {1, 2} +Expected: Set {3, 4} +Received: Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with argument that does match 1`] = ` -"expect(jest.fn()).not.toHaveReturnedWith(expected) +expect(jest.fn()).not.toHaveReturnedWith(expected) -Expected: not \\"foo\\" +Expected: not "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with argument that does not match 1`] = ` -"expect(jest.fn()).toHaveReturnedWith(expected) +expect(jest.fn()).toHaveReturnedWith(expected) -Expected: \\"bar\\" -Received: \\"foo\\" +Expected: "bar" +Received: "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toHaveReturnedWith works with undefined 1`] = ` -"expect(jest.fn()).not.toHaveReturnedWith(expected) +expect(jest.fn()).not.toHaveReturnedWith(expected) -Expected: not undefined +Expected: not undefined -Number of returns: 1" +Number of returns: 1 `; exports[`toReturn .not fails with any argument passed 1`] = ` -"expect(received).not.toReturn() +expect(received).not.toReturn() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toReturn .not passes when a call throws undefined 1`] = ` -"expect(jest.fn()).toReturn() +expect(jest.fn()).toReturn() -Expected number of returns: >= 1 -Received number of returns: 0 -Received number of calls: 1" +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 1 `; exports[`toReturn .not passes when all calls throw 1`] = ` -"expect(jest.fn()).toReturn() +expect(jest.fn()).toReturn() -Expected number of returns: >= 1 -Received number of returns: 0 -Received number of calls: 2" +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 2 `; exports[`toReturn .not passes when not returned 1`] = ` -"expect(jest.fn()).toReturn() +expect(jest.fn()).toReturn() -Expected number of returns: >= 1 -Received number of returns: 0" +Expected number of returns: >= 1 +Received number of returns: 0 `; exports[`toReturn .not works only on jest.fn 1`] = ` -"expect(received).not.toReturn() +expect(received).not.toReturn() -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toReturn fails with any argument passed 1`] = ` -"expect(received).toReturn() +expect(received).toReturn() -Matcher error: this matcher must not have an expected argument +Matcher error: this matcher must not have an expected argument Expected has type: number -Expected has value: 555" +Expected has value: 555 `; exports[`toReturn includes the custom mock name in the error message 1`] = ` -"expect(named-mock).not.toReturn() +expect(named-mock).not.toReturn() -Expected number of returns: 0 -Received number of returns: 1 +Expected number of returns: 0 +Received number of returns: 1 -1: 42" +1: 42 `; exports[`toReturn incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).toReturn() +expect(jest.fn()).toReturn() -Expected number of returns: >= 1 -Received number of returns: 0 -Received number of calls: 4" +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 4 `; exports[`toReturn passes when at least one call does not throw 1`] = ` -"expect(jest.fn()).not.toReturn() +expect(jest.fn()).not.toReturn() -Expected number of returns: 0 -Received number of returns: 2 +Expected number of returns: 0 +Received number of returns: 2 -1: 42 -3: 42 +1: 42 +3: 42 -Received number of calls: 3" +Received number of calls: 3 `; exports[`toReturn passes when returned 1`] = ` -"expect(jest.fn()).not.toReturn() +expect(jest.fn()).not.toReturn() -Expected number of returns: 0 -Received number of returns: 1 +Expected number of returns: 0 +Received number of returns: 1 -1: 42" +1: 42 `; exports[`toReturn passes when undefined is returned 1`] = ` -"expect(jest.fn()).not.toReturn() +expect(jest.fn()).not.toReturn() -Expected number of returns: 0 -Received number of returns: 1 +Expected number of returns: 0 +Received number of returns: 1 -1: undefined" +1: undefined `; exports[`toReturn throw matcher error if received is spy 1`] = ` -"expect(received).toReturn() +expect(received).toReturn() -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function spy]" +Received has value: [Function spy] `; exports[`toReturnTimes .not only accepts a number argument 1`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toReturnTimes .not only accepts a number argument 2`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toReturnTimes .not only accepts a number argument 3`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toReturnTimes .not only accepts a number argument 4`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toReturnTimes .not only accepts a number argument 5`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toReturnTimes .not only accepts a number argument 6`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toReturnTimes .not passes if function called less than expected times 1`] = ` -"expect(jest.fn()).toReturnTimes(expected) +expect(jest.fn()).toReturnTimes(expected) -Expected number of returns: 2 -Received number of returns: 1" +Expected number of returns: 2 +Received number of returns: 1 `; exports[`toReturnTimes .not passes if function returned more than expected times 1`] = ` -"expect(jest.fn()).toReturnTimes(expected) +expect(jest.fn()).toReturnTimes(expected) -Expected number of returns: 2 -Received number of returns: 3" +Expected number of returns: 2 +Received number of returns: 3 `; exports[`toReturnTimes calls that return undefined are counted as returns 1`] = ` -"expect(jest.fn()).not.toReturnTimes(expected) +expect(jest.fn()).not.toReturnTimes(expected) -Expected number of returns: not 2" +Expected number of returns: not 2 `; exports[`toReturnTimes calls that throw are not counted 1`] = ` -"expect(jest.fn()).toReturnTimes(expected) +expect(jest.fn()).toReturnTimes(expected) -Expected number of returns: 3 -Received number of returns: 2 -Received number of calls: 3" +Expected number of returns: 3 +Received number of returns: 2 +Received number of calls: 3 `; exports[`toReturnTimes calls that throw undefined are not counted 1`] = ` -"expect(jest.fn()).not.toReturnTimes(expected) +expect(jest.fn()).not.toReturnTimes(expected) -Expected number of returns: not 2 +Expected number of returns: not 2 -Received number of calls: 3" +Received number of calls: 3 `; exports[`toReturnTimes includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toReturnTimes(expected) +expect(named-mock).toReturnTimes(expected) -Expected number of returns: 1 -Received number of returns: 2" +Expected number of returns: 1 +Received number of returns: 2 `; exports[`toReturnTimes incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).not.toReturnTimes(expected) +expect(jest.fn()).not.toReturnTimes(expected) -Expected number of returns: not 2 +Expected number of returns: not 2 -Received number of calls: 4" +Received number of calls: 4 `; exports[`toReturnTimes only accepts a number argument 1`] = ` -"expect(received).toReturnTimes(expected) +expect(received).toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: object -Expected has value: {}" +Expected has value: {} `; exports[`toReturnTimes only accepts a number argument 2`] = ` -"expect(received).toReturnTimes(expected) +expect(received).toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: array -Expected has value: []" +Expected has value: [] `; exports[`toReturnTimes only accepts a number argument 3`] = ` -"expect(received).toReturnTimes(expected) +expect(received).toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: boolean -Expected has value: true" +Expected has value: true `; exports[`toReturnTimes only accepts a number argument 4`] = ` -"expect(received).toReturnTimes(expected) +expect(received).toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: string -Expected has value: \\"a\\"" +Expected has value: "a" `; exports[`toReturnTimes only accepts a number argument 5`] = ` -"expect(received).toReturnTimes(expected) +expect(received).toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: map -Expected has value: Map {}" +Expected has value: Map {} `; exports[`toReturnTimes only accepts a number argument 6`] = ` -"expect(received).toReturnTimes(expected) +expect(received).toReturnTimes(expected) -Matcher error: expected value must be a non-negative integer +Matcher error: expected value must be a non-negative integer Expected has type: function -Expected has value: [Function anonymous]" +Expected has value: [Function anonymous] `; exports[`toReturnTimes passes if function returned equal to expected times 1`] = ` -"expect(jest.fn()).not.toReturnTimes(expected) +expect(jest.fn()).not.toReturnTimes(expected) -Expected number of returns: not 2" +Expected number of returns: not 2 `; exports[`toReturnTimes throw matcher error if received is spy 1`] = ` -"expect(received).not.toReturnTimes(expected) +expect(received).not.toReturnTimes(expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function spy]" +Received has value: [Function spy] `; exports[`toReturnWith a call that throws is not considered to have returned 1`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toReturnWith a call that throws undefined is not considered to have returned 1`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: undefined +Expected: undefined Received: function call threw an error -Number of returns: 0 -Number of calls: 1" +Number of returns: 0 +Number of calls: 1 `; exports[`toReturnWith includes the custom mock name in the error message 1`] = ` -"expect(named-mock).toReturnWith(expected) +expect(named-mock).toReturnWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toReturnWith returnedWith incomplete recursive calls are handled properly 1`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: undefined +Expected: undefined Received 1: function call has not returned yet 2: function call has not returned yet 3: function call has not returned yet -Number of returns: 0 -Number of calls: 4" +Number of returns: 0 +Number of calls: 4 `; exports[`toReturnWith returnedWith works with more calls than the limit 1`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: \\"bar\\" +Expected: "bar" Received - 1: \\"foo1\\" - 2: \\"foo2\\" - 3: \\"foo3\\" + 1: "foo1" + 2: "foo2" + 3: "foo3" -Number of returns: 6" +Number of returns: 6 `; exports[`toReturnWith works only on spies or jest.fn 1`] = ` -"expect(received).toReturnWith(expected) +expect(received).toReturnWith(expected) -Matcher error: received value must be a mock function +Matcher error: received value must be a mock function Received has type: function -Received has value: [Function fn]" +Received has value: [Function fn] `; exports[`toReturnWith works when not called 1`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: \\"foo\\" +Expected: "foo" -Number of returns: 0" +Number of returns: 0 `; exports[`toReturnWith works with Immutable.js objects directly created 1`] = ` -"expect(jest.fn()).not.toReturnWith(expected) +expect(jest.fn()).not.toReturnWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with Immutable.js objects indirectly created 1`] = ` -"expect(jest.fn()).not.toReturnWith(expected) +expect(jest.fn()).not.toReturnWith(expected) -Expected: not Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}} +Expected: not Immutable.Map {"a": {"b": "c"}} -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with Map 1`] = ` -"expect(jest.fn()).not.toReturnWith(expected) +expect(jest.fn()).not.toReturnWith(expected) -Expected: not Map {1 => 2, 2 => 1} +Expected: not Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with Map 2`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} -Received: Map {1 => 2, 2 => 1} +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with Set 1`] = ` -"expect(jest.fn()).not.toReturnWith(expected) +expect(jest.fn()).not.toReturnWith(expected) -Expected: not Set {1, 2} +Expected: not Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with Set 2`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: Set {3, 4} -Received: Set {1, 2} +Expected: Set {3, 4} +Received: Set {1, 2} -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with argument that does match 1`] = ` -"expect(jest.fn()).not.toReturnWith(expected) +expect(jest.fn()).not.toReturnWith(expected) -Expected: not \\"foo\\" +Expected: not "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with argument that does not match 1`] = ` -"expect(jest.fn()).toReturnWith(expected) +expect(jest.fn()).toReturnWith(expected) -Expected: \\"bar\\" -Received: \\"foo\\" +Expected: "bar" +Received: "foo" -Number of returns: 1" +Number of returns: 1 `; exports[`toReturnWith works with undefined 1`] = ` -"expect(jest.fn()).not.toReturnWith(expected) +expect(jest.fn()).not.toReturnWith(expected) -Expected: not undefined +Expected: not undefined -Number of returns: 1" +Number of returns: 1 `; diff --git a/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap b/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap index 578542be4fa1..1298e5c60def 100644 --- a/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap +++ b/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap @@ -1,617 +1,617 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`toThrow asymmetric any-Class fail isNot false 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected asymmetric matcher: Any +Expected asymmetric matcher: Any -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow asymmetric any-Class fail isNot true 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected asymmetric matcher: not Any +Expected asymmetric matcher: not Any -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow asymmetric anything fail isNot false 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected asymmetric matcher: Anything +Expected asymmetric matcher: Anything + +Thrown value: null -Thrown value: null -" `; exports[`toThrow asymmetric anything fail isNot true 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected asymmetric matcher: not Anything +Expected asymmetric matcher: not Anything -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow asymmetric no-symbol fail isNot false 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected asymmetric matcher: {\\"asymmetricMatch\\": [Function asymmetricMatch]} +Expected asymmetric matcher: {"asymmetricMatch": [Function asymmetricMatch]} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow asymmetric no-symbol fail isNot true 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected asymmetric matcher: not {\\"asymmetricMatch\\": [Function asymmetricMatch]} +Expected asymmetric matcher: not {"asymmetricMatch": [Function asymmetricMatch]} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow asymmetric objectContaining fail isNot false 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected asymmetric matcher: ObjectContaining {\\"name\\": \\"NotError\\"} +Expected asymmetric matcher: ObjectContaining {"name": "NotError"} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow asymmetric objectContaining fail isNot true 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected asymmetric matcher: not ObjectContaining {\\"name\\": \\"Error\\"} +Expected asymmetric matcher: not ObjectContaining {"name": "Error"} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow error class did not throw at all 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected constructor: Err +Expected constructor: Err -Received function did not throw" +Received function did not throw `; exports[`toThrow error class threw, but class did not match (error) 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected constructor: Err2 -Received constructor: Err +Expected constructor: Err2 +Received constructor: Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow error class threw, but class did not match (non-error falsey) 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) + +Expected constructor: Err2 -Expected constructor: Err2 +Received value: undefined -Received value: undefined -" `; exports[`toThrow error class threw, but class should not match (error subclass) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected constructor: not Err -Received constructor: SubErr extends Err +Expected constructor: not Err +Received constructor: SubErr extends Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow error class threw, but class should not match (error subsubclass) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected constructor: not Err -Received constructor: SubSubErr extends … extends Err +Expected constructor: not Err +Received constructor: SubSubErr extends … extends Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow error class threw, but class should not match (error) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected constructor: not Err +Expected constructor: not Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow error-message fail isNot false 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) + +Expected message: "apple" +Received message: "banana" -Expected message: \\"apple\\" -Received message: \\"banana\\" -" `; exports[`toThrow error-message fail isNot true 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) + +Expected message: not "Invalid array length" -Expected message: not \\"Invalid array length\\" -" `; exports[`toThrow error-message fail multiline diff highlight incorrect expected space 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) + +- Expected message ++ Received message -- Expected message -+ Received message +- There is no route defined for key Settings. ++ There is no route defined for key Settings. + Must be one of: 'Home' -- There is no route defined for key Settings. -+ There is no route defined for key Settings. - Must be one of: 'Home' -" `; exports[`toThrow expected is undefined threw, but should not have (non-error falsey) 1`] = ` -"expect(received).not.toThrow() +expect(received).not.toThrow() + +Thrown value: null -Thrown value: null -" `; exports[`toThrow invalid actual 1`] = ` -"expect(received).toThrow() +expect(received).toThrow() -Matcher error: received value must be a function +Matcher error: received value must be a function Received has type: string -Received has value: \\"a string\\"" +Received has value: "a string" `; exports[`toThrow invalid arguments 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Matcher error: expected value must be a string or regular expression or class or error +Matcher error: expected value must be a string or regular expression or class or error Expected has type: number -Expected has value: 111" +Expected has value: 111 `; exports[`toThrow promise/async throws if Error-like object is returned did not throw at all 1`] = ` -"expect(received).rejects.toThrow() +expect(received).rejects.toThrow() -Received function did not throw" +Received function did not throw `; exports[`toThrow promise/async throws if Error-like object is returned threw, but class did not match 1`] = ` -"expect(received).rejects.toThrow(expected) +expect(received).rejects.toThrow(expected) -Expected constructor: Err2 -Received constructor: Err +Expected constructor: Err2 +Received constructor: Err -Received message: \\"async apple\\" +Received message: "async apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow promise/async throws if Error-like object is returned threw, but should not have 1`] = ` -"expect(received).rejects.not.toThrow() +expect(received).rejects.not.toThrow() -Error name: \\"Error\\" -Error message: \\"async apple\\" +Error name: "Error" +Error message: "async apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow regexp did not throw at all 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected pattern: /apple/ +Expected pattern: /apple/ -Received function did not throw" +Received function did not throw `; exports[`toThrow regexp threw, but message did not match (error) 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected pattern: /banana/ -Received message: \\"apple\\" +Expected pattern: /banana/ +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow regexp threw, but message did not match (non-error falsey) 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) + +Expected pattern: /^[123456789]\\d*/ +Received value: 0 -Expected pattern: /^[123456789]\\\\d*/ -Received value: 0 -" `; exports[`toThrow regexp threw, but message should not match (error) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected pattern: not / array / -Received message: \\"Invalid array length\\" +Expected pattern: not / array / +Received message: "Invalid array length" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow regexp threw, but message should not match (non-error truthy) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) + +Expected pattern: not /^[123456789]\\d*/ +Received value: 404 -Expected pattern: not /^[123456789]\\\\d*/ -Received value: 404 -" `; exports[`toThrow substring did not throw at all 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected substring: \\"apple\\" +Expected substring: "apple" -Received function did not throw" +Received function did not throw `; exports[`toThrow substring threw, but message did not match (error) 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) -Expected substring: \\"banana\\" -Received message: \\"apple\\" +Expected substring: "banana" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow substring threw, but message did not match (non-error falsey) 1`] = ` -"expect(received).toThrow(expected) +expect(received).toThrow(expected) + +Expected substring: "Server Error" +Received value: "" -Expected substring: \\"Server Error\\" -Received value: \\"\\" -" `; exports[`toThrow substring threw, but message should not match (error) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) -Expected substring: not \\"array\\" -Received message: \\"Invalid array length\\" +Expected substring: not "array" +Received message: "Invalid array length" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrow substring threw, but message should not match (non-error truthy) 1`] = ` -"expect(received).not.toThrow(expected) +expect(received).not.toThrow(expected) + +Expected substring: not "Server Error" +Received value: "Internal Server Error" -Expected substring: not \\"Server Error\\" -Received value: \\"Internal Server Error\\" -" `; exports[`toThrowError asymmetric any-Class fail isNot false 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected asymmetric matcher: Any +Expected asymmetric matcher: Any -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError asymmetric any-Class fail isNot true 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected asymmetric matcher: not Any +Expected asymmetric matcher: not Any -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError asymmetric anything fail isNot false 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected asymmetric matcher: Anything +Expected asymmetric matcher: Anything + +Thrown value: null -Thrown value: null -" `; exports[`toThrowError asymmetric anything fail isNot true 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected asymmetric matcher: not Anything +Expected asymmetric matcher: not Anything -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError asymmetric no-symbol fail isNot false 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected asymmetric matcher: {\\"asymmetricMatch\\": [Function asymmetricMatch]} +Expected asymmetric matcher: {"asymmetricMatch": [Function asymmetricMatch]} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError asymmetric no-symbol fail isNot true 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected asymmetric matcher: not {\\"asymmetricMatch\\": [Function asymmetricMatch]} +Expected asymmetric matcher: not {"asymmetricMatch": [Function asymmetricMatch]} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError asymmetric objectContaining fail isNot false 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected asymmetric matcher: ObjectContaining {\\"name\\": \\"NotError\\"} +Expected asymmetric matcher: ObjectContaining {"name": "NotError"} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError asymmetric objectContaining fail isNot true 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected asymmetric matcher: not ObjectContaining {\\"name\\": \\"Error\\"} +Expected asymmetric matcher: not ObjectContaining {"name": "Error"} -Received name: \\"Error\\" -Received message: \\"apple\\" +Received name: "Error" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError error class did not throw at all 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected constructor: Err +Expected constructor: Err -Received function did not throw" +Received function did not throw `; exports[`toThrowError error class threw, but class did not match (error) 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected constructor: Err2 -Received constructor: Err +Expected constructor: Err2 +Received constructor: Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError error class threw, but class did not match (non-error falsey) 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) + +Expected constructor: Err2 -Expected constructor: Err2 +Received value: undefined -Received value: undefined -" `; exports[`toThrowError error class threw, but class should not match (error subclass) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected constructor: not Err -Received constructor: SubErr extends Err +Expected constructor: not Err +Received constructor: SubErr extends Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError error class threw, but class should not match (error subsubclass) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected constructor: not Err -Received constructor: SubSubErr extends … extends Err +Expected constructor: not Err +Received constructor: SubSubErr extends … extends Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError error class threw, but class should not match (error) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected constructor: not Err +Expected constructor: not Err -Received message: \\"apple\\" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError error-message fail isNot false 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) + +Expected message: "apple" +Received message: "banana" -Expected message: \\"apple\\" -Received message: \\"banana\\" -" `; exports[`toThrowError error-message fail isNot true 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) + +Expected message: not "Invalid array length" -Expected message: not \\"Invalid array length\\" -" `; exports[`toThrowError error-message fail multiline diff highlight incorrect expected space 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) + +- Expected message ++ Received message -- Expected message -+ Received message +- There is no route defined for key Settings. ++ There is no route defined for key Settings. + Must be one of: 'Home' -- There is no route defined for key Settings. -+ There is no route defined for key Settings. - Must be one of: 'Home' -" `; exports[`toThrowError expected is undefined threw, but should not have (non-error falsey) 1`] = ` -"expect(received).not.toThrowError() +expect(received).not.toThrowError() + +Thrown value: null -Thrown value: null -" `; exports[`toThrowError invalid actual 1`] = ` -"expect(received).toThrowError() +expect(received).toThrowError() -Matcher error: received value must be a function +Matcher error: received value must be a function Received has type: string -Received has value: \\"a string\\"" +Received has value: "a string" `; exports[`toThrowError invalid arguments 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Matcher error: expected value must be a string or regular expression or class or error +Matcher error: expected value must be a string or regular expression or class or error Expected has type: number -Expected has value: 111" +Expected has value: 111 `; exports[`toThrowError promise/async throws if Error-like object is returned did not throw at all 1`] = ` -"expect(received).rejects.toThrowError() +expect(received).rejects.toThrowError() -Received function did not throw" +Received function did not throw `; exports[`toThrowError promise/async throws if Error-like object is returned threw, but class did not match 1`] = ` -"expect(received).rejects.toThrowError(expected) +expect(received).rejects.toThrowError(expected) -Expected constructor: Err2 -Received constructor: Err +Expected constructor: Err2 +Received constructor: Err -Received message: \\"async apple\\" +Received message: "async apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError promise/async throws if Error-like object is returned threw, but should not have 1`] = ` -"expect(received).rejects.not.toThrowError() +expect(received).rejects.not.toThrowError() -Error name: \\"Error\\" -Error message: \\"async apple\\" +Error name: "Error" +Error message: "async apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError regexp did not throw at all 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected pattern: /apple/ +Expected pattern: /apple/ -Received function did not throw" +Received function did not throw `; exports[`toThrowError regexp threw, but message did not match (error) 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected pattern: /banana/ -Received message: \\"apple\\" +Expected pattern: /banana/ +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError regexp threw, but message did not match (non-error falsey) 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) + +Expected pattern: /^[123456789]\\d*/ +Received value: 0 -Expected pattern: /^[123456789]\\\\d*/ -Received value: 0 -" `; exports[`toThrowError regexp threw, but message should not match (error) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected pattern: not / array / -Received message: \\"Invalid array length\\" +Expected pattern: not / array / +Received message: "Invalid array length" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError regexp threw, but message should not match (non-error truthy) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) + +Expected pattern: not /^[123456789]\\d*/ +Received value: 404 -Expected pattern: not /^[123456789]\\\\d*/ -Received value: 404 -" `; exports[`toThrowError substring did not throw at all 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected substring: \\"apple\\" +Expected substring: "apple" -Received function did not throw" +Received function did not throw `; exports[`toThrowError substring threw, but message did not match (error) 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) -Expected substring: \\"banana\\" -Received message: \\"apple\\" +Expected substring: "banana" +Received message: "apple" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError substring threw, but message did not match (non-error falsey) 1`] = ` -"expect(received).toThrowError(expected) +expect(received).toThrowError(expected) + +Expected substring: "Server Error" +Received value: "" -Expected substring: \\"Server Error\\" -Received value: \\"\\" -" `; exports[`toThrowError substring threw, but message should not match (error) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) -Expected substring: not \\"array\\" -Received message: \\"Invalid array length\\" +Expected substring: not "array" +Received message: "Invalid array length" - at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)" + at jestExpect (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74) `; exports[`toThrowError substring threw, but message should not match (non-error truthy) 1`] = ` -"expect(received).not.toThrowError(expected) +expect(received).not.toThrowError(expected) + +Expected substring: not "Server Error" +Received value: "Internal Server Error" -Expected substring: not \\"Server Error\\" -Received value: \\"Internal Server Error\\" -" `; diff --git a/packages/expect/src/__tests__/assertionCounts.test.js b/packages/expect/src/__tests__/assertionCounts.test.js index ba6b17211ddb..ce9c31d3fff4 100644 --- a/packages/expect/src/__tests__/assertionCounts.test.js +++ b/packages/expect/src/__tests__/assertionCounts.test.js @@ -8,8 +8,11 @@ 'use strict'; +const {alignedAnsiStyleSerializer} = require('@jest/test-utils'); const jestExpect = require('../'); +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + describe('.assertions()', () => { it('does not throw', () => { jestExpect.assertions(2); diff --git a/packages/expect/src/__tests__/extend.test.js b/packages/expect/src/__tests__/extend.test.js index 80c0507871bd..7861eafe5852 100644 --- a/packages/expect/src/__tests__/extend.test.js +++ b/packages/expect/src/__tests__/extend.test.js @@ -7,10 +7,13 @@ */ const matcherUtils = require('jest-matcher-utils'); +const {alignedAnsiStyleSerializer} = require('@jest/test-utils'); const {iterableEquality, subsetEquality} = require('../utils'); const {equals} = require('../jasmineUtils'); const jestExpect = require('../'); +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + jestExpect.extend({ toBeDivisibleBy(actual, expected) { const pass = actual % expected === 0; diff --git a/packages/expect/src/__tests__/matchers.test.js b/packages/expect/src/__tests__/matchers.test.js index 487cf9cc8fd8..895d5d71fb4a 100644 --- a/packages/expect/src/__tests__/matchers.test.js +++ b/packages/expect/src/__tests__/matchers.test.js @@ -6,11 +6,14 @@ */ const {stringify} = require('jest-matcher-utils'); +const {alignedAnsiStyleSerializer} = require('@jest/test-utils'); const jestExpect = require('../'); const Immutable = require('immutable'); const chalk = require('chalk'); const chalkEnabled = chalk.enabled; +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + beforeAll(() => { chalk.enabled = true; }); diff --git a/packages/expect/src/__tests__/spyMatchers.test.js b/packages/expect/src/__tests__/spyMatchers.test.js index db6322d736eb..527c10ee534e 100644 --- a/packages/expect/src/__tests__/spyMatchers.test.js +++ b/packages/expect/src/__tests__/spyMatchers.test.js @@ -6,8 +6,11 @@ */ const Immutable = require('immutable'); +const {alignedAnsiStyleSerializer} = require('@jest/test-utils'); const jestExpect = require('../'); +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + // Given a Jest mock function, return a minimal mock of a Jasmine spy. const createSpy = fn => { const spy = function() {}; diff --git a/packages/expect/src/__tests__/toThrowMatchers.test.ts b/packages/expect/src/__tests__/toThrowMatchers.test.ts index 5586d13657d9..650193f0e26d 100644 --- a/packages/expect/src/__tests__/toThrowMatchers.test.ts +++ b/packages/expect/src/__tests__/toThrowMatchers.test.ts @@ -5,8 +5,11 @@ * LICENSE file in the root directory of this source tree. */ +import {alignedAnsiStyleSerializer} from '@jest/test-utils'; import jestExpect from '../'; +expect.addSnapshotSerializer(alignedAnsiStyleSerializer); + // Custom Error class because node versions have different stack trace strings. class CustomError extends Error { constructor(message?: string) { diff --git a/packages/expect/tsconfig.json b/packages/expect/tsconfig.json index 9bc3707b280d..b5c30c896581 100644 --- a/packages/expect/tsconfig.json +++ b/packages/expect/tsconfig.json @@ -9,6 +9,7 @@ {"path": "../jest-matcher-utils"}, {"path": "../jest-message-util"}, {"path": "../jest-regex-util"}, - {"path": "../jest-types"} + {"path": "../jest-types"}, + {"path": "../test-utils"} ] } From fa0eb6d646711285fbc1fe4f10e6e056c80fc84d Mon Sep 17 00:00:00 2001 From: "s.yakushi" Date: Mon, 30 Sep 2019 22:51:48 +0900 Subject: [PATCH 49/97] docs: fix typo in CONTRIBUTING.md (#8990) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf162d4ca524..e1203d14d563 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -121,7 +121,7 @@ Ran all test suites. ##### Using jest-circus -There may be cases where you want to run jest using `jest-circus` instead of `jest-jasmine2` (which is the default runner) for integration testing. In situtations like this just set the environment variable `JEST_CIRCUS` to 1. That will configure jest to use `jest-circus`. So something like this. +There may be cases where you want to run jest using `jest-circus` instead of `jest-jasmine2` (which is the default runner) for integration testing. In situations like this just set the environment variable `JEST_CIRCUS` to 1. That will configure jest to use `jest-circus`. So something like this. ```bash JEST_CIRCUS=1 yarn jest From 464933f9da439c7be32cff9b9421326f6d98edb2 Mon Sep 17 00:00:00 2001 From: Max Belsky Date: Mon, 7 Oct 2019 14:30:21 +0300 Subject: [PATCH 50/97] docs: Setup a link for requireActual method (#9017) --- docs/ManualMocks.md | 2 +- website/versioned_docs/version-22.x/ManualMocks.md | 2 +- website/versioned_docs/version-23.x/ManualMocks.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/ManualMocks.md b/docs/ManualMocks.md index 96e95a4e79da..58e2a4fb37c1 100644 --- a/docs/ManualMocks.md +++ b/docs/ManualMocks.md @@ -126,7 +126,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using [`jest.requireActual(moduleName)`](JestObjectAPI.md#jestrequireactualmodulename) in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual-mocks](https://github.com/facebook/jest/tree/master/examples/manual-mocks). diff --git a/website/versioned_docs/version-22.x/ManualMocks.md b/website/versioned_docs/version-22.x/ManualMocks.md index 5168e970bda0..e661889d0fd6 100644 --- a/website/versioned_docs/version-22.x/ManualMocks.md +++ b/website/versioned_docs/version-22.x/ManualMocks.md @@ -125,7 +125,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using [`jest.requireActual(moduleName)`](JestObjectAPI.md#jestrequireactualmodulename) in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual-mocks](https://github.com/facebook/jest/tree/master/examples/manual-mocks). diff --git a/website/versioned_docs/version-23.x/ManualMocks.md b/website/versioned_docs/version-23.x/ManualMocks.md index 00c0495eeeaa..a0b5321e2772 100644 --- a/website/versioned_docs/version-23.x/ManualMocks.md +++ b/website/versioned_docs/version-23.x/ManualMocks.md @@ -127,7 +127,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using [`jest.requireActual(moduleName)`](JestObjectAPI.md#jestrequireactualmodulename) in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual-mocks](https://github.com/facebook/jest/tree/master/examples/manual-mocks). From db7b1b4bf8aaa5cfb815d793e24aeff41fb21443 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 9 Oct 2019 10:49:08 +0200 Subject: [PATCH 51/97] chore: update test for new node 12 error message (#9030) --- e2e/__tests__/detectOpenHandles.ts | 2 +- e2e/__tests__/unexpectedToken.test.ts | 9 ++++++++- packages/jest-transform/src/ScriptTransformer.ts | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/e2e/__tests__/detectOpenHandles.ts b/e2e/__tests__/detectOpenHandles.ts index f77ffd933c17..867edbd5dba4 100644 --- a/e2e/__tests__/detectOpenHandles.ts +++ b/e2e/__tests__/detectOpenHandles.ts @@ -6,8 +6,8 @@ */ import {wrap} from 'jest-snapshot-serializer-raw'; +import {onNodeVersions} from '@jest/test-utils'; import runJest, {until} from '../runJest'; -import {onNodeVersions} from '../../packages/test-utils'; try { require('async_hooks'); diff --git a/e2e/__tests__/unexpectedToken.test.ts b/e2e/__tests__/unexpectedToken.test.ts index 835b98c5bb07..db83fed1b701 100644 --- a/e2e/__tests__/unexpectedToken.test.ts +++ b/e2e/__tests__/unexpectedToken.test.ts @@ -11,6 +11,7 @@ import runJest from '../runJest'; import {cleanup, writeFiles} from '../Utils'; const DIR = path.resolve(tmpdir(), 'unexpected-token'); +const nodeMajorVersion = Number(process.versions.node.split('.')[0]); beforeEach(() => cleanup(DIR)); afterEach(() => cleanup(DIR)); @@ -50,7 +51,13 @@ test('triggers unexpected token error message for untranspiled node_modules', () expect(stdout).toBe(''); expect(stderr).toMatch(/Jest encountered an unexpected token/); expect(stderr).toMatch(/import {module}/); - expect(stderr).toMatch(/Unexpected token/); + if (nodeMajorVersion < 12) { + expect(stderr).toMatch(/Unexpected token/); + } else { + expect(stderr).toMatch( + /SyntaxError: Cannot use import statement outside a module/, + ); + } }); test('does not trigger unexpected token error message for regular syntax errors', () => { diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 9079e9f90efd..b2765e909a35 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -383,7 +383,8 @@ export default class ScriptTransformer { if ( e instanceof SyntaxError && - e.message.includes('Unexpected token') && + (e.message.includes('Unexpected token') || + e.message.includes('Cannot use import')) && !e.message.includes(' expected') ) { throw enhanceUnexpectedTokenMessage(e); From ea264ecd45a33a29e730347165f6c8e213dc6251 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Wed, 9 Oct 2019 15:06:05 -0400 Subject: [PATCH 52/97] jest-snapshot: Display change counts in annotation lines (#8982) * jest-snapshot: Display change counts in annotation lines * Edit comment * Update CHANGELOG.md * Move indicators for change counts from postfix to prefix * Display with labels if neither quoted string is multiline * Delete obsolete work-around variable assignment * Rename Padding variables --- CHANGELOG.md | 1 + e2e/__tests__/toMatchSnapshot.test.ts | 4 +- packages/jest-diff/README.md | 32 +-- .../__tests__/__snapshots__/diff.test.ts.snap | 84 +++---- packages/jest-diff/src/printDiffs.ts | 24 +- .../__tests__/printDiffOrStringify.test.ts | 42 +++- packages/jest-snapshot/src/State.ts | 11 +- .../printDiffOrStringified.test.ts.snap | 99 +++++--- .../__tests__/printDiffOrStringified.test.ts | 211 +++++++++++++----- packages/jest-snapshot/src/index.ts | 19 +- packages/jest-snapshot/src/print.ts | 160 ++++++++----- packages/jest-snapshot/src/utils.ts | 24 +- 12 files changed, 453 insertions(+), 258 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1bf053cde4a..a654ea7f9591 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - `[jest-get-type]` Add `BigInt` support. ([#8382](https://github.com/facebook/jest/pull/8382)) - `[jest-matcher-utils]` Add `BigInt` support to `ensureNumbers` `ensureActualIsNumber`, `ensureExpectedIsNumber` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[jest-runner]` Warn if a worker had to be force exited ([#8206](https://github.com/facebook/jest/pull/8206)) +- `[jest-snapshot]` Display change counts in annotation lines ([#8982](https://github.com/facebook/jest/pull/8982)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) diff --git a/e2e/__tests__/toMatchSnapshot.test.ts b/e2e/__tests__/toMatchSnapshot.test.ts index e2c3f7fb1f2e..a051fd99db72 100644 --- a/e2e/__tests__/toMatchSnapshot.test.ts +++ b/e2e/__tests__/toMatchSnapshot.test.ts @@ -108,7 +108,9 @@ test('first snapshot fails, second passes', () => { writeFiles(TESTS_DIR, {[filename]: template([`'kiwi'`, `'banana'`])}); const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); expect(stderr).toMatch('Snapshot name: `snapshots 1`'); - expect(stderr).toMatch('Snapshot: "apple"\n Received: "kiwi"'); + // Match lines separately because empty line has been replaced with space: + expect(stderr).toMatch('Snapshot: "apple"'); + expect(stderr).toMatch('Received: "kiwi"'); expect(stderr).not.toMatch('1 obsolete snapshot found'); expect(exitCode).toBe(1); } diff --git a/packages/jest-diff/README.md b/packages/jest-diff/README.md index 108fbd673aa6..a1c9d1c68861 100644 --- a/packages/jest-diff/README.md +++ b/packages/jest-diff/README.md @@ -173,8 +173,8 @@ const difference = diffLinesUnified(splitLines0(a), splitLines0(b), options); Given an empty string, `splitLines0(b)` returns `[]` an empty array, formatted as no `Received` lines: ```diff -- Expected 3 -+ Received 0 +- Expected - 3 ++ Received + 0 - multi - line @@ -194,8 +194,8 @@ const difference = diffLinesUnified(a.split('\n'), b.split('\n'), options); Given an empty string, `b.split('\n')` returns `['']` an array that contains an empty string, formatted as one empty `Received` line, which is **ambiguous** with an empty line: ```diff -- Expected 3 -+ Received 1 +- Expected - 3 ++ Received + 1 - multi - line @@ -220,16 +220,16 @@ You might call this function for case insensitive or Unicode equivalence compari import format from 'pretty-format'; const a = { - action: 'MOVE_TO', - x: 1, - y: 2, + text: 'Ignore indentation in serialized object', + time: '2019-09-19T12:34:56.000Z', + type: 'CREATE_ITEM', }; const b = { - action: 'MOVE_TO', payload: { - x: 1, - y: 2, + text: 'Ignore indentation in serialized object', + time: '2019-09-19T12:34:56.000Z', }, + type: 'CREATE_ITEM', }; const difference = diffLinesUnified2( @@ -242,18 +242,18 @@ const difference = diffLinesUnified2( ); ``` -The `x` and `y` properties are common, because their only difference is indentation: +The `text` and `time` properties are common, because their only difference is indentation: ```diff - Expected + Received Object { - action: 'MOVE_TO', + payload: Object { - x: 1, - y: 2, + text: 'Ignore indentation in serialized object', + time: '2019-09-19T12:34:56.000Z', + }, + type: 'CREATE_ITEM', } ``` @@ -519,8 +519,8 @@ const difference = diffDefault(a, b, options); ``` ```diff -- Expected 1 - -+ Received 2 + +- Expected - 1 ++ Received + 2 Array [ "common", diff --git a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap index 981f946af1cc..7cc376692267 100644 --- a/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap +++ b/packages/jest-diff/src/__tests__/__snapshots__/diff.test.ts.snap @@ -34,8 +34,8 @@ exports[`color of text (expanded) 1`] = ` `; exports[`context number of lines: -1 (5 default) 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 @@ -6,9 +6,9 @@ 4, @@ -51,8 +51,8 @@ exports[`context number of lines: -1 (5 default) 1`] = ` `; exports[`context number of lines: 0 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 @@ -11,1 +11,0 @@ - 9, @@ -61,8 +61,8 @@ exports[`context number of lines: 0 1`] = ` `; exports[`context number of lines: 1 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 @@ -10,4 +10,4 @@ 8, @@ -73,8 +73,8 @@ exports[`context number of lines: 1 1`] = ` `; exports[`context number of lines: 2 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 @@ -9,6 +9,6 @@ 7, @@ -87,8 +87,8 @@ exports[`context number of lines: 2 1`] = ` `; exports[`context number of lines: 3.1 (5 default) 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 @@ -6,9 +6,9 @@ 4, @@ -104,8 +104,8 @@ exports[`context number of lines: 3.1 (5 default) 1`] = ` `; exports[`context number of lines: undefined (5 default) 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 @@ -6,9 +6,9 @@ 4, @@ -121,36 +121,36 @@ exports[`context number of lines: undefined (5 default) 1`] = ` `; exports[`diffStringsUnified edge cases empty both a and b 1`] = ` -- Expected 0 - -+ Received 0 + +- Expected - 0 ++ Received + 0 `; exports[`diffStringsUnified edge cases empty only a 1`] = ` -- Expected 0 - -+ Received 1 + +- Expected - 0 ++ Received + 1 + one-line string `; exports[`diffStringsUnified edge cases empty only b 1`] = ` -- Expected 1 - -+ Received 0 + +- Expected - 1 ++ Received + 0 - one-line string `; exports[`diffStringsUnified edge cases equal both non-empty 1`] = ` -- Expected 0 - -+ Received 0 + +- Expected - 0 ++ Received + 0 one-line string `; exports[`diffStringsUnified edge cases multiline has no common after clean up chaff 1`] = ` -- Expected 2 - -+ Received 2 + +- Expected - 2 ++ Received + 2 - delete - two @@ -159,16 +159,16 @@ exports[`diffStringsUnified edge cases multiline has no common after clean up ch `; exports[`diffStringsUnified edge cases one-line has no common after clean up chaff 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 - delete + insert `; exports[`falls back to not call toJSON if it throws and then objects have differences 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 Object { - "line": 1, @@ -181,8 +181,8 @@ exports[`falls back to not call toJSON if serialization has no differences but t Compared values serialize to the same structure. Printing internal object structure without calling \`toJSON\` instead. -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 Object { - "line": 1, @@ -192,24 +192,24 @@ exports[`falls back to not call toJSON if serialization has no differences but t `; exports[`oneline strings 1`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 - ab + aa `; exports[`oneline strings 2`] = ` -- Expected 1 - -+ Received 1 + +- Expected - 1 ++ Received + 1 - 123456789 + 234567890 `; exports[`oneline strings 3`] = ` -- Expected 1 - -+ Received 2 + +- Expected - 1 ++ Received + 2 - oneline + multi @@ -217,8 +217,8 @@ exports[`oneline strings 3`] = ` `; exports[`oneline strings 4`] = ` -- Expected 2 - -+ Received 1 + +- Expected - 2 ++ Received + 1 - multi - line @@ -301,8 +301,8 @@ exports[`options includeChangeCounts false diffStringsUnified 1`] = ` `; exports[`options includeChangeCounts true padding diffLinesUnified a has 2 digits 1`] = ` -- Before 10 - -+ After 1 + +- Before - 10 ++ After + 1 common - a @@ -319,8 +319,8 @@ exports[`options includeChangeCounts true padding diffLinesUnified a has 2 digit `; exports[`options includeChangeCounts true padding diffLinesUnified b has 2 digits 1`] = ` -- Before 1 - -+ After 10 + +- Before - 1 ++ After + 10 common - a @@ -337,8 +337,8 @@ exports[`options includeChangeCounts true padding diffLinesUnified b has 2 digit `; exports[`options includeChangeCounts true padding diffStringsUnified 1`] = ` -- Before 1 - -+ After 1 + +- Before - 1 ++ After + 1 - change from + change to diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index 1c3c975f15d7..f694b36fcb0b 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -162,16 +162,20 @@ export const printAnnotation = ( const aCount = String(changeCounts.a); const bCount = String(changeCounts.b); - const aPadding = - Math.max(bAnnotation.length - aAnnotation.length, 0) + - Math.max(bCount.length - aCount.length, 0); - const bPadding = - Math.max(aAnnotation.length - bAnnotation.length, 0) + - Math.max(aCount.length - bCount.length, 0); - - // Separate annotation from count by padding plus margin of 2 spaces. - aRest = ' '.repeat(aPadding + 2) + aCount + ' ' + aIndicator; - bRest = ' '.repeat(bPadding + 2) + bCount + ' ' + bIndicator; + // Padding right aligns the ends of the annotations. + const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length; + const aAnnotationPadding = ' '.repeat(Math.max(0, baAnnotationLengthDiff)); + const bAnnotationPadding = ' '.repeat(Math.max(0, -baAnnotationLengthDiff)); + + // Padding left aligns the ends of the counts. + const baCountLengthDiff = bCount.length - aCount.length; + const aCountPadding = ' '.repeat(Math.max(0, baCountLengthDiff)); + const bCountPadding = ' '.repeat(Math.max(0, -baCountLengthDiff)); + + aRest = + aAnnotationPadding + ' ' + aIndicator + ' ' + aCountPadding + aCount; + bRest = + bAnnotationPadding + ' ' + bIndicator + ' ' + bCountPadding + bCount; } return ( diff --git a/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts b/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts index adaf7d7608ea..df1bf6051714 100644 --- a/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts +++ b/packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts @@ -6,7 +6,7 @@ */ import {alignedAnsiStyleSerializer} from '@jest/test-utils'; -import {EXPECTED_COLOR, INVERTED_COLOR, printDiffOrStringify} from '../index'; +import {INVERTED_COLOR, printDiffOrStringify} from '../index'; expect.addSnapshotSerializer(alignedAnsiStyleSerializer); @@ -50,16 +50,40 @@ describe('printDiffOrStringify', () => { expect(testDiffOrStringify(expected, received)).toMatchSnapshot(); }); - test('received is multiline longer than max', () => { - const expected = 'multi\nline'; - const received = 'multi' + '\n123456789'.repeat(2000); // 5 + 20K chars + describe('MAX_DIFF_STRING_LENGTH', () => { + const lessChange = INVERTED_COLOR('single '); + const less = 'single line'; + const more = 'multi line' + '\n123456789'.repeat(2000); // 10 + 20K chars + + test('both are less', () => { + const difference = testDiffOrStringify('multi\nline', less); + + expect(difference).toMatch('- multi'); + expect(difference).toMatch('- line'); + + // diffStringsUnified has substring change + expect(difference).not.toMatch('+ single line'); + expect(difference).toMatch(lessChange); + }); + + test('expected is more', () => { + const difference = testDiffOrStringify(more, less); + + expect(difference).toMatch('- multi line'); + expect(difference).toMatch('+ single line'); + + // diffLinesUnified does not have substring change + expect(difference).not.toMatch(lessChange); + }); - const test = testDiffOrStringify(expected, received); + test('received is more', () => { + const difference = testDiffOrStringify(less, more); - // It is a generic line diff: - expect(test).toContain(EXPECTED_COLOR('- line')); + expect(difference).toMatch('- single line'); + expect(difference).toMatch('+ multi line'); - // It is not a specific substring diff - expect(test).not.toContain(EXPECTED_COLOR('- ' + INVERTED_COLOR('line'))); + // diffLinesUnified does not have substring change + expect(difference).not.toMatch(lessChange); + }); }); }); diff --git a/packages/jest-snapshot/src/State.ts b/packages/jest-snapshot/src/State.ts index db7868b03cb7..ea0e886d9a0f 100644 --- a/packages/jest-snapshot/src/State.ts +++ b/packages/jest-snapshot/src/State.ts @@ -12,10 +12,10 @@ import {getStackTraceLines, getTopFrame} from 'jest-message-util'; import { getSnapshotData, keyToTestName, + removeExtraLineBreaks, saveSnapshotFile, serialize, testNameToKey, - unescape, } from './utils'; import {InlineSnapshot, saveInlineSnapshots} from './inline_snapshots'; import {SnapshotData} from './types'; @@ -29,7 +29,7 @@ export type SnapshotStateOptions = { export type SnapshotMatchOptions = { testName: string; - received: any; + received: unknown; key?: string; inlineSnapshot?: string; isInline: boolean; @@ -253,9 +253,12 @@ export default class SnapshotState { if (!pass) { this.unmatched++; return { - actual: unescape(receivedSerialized), + actual: removeExtraLineBreaks(receivedSerialized), count, - expected: expected !== undefined ? unescape(expected) : undefined, + expected: + expected !== undefined + ? removeExtraLineBreaks(expected) + : undefined, key, pass: false, }; diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap index d26c80eb8b56..1a5d74cefabb 100644 --- a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap +++ b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap @@ -11,15 +11,17 @@ Received: "single line string" `; exports[`empty string received and expected multi line 1`] = ` -Snapshot: "multi -line -string" -Received: "" +- Snapshot - 3 ++ Received + 0 + +- multi +- line +- string `; exports[`escape backslash in multi line string 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 2 - Forward / slash and back \\ slash + Forward / slash @@ -42,8 +44,8 @@ Received: /\\\\\\\\\\("\\)/ `; exports[`expand false 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 3 @@ -12,7 +12,9 @@ ? "number" @@ -59,8 +61,8 @@ exports[`expand false 1`] = ` `; exports[`expand true 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 3 type TypeName = T extends string ? "string" : @@ -86,8 +88,8 @@ exports[`expand true 1`] = ` `; exports[`fallback to line diff 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 8 + ====================================options===================================== + parsers: ["flow", "typescript"] @@ -106,8 +108,8 @@ exports[`fallback to line diff 1`] = ` `; exports[`has no common after clean up chaff array 1`] = ` -- Snapshot -+ Received +- Snapshot - 2 ++ Received + 2 Array [ - "delete", @@ -122,19 +124,41 @@ Snapshot: "delete" Received: "insert" `; +exports[`isLineDiffable false asymmetric matcher 1`] = ` +Snapshot: null +Received: Object { + "asymmetricMatch": [Function], +} +`; + exports[`isLineDiffable false boolean 1`] = ` Snapshot: true Received: false `; +exports[`isLineDiffable false date 1`] = ` +Snapshot: 2019-09-19T00:00:00.000Z +Received: 2019-09-20T00:00:00.000Z +`; + +exports[`isLineDiffable false error 1`] = ` +Snapshot: [Error: Cannot spread fragment "NameAndAppearances" within itself.] +Received: [Error: Cannot spread fragment "NameAndAppearancesAndFriends" within itself.] +`; + +exports[`isLineDiffable false function 1`] = ` +Snapshot: undefined +Received: [Function] +`; + exports[`isLineDiffable false number 1`] = ` Snapshot: -0 Received: NaN `; exports[`isLineDiffable true array 1`] = ` -- Snapshot -+ Received +- Snapshot - 0 ++ Received + 2 Array [ Object { @@ -151,8 +175,8 @@ exports[`isLineDiffable true array 1`] = ` `; exports[`isLineDiffable true object 1`] = ` -- Snapshot -+ Received +- Snapshot - 2 ++ Received + 3 Object { "props": Object { @@ -167,8 +191,8 @@ exports[`isLineDiffable true object 1`] = ` `; exports[`isLineDiffable true single line expected and multi line received 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 3 - Array [] + Array [ @@ -177,13 +201,16 @@ exports[`isLineDiffable true single line expected and multi line received 1`] = `; exports[`isLineDiffable true single line expected and received 1`] = ` -Snapshot: Array [] -Received: Object {} +- Snapshot - 1 ++ Received + 1 + +- Array [] ++ Object {} `; exports[`multi line small change in one line and other is unchanged 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 1 - There is no route defined for key 'Settings'. + There is no route defined for key Settings. @@ -191,8 +218,8 @@ exports[`multi line small change in one line and other is unchanged 1`] = ` `; exports[`multi line small changes 1`] = ` -- Snapshot -+ Received +- Snapshot - 7 ++ Received + 7 - 69 | + 68 | @@ -217,8 +244,8 @@ Received: "Invalid array length" `; exports[`without serialize backtick single line expected and multi line received 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 2 - var foo = \`backtick\`; + var foo = \`back @@ -226,16 +253,16 @@ exports[`without serialize backtick single line expected and multi line received `; exports[`without serialize backtick single line expected and received 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 1 - var foo = \`backtick\`; + var foo = \`back\${x}tick\`; `; exports[`without serialize has no common after clean up chaff multi line 1`] = ` -- Snapshot -+ Received +- Snapshot - 2 ++ Received + 2 - delete - two @@ -244,16 +271,16 @@ exports[`without serialize has no common after clean up chaff multi line 1`] = ` `; exports[`without serialize has no common after clean up chaff single line 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 1 - delete + insert `; exports[`without serialize prettier/pull/5590 1`] = ` -- Snapshot -+ Received +- Snapshot - 1 ++ Received + 1 @@ -4,8 +4,8 @@ | printWidth diff --git a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts index 862e5a52e9a7..3651bd201834 100644 --- a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts +++ b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts @@ -7,8 +7,9 @@ import ansiRegex = require('ansi-regex'); import * as style from 'ansi-styles'; +import chalk from 'chalk'; import {printDiffOrStringified} from '../print'; -import {serialize, unescape} from '../utils'; +import {stringify} from '../utils'; // This is an experiment to read snapshots more easily: // * to avoid first line misaligned because of opening double quote mark, @@ -58,51 +59,35 @@ expect.addSnapshotSerializer({ }, }); -const testWithSerialize = ( - expected: any, - received: any, +// Simulate default serialization. +const testWithStringify = ( + expected: unknown, + received: unknown, expand: boolean, -): string => { - // Simulate serializing the expected value as a snapshot, - // and then returning actual and expected when match function fails. - // Assume that the caller of printDiffOrStringified trims the strings. - const expectedSerializedTrimmed = unescape(serialize(expected)).trim(); - const receivedSerializedTrimmed = unescape(serialize(received)).trim(); - - return convertStyles( +): string => + convertStyles( printDiffOrStringified( - expectedSerializedTrimmed, - receivedSerializedTrimmed, + stringify(expected), + stringify(received), received, - 'Snapshot', - 'Received', expand, ), ); -}; -const testWithoutSerialize = ( +// Simulate custom raw string serialization. +const testWithoutStringify = ( expected: string, received: string, expand: boolean, ): string => - convertStyles( - printDiffOrStringified( - expected, - received, - received, - 'Snapshot', - 'Received', - expand, - ), - ); + convertStyles(printDiffOrStringified(expected, received, received, expand)); describe('backtick', () => { test('single line expected and received', () => { const expected = 'var foo = `backtick`;'; const received = 'var foo = tag`backtick`;'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); }); @@ -111,14 +96,14 @@ describe('empty string', () => { const expected = ''; const received = 'single line string'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('received and expected multi line', () => { const expected = 'multi\nline\nstring'; const received = ''; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); }); @@ -127,28 +112,28 @@ describe('escape', () => { const expected = 'What does "oobleck" mean?'; const received = 'What does "ewbleck" mean?'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('backslash in multi line string', () => { const expected = 'Forward / slash and back \\ slash'; const received = 'Forward / slash\nBack \\ slash'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('backslash in single line string', () => { const expected = 'forward / slash and back \\ slash'; const received = 'Forward / slash and back \\ slash'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('regexp', () => { const expected = /\\(")/g; const received = /\\(")/; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); }); @@ -198,11 +183,11 @@ describe('expand', () => { ].join('\n'); test('false', () => { - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('true', () => { - expect(testWithSerialize(expected, received, true)).toMatchSnapshot(); + expect(testWithStringify(expected, received, true)).toMatchSnapshot(); }); }); @@ -231,7 +216,7 @@ test('fallback to line diff', () => { '================================================================================', ].join('\n'); - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); describe('has no common after clean up chaff', () => { @@ -239,31 +224,149 @@ describe('has no common after clean up chaff', () => { const expected = ['delete', 'two']; const received = ['insert', '2']; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('string single line', () => { const expected = 'delete'; const received = 'insert'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); +}); + +describe('MAX_DIFF_STRING_LENGTH', () => { + describe('unquoted', () => { + // Do not call diffStringsUnified if either string is longer than max. + const lessChange = chalk.inverse('single '); + const less = 'single line'; + const more = 'multi line' + '\n123456789'.repeat(2000); // 10 + 20K chars + + test('both are less', () => { + const less2 = 'multi\nline'; + const difference = printDiffOrStringified(less2, less, less, true); + + expect(difference).toMatch('- multi'); + expect(difference).toMatch('- line'); + expect(difference).toMatch(lessChange); + expect(difference).not.toMatch('+ single line'); + }); + + test('expected is more', () => { + const difference = printDiffOrStringified(more, less, less, true); + + expect(difference).toMatch('- multi line'); + expect(difference).toMatch('+ single line'); + expect(difference).not.toMatch(lessChange); + }); + + test('received is more', () => { + const difference = printDiffOrStringified(less, more, more, true); + + expect(difference).toMatch('- single line'); + expect(difference).toMatch('+ multi line'); + expect(difference).not.toMatch(lessChange); + }); + }); + + describe('quoted', () => { + // Do not call diffStringsRaw if either string is longer than max. + const lessChange = chalk.inverse('no'); + const less = 'no numbers'; + const more = 'many numbers' + ' 123456789'.repeat(2000); // 12 + 20K chars + const lessQuoted = '"' + less + '"'; + const moreQuoted = '"' + more + '"'; + + test('both are less', () => { + const lessQuoted2 = '"0 numbers"'; + const stringified = printDiffOrStringified( + lessQuoted2, + lessQuoted, + less, + true, + ); + + expect(stringified).toMatch('Received:'); + expect(stringified).toMatch(lessChange); + expect(stringified).not.toMatch('+ Received'); + }); + + test('expected is more', () => { + const stringified = printDiffOrStringified( + moreQuoted, + lessQuoted, + less, + true, + ); + + expect(stringified).toMatch('Received:'); + expect(stringified).toMatch(less); + expect(stringified).not.toMatch('+ Received'); + expect(stringified).not.toMatch(lessChange); + }); + + test('received is more', () => { + const stringified = printDiffOrStringified( + lessQuoted, + moreQuoted, + more, + true, + ); + + expect(stringified).toMatch('Snapshot:'); + expect(stringified).toMatch(less); + expect(stringified).not.toMatch('- Snapshot'); + expect(stringified).not.toMatch(lessChange); + }); }); }); describe('isLineDiffable', () => { describe('false', () => { + test('asymmetric matcher', () => { + const expected = null; + const received = {asymmetricMatch: () => {}}; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + test('boolean', () => { const expected = true; const received = false; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('date', () => { + const expected = new Date('2019-09-19'); + const received = new Date('2019-09-20'); + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('error', () => { + const expected = new Error( + 'Cannot spread fragment "NameAndAppearances" within itself.', + ); + const received = new Error( + 'Cannot spread fragment "NameAndAppearancesAndFriends" within itself.', + ); + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('function', () => { + const expected = undefined; + const received = () => {}; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('number', () => { const expected = -0; const received = NaN; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); }); @@ -284,7 +387,7 @@ describe('isLineDiffable', () => { {_id: '7fc63ff01769c4fa7d9279e97e307829', ...expected1}, ]; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('object', () => { @@ -305,21 +408,21 @@ describe('isLineDiffable', () => { type, }; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('single line expected and received', () => { const expected = []; const received = {}; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('single line expected and multi line received', () => { const expected = []; const received = [0]; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); }); }); @@ -330,7 +433,7 @@ test('multi line small change in one line and other is unchanged', () => { const received = "There is no route defined for key Settings.\nMust be one of: 'Home'"; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('multi line small changes', () => { @@ -355,14 +458,14 @@ test('multi line small changes', () => { ' at Object.doesNotThrow (__tests__/assertionError.test.js:70:10)', ].join('\n'); - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); test('single line large changes', () => { const expected = 'Array length must be a finite positive integer'; const received = 'Invalid array length'; - expect(testWithSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); }); describe('without serialize', () => { @@ -370,28 +473,28 @@ describe('without serialize', () => { const expected = 'var foo = `backtick`;'; const received = 'var foo = `back${x}tick`;'; - expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); }); test('backtick single line expected and multi line received', () => { const expected = 'var foo = `backtick`;'; const received = 'var foo = `back\ntick`;'; - expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); }); test('has no common after clean up chaff multi line', () => { const expected = 'delete\ntwo'; const received = 'insert\n2'; - expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); }); test('has no common after clean up chaff single line', () => { const expected = 'delete'; const received = 'insert'; - expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); }); test('prettier/pull/5590', () => { @@ -422,6 +525,6 @@ describe('without serialize', () => { '================================================================================', ].join('\n'); - expect(testWithoutSerialize(expected, received, false)).toMatchSnapshot(); + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); }); }); diff --git a/packages/jest-snapshot/src/index.ts b/packages/jest-snapshot/src/index.ts index e898b94630a9..3e587f1a89b3 100644 --- a/packages/jest-snapshot/src/index.ts +++ b/packages/jest-snapshot/src/index.ts @@ -343,7 +343,7 @@ const _toMatchSnapshot = ({ testName: fullTestName, }); const {count, pass} = result; - let {actual, expected} = result; + const {actual, expected} = result; let report: () => string; if (pass) { @@ -357,22 +357,9 @@ const _toMatchSnapshot = ({ `${RECEIVED_COLOR('Received value')} ` + `${actual}`; } else { - expected = utils.removeExtraLineBreaks(expected); - actual = utils.removeExtraLineBreaks(actual); - - // Assign to local variable because of declaration let expected: - // TypeScript thinks it could change before report function is called. - const printed = printDiffOrStringified( - expected, - actual, - received, - 'Snapshot', - 'Received', - snapshotState.expand, - ); - report = () => - `Snapshot name: ${printName(currentTestName, hint, count)}\n\n` + printed; + `Snapshot name: ${printName(currentTestName, hint, count)}\n\n` + + printDiffOrStringified(expected, actual, received, snapshotState.expand); } // Passing the actual and expected objects so that a custom reporter diff --git a/packages/jest-snapshot/src/print.ts b/packages/jest-snapshot/src/print.ts index c59df18106f5..b277c5fd51a8 100644 --- a/packages/jest-snapshot/src/print.ts +++ b/packages/jest-snapshot/src/print.ts @@ -5,22 +5,54 @@ * LICENSE file in the root directory of this source tree. */ -import diff, {diffStringsUnified} from 'jest-diff'; +import { + DIFF_DELETE, + DIFF_EQUAL, + DIFF_INSERT, + Diff, + diffLinesUnified, + diffStringsRaw, + diffStringsUnified, + splitLines0, +} from 'jest-diff'; import getType = require('jest-get-type'); import { EXPECTED_COLOR, + INVERTED_COLOR, RECEIVED_COLOR, getLabelPrinter, - printDiffOrStringify, } from 'jest-matcher-utils'; import prettyFormat = require('pretty-format'); -import {unescape} from './utils'; +import {unstringifyString} from './utils'; + +// Given array of diffs, return string: +// * include common substrings +// * exclude change substrings which have opposite op +// * include change substrings which have argument op +// with change color only if there is a common substring +const joinDiffs = ( + diffs: Array, + op: number, + hasCommon: boolean, +): string => + diffs.reduce( + (reduced: string, diff: Diff): string => + reduced + + (diff[0] === DIFF_EQUAL + ? diff[1] + : diff[0] !== op + ? '' + : hasCommon + ? INVERTED_COLOR(diff[1]) + : diff[1]), + '', + ); const isLineDiffable = (received: any): boolean => { const receivedType = getType(received); if (getType.isPrimitive(received)) { - return typeof received === 'string' && received.includes('\n'); + return typeof received === 'string'; } if ( @@ -48,74 +80,84 @@ const isLineDiffable = (received: any): boolean => { const MAX_DIFF_STRING_LENGTH = 20000; export const printDiffOrStringified = ( - expectedSerializedTrimmed: string, - receivedSerializedTrimmed: string, + a: string, // snapshot without extra line breaks + b: string, // received serialized but without extra line breaks received: unknown, - expectedLabel: string, - receivedLabel: string, expand: boolean, // CLI options: true if `--expand` or false if `--no-expand` ): string => { + const aAnnotation = 'Snapshot'; + const bAnnotation = 'Received'; + const aColor = EXPECTED_COLOR; + const bColor = RECEIVED_COLOR; + const options = { + aAnnotation, + aColor, + bAnnotation, + bColor, + expand, + includeChangeCounts: true, + }; + if (typeof received === 'string') { if ( - expectedSerializedTrimmed.length >= 2 && - expectedSerializedTrimmed.startsWith('"') && - expectedSerializedTrimmed.endsWith('"') && - receivedSerializedTrimmed === unescape(prettyFormat(received)) + a.length >= 2 && + a.startsWith('"') && + a.endsWith('"') && + b === prettyFormat(received) ) { - // The expected snapshot looks like a stringified string. - // The received serialization is default stringified string. - - // Undo default serialization of expected snapshot: - // Remove enclosing double quote marks. - // Remove backslash escape preceding backslash here, - // because unescape replaced it only preceding double quote mark. - return printDiffOrStringify( - expectedSerializedTrimmed.slice(1, -1).replace(/\\\\/g, '\\'), - received, - expectedLabel, - receivedLabel, - expand, - ); - } + // If snapshot looks like default serialization of a string + // and received is string which has default serialization. - // Display substring highlight even when strings have custom serialization. - if ( - expectedSerializedTrimmed.length !== 0 && - receivedSerializedTrimmed.length !== 0 && - expectedSerializedTrimmed.length <= MAX_DIFF_STRING_LENGTH && - receivedSerializedTrimmed.length <= MAX_DIFF_STRING_LENGTH && - expectedSerializedTrimmed !== receivedSerializedTrimmed - ) { - return diffStringsUnified( - expectedSerializedTrimmed, - receivedSerializedTrimmed, - { - aAnnotation: expectedLabel, - bAnnotation: receivedLabel, - expand, - }, - ); + if (!a.includes('\n') && !b.includes('\n')) { + // If neither string is multiline, + // display as labels and quoted strings. + let aQuoted = a; + let bQuoted = b; + + if ( + a.length - 2 <= MAX_DIFF_STRING_LENGTH && + b.length - 2 <= MAX_DIFF_STRING_LENGTH + ) { + const diffs = diffStringsRaw(a.slice(1, -1), b.slice(1, -1), true); + const hasCommon = diffs.some(diff => diff[0] === DIFF_EQUAL); + aQuoted = '"' + joinDiffs(diffs, DIFF_DELETE, hasCommon) + '"'; + bQuoted = '"' + joinDiffs(diffs, DIFF_INSERT, hasCommon) + '"'; + } + + const printLabel = getLabelPrinter(aAnnotation, bAnnotation); + return ( + printLabel(aAnnotation) + + aColor(aQuoted) + + '\n' + + printLabel(bAnnotation) + + bColor(bQuoted) + ); + } + + // Else either string is multiline, so display as unquoted strings. + a = unstringifyString(a); // hypothetical unserialized expected string + b = received; // not serialized } + // Else expected had custom serialization or was not a string + // or received has custom serialization. + + return a.length <= MAX_DIFF_STRING_LENGTH && + b.length <= MAX_DIFF_STRING_LENGTH + ? diffStringsUnified(a, b, options) + : diffLinesUnified(splitLines0(a), splitLines0(b), options); } - if ( - (expectedSerializedTrimmed.includes('\n') || - receivedSerializedTrimmed.includes('\n')) && - isLineDiffable(received) - ) { - return diff(expectedSerializedTrimmed, receivedSerializedTrimmed, { - aAnnotation: expectedLabel, - bAnnotation: receivedLabel, - expand, - }) as string; + if (isLineDiffable(received)) { + // TODO future PR will replace with diffLinesUnified2 to ignore indentation + return diffLinesUnified(splitLines0(a), splitLines0(b), options); } - const printLabel = getLabelPrinter(expectedLabel, receivedLabel); + const printLabel = getLabelPrinter(aAnnotation, bAnnotation); return ( - printLabel(expectedLabel) + - EXPECTED_COLOR(expectedSerializedTrimmed) + + printLabel(aAnnotation) + + aColor(a) + '\n' + - printLabel(receivedLabel) + - RECEIVED_COLOR(receivedSerializedTrimmed) + printLabel(bAnnotation) + + bColor(b) ); }; diff --git a/packages/jest-snapshot/src/utils.ts b/packages/jest-snapshot/src/utils.ts index 3449492afe8c..eb97da5c3edc 100644 --- a/packages/jest-snapshot/src/utils.ts +++ b/packages/jest-snapshot/src/utils.ts @@ -136,19 +136,21 @@ export const removeExtraLineBreaks = (string: string): string => ? string.slice(1, -1) : string; -export const serialize = (data: string): string => - addExtraLineBreaks( - normalizeNewlines( - prettyFormat(data, { - escapeRegex: true, - plugins: getSerializers(), - printFunctionName: false, - }), - ), +export const serialize = (val: unknown): string => + addExtraLineBreaks(stringify(val)); + +export const stringify = (val: unknown): string => + normalizeNewlines( + prettyFormat(val, { + escapeRegex: true, + plugins: getSerializers(), + printFunctionName: false, + }), ); -// unescape double quotes -export const unescape = (data: string): string => data.replace(/\\(")/g, '$1'); +// Remove double quote marks and unescape double quotes and backslashes. +export const unstringifyString = (stringified: string): string => + stringified.slice(1, -1).replace(/\\("|\\)/g, '$1'); export const escapeBacktickString = (str: string): string => str.replace(/`|\\|\${/g, '\\$&'); From f15ada4e81ce1d5cbb135bc013d467d71adc7b6d Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 9 Oct 2019 21:42:28 +0200 Subject: [PATCH 53/97] chore: bump lolex to v5 (#9034) --- packages/jest-fake-timers/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/jest-fake-timers/package.json b/packages/jest-fake-timers/package.json index 3085e2d14b62..08ea77a46d8f 100644 --- a/packages/jest-fake-timers/package.json +++ b/packages/jest-fake-timers/package.json @@ -14,7 +14,7 @@ "jest-message-util": "^24.9.0", "jest-mock": "^24.9.0", "jest-util": "^24.9.0", - "lolex": "^4.2.0" + "lolex": "^5.0.0" }, "devDependencies": { "@types/lolex": "^3.1.1" diff --git a/yarn.lock b/yarn.lock index efb2690bd15d..db12aa6d64c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8833,10 +8833,10 @@ logalot@^2.0.0: figures "^1.3.5" squeak "^1.0.0" -lolex@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" - integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== +lolex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.0.0.tgz#30096cae7d1e598ff57f5f5d429a41e6276e1eef" + integrity sha512-79Le9AHAH4tg76f/Zti7S9TzUZmuKFYOWLAXUj+K5g8ZIK7d0xw2i6aB9FNIkJbCGTQ9CKxm3IQjqu7YR6+oMA== longest@^1.0.0: version "1.0.1" From 8d47ffa34fb204015d6788cb1d448a8605ec9bd5 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Thu, 10 Oct 2019 17:45:52 -0400 Subject: [PATCH 54/97] expect, jest-matcher-utils: Display change counts in annotation lines (#9035) * expect, jest-matcher-utils: Display change counts in annotation lines * Update CHANGELOG.md --- CHANGELOG.md | 1 + .../__snapshots__/failures.test.ts.snap | 8 +- .../__snapshots__/extend.test.js.snap | 16 +- .../__snapshots__/matchers.test.js.snap | 264 +++++++++--------- .../toThrowMatchers.test.ts.snap | 8 +- .../__snapshots__/index.test.ts.snap | 4 +- .../printDiffOrStringify.test.ts.snap | 8 +- packages/jest-matcher-utils/src/index.ts | 8 +- 8 files changed, 160 insertions(+), 157 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a654ea7f9591..60010fe140fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - `[babel-plugin-jest-hoist]` Add `BigInt` to `WHITELISTED_IDENTIFIERS` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[babel-preset-jest]` Add `@babel/plugin-syntax-bigint` ([#8382](https://github.com/facebook/jest/pull/8382)) - `[expect]` Add `BigInt` support to `toBeGreaterThan`, `toBeGreaterThanOrEqual`, `toBeLessThan` and `toBeLessThanOrEqual` ([#8382](https://github.com/facebook/jest/pull/8382)) +- `[expect, jest-matcher-utils]` Display change counts in annotation lines ([#9035](https://github.com/facebook/jest/pull/9035)) - `[jest-config]` Throw the full error message and stack when a Jest preset is missing a dependency ([#8924](https://github.com/facebook/jest/pull/8924)) - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) diff --git a/e2e/__tests__/__snapshots__/failures.test.ts.snap b/e2e/__tests__/__snapshots__/failures.test.ts.snap index 9d29554a17bc..5c0197b587e7 100644 --- a/e2e/__tests__/__snapshots__/failures.test.ts.snap +++ b/e2e/__tests__/__snapshots__/failures.test.ts.snap @@ -288,8 +288,8 @@ FAIL __tests__/asyncFailures.test.js expect(received).resolves.toEqual(expected) // deep equality - - Expected - + Received + - Expected - 1 + + Received + 1 Object { - "baz": "bar", @@ -310,8 +310,8 @@ FAIL __tests__/asyncFailures.test.js expect(received).rejects.toEqual(expected) // deep equality - - Expected - + Received + - Expected - 1 + + Received + 1 Object { - "baz": "bar", diff --git a/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap b/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap index c912d6a569cf..b1b67afefea8 100644 --- a/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/extend.test.js.snap @@ -3,8 +3,8 @@ exports[`defines asymmetric unary matchers 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "value": toBeDivisibleBy<2>, @@ -15,8 +15,8 @@ exports[`defines asymmetric unary matchers 1`] = ` exports[`defines asymmetric unary matchers that can be prefixed by not 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "value": not.toBeDivisibleBy<2>, @@ -27,8 +27,8 @@ exports[`defines asymmetric unary matchers that can be prefixed by not 1`] = ` exports[`defines asymmetric variadic matchers 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "value": toBeWithinRange<4, 11>, @@ -39,8 +39,8 @@ exports[`defines asymmetric variadic matchers 1`] = ` exports[`defines asymmetric variadic matchers that can be prefixed by not 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "value": not.toBeWithinRange<1, 3>, diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index 29b749077cf7..f17d9dd254db 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -227,8 +227,8 @@ Received has value: undefined exports[`.toBe() does not crash on circular references 1`] = ` expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected - 1 ++ Received + 3 - Object {} + Object { @@ -300,8 +300,8 @@ line string" 1`] = ` expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected - 1 ++ Received + 2 - 3 + four @@ -321,8 +321,8 @@ exports[`.toBe() fails for: "with trailing space" and "without trailing space" 1`] = ` expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected - 1 ++ Received + 2 - without trailing space + with @@ -364,8 +364,8 @@ exports[`.toBe() fails for: {"a": [Function a], "b": 2} and {"a": Any, If it should pass with deep equality, replace "toBe" with "toStrictEqual" -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": Any, @@ -386,8 +386,8 @@ Received: serializes to the same string exports[`.toBe() fails for: {"a": 1} and {"a": 5} 1`] = ` expect(received).toBe(expected) // Object.is equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": 5, @@ -400,8 +400,8 @@ exports[`.toBe() fails for: {"a": undefined, "b": 2} and {"b": 2} 1`] = ` If it should pass with deep equality, replace "toBe" with "toEqual" -- Expected -+ Received +- Expected - 0 ++ Received + 1 Object { + "a": undefined, @@ -2012,8 +2012,8 @@ exports[`.toEqual() {pass: false} expect("type TypeName = T extends Function : \\"object\\";") 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 3 ++ Received + 1 - type TypeName = T extends Function - ? "function" @@ -2024,8 +2024,8 @@ exports[`.toEqual() {pass: false} expect("type TypeName = T extends Function exports[`.toEqual() {pass: false} expect([1, 2]).toEqual([2, 1]) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Array [ - 2, @@ -2044,8 +2044,8 @@ Received: [1, 3] exports[`.toEqual() {pass: false} expect([1]).toEqual([2]) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Array [ - 2, @@ -2063,8 +2063,8 @@ Received: {"a": 1, "b": 2} exports[`.toEqual() {pass: false} expect({"a": 1}).toEqual({"a": 2}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": 2, @@ -2075,8 +2075,8 @@ exports[`.toEqual() {pass: false} expect({"a": 1}).toEqual({"a": 2}) 1`] = ` exports[`.toEqual() {pass: false} expect({"a": 5}).toEqual({"b": 6}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "b": 6, @@ -2087,8 +2087,8 @@ exports[`.toEqual() {pass: false} expect({"a": 5}).toEqual({"b": 6}) 1`] = ` exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).toEqual({"nodeName": "p", "nodeType": 1}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "nodeName": "p", @@ -2100,8 +2100,8 @@ exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).toE exports[`.toEqual() {pass: false} expect({"target": {"nodeType": 1, "value": "a"}}).toEqual({"target": {"nodeType": 1, "value": "b"}}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { "target": Object { @@ -2150,8 +2150,8 @@ Received: 5e-324 exports[`.toEqual() {pass: false} expect(Immutable.List [1, 2]).toEqual(Immutable.List [2, 1]) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.List [ - 2, @@ -2163,8 +2163,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.List [1, 2]).toEqual(Immutabl exports[`.toEqual() {pass: false} expect(Immutable.List [1]).toEqual(Immutable.List [2]) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.List [ - 2, @@ -2175,8 +2175,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.List [1]).toEqual(Immutable.L exports[`.toEqual() {pass: false} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 11}}}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.Map { "1": Immutable.Map { @@ -2191,8 +2191,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.Map {"1": Immutable.Map {"2": exports[`.toEqual() {pass: false} expect(Immutable.Map {"a": 0}).toEqual(Immutable.Map {"b": 0}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.Map { - "b": 0, @@ -2203,8 +2203,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.Map {"a": 0}).toEqual(Immutab exports[`.toEqual() {pass: false} expect(Immutable.Map {"v": 1}).toEqual(Immutable.Map {"v": 2}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.Map { - "v": 2, @@ -2215,8 +2215,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.Map {"v": 1}).toEqual(Immutab exports[`.toEqual() {pass: false} expect(Immutable.OrderedMap {1: "one", 2: "two"}).toEqual(Immutable.OrderedMap {2: "two", 1: "one"}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.OrderedMap { - 2: "two", @@ -2228,8 +2228,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.OrderedMap {1: "one", 2: "two exports[`.toEqual() {pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Immutable.OrderedSet [2, 1]) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Immutable.OrderedSet [ - 2, @@ -2241,8 +2241,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Im exports[`.toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set []) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 4 - Immutable.Set [] + Immutable.Set [ @@ -2254,8 +2254,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable exports[`.toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [1, 2, 3]) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 0 Immutable.Set [ 1, @@ -2267,8 +2267,8 @@ exports[`.toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable exports[`.toEqual() {pass: false} expect(Map {"a" => 0}).toEqual(Map {"b" => 0}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Map { - "b" => 0, @@ -2279,8 +2279,8 @@ exports[`.toEqual() {pass: false} expect(Map {"a" => 0}).toEqual(Map {"b" => 0}) exports[`.toEqual() {pass: false} expect(Map {"v" => 1}).toEqual(Map {"v" => 2}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Map { - "v" => 2, @@ -2291,8 +2291,8 @@ exports[`.toEqual() {pass: false} expect(Map {"v" => 1}).toEqual(Map {"v" => 2}) exports[`.toEqual() {pass: false} expect(Map {["v"] => 1}).toEqual(Map {["v"] => 2}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Map { Array [ @@ -2305,8 +2305,8 @@ exports[`.toEqual() {pass: false} expect(Map {["v"] => 1}).toEqual(Map {["v"] => exports[`.toEqual() {pass: false} expect(Map {[1] => Map {[1] => "one"}}).toEqual(Map {[1] => Map {[1] => "two"}}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 @@ -2,8 +2,8 @@ Array [ @@ -2330,8 +2330,8 @@ Received: Map {} exports[`.toEqual() {pass: false} expect(Map {1 => "one", 2 => "two"}).toEqual(Map {1 => "one"}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 0 ++ Received + 1 Map { 1 => "one", @@ -2342,8 +2342,8 @@ exports[`.toEqual() {pass: false} expect(Map {1 => "one", 2 => "two"}).toEqual(M exports[`.toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [2]}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 3 ++ Received + 0 @@ -3,9 +3,6 @@ 1, @@ -2360,8 +2360,8 @@ exports[`.toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], exports[`.toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [3]}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 3 ++ Received + 0 @@ -3,9 +3,6 @@ 1, @@ -2378,8 +2378,8 @@ exports[`.toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], exports[`.toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 4 - Set {} + Set { @@ -2391,8 +2391,8 @@ exports[`.toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {}) 1`] = ` exports[`.toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 0 Set { 1, @@ -2404,8 +2404,8 @@ exports[`.toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3}) 1`] exports[`.toEqual() {pass: false} expect(Set {Set {1}, Set {2}}).toEqual(Set {Set {1}, Set {3}}) 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Set { Set { @@ -3065,8 +3065,8 @@ exports[`.toHaveProperty() {pass: false} expect({"a": {"b": {"c": 5}}}).toHavePr Expected path: "a.b" -- Expected value -+ Received value +- Expected value - 1 ++ Received value + 1 Object { - "c": 4, @@ -3139,8 +3139,8 @@ Is good for you.") 1`] = ` Expected path: ["children", 0] -- Expected value -+ Received value +- Expected value - 3 ++ Received value + 3 - Roses are red, violets are blue. + Roses are red. @@ -3600,8 +3600,8 @@ Received: "Because TypeScript support in Babel is just transpilation, exports[`.toStrictEqual() displays substring diff for multiple lines 1`] = ` expect(received).toStrictEqual(expected) // deep equality -- Expected -+ Received +- Expected - 7 ++ Received + 7 - 69 | + 68 | @@ -3623,8 +3623,8 @@ exports[`.toStrictEqual() displays substring diff for multiple lines 1`] = ` exports[`.toStrictEqual() matches the expected snapshot when it fails 1`] = ` expect(received).toStrictEqual(expected) // deep equality -- Expected -+ Received +- Expected - 4 ++ Received + 1 Object { - "test": TestClassA { @@ -3645,8 +3645,8 @@ Expected: not {"test": {"a": 1, "b": 2}} exports[`toMatchObject() {pass: false} expect([0]).toMatchObject([-0]) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Array [ - -0, @@ -3657,8 +3657,8 @@ exports[`toMatchObject() {pass: false} expect([0]).toMatchObject([-0]) 1`] = ` exports[`toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2]) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Array [ 1, @@ -3671,8 +3671,8 @@ exports[`toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2] exports[`toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1]) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Array [ + 1, @@ -3685,8 +3685,8 @@ exports[`toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1] exports[`toMatchObject() {pass: false} expect([1, 2]).toMatchObject([1, 3]) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Array [ 1, @@ -3705,8 +3705,8 @@ Received: [Error: foo] exports[`toMatchObject() {pass: false} expect({"a": "a", "c": "d"}).toMatchObject({"a": Any}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": Any, @@ -3717,8 +3717,8 @@ exports[`toMatchObject() {pass: false} expect({"a": "a", "c": "d"}).toMatchObjec exports[`toMatchObject() {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b!", "c": "d"}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": "b!", @@ -3730,8 +3730,8 @@ exports[`toMatchObject() {pass: false} expect({"a": "b", "c": "d"}).toMatchObjec exports[`toMatchObject() {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"e": "b"}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 2 Object { - "e": "b", @@ -3743,8 +3743,8 @@ exports[`toMatchObject() {pass: false} expect({"a": "b", "c": "d"}).toMatchObjec exports[`toMatchObject() {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": [3]}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 3 ++ Received + 1 Object { "a": "b", @@ -3760,8 +3760,8 @@ exports[`toMatchObject() {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, exports[`toMatchObject() {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"l": {"r": "r"}}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 2 Object { "t": Object { @@ -3777,8 +3777,8 @@ exports[`toMatchObject() {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, exports[`toMatchObject() {pass: false} expect({"a": "b"}).toMatchObject({"c": "d"}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "c": "d", @@ -3789,8 +3789,8 @@ exports[`toMatchObject() {pass: false} expect({"a": "b"}).toMatchObject({"c": "d exports[`toMatchObject() {pass: false} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "c"}]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { "a": Array [ @@ -3805,8 +3805,8 @@ exports[`toMatchObject() {pass: false} expect({"a": [{"a": "a", "b": "b"}]}).toM exports[`toMatchObject() {pass: false} expect({"a": [3, 4, "v"], "b": "b"}).toMatchObject({"a": ["v"]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 0 ++ Received + 2 Object { "a": Array [ @@ -3820,8 +3820,8 @@ exports[`toMatchObject() {pass: false} expect({"a": [3, 4, "v"], "b": "b"}).toMa exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5, 6]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 0 Object { "a": Array [ @@ -3836,8 +3836,8 @@ exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatc exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 0 ++ Received + 1 Object { "a": Array [ @@ -3851,8 +3851,8 @@ exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatc exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": 4}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 3 ++ Received + 5 Object { - "a": Object { @@ -3869,8 +3869,8 @@ exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatc exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": Any}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 3 ++ Received + 5 Object { - "a": Object { @@ -3887,8 +3887,8 @@ exports[`toMatchObject() {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatc exports[`toMatchObject() {pass: false} expect({"a": 1, "b": 1, "c": 1, "d": {"e": {"f": 555}}}).toMatchObject({"d": {"e": {"f": 222}}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { "d": Object { @@ -3903,8 +3903,8 @@ exports[`toMatchObject() {pass: false} expect({"a": 1, "b": 1, "c": 1, "d": {"e" exports[`toMatchObject() {pass: false} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-10-10T00:00:00.000Z}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": 2015-10-10T00:00:00.000Z, @@ -3915,8 +3915,8 @@ exports[`toMatchObject() {pass: false} expect({"a": 2015-11-30T00:00:00.000Z, "b exports[`toMatchObject() {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": "4"}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": "4", @@ -3927,8 +3927,8 @@ exports[`toMatchObject() {pass: false} expect({"a": null, "b": "b"}).toMatchObje exports[`toMatchObject() {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": undefined}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": undefined, @@ -3939,8 +3939,8 @@ exports[`toMatchObject() {pass: false} expect({"a": null, "b": "b"}).toMatchObje exports[`toMatchObject() {pass: false} expect({"a": undefined}).toMatchObject({"a": null}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": null, @@ -3951,8 +3951,8 @@ exports[`toMatchObject() {pass: false} expect({"a": undefined}).toMatchObject({" exports[`toMatchObject() {pass: false} expect({}).toMatchObject({"a": undefined}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 3 ++ Received + 1 - Object { - "a": undefined, @@ -3970,8 +3970,8 @@ Received: 2015-11-30T00:00:00.000Z exports[`toMatchObject() {pass: false} expect(Set {1, 2}).toMatchObject(Set {2}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 0 ++ Received + 1 Set { + 1, @@ -4128,8 +4128,8 @@ Received: Set {1, 2} exports[`toMatchObject() circular references simple circular references {pass: false} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "world", "ref": [Circular]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": "world", @@ -4141,8 +4141,8 @@ exports[`toMatchObject() circular references simple circular references {pass: f exports[`toMatchObject() circular references simple circular references {pass: false} expect({"ref": "not a ref"}).toMatchObject({"a": "hello", "ref": [Circular]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 2 ++ Received + 1 Object { - "a": "hello", @@ -4154,8 +4154,8 @@ exports[`toMatchObject() circular references simple circular references {pass: f exports[`toMatchObject() circular references simple circular references {pass: false} expect({}).toMatchObject({"a": "hello", "ref": [Circular]}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 4 ++ Received + 1 - Object { - "a": "hello", @@ -4180,8 +4180,8 @@ Received: {"a": "hello", "ref": [Circular]} exports[`toMatchObject() circular references transitive circular references {pass: false} expect({"a": "world", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "a": "hello", @@ -4195,8 +4195,8 @@ exports[`toMatchObject() circular references transitive circular references {pas exports[`toMatchObject() circular references transitive circular references {pass: false} expect({"nestedObj": {"parentObj": "not the parent ref"}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 2 ++ Received + 1 Object { - "a": "hello", @@ -4210,8 +4210,8 @@ exports[`toMatchObject() circular references transitive circular references {pas exports[`toMatchObject() circular references transitive circular references {pass: false} expect({}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 6 ++ Received + 1 - Object { - "a": "hello", @@ -4238,8 +4238,8 @@ Received: {"a": "hello", "nestedObj": {"parentObj": [Circular]}} exports[`toMatchObject() does not match properties up in the prototype chain 1`] = ` expect(received).toMatchObject(expected) -- Expected -+ Received +- Expected - 1 ++ Received + 0 Object { "other": "child", diff --git a/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap b/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap index 1298e5c60def..0b2df1702e07 100644 --- a/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap +++ b/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.ts.snap @@ -164,8 +164,8 @@ Expected message: not "Invalid array length" exports[`toThrow error-message fail multiline diff highlight incorrect expected space 1`] = ` expect(received).toThrow(expected) -- Expected message -+ Received message +- Expected message - 1 ++ Received message + 1 - There is no route defined for key Settings. + There is no route defined for key Settings. @@ -472,8 +472,8 @@ Expected message: not "Invalid array length" exports[`toThrowError error-message fail multiline diff highlight incorrect expected space 1`] = ` expect(received).toThrowError(expected) -- Expected message -+ Received message +- Expected message - 1 ++ Received message + 1 - There is no route defined for key Settings. + There is no route defined for key Settings. diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap index c930a2254670..449a8ac82a93 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap @@ -91,8 +91,8 @@ Expected has value: null exports[`stringify() toJSON errors when comparing two objects 1`] = ` expect(received).toEqual(expected) // deep equality -- Expected -+ Received +- Expected - 1 ++ Received + 1 Object { - "b": 1, diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap index a7b07ed744fe..bb0566e91835 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/printDiffOrStringify.test.ts.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`printDiffOrStringify expected and received are multi line with trailing spaces 1`] = ` -- Expected -+ Received +- Expected - 3 ++ Received + 3 - delete + insert @@ -29,8 +29,8 @@ Received: "" `; exports[`printDiffOrStringify has no common after clean up chaff multiline 1`] = ` -- Expected -+ Received +- Expected - 2 ++ Received + 2 - delete - two diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index c1526694b77d..8229292934b6 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -6,7 +6,7 @@ */ import chalk from 'chalk'; -import diffLinesUnified, { +import diffDefault, { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, @@ -325,6 +325,7 @@ export const printDiffOrStringify = ( aAnnotation: expectedLabel, bAnnotation: receivedLabel, expand, + includeChangeCounts: true, }); } @@ -347,10 +348,11 @@ export const printDiffOrStringify = ( } if (isLineDiffable(expected, received)) { - const difference = diffLinesUnified(expected, received, { + const difference = diffDefault(expected, received, { aAnnotation: expectedLabel, bAnnotation: receivedLabel, expand, + includeChangeCounts: true, }); if ( @@ -390,7 +392,7 @@ const shouldPrintDiff = (actual: unknown, expected: unknown) => { }; export const diff = (a: any, b: any, options?: DiffOptions): string | null => - shouldPrintDiff(a, b) ? diffLinesUnified(a, b, options) : null; + shouldPrintDiff(a, b) ? diffDefault(a, b, options) : null; export const pluralize = (word: string, count: number) => (NUMBERS[count] || count) + ' ' + word + (count === 1 ? '' : 's'); From 59f6e3fd3fe6b502100a9c91ea22e91fe554136b Mon Sep 17 00:00:00 2001 From: Carolyn Stransky Date: Fri, 11 Oct 2019 08:53:50 +0200 Subject: [PATCH 55/97] Docs: Removed condescending language (#9040) * Round 1 - simply, just * Round 2 - easy, easily, of course, simple --- CONTRIBUTING.md | 2 +- README.md | 2 +- docs/Configuration.md | 2 +- docs/Es6ClassMocks.md | 4 ++-- docs/ExpectAPI.md | 16 ++++++++-------- docs/GettingStarted.md | 2 +- docs/GlobalAPI.md | 12 ++++++------ docs/ManualMocks.md | 2 +- docs/MigrationGuide.md | 2 +- docs/MockFunctionAPI.md | 2 +- docs/MockFunctions.md | 6 +++--- docs/MoreResources.md | 2 +- docs/SetupAndTeardown.md | 6 +++--- docs/SnapshotTesting.md | 10 +++++----- docs/TestingAsyncCode.md | 12 ++++++------ docs/Troubleshooting.md | 4 ++-- docs/TutorialAsync.md | 4 ++-- docs/TutorialReact.md | 4 ++-- docs/TutorialReactNative.md | 2 +- docs/Webpack.md | 2 +- packages/babel-jest/README.md | 2 +- packages/jest-circus/README.md | 2 +- packages/jest-mock/README.md | 2 +- packages/pretty-format/README.md | 2 +- website/README.md | 2 +- .../versioned_docs/version-22.x/Configuration.md | 2 +- website/versioned_docs/version-22.x/ExpectAPI.md | 14 +++++++------- website/versioned_docs/version-22.x/GlobalAPI.md | 10 +++++----- .../versioned_docs/version-22.x/ManualMocks.md | 2 +- .../version-22.x/MigrationGuide.md | 2 +- .../version-22.x/MockFunctionAPI.md | 2 +- .../versioned_docs/version-22.x/MockFunctions.md | 6 +++--- .../versioned_docs/version-22.x/MoreResources.md | 2 +- .../version-22.x/SetupAndTeardown.md | 6 +++--- .../version-22.x/SnapshotTesting.md | 6 +++--- .../version-22.x/TestingAsyncCode.md | 12 ++++++------ .../version-22.x/Troubleshooting.md | 4 ++-- .../versioned_docs/version-22.x/TutorialAsync.md | 4 ++-- .../versioned_docs/version-22.x/TutorialReact.md | 4 ++-- .../version-22.x/TutorialReactNative.md | 2 +- website/versioned_docs/version-22.x/Webpack.md | 2 +- .../versioned_docs/version-23.x/Es6ClassMocks.md | 4 ++-- website/versioned_docs/version-23.x/ExpectAPI.md | 16 ++++++++-------- website/versioned_docs/version-23.x/GlobalAPI.md | 12 ++++++------ .../versioned_docs/version-23.x/ManualMocks.md | 2 +- .../version-23.x/MockFunctionAPI.md | 2 +- .../versioned_docs/version-23.x/MockFunctions.md | 6 +++--- .../versioned_docs/version-23.x/MoreResources.md | 2 +- .../version-23.x/SnapshotTesting.md | 10 +++++----- .../version-23.x/Troubleshooting.md | 4 ++-- .../versioned_docs/version-23.x/TutorialAsync.md | 4 ++-- .../versioned_docs/version-23.x/TutorialReact.md | 4 ++-- website/versioned_docs/version-23.x/Webpack.md | 2 +- .../versioned_docs/version-24.0/Configuration.md | 2 +- .../versioned_docs/version-24.0/Es6ClassMocks.md | 4 ++-- website/versioned_docs/version-24.0/ExpectAPI.md | 16 ++++++++-------- website/versioned_docs/version-24.0/GlobalAPI.md | 12 ++++++------ .../version-24.0/MockFunctionAPI.md | 2 +- .../versioned_docs/version-24.0/MockFunctions.md | 6 +++--- .../version-24.0/SnapshotTesting.md | 10 +++++----- .../version-24.0/TestingAsyncCode.md | 12 ++++++------ .../version-24.0/Troubleshooting.md | 4 ++-- .../versioned_docs/version-24.0/TutorialAsync.md | 4 ++-- .../versioned_docs/version-24.0/TutorialReact.md | 4 ++-- .../version-24.0/TutorialReactNative.md | 2 +- website/versioned_docs/version-24.0/Webpack.md | 2 +- .../versioned_docs/version-24.1/Configuration.md | 2 +- .../versioned_docs/version-24.6/Configuration.md | 2 +- .../version-24.6/GettingStarted.md | 2 +- .../version-24.6/MigrationGuide.md | 2 +- .../versioned_docs/version-24.8/Configuration.md | 2 +- website/versioned_docs/version-24.8/ExpectAPI.md | 16 ++++++++-------- .../versioned_docs/version-24.8/TutorialReact.md | 4 ++-- website/versioned_docs/version-24.8/Webpack.md | 2 +- .../versioned_docs/version-24.9/Configuration.md | 2 +- 75 files changed, 185 insertions(+), 185 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e1203d14d563..c05952b8b330 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -121,7 +121,7 @@ Ran all test suites. ##### Using jest-circus -There may be cases where you want to run jest using `jest-circus` instead of `jest-jasmine2` (which is the default runner) for integration testing. In situations like this just set the environment variable `JEST_CIRCUS` to 1. That will configure jest to use `jest-circus`. So something like this. +There may be cases where you want to run jest using `jest-circus` instead of `jest-jasmine2` (which is the default runner) for integration testing. In situations like this, set the environment variable `JEST_CIRCUS` to 1. That will configure jest to use `jest-circus`. So something like this. ```bash JEST_CIRCUS=1 yarn jest diff --git a/README.md b/README.md index 22e80217566f..e577a8796a04 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ module.exports = { }; ``` -Note, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). +Note, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). diff --git a/docs/Configuration.md b/docs/Configuration.md index 7c01a406c27b..23af2d858c76 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -86,7 +86,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); diff --git a/docs/Es6ClassMocks.md b/docs/Es6ClassMocks.md index 01556f330fed..a9b0adfc64db 100644 --- a/docs/Es6ClassMocks.md +++ b/docs/Es6ClassMocks.md @@ -190,7 +190,7 @@ describe('When SoundPlayer throws an error', () => { ## In depth: Understanding mock constructor functions -Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own simple mocks to illustrate how mocking works. +Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own smaller mocks to illustrate how mocking works. ### Manual mock that is another ES6 class @@ -211,7 +211,7 @@ export default class SoundPlayer { } ``` -### Simple mock using module factory parameter +### Mock using module factory parameter The module factory function passed to `jest.mock(path, moduleFactory)` can be a HOF that returns a function\*. This will allow calling `new` on the mock. Again, this allows you to inject different behavior for testing, but does not provide a way to spy on calls. diff --git a/docs/ExpectAPI.md b/docs/ExpectAPI.md index 2dcb31acd31c..f4345c4c8fce 100644 --- a/docs/ExpectAPI.md +++ b/docs/ExpectAPI.md @@ -207,7 +207,7 @@ When an assertion fails, the error message should give as much signal as necessa To use snapshot testing inside of your custom matcher you can import `jest-snapshot` and use it from within your matcher. -Here's a simple snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: +Here's a snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: ```js const {toMatchSnapshot} = require('jest-snapshot'); @@ -798,7 +798,7 @@ const houseForSale = { }; test('this house has my desired features', () => { - // Simple Referencing + // Example Referencing expect(houseForSale).toHaveProperty('bath'); expect(houseForSale).toHaveProperty('bedrooms', 4); @@ -838,7 +838,7 @@ The optional `numDigits` argument limits the number of digits to check **after** Intuitive equality comparisons often fail, because arithmetic on decimal (base 10) values often have rounding errors in limited precision binary (base 2) representation. For example, this test fails: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBe(0.3); // Fails! }); ``` @@ -848,7 +848,7 @@ It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. For example, this test passes with a precision of 5 digits: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBeCloseTo(0.3, 5); }); ``` @@ -857,7 +857,7 @@ Because floating point errors are the problem that `toBeCloseTo` solves, it does ### `.toBeDefined()` -Use `.toBeDefined` to check that a variable is not undefined. For example, if you just want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: +Use `.toBeDefined` to check that a variable is not undefined. For example, if you want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: ```js test('there is a new flavor idea', () => { @@ -869,7 +869,7 @@ You could write `expect(fetchNewFlavorIdea()).not.toBe(undefined)`, but it's bet ### `.toBeFalsy()` -Use `.toBeFalsy` when you don't care what a value is, you just want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeFalsy` when you don't care what a value is and you want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -957,7 +957,7 @@ test('bloop returns null', () => { ### `.toBeTruthy()` -Use `.toBeTruthy` when you don't care what a value is, you just want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeTruthy` when you don't care what a value is and you want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -966,7 +966,7 @@ if (thirstInfo()) { } ``` -You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you just want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: +You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: ```js test('drinking La Croix leads to having thirst info', () => { diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index 588f6a5ccc10..8d0e593fcbee 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -175,4 +175,4 @@ module.exports = { }; ``` -However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). +However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). diff --git a/docs/GlobalAPI.md b/docs/GlobalAPI.md index 125cf8558e77..fb29828743c9 100644 --- a/docs/GlobalAPI.md +++ b/docs/GlobalAPI.md @@ -123,7 +123,7 @@ test('can find things', () => { }); ``` -Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could just do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. +Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. If `beforeAll` is inside a `describe` block, it runs at the beginning of the describe block. @@ -190,7 +190,7 @@ describe('my beverage', () => { }); ``` -This isn't required - you can just write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. +This isn't required - you can write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. You can also nest `describe` blocks if you have a hierarchy of tests: @@ -388,7 +388,7 @@ describe.skip('my other beverage', () => { }); ``` -Using `describe.skip` is often just an easier alternative to temporarily commenting out a chunk of tests. +Using `describe.skip` is often a cleaner alternative to temporarily commenting out a chunk of tests. ### `describe.skip.each(table)(name, fn)` @@ -544,7 +544,7 @@ test('it is not snowing', () => { Only the "it is raining" test will run in that test file, since it is run with `test.only`. -Usually you wouldn't check code using `test.only` into source control - you would use it just for debugging, and remove it once you have fixed the broken tests. +Usually you wouldn't check code using `test.only` into source control - you would use it for debugging, and remove it once you have fixed the broken tests. ### `test.only.each(table)(name, fn)` @@ -590,7 +590,7 @@ test('will not be ran', () => { Also under the aliases: `it.skip(name, fn)` or `xit(name, fn)` or `xtest(name, fn)` -When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to just delete this code, you can use `test.skip` to specify some tests to skip. +When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to delete this code, you can use `test.skip` to specify some tests to skip. For example, let's say you had these tests: @@ -606,7 +606,7 @@ test.skip('it is not snowing', () => { Only the "it is raining" test will run, since the other test is run with `test.skip`. -You could simply comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. +You could comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. ### `test.skip.each(table)(name, fn)` diff --git a/docs/ManualMocks.md b/docs/ManualMocks.md index 58e2a4fb37c1..13e9a124baff 100644 --- a/docs/ManualMocks.md +++ b/docs/ManualMocks.md @@ -124,7 +124,7 @@ describe('listFilesInDirectorySync', () => { }); ``` -The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. +The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using [`jest.requireActual(moduleName)`](JestObjectAPI.md#jestrequireactualmodulename) in your manual mock and amending it with mock functions before exporting it. diff --git a/docs/MigrationGuide.md b/docs/MigrationGuide.md index d475453466c2..13d0bed5674d 100644 --- a/docs/MigrationGuide.md +++ b/docs/MigrationGuide.md @@ -5,7 +5,7 @@ title: Migrating to Jest If you'd like to try out Jest with an existing codebase, there are a number of ways to convert to Jest: -- If you are using Jasmine, or a Jasmine like API (for example [Mocha](https://mochajs.org)), Jest should be mostly compatible and easy to migrate to. +- If you are using Jasmine, or a Jasmine like API (for example [Mocha](https://mochajs.org)), Jest should be mostly compatible, which makes it less complicated to migrate to. - If you are using AVA, Expect.js (by Automattic), Jasmine, Mocha, proxyquire, Should.js or Tape you can automatically migrate with Jest Codemods (see below). - If you like [chai](http://chaijs.com/), you can upgrade to Jest and continue using chai. However, we recommend trying out Jest's assertions and their failure messages. Jest Codemods can migrate from chai (see below). diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index ed0a9ab85c7b..ce295cd642c9 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -3,7 +3,7 @@ id: mock-function-api title: Mock Functions --- -Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than just testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. +Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than only testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. ## Methods diff --git a/docs/MockFunctions.md b/docs/MockFunctions.md index eb632cca83a2..65bf1e96ea02 100644 --- a/docs/MockFunctions.md +++ b/docs/MockFunctions.md @@ -3,7 +3,7 @@ id: mock-functions title: Mock Functions --- -Mock functions make it easy to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. +Mock functions allow you to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. There are two ways to mock functions: Either by creating a mock function to use in test code, or writing a [`manual mock`](ManualMocks.md) to override a module dependency. @@ -240,7 +240,7 @@ const myMockFn = jest ## Custom Matchers -Finally, in order to make it simpler to assert how mock functions have been called, we've added some custom matcher functions for you: +Finally, in order to make it less demanding to assert how mock functions have been called, we've added some custom matcher functions for you: ```javascript // The mock function was called at least once @@ -256,7 +256,7 @@ expect(mockFunc).lastCalledWith(arg1, arg2); expect(mockFunc).toMatchSnapshot(); ``` -These matchers are really just sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: +These matchers are sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: ```javascript // The mock function was called at least once diff --git a/docs/MoreResources.md b/docs/MoreResources.md index d721632b8ac9..966a09be7ad9 100644 --- a/docs/MoreResources.md +++ b/docs/MoreResources.md @@ -3,7 +3,7 @@ id: more-resources title: More Resources --- -By now you should have a good idea of how Jest can make it easy to test your applications. If you're interested in learning more, here's some related stuff you might want to check out. +By now you should have a good idea of how Jest can help you test your applications. If you're interested in learning more, here's some related stuff you might want to check out. ## Browse the docs diff --git a/docs/SetupAndTeardown.md b/docs/SetupAndTeardown.md index ceeb577394e2..9350b5601f07 100644 --- a/docs/SetupAndTeardown.md +++ b/docs/SetupAndTeardown.md @@ -39,7 +39,7 @@ beforeEach(() => { ## One-Time Setup -In some cases, you only need to do setup once, at the beginning of a file. This can be especially bothersome when the setup is asynchronous, so you can't just do it inline. Jest provides `beforeAll` and `afterAll` to handle this situation. +In some cases, you only need to do setup once, at the beginning of a file. This can be especially bothersome when the setup is asynchronous, so you can't do it inline. Jest provides `beforeAll` and `afterAll` to handle this situation. For example, if both `initializeCityDatabase` and `clearCityDatabase` returned promises, and the city database could be reused between tests, we could change our test code to: @@ -175,7 +175,7 @@ describe('outer', () => { ## General Advice -If a test is failing, one of the first things to check should be whether the test is failing when it's the only test that runs. In Jest it's simple to run only one test - just temporarily change that `test` command to a `test.only`: +If a test is failing, one of the first things to check should be whether the test is failing when it's the only test that runs. To run only one test with Jest, temporarily change that `test` command to a `test.only`: ```js test.only('this will be the only test that runs', () => { @@ -187,4 +187,4 @@ test('this test will not run', () => { }); ``` -If you have a test that often fails when it's run as part of a larger suite, but doesn't fail when you run it alone, it's a good bet that something from a different test is interfering with this one. You can often fix this by clearing some shared state with `beforeEach`. If you're not sure whether some shared state is being modified, you can also try a `beforeEach` that just logs data. +If you have a test that often fails when it's run as part of a larger suite, but doesn't fail when you run it alone, it's a good bet that something from a different test is interfering with this one. You can often fix this by clearing some shared state with `beforeEach`. If you're not sure whether some shared state is being modified, you can also try a `beforeEach` that logs data. diff --git a/docs/SnapshotTesting.md b/docs/SnapshotTesting.md index 22e71d0834c2..1708b6916dbe 100644 --- a/docs/SnapshotTesting.md +++ b/docs/SnapshotTesting.md @@ -9,7 +9,7 @@ A typical snapshot test case for a mobile app renders a UI component, takes a sn ## Snapshot Testing with Jest -A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a simple [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): +A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): ```javascript import React from 'react'; @@ -39,7 +39,7 @@ exports[`renders correctly 1`] = ` `; ``` -The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will simply compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. +The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. > Note: The snapshot is directly scoped to the data you render – in our example it's `` component with page prop passed to it. This implies that even if any other file has missing props (Say, `App.js`) in the `` component, it will still pass the test as the test doesn't know the usage of `` component and it's scoped only to the `Link.react.js`. Also, Rendering the same component with different props in other snapshot tests will not affect the first one, as the tests don't know about each other. @@ -225,7 +225,7 @@ Ensure that your snapshots are readable by keeping them focused, short, and by u As mentioned previously, Jest uses [`pretty-format`](https://yarnpkg.com/en/package/pretty-format) to make snapshots human-readable, but you may find it useful to introduce additional tools, like [`eslint-plugin-jest`](https://yarnpkg.com/en/package/eslint-plugin-jest) with its [`no-large-snapshots`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-large-snapshots.md) option, or [`snapshot-diff`](https://yarnpkg.com/en/package/snapshot-diff) with its component snapshot comparison feature, to promote committing short, focused assertions. -The goal is to make it easy to review snapshots in pull requests, and fight against the habit of simply regenerating snapshots when test suites fail instead of examining the root causes of their failure. +The goal is to make it easy to review snapshots in pull requests, and fight against the habit of regenerating snapshots when test suites fail instead of examining the root causes of their failure. ### 2. Tests should be deterministic @@ -267,7 +267,7 @@ exports[` should render Alan Turing`] = ` `; ``` -Since the later describes exactly what's expected in the output, it's easy to see when it's wrong: +Since the later describes exactly what's expected in the output, it's more clear to see when it's wrong: ```js exports[` should render null`] = ` @@ -315,4 +315,4 @@ Although it is possible to write snapshot files manually, that is usually not ap ### Does code coverage work with snapshot testing? -Yes, just like with any other test. +Yes, as well as with any other test. diff --git a/docs/TestingAsyncCode.md b/docs/TestingAsyncCode.md index 6cd9265d9dab..d913a1cf40c4 100644 --- a/docs/TestingAsyncCode.md +++ b/docs/TestingAsyncCode.md @@ -9,7 +9,7 @@ It's common in JavaScript for code to run asynchronously. When you have code tha The most common asynchronous pattern is callbacks. -For example, let's say that you have a `fetchData(callback)` function that fetches some data and calls `callback(data)` when it is complete. You want to test that this returned data is just the string `'peanut butter'`. +For example, let's say that you have a `fetchData(callback)` function that fetches some data and calls `callback(data)` when it is complete. You want to test that this returned data is the string `'peanut butter'`. By default, Jest tests complete once they reach the end of their execution. That means this test will _not_ work as intended: @@ -43,7 +43,7 @@ If `done()` is never called, the test will fail, which is what you want to happe ## Promises -If your code uses promises, there is a simpler way to handle asynchronous tests. Just return a promise from your test, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. +If your code uses promises, there is a more straightforward way to handle asynchronous tests. Return a promise from your test, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. For example, let's say that `fetchData`, instead of using a callback, returns a promise that is supposed to resolve to the string `'peanut butter'`. We could test it with: @@ -88,7 +88,7 @@ test('the fetch fails with an error', () => { ## Async/Await -Alternatively, you can use `async` and `await` in your tests. To write an async test, just use the `async` keyword in front of the function passed to `test`. For example, the same `fetchData` scenario can be tested with: +Alternatively, you can use `async` and `await` in your tests. To write an async test, use the `async` keyword in front of the function passed to `test`. For example, the same `fetchData` scenario can be tested with: ```js test('the data is peanut butter', async () => { @@ -106,7 +106,7 @@ test('the fetch fails with an error', async () => { }); ``` -Of course, you can combine `async` and `await` with `.resolves` or `.rejects`. +You can combine `async` and `await` with `.resolves` or `.rejects`. ```js test('the data is peanut butter', async () => { @@ -118,6 +118,6 @@ test('the fetch fails with an error', async () => { }); ``` -In these cases, `async` and `await` are effectively just syntactic sugar for the same logic as the promises example uses. +In these cases, `async` and `await` are effectively syntactic sugar for the same logic as the promises example uses. -None of these forms is particularly superior to the others, and you can mix and match them across a codebase or even in a single file. It just depends on which style makes your tests simpler. +None of these forms is particularly superior to the others, and you can mix and match them across a codebase or even in a single file. It just depends on which style you feel makes your tests simpler. diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index 44a65d779456..cb4257ede02e 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -19,9 +19,9 @@ node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other argume This will run Jest in a Node process that an external debugger can connect to. Note that the process will pause until the debugger has connected to it. -To debug in Google Chrome (or any Chromium-based browser), simply open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Simply click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. +To debug in Google Chrome (or any Chromium-based browser), open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. -The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done simply to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. +The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. > Note: the `--runInBand` cli option makes sure Jest runs test in the same process rather than spawning processes for individual tests. Normally Jest parallelizes test runs across processes but it is hard to debug many processes at the same time. diff --git a/docs/TutorialAsync.md b/docs/TutorialAsync.md index 8ae673757d61..c77b9d114af1 100644 --- a/docs/TutorialAsync.md +++ b/docs/TutorialAsync.md @@ -5,7 +5,7 @@ title: An Async Example First, enable Babel support in Jest as documented in the [Getting Started](GettingStarted.md#using-babel) guide. -Let's implement a simple module that fetches user data from an API and returns the user name. +Let's implement a module that fetches user data from an API and returns the user name. ```js // user.js @@ -91,7 +91,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is easy. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/docs/TutorialReact.md b/docs/TutorialReact.md index 99424c5063cf..a66439e08eb8 100644 --- a/docs/TutorialReact.md +++ b/docs/TutorialReact.md @@ -9,7 +9,7 @@ At Facebook, we use Jest to test [React](http://facebook.github.io/react/) appli ### Setup with Create React App -If you are just getting started with React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://facebook.github.io/create-react-app/docs/running-tests#docsNav)! You will only need to add `react-test-renderer` for rendering snapshots. +If you are new to React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://facebook.github.io/create-react-app/docs/running-tests#docsNav)! You will only need to add `react-test-renderer` for rendering snapshots. Run @@ -214,7 +214,7 @@ If you'd like to assert, and manipulate your rendered components you can use [re You have to run `yarn add --dev @testing-library/react` to use react-testing-library. -Let's implement a simple checkbox which swaps between two labels: +Let's implement a checkbox which swaps between two labels: ```javascript // CheckboxWithLabel.js diff --git a/docs/TutorialReactNative.md b/docs/TutorialReactNative.md index 790e5866ed28..e91faa6b0210 100644 --- a/docs/TutorialReactNative.md +++ b/docs/TutorialReactNative.md @@ -23,7 +23,7 @@ Starting from react-native version 0.38, a Jest setup is included by default whe _Note: If you are upgrading your react-native application and previously used the `jest-react-native` preset, remove the dependency from your `package.json` file and change the preset to `react-native` instead._ -Simply run `yarn test` to run tests with Jest. +Run `yarn test` to run tests with Jest. ## Snapshot Test diff --git a/docs/Webpack.md b/docs/Webpack.md index 116d3c854142..a42dac40d9be 100644 --- a/docs/Webpack.md +++ b/docs/Webpack.md @@ -169,7 +169,7 @@ Similarly webpack's `resolve.root` option functions like setting the `NODE_PATH` } ``` -And finally we just have the webpack `alias` left to handle. For that we can make use of the `moduleNameMapper` option again. +And finally, we have to handle the webpack `alias`. For that we can make use of the `moduleNameMapper` option again. ```json // package.json diff --git a/packages/babel-jest/README.md b/packages/babel-jest/README.md index e0a6890f9411..237e5b6d53b7 100644 --- a/packages/babel-jest/README.md +++ b/packages/babel-jest/README.md @@ -4,7 +4,7 @@ ## Usage -If you are already using `jest-cli`, just add `babel-jest` and it will automatically compile JavaScript code using Babel. +If you are already using `jest-cli`, add `babel-jest` and it will automatically compile JavaScript code using Babel. ```bash yarn add --dev babel-jest @babel/core diff --git a/packages/jest-circus/README.md b/packages/jest-circus/README.md index 61a4519e4a23..142c17ab6437 100644 --- a/packages/jest-circus/README.md +++ b/packages/jest-circus/README.md @@ -7,7 +7,7 @@ ## Overview -Circus is a flux-based test runner for Jest that is fast, easy to maintain, and simple to extend. +Circus is a flux-based test runner for Jest that is fast, maintainable, and simple to extend. Circus allows you to bind to events via an optional event handler on any [custom environment](https://jestjs.io/docs/en/configuration#testenvironment-string). See the [type definitions](https://github.com/facebook/jest/blob/master/packages/jest-circus/src/types.ts) for more information on the events and state data currently available. diff --git a/packages/jest-mock/README.md b/packages/jest-mock/README.md index 6ac96ee24ee2..bb7329834289 100644 --- a/packages/jest-mock/README.md +++ b/packages/jest-mock/README.md @@ -23,7 +23,7 @@ Inspects the argument and returns its schema in the following recursive format: } ``` -Where type is one of `array`, `object`, `function`, or `ref`, and members is an optional dictionary where the keys are member names and the values are metadata objects. Function prototypes are defined simply by defining metadata for the `member.prototype` of the function. The type of a function prototype should always be `object`. For instance, a simple class might be defined like this: +Where type is one of `array`, `object`, `function`, or `ref`, and members is an optional dictionary where the keys are member names and the values are metadata objects. Function prototypes are defined by defining metadata for the `member.prototype` of the function. The type of a function prototype should always be `object`. For instance, a class might be defined like this: ```js const classDef = { diff --git a/packages/pretty-format/README.md b/packages/pretty-format/README.md index 4d0ce3acb2c9..022db7ea2cfa 100755 --- a/packages/pretty-format/README.md +++ b/packages/pretty-format/README.md @@ -230,7 +230,7 @@ Some properties in `config` are derived from `min` in `options`: ### Example of serialize and test -This plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :) +This plugin is a pattern you can apply to serialize composite data types. `pretty-format` does not need a plugin to serialize arrays. ```js // We reused more code when we factored out a function for child items diff --git a/website/README.md b/website/README.md index cf7c12ba2e0e..ebfd2df11c40 100644 --- a/website/README.md +++ b/website/README.md @@ -17,7 +17,7 @@ yarn start Open http://localhost:3000 ``` -Anytime you change the contents, just refresh the page and it's going to be updated +Anytime you change the contents, refresh the page and it's going to be updated # Publish the website diff --git a/website/versioned_docs/version-22.x/Configuration.md b/website/versioned_docs/version-22.x/Configuration.md index aa1ec29b43e8..1569530e4b3e 100644 --- a/website/versioned_docs/version-22.x/Configuration.md +++ b/website/versioned_docs/version-22.x/Configuration.md @@ -73,7 +73,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); diff --git a/website/versioned_docs/version-22.x/ExpectAPI.md b/website/versioned_docs/version-22.x/ExpectAPI.md index aee02654789c..e8b469cffd0c 100644 --- a/website/versioned_docs/version-22.x/ExpectAPI.md +++ b/website/versioned_docs/version-22.x/ExpectAPI.md @@ -527,7 +527,7 @@ const houseForSale = { }; test('this house has my desired features', () => { - // Simple Referencing + // Example Referencing expect(houseForSale).toHaveProperty('bath'); expect(houseForSale).toHaveProperty('bedrooms', 4); @@ -560,7 +560,7 @@ test('this house has my desired features', () => { Using exact equality with floating point numbers is a bad idea. Rounding means that intuitive things fail. For example, this test fails: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBe(0.3); // Fails! }); ``` @@ -570,7 +570,7 @@ It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. S Instead, use `.toBeCloseTo`. Use `numDigits` to control how many digits after the decimal point to check. For example, if you want to be sure that `0.2 + 0.1` is equal to `0.3` with a precision of 5 decimal digits, you can use this test: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBeCloseTo(0.3, 5); }); ``` @@ -579,7 +579,7 @@ The default for `numDigits` is 2, which has proved to be a good default in most ### `.toBeDefined()` -Use `.toBeDefined` to check that a variable is not undefined. For example, if you just want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: +Use `.toBeDefined` to check that a variable is not undefined. For example, if you want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: ```js test('there is a new flavor idea', () => { @@ -591,7 +591,7 @@ You could write `expect(fetchNewFlavorIdea()).not.toBe(undefined)`, but it's bet ### `.toBeFalsy()` -Use `.toBeFalsy` when you don't care what a value is, you just want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeFalsy` when you don't care what a value is and you want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -679,7 +679,7 @@ test('bloop returns null', () => { ### `.toBeTruthy()` -Use `.toBeTruthy` when you don't care what a value is, you just want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeTruthy` when you don't care what a value is and you want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -688,7 +688,7 @@ if (thirstInfo()) { } ``` -You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you just want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: +You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: ```js test('drinking La Croix leads to having thirst info', () => { diff --git a/website/versioned_docs/version-22.x/GlobalAPI.md b/website/versioned_docs/version-22.x/GlobalAPI.md index 893a597e8e00..78ee8e1e2deb 100644 --- a/website/versioned_docs/version-22.x/GlobalAPI.md +++ b/website/versioned_docs/version-22.x/GlobalAPI.md @@ -124,7 +124,7 @@ test('can find things', () => { }); ``` -Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could just do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. +Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. If `beforeAll` is inside a `describe` block, it runs at the beginning of the describe block. @@ -191,7 +191,7 @@ describe('my beverage', () => { }); ``` -This isn't required - you can just write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. +This isn't required - you can write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. You can also nest `describe` blocks if you have a hierarchy of tests: @@ -317,13 +317,13 @@ test('it is not snowing', () => { Only the "it is raining" test will run in that test file, since it is run with `test.only`. -Usually you wouldn't check code using `test.only` into source control - you would use it just for debugging, and remove it once you have fixed the broken tests. +Usually you wouldn't check code using `test.only` into source control - you would use it for debugging, and remove it once you have fixed the broken tests. ### `test.skip(name, fn)` Also under the aliases: `it.skip(name, fn)` or `xit(name, fn)` or `xtest(name, fn)` -When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to just delete this code, you can use `test.skip` to specify some tests to skip. +When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to delete this code, you can use `test.skip` to specify some tests to skip. For example, let's say you had these tests: @@ -339,4 +339,4 @@ test.skip('it is not snowing', () => { Only the "it is raining" test will run, since the other test is run with `test.skip`. -You could simply comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. +You could comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. diff --git a/website/versioned_docs/version-22.x/ManualMocks.md b/website/versioned_docs/version-22.x/ManualMocks.md index e661889d0fd6..f34525a37fc2 100644 --- a/website/versioned_docs/version-22.x/ManualMocks.md +++ b/website/versioned_docs/version-22.x/ManualMocks.md @@ -123,7 +123,7 @@ describe('listFilesInDirectorySync', () => { }); ``` -The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. +The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using [`jest.requireActual(moduleName)`](JestObjectAPI.md#jestrequireactualmodulename) in your manual mock and amending it with mock functions before exporting it. diff --git a/website/versioned_docs/version-22.x/MigrationGuide.md b/website/versioned_docs/version-22.x/MigrationGuide.md index e1d7545b7ee5..1e5e49e60f80 100644 --- a/website/versioned_docs/version-22.x/MigrationGuide.md +++ b/website/versioned_docs/version-22.x/MigrationGuide.md @@ -6,7 +6,7 @@ original_id: migration-guide If you'd like to try out Jest with an existing codebase, there are a number of ways to convert to Jest: -- If you are using Jasmine, or a Jasmine like API (for example [Mocha](https://mochajs.org)), Jest should be mostly compatible and easy to migrate to. +- If you are using Jasmine, or a Jasmine like API (for example [Mocha](https://mochajs.org)), Jest should be mostly compatible, which makes it less complicated to migrate to. - If you are using AVA, Expect.js (by Automattic), Jasmine, Mocha, proxyquire, Should.js or Tape you can automatically migrate with Jest Codemods (see below). - If you like [chai](http://chaijs.com/), you can upgrade to Jest and continue using chai. However, we recommend trying out Jest's assertions and their failure messages. Jest Codemods can migrate from chai (see below). diff --git a/website/versioned_docs/version-22.x/MockFunctionAPI.md b/website/versioned_docs/version-22.x/MockFunctionAPI.md index 08e9fcd8c2a6..a5af46498516 100644 --- a/website/versioned_docs/version-22.x/MockFunctionAPI.md +++ b/website/versioned_docs/version-22.x/MockFunctionAPI.md @@ -4,7 +4,7 @@ title: Mock Functions original_id: mock-function-api --- -Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than just testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. +Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than only testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. ## Methods diff --git a/website/versioned_docs/version-22.x/MockFunctions.md b/website/versioned_docs/version-22.x/MockFunctions.md index ae51d048bbb5..eb324daa1716 100644 --- a/website/versioned_docs/version-22.x/MockFunctions.md +++ b/website/versioned_docs/version-22.x/MockFunctions.md @@ -4,7 +4,7 @@ title: Mock Functions original_id: mock-functions --- -Mock functions make it easy to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. +Mock functions allow you to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. There are two ways to mock functions: Either by creating a mock function to use in test code, or writing a [`manual mock`](ManualMocks.md) to override a module dependency. @@ -198,7 +198,7 @@ const myMockFn = jest ## Custom Matchers -Finally, in order to make it simpler to assert how mock functions have been called, we've added some custom matcher functions for you: +Finally, in order to make it less demanding to assert how mock functions have been called, we've added some custom matcher functions for you: ```javascript // The mock function was called at least once @@ -214,7 +214,7 @@ expect(mockFunc).lastCalledWith(arg1, arg2); expect(mockFunc).toMatchSnapshot(); ``` -These matchers are really just sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: +These matchers are sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: ```javascript // The mock function was called at least once diff --git a/website/versioned_docs/version-22.x/MoreResources.md b/website/versioned_docs/version-22.x/MoreResources.md index bdd94f721096..1dcf93605673 100644 --- a/website/versioned_docs/version-22.x/MoreResources.md +++ b/website/versioned_docs/version-22.x/MoreResources.md @@ -4,7 +4,7 @@ title: More Resources original_id: more-resources --- -By now you should have a good idea of how Jest can make it easy to test your applications. If you're interested in learning more, here's some related stuff you might want to check out. +By now you should have a good idea of how Jest can help you test your applications. If you're interested in learning more, here's some related stuff you might want to check out. ## Browse the docs diff --git a/website/versioned_docs/version-22.x/SetupAndTeardown.md b/website/versioned_docs/version-22.x/SetupAndTeardown.md index 8adcaf4e64d2..88383dff21b6 100644 --- a/website/versioned_docs/version-22.x/SetupAndTeardown.md +++ b/website/versioned_docs/version-22.x/SetupAndTeardown.md @@ -40,7 +40,7 @@ beforeEach(() => { ## One-Time Setup -In some cases, you only need to do setup once, at the beginning of a file. This can be especially bothersome when the setup is asynchronous, so you can't just do it inline. Jest provides `beforeAll` and `afterAll` to handle this situation. +In some cases, you only need to do setup once, at the beginning of a file. This can be especially bothersome when the setup is asynchronous, so you can't do it inline. Jest provides `beforeAll` and `afterAll` to handle this situation. For example, if both `initializeCityDatabase` and `clearCityDatabase` returned promises, and the city database could be reused between tests, we could change our test code to: @@ -176,7 +176,7 @@ describe('outer', () => { ## General Advice -If a test is failing, one of the first things to check should be whether the test is failing when it's the only test that runs. In Jest it's simple to run only one test - just temporarily change that `test` command to a `test.only`: +If a test is failing, one of the first things to check should be whether the test is failing when it's the only test that runs. To run only one test with Jest, temporarily change that `test` command to a `test.only`: ```js test.only('this will be the only test that runs', () => { @@ -188,4 +188,4 @@ test('this test will not run', () => { }); ``` -If you have a test that often fails when it's run as part of a larger suite, but doesn't fail when you run it alone, it's a good bet that something from a different test is interfering with this one. You can often fix this by clearing some shared state with `beforeEach`. If you're not sure whether some shared state is being modified, you can also try a `beforeEach` that just logs data. +If you have a test that often fails when it's run as part of a larger suite, but doesn't fail when you run it alone, it's a good bet that something from a different test is interfering with this one. You can often fix this by clearing some shared state with `beforeEach`. If you're not sure whether some shared state is being modified, you can also try a `beforeEach` that logs data. diff --git a/website/versioned_docs/version-22.x/SnapshotTesting.md b/website/versioned_docs/version-22.x/SnapshotTesting.md index b1bd3da3ecbb..b67538880981 100644 --- a/website/versioned_docs/version-22.x/SnapshotTesting.md +++ b/website/versioned_docs/version-22.x/SnapshotTesting.md @@ -10,7 +10,7 @@ A typical snapshot test case for a mobile app renders a UI component, takes a sc ## Snapshot Testing with Jest -A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a simple [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): +A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): ```javascript import React from 'react'; @@ -40,7 +40,7 @@ exports[`renders correctly 1`] = ` `; ``` -The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will simply compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code that should be fixed, or the implementation has changed and the snapshot needs to be updated. +The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code that should be fixed, or the implementation has changed and the snapshot needs to be updated. More information on how snapshot testing works and why we built it can be found on the [release blog post](https://jestjs.io/blog/2016/07/27/jest-14.html). We recommend reading [this blog post](http://benmccormick.org/2016/09/19/testing-with-jest-snapshots-first-impressions/) to get a good sense of when you should use snapshot testing. We also recommend watching this [egghead video](https://egghead.io/lessons/javascript-use-jest-s-snapshot-testing-feature?pl=testing-javascript-with-jest-a36c4074) on Snapshot Testing with Jest. @@ -126,4 +126,4 @@ Although it is possible to write snapshot files manually, that is usually not ap ### Does code coverage work with snapshots testing? -Yes, just like with any other test. +Yes, as well as with any other test. diff --git a/website/versioned_docs/version-22.x/TestingAsyncCode.md b/website/versioned_docs/version-22.x/TestingAsyncCode.md index ec0c5edeaa74..b5d3a30ac8cf 100644 --- a/website/versioned_docs/version-22.x/TestingAsyncCode.md +++ b/website/versioned_docs/version-22.x/TestingAsyncCode.md @@ -10,7 +10,7 @@ It's common in JavaScript for code to run asynchronously. When you have code tha The most common asynchronous pattern is callbacks. -For example, let's say that you have a `fetchData(callback)` function that fetches some data and calls `callback(data)` when it is complete. You want to test that this returned data is just the string `'peanut butter'`. +For example, let's say that you have a `fetchData(callback)` function that fetches some data and calls `callback(data)` when it is complete. You want to test that this returned data is the string `'peanut butter'`. By default, Jest tests complete once they reach the end of their execution. That means this test will _not_ work as intended: @@ -44,7 +44,7 @@ If `done()` is never called, the test will fail, which is what you want to happe ## Promises -If your code uses promises, there is a simpler way to handle asynchronous tests. Just return a promise from your test, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. +If your code uses promises, there is a more straightforward way to handle asynchronous tests. Return a promise from your test, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. For example, let's say that `fetchData`, instead of using a callback, returns a promise that is supposed to resolve to the string `'peanut butter'`. We could test it with: @@ -94,7 +94,7 @@ test('the fetch fails with an error', () => { ## Async/Await -Alternatively, you can use `async` and `await` in your tests. To write an async test, just use the `async` keyword in front of the function passed to `test`. For example, the same `fetchData` scenario can be tested with: +Alternatively, you can use `async` and `await` in your tests. To write an async test, use the `async` keyword in front of the function passed to `test`. For example, the same `fetchData` scenario can be tested with: ```js test('the data is peanut butter', async () => { @@ -112,7 +112,7 @@ test('the fetch fails with an error', async () => { }); ``` -Of course, you can combine `async` and `await` with `.resolves` or `.rejects` (available in Jest **20.0.0+**). +You can combine `async` and `await` with `.resolves` or `.rejects` (available in Jest **20.0.0+**). ```js test('the data is peanut butter', async () => { @@ -126,6 +126,6 @@ test('the fetch fails with an error', async () => { }); ``` -In these cases, `async` and `await` are effectively just syntactic sugar for the same logic as the promises example uses. +In these cases, `async` and `await` are effectively syntactic sugar for the same logic as the promises example uses. -None of these forms is particularly superior to the others, and you can mix and match them across a codebase or even in a single file. It just depends on which style makes your tests simpler. +None of these forms is particularly superior to the others, and you can mix and match them across a codebase or even in a single file. It just depends on which style you feel makes your tests simpler. diff --git a/website/versioned_docs/version-22.x/Troubleshooting.md b/website/versioned_docs/version-22.x/Troubleshooting.md index 3567db67b17c..9159c2525bb5 100644 --- a/website/versioned_docs/version-22.x/Troubleshooting.md +++ b/website/versioned_docs/version-22.x/Troubleshooting.md @@ -20,9 +20,9 @@ node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other argume This will run Jest in a Node process that an external debugger can connect to. Note that the process will pause until the debugger has connected to it. -To debug in Google Chrome (or any Chromium-based browser), simply open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Simply click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. +To debug in Google Chrome (or any Chromium-based browser), open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. -The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done simply to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. +The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. > Note: the `--runInBand` cli option makes sure Jest runs test in the same process rather than spawning processes for individual tests. Normally Jest parallelizes test runs across processes but it is hard to debug many processes at the same time. diff --git a/website/versioned_docs/version-22.x/TutorialAsync.md b/website/versioned_docs/version-22.x/TutorialAsync.md index e97c71d2d6af..d8cd2e227737 100644 --- a/website/versioned_docs/version-22.x/TutorialAsync.md +++ b/website/versioned_docs/version-22.x/TutorialAsync.md @@ -6,7 +6,7 @@ original_id: tutorial-async First, enable Babel support in Jest as documented in the [Getting Started](GettingStarted.md#using-babel) guide. -Let's implement a simple module that fetches user data from an API and returns the user name. +Let's implement a module that fetches user data from an API and returns the user name. ```js // user.js @@ -94,7 +94,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is easy. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/website/versioned_docs/version-22.x/TutorialReact.md b/website/versioned_docs/version-22.x/TutorialReact.md index 9bcdeb58c61a..fc444ea166bf 100644 --- a/website/versioned_docs/version-22.x/TutorialReact.md +++ b/website/versioned_docs/version-22.x/TutorialReact.md @@ -10,7 +10,7 @@ At Facebook, we use Jest to test [React](http://facebook.github.io/react/) appli ### Setup with Create React App -If you are just getting started with React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://github.com/facebookincubator/create-react-app)! You don't need to do any extra steps for setup, and can head straight to the next section. +If you are new to React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://github.com/facebookincubator/create-react-app)! You don't need to do any extra steps for setup, and can head straight to the next section. ### Setup without Create React App @@ -202,7 +202,7 @@ If you'd like to assert, and manipulate your rendered components you can use [En You have to run `yarn add --dev enzyme` to use Enzyme. If you are using a React version below 15.5.0, you will also need to install `react-addons-test-utils`. -Let's implement a simple checkbox which swaps between two labels: +Let's implement a checkbox which swaps between two labels: ```javascript // CheckboxWithLabel.js diff --git a/website/versioned_docs/version-22.x/TutorialReactNative.md b/website/versioned_docs/version-22.x/TutorialReactNative.md index 20279b20045d..bf8f41614ba8 100644 --- a/website/versioned_docs/version-22.x/TutorialReactNative.md +++ b/website/versioned_docs/version-22.x/TutorialReactNative.md @@ -24,7 +24,7 @@ Starting from react-native version 0.38, a Jest setup is included by default whe _Note: If you are upgrading your react-native application and previously used the `jest-react-native` preset, remove the dependency from your `package.json` file and change the preset to `react-native` instead._ -Simply run `yarn test` to run tests with Jest. +Run `yarn test` to run tests with Jest. ## Snapshot Test diff --git a/website/versioned_docs/version-22.x/Webpack.md b/website/versioned_docs/version-22.x/Webpack.md index 8fa7363839eb..1dcf8c8723bc 100644 --- a/website/versioned_docs/version-22.x/Webpack.md +++ b/website/versioned_docs/version-22.x/Webpack.md @@ -170,7 +170,7 @@ Similarly webpack's `resolve.root` option functions like setting the `NODE_PATH` } ``` -And finally we just have the webpack `alias` left to handle. For that we can make use of the `moduleNameMapper` option again. +And finally, we have to handle the webpack `alias`. For that we can make use of the `moduleNameMapper` option again. ```json // package.json diff --git a/website/versioned_docs/version-23.x/Es6ClassMocks.md b/website/versioned_docs/version-23.x/Es6ClassMocks.md index 94b0fc1550c7..72b7d7287b09 100644 --- a/website/versioned_docs/version-23.x/Es6ClassMocks.md +++ b/website/versioned_docs/version-23.x/Es6ClassMocks.md @@ -191,7 +191,7 @@ describe('When SoundPlayer throws an error', () => { ## In depth: Understanding mock constructor functions -Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own simple mocks to illustrate how mocking works. +Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own smaller mocks to illustrate how mocking works. ### Manual mock that is another ES6 class @@ -212,7 +212,7 @@ export default class SoundPlayer { } ``` -### Simple mock using module factory parameter +### Mock using module factory parameter The module factory function passed to `jest.mock(path, moduleFactory)` can be a HOF that returns a function\*. This will allow calling `new` on the mock. Again, this allows you to inject different behavior for testing, but does not provide a way to spy on calls. diff --git a/website/versioned_docs/version-23.x/ExpectAPI.md b/website/versioned_docs/version-23.x/ExpectAPI.md index 6f312d10d250..f4b8312e55f5 100644 --- a/website/versioned_docs/version-23.x/ExpectAPI.md +++ b/website/versioned_docs/version-23.x/ExpectAPI.md @@ -197,7 +197,7 @@ When an assertion fails, the error message should give as much signal as necessa To use snapshot testing inside of your custom matcher you can import `jest-snapshot` and use it from within your matcher. -Here's a simple snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: +Here's a snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: ```js const {toMatchSnapshot} = require('jest-snapshot'); @@ -788,7 +788,7 @@ const houseForSale = { }; test('this house has my desired features', () => { - // Simple Referencing + // Example Referencing expect(houseForSale).toHaveProperty('bath'); expect(houseForSale).toHaveProperty('bedrooms', 4); @@ -824,7 +824,7 @@ test('this house has my desired features', () => { Using exact equality with floating point numbers is a bad idea. Rounding means that intuitive things fail. For example, this test fails: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBe(0.3); // Fails! }); ``` @@ -834,7 +834,7 @@ It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. S Instead, use `.toBeCloseTo`. Use `numDigits` to control how many digits after the decimal point to check. For example, if you want to be sure that `0.2 + 0.1` is equal to `0.3` with a precision of 5 decimal digits, you can use this test: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBeCloseTo(0.3, 5); }); ``` @@ -843,7 +843,7 @@ The default for `numDigits` is 2, which has proved to be a good default in most ### `.toBeDefined()` -Use `.toBeDefined` to check that a variable is not undefined. For example, if you just want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: +Use `.toBeDefined` to check that a variable is not undefined. For example, if you want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: ```js test('there is a new flavor idea', () => { @@ -855,7 +855,7 @@ You could write `expect(fetchNewFlavorIdea()).not.toBe(undefined)`, but it's bet ### `.toBeFalsy()` -Use `.toBeFalsy` when you don't care what a value is, you just want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeFalsy` when you don't care what a value is and you want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -943,7 +943,7 @@ test('bloop returns null', () => { ### `.toBeTruthy()` -Use `.toBeTruthy` when you don't care what a value is, you just want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeTruthy` when you don't care what a value is and you want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -952,7 +952,7 @@ if (thirstInfo()) { } ``` -You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you just want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: +You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: ```js test('drinking La Croix leads to having thirst info', () => { diff --git a/website/versioned_docs/version-23.x/GlobalAPI.md b/website/versioned_docs/version-23.x/GlobalAPI.md index 0556525f6bb8..047019eac868 100644 --- a/website/versioned_docs/version-23.x/GlobalAPI.md +++ b/website/versioned_docs/version-23.x/GlobalAPI.md @@ -124,7 +124,7 @@ test('can find things', () => { }); ``` -Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could just do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. +Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. If `beforeAll` is inside a `describe` block, it runs at the beginning of the describe block. @@ -191,7 +191,7 @@ describe('my beverage', () => { }); ``` -This isn't required - you can just write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. +This isn't required - you can write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. You can also nest `describe` blocks if you have a hierarchy of tests: @@ -389,7 +389,7 @@ describe.skip('my other beverage', () => { }); ``` -Using `describe.skip` is often just an easier alternative to temporarily commenting out a chunk of tests. +Using `describe.skip` is often a cleaner alternative to temporarily commenting out a chunk of tests. ### `describe.skip.each(table)(name, fn)` @@ -545,7 +545,7 @@ test('it is not snowing', () => { Only the "it is raining" test will run in that test file, since it is run with `test.only`. -Usually you wouldn't check code using `test.only` into source control - you would use it just for debugging, and remove it once you have fixed the broken tests. +Usually you wouldn't check code using `test.only` into source control - you would use it for debugging, and remove it once you have fixed the broken tests. ### `test.only.each(table)(name, fn)` @@ -591,7 +591,7 @@ test('will not be ran', () => { Also under the aliases: `it.skip(name, fn)` or `xit(name, fn)` or `xtest(name, fn)` -When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to just delete this code, you can use `test.skip` to specify some tests to skip. +When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to delete this code, you can use `test.skip` to specify some tests to skip. For example, let's say you had these tests: @@ -607,7 +607,7 @@ test.skip('it is not snowing', () => { Only the "it is raining" test will run, since the other test is run with `test.skip`. -You could simply comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. +You could comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. ### `test.skip.each(table)(name, fn)` diff --git a/website/versioned_docs/version-23.x/ManualMocks.md b/website/versioned_docs/version-23.x/ManualMocks.md index a0b5321e2772..d0387cca1a7f 100644 --- a/website/versioned_docs/version-23.x/ManualMocks.md +++ b/website/versioned_docs/version-23.x/ManualMocks.md @@ -125,7 +125,7 @@ describe('listFilesInDirectorySync', () => { }); ``` -The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. +The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using [`jest.requireActual(moduleName)`](JestObjectAPI.md#jestrequireactualmodulename) in your manual mock and amending it with mock functions before exporting it. diff --git a/website/versioned_docs/version-23.x/MockFunctionAPI.md b/website/versioned_docs/version-23.x/MockFunctionAPI.md index 06fb7ad2f497..3ff7045686e1 100644 --- a/website/versioned_docs/version-23.x/MockFunctionAPI.md +++ b/website/versioned_docs/version-23.x/MockFunctionAPI.md @@ -4,7 +4,7 @@ title: Mock Functions original_id: mock-function-api --- -Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than just testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. +Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than only testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. ## Methods diff --git a/website/versioned_docs/version-23.x/MockFunctions.md b/website/versioned_docs/version-23.x/MockFunctions.md index 8e9d11106743..830e7cd29c6d 100644 --- a/website/versioned_docs/version-23.x/MockFunctions.md +++ b/website/versioned_docs/version-23.x/MockFunctions.md @@ -4,7 +4,7 @@ title: Mock Functions original_id: mock-functions --- -Mock functions make it easy to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. +Mock functions allow you to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. There are two ways to mock functions: Either by creating a mock function to use in test code, or writing a [`manual mock`](ManualMocks.md) to override a module dependency. @@ -244,7 +244,7 @@ const myMockFn = jest ## Custom Matchers -Finally, in order to make it simpler to assert how mock functions have been called, we've added some custom matcher functions for you: +Finally, in order to make it less demanding to assert how mock functions have been called, we've added some custom matcher functions for you: ```javascript // The mock function was called at least once @@ -260,7 +260,7 @@ expect(mockFunc).lastCalledWith(arg1, arg2); expect(mockFunc).toMatchSnapshot(); ``` -These matchers are really just sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: +These matchers are sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: ```javascript // The mock function was called at least once diff --git a/website/versioned_docs/version-23.x/MoreResources.md b/website/versioned_docs/version-23.x/MoreResources.md index 4d19619ad385..b23c48c8f529 100644 --- a/website/versioned_docs/version-23.x/MoreResources.md +++ b/website/versioned_docs/version-23.x/MoreResources.md @@ -4,7 +4,7 @@ title: More Resources original_id: more-resources --- -By now you should have a good idea of how Jest can make it easy to test your applications. If you're interested in learning more, here's some related stuff you might want to check out. +By now you should have a good idea of how Jest can help you test your applications. If you're interested in learning more, here's some related stuff you might want to check out. ## Browse the docs diff --git a/website/versioned_docs/version-23.x/SnapshotTesting.md b/website/versioned_docs/version-23.x/SnapshotTesting.md index 8121e82e9840..a0c4234b8cfc 100644 --- a/website/versioned_docs/version-23.x/SnapshotTesting.md +++ b/website/versioned_docs/version-23.x/SnapshotTesting.md @@ -10,7 +10,7 @@ A typical snapshot test case for a mobile app renders a UI component, takes a sc ## Snapshot Testing with Jest -A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a simple [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): +A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): ```javascript import React from 'react'; @@ -40,7 +40,7 @@ exports[`renders correctly 1`] = ` `; ``` -The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will simply compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. +The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. > Note: The snapshot is directly scoped to the data you render – in our example it's `` component with page prop passed to it. This implies that even if any other file has missing props (Say, `App.js`) in the `` component, it will still pass the test as the test doesn't know the usage of `` component and it's scoped only to the `Link.react.js`. Also, Rendering the same component with different props in other snapshot test will not affect the first one, as the tests don't know about each other. @@ -226,7 +226,7 @@ Ensure that your snapshots are readable by keeping them focused, short, and by u As mentioned previously, Jest uses [`pretty-format`](https://yarnpkg.com/en/package/pretty-format) to make snapshots human-readable, but you may find it useful to introduce additional tools, like [`eslint-plugin-jest`](https://yarnpkg.com/en/package/eslint-plugin-jest) with its [`no-large-snapshots`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-large-snapshots.md) option, or [`snapshot-diff`](https://yarnpkg.com/en/package/snapshot-diff) with its component snapshot comparison feature, to promote committing short, focused assertions. -The goal is to make it easy to review snapshots in pull requests, and fight against the habit of simply regenerating snapshots when test suites fail instead of examining the root causes of their failure. +The goal is to make it easy to review snapshots in pull requests, and fight against the habit of regenerating snapshots when test suites fail instead of examining the root causes of their failure. ### 2. Tests should be deterministic @@ -268,7 +268,7 @@ exports[` should render Alan Turing`] = ` `; ``` -Since the later describes exactly what's expected in the output, it's easy to see when it's wrong: +Since the later describes exactly what's expected in the output, it's more clear to see when it's wrong: ```js exports[` should render null`] = ` @@ -316,4 +316,4 @@ Although it is possible to write snapshot files manually, that is usually not ap ### Does code coverage work with snapshot testing? -Yes, just like with any other test. +Yes, as well as with any other test. diff --git a/website/versioned_docs/version-23.x/Troubleshooting.md b/website/versioned_docs/version-23.x/Troubleshooting.md index ab25676456aa..d0e84f37b41d 100644 --- a/website/versioned_docs/version-23.x/Troubleshooting.md +++ b/website/versioned_docs/version-23.x/Troubleshooting.md @@ -20,9 +20,9 @@ node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other argume This will run Jest in a Node process that an external debugger can connect to. Note that the process will pause until the debugger has connected to it. -To debug in Google Chrome (or any Chromium-based browser), simply open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Simply click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. +To debug in Google Chrome (or any Chromium-based browser), open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. -The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done simply to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. +The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. > Note: the `--runInBand` cli option makes sure Jest runs test in the same process rather than spawning processes for individual tests. Normally Jest parallelizes test runs across processes but it is hard to debug many processes at the same time. diff --git a/website/versioned_docs/version-23.x/TutorialAsync.md b/website/versioned_docs/version-23.x/TutorialAsync.md index a4161131a13d..a93f4f2b107a 100644 --- a/website/versioned_docs/version-23.x/TutorialAsync.md +++ b/website/versioned_docs/version-23.x/TutorialAsync.md @@ -6,7 +6,7 @@ original_id: tutorial-async First, enable Babel support in Jest as documented in the [Getting Started](GettingStarted.md#using-babel) guide. -Let's implement a simple module that fetches user data from an API and returns the user name. +Let's implement a module that fetches user data from an API and returns the user name. ```js // user.js @@ -92,7 +92,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is easy. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/website/versioned_docs/version-23.x/TutorialReact.md b/website/versioned_docs/version-23.x/TutorialReact.md index aa071eca8486..bb4815ec688c 100644 --- a/website/versioned_docs/version-23.x/TutorialReact.md +++ b/website/versioned_docs/version-23.x/TutorialReact.md @@ -10,7 +10,7 @@ At Facebook, we use Jest to test [React](http://facebook.github.io/react/) appli ### Setup with Create React App -If you are just getting started with React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://github.com/facebookincubator/create-react-app)! You will only need to add `react-test-renderer` for rendering snapshots. +If you are new to React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://github.com/facebookincubator/create-react-app)! You will only need to add `react-test-renderer` for rendering snapshots. Run @@ -213,7 +213,7 @@ If you'd like to assert, and manipulate your rendered components you can use [En You have to run `yarn add --dev enzyme` to use Enzyme. If you are using a React version below 15.5.0, you will also need to install `react-addons-test-utils`. -Let's implement a simple checkbox which swaps between two labels: +Let's implement a checkbox which swaps between two labels: ```javascript // CheckboxWithLabel.js diff --git a/website/versioned_docs/version-23.x/Webpack.md b/website/versioned_docs/version-23.x/Webpack.md index bc54e18737dc..c0c1aab377bf 100644 --- a/website/versioned_docs/version-23.x/Webpack.md +++ b/website/versioned_docs/version-23.x/Webpack.md @@ -170,7 +170,7 @@ Similarly webpack's `resolve.root` option functions like setting the `NODE_PATH` } ``` -And finally we just have the webpack `alias` left to handle. For that we can make use of the `moduleNameMapper` option again. +And finally, we have to handle the webpack `alias`. For that we can make use of the `moduleNameMapper` option again. ```json // package.json diff --git a/website/versioned_docs/version-24.0/Configuration.md b/website/versioned_docs/version-24.0/Configuration.md index 8777065905ff..87f1f33b286c 100644 --- a/website/versioned_docs/version-24.0/Configuration.md +++ b/website/versioned_docs/version-24.0/Configuration.md @@ -87,7 +87,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); diff --git a/website/versioned_docs/version-24.0/Es6ClassMocks.md b/website/versioned_docs/version-24.0/Es6ClassMocks.md index 0fb7dcbb9095..7f8eb4833e94 100644 --- a/website/versioned_docs/version-24.0/Es6ClassMocks.md +++ b/website/versioned_docs/version-24.0/Es6ClassMocks.md @@ -191,7 +191,7 @@ describe('When SoundPlayer throws an error', () => { ## In depth: Understanding mock constructor functions -Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own simple mocks to illustrate how mocking works. +Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own smaller mocks to illustrate how mocking works. ### Manual mock that is another ES6 class @@ -212,7 +212,7 @@ export default class SoundPlayer { } ``` -### Simple mock using module factory parameter +### Mock using module factory parameter The module factory function passed to `jest.mock(path, moduleFactory)` can be a HOF that returns a function\*. This will allow calling `new` on the mock. Again, this allows you to inject different behavior for testing, but does not provide a way to spy on calls. diff --git a/website/versioned_docs/version-24.0/ExpectAPI.md b/website/versioned_docs/version-24.0/ExpectAPI.md index d3601b6a4e09..83e899dfb6dc 100644 --- a/website/versioned_docs/version-24.0/ExpectAPI.md +++ b/website/versioned_docs/version-24.0/ExpectAPI.md @@ -208,7 +208,7 @@ When an assertion fails, the error message should give as much signal as necessa To use snapshot testing inside of your custom matcher you can import `jest-snapshot` and use it from within your matcher. -Here's a simple snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: +Here's a snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: ```js const {toMatchSnapshot} = require('jest-snapshot'); @@ -799,7 +799,7 @@ const houseForSale = { }; test('this house has my desired features', () => { - // Simple Referencing + // Example Referencing expect(houseForSale).toHaveProperty('bath'); expect(houseForSale).toHaveProperty('bedrooms', 4); @@ -835,7 +835,7 @@ test('this house has my desired features', () => { Using exact equality with floating point numbers is a bad idea. Rounding means that intuitive things fail. For example, this test fails: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBe(0.3); // Fails! }); ``` @@ -845,7 +845,7 @@ It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. S Instead, use `.toBeCloseTo`. Use `numDigits` to control how many digits after the decimal point to check. For example, if you want to be sure that `0.2 + 0.1` is equal to `0.3` with a precision of 5 decimal digits, you can use this test: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBeCloseTo(0.3, 5); }); ``` @@ -854,7 +854,7 @@ The optional `numDigits` argument has default value `2` which means the criterio ### `.toBeDefined()` -Use `.toBeDefined` to check that a variable is not undefined. For example, if you just want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: +Use `.toBeDefined` to check that a variable is not undefined. For example, if you want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: ```js test('there is a new flavor idea', () => { @@ -866,7 +866,7 @@ You could write `expect(fetchNewFlavorIdea()).not.toBe(undefined)`, but it's bet ### `.toBeFalsy()` -Use `.toBeFalsy` when you don't care what a value is, you just want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeFalsy` when you don't care what a value is and you want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -954,7 +954,7 @@ test('bloop returns null', () => { ### `.toBeTruthy()` -Use `.toBeTruthy` when you don't care what a value is, you just want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeTruthy` when you don't care what a value is and you want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -963,7 +963,7 @@ if (thirstInfo()) { } ``` -You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you just want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: +You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: ```js test('drinking La Croix leads to having thirst info', () => { diff --git a/website/versioned_docs/version-24.0/GlobalAPI.md b/website/versioned_docs/version-24.0/GlobalAPI.md index 5a2b680b46d6..2dad70e35c28 100644 --- a/website/versioned_docs/version-24.0/GlobalAPI.md +++ b/website/versioned_docs/version-24.0/GlobalAPI.md @@ -124,7 +124,7 @@ test('can find things', () => { }); ``` -Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could just do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. +Here the `beforeAll` ensures that the database is set up before tests run. If setup was synchronous, you could do this without `beforeAll`. The key is that Jest will wait for a promise to resolve, so you can have asynchronous setup as well. If `beforeAll` is inside a `describe` block, it runs at the beginning of the describe block. @@ -191,7 +191,7 @@ describe('my beverage', () => { }); ``` -This isn't required - you can just write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. +This isn't required - you can write the `test` blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups. You can also nest `describe` blocks if you have a hierarchy of tests: @@ -389,7 +389,7 @@ describe.skip('my other beverage', () => { }); ``` -Using `describe.skip` is often just an easier alternative to temporarily commenting out a chunk of tests. +Using `describe.skip` is often a cleaner alternative to temporarily commenting out a chunk of tests. ### `describe.skip.each(table)(name, fn)` @@ -545,7 +545,7 @@ test('it is not snowing', () => { Only the "it is raining" test will run in that test file, since it is run with `test.only`. -Usually you wouldn't check code using `test.only` into source control - you would use it just for debugging, and remove it once you have fixed the broken tests. +Usually you wouldn't check code using `test.only` into source control - you would use it for debugging, and remove it once you have fixed the broken tests. ### `test.only.each(table)(name, fn)` @@ -591,7 +591,7 @@ test('will not be ran', () => { Also under the aliases: `it.skip(name, fn)` or `xit(name, fn)` or `xtest(name, fn)` -When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to just delete this code, you can use `test.skip` to specify some tests to skip. +When you are maintaining a large codebase, you may sometimes find a test that is temporarily broken for some reason. If you want to skip running this test, but you don't want to delete this code, you can use `test.skip` to specify some tests to skip. For example, let's say you had these tests: @@ -607,7 +607,7 @@ test.skip('it is not snowing', () => { Only the "it is raining" test will run, since the other test is run with `test.skip`. -You could simply comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. +You could comment the test out, but it's often a bit nicer to use `test.skip` because it will maintain indentation and syntax highlighting. ### `test.skip.each(table)(name, fn)` diff --git a/website/versioned_docs/version-24.0/MockFunctionAPI.md b/website/versioned_docs/version-24.0/MockFunctionAPI.md index 8cff7a60941f..3688a11ffd5c 100644 --- a/website/versioned_docs/version-24.0/MockFunctionAPI.md +++ b/website/versioned_docs/version-24.0/MockFunctionAPI.md @@ -4,7 +4,7 @@ title: Mock Functions original_id: mock-function-api --- -Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than just testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. +Mock functions are also known as "spies", because they let you spy on the behavior of a function that is called indirectly by some other code, rather than only testing the output. You can create a mock function with `jest.fn()`. If no implementation is given, the mock function will return `undefined` when invoked. ## Methods diff --git a/website/versioned_docs/version-24.0/MockFunctions.md b/website/versioned_docs/version-24.0/MockFunctions.md index 2aac9feeae4d..5f152771a7ac 100644 --- a/website/versioned_docs/version-24.0/MockFunctions.md +++ b/website/versioned_docs/version-24.0/MockFunctions.md @@ -4,7 +4,7 @@ title: Mock Functions original_id: mock-functions --- -Mock functions make it easy to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. +Mock functions allow you to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with `new`, and allowing test-time configuration of return values. There are two ways to mock functions: Either by creating a mock function to use in test code, or writing a [`manual mock`](ManualMocks.md) to override a module dependency. @@ -241,7 +241,7 @@ const myMockFn = jest ## Custom Matchers -Finally, in order to make it simpler to assert how mock functions have been called, we've added some custom matcher functions for you: +Finally, in order to make it less demanding to assert how mock functions have been called, we've added some custom matcher functions for you: ```javascript // The mock function was called at least once @@ -257,7 +257,7 @@ expect(mockFunc).lastCalledWith(arg1, arg2); expect(mockFunc).toMatchSnapshot(); ``` -These matchers are really just sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: +These matchers are sugar for common forms of inspecting the `.mock` property. You can always do this manually yourself if that's more to your taste or if you need to do something more specific: ```javascript // The mock function was called at least once diff --git a/website/versioned_docs/version-24.0/SnapshotTesting.md b/website/versioned_docs/version-24.0/SnapshotTesting.md index 59c5ea9aa3b6..6e62a48214d9 100644 --- a/website/versioned_docs/version-24.0/SnapshotTesting.md +++ b/website/versioned_docs/version-24.0/SnapshotTesting.md @@ -10,7 +10,7 @@ A typical snapshot test case for a mobile app renders a UI component, takes a sn ## Snapshot Testing with Jest -A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a simple [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): +A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this [example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) for a [Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): ```javascript import React from 'react'; @@ -40,7 +40,7 @@ exports[`renders correctly 1`] = ` `; ``` -The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will simply compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. +The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. > Note: The snapshot is directly scoped to the data you render – in our example it's `` component with page prop passed to it. This implies that even if any other file has missing props (Say, `App.js`) in the `` component, it will still pass the test as the test doesn't know the usage of `` component and it's scoped only to the `Link.react.js`. Also, Rendering the same component with different props in other snapshot tests will not affect the first one, as the tests don't know about each other. @@ -226,7 +226,7 @@ Ensure that your snapshots are readable by keeping them focused, short, and by u As mentioned previously, Jest uses [`pretty-format`](https://yarnpkg.com/en/package/pretty-format) to make snapshots human-readable, but you may find it useful to introduce additional tools, like [`eslint-plugin-jest`](https://yarnpkg.com/en/package/eslint-plugin-jest) with its [`no-large-snapshots`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-large-snapshots.md) option, or [`snapshot-diff`](https://yarnpkg.com/en/package/snapshot-diff) with its component snapshot comparison feature, to promote committing short, focused assertions. -The goal is to make it easy to review snapshots in pull requests, and fight against the habit of simply regenerating snapshots when test suites fail instead of examining the root causes of their failure. +The goal is to make it easy to review snapshots in pull requests, and fight against the habit of regenerating snapshots when test suites fail instead of examining the root causes of their failure. ### 2. Tests should be deterministic @@ -268,7 +268,7 @@ exports[` should render Alan Turing`] = ` `; ``` -Since the later describes exactly what's expected in the output, it's easy to see when it's wrong: +Since the later describes exactly what's expected in the output, it's more clear to see when it's wrong: ```js exports[` should render null`] = ` @@ -316,4 +316,4 @@ Although it is possible to write snapshot files manually, that is usually not ap ### Does code coverage work with snapshot testing? -Yes, just like with any other test. +Yes, as well as with any other test. diff --git a/website/versioned_docs/version-24.0/TestingAsyncCode.md b/website/versioned_docs/version-24.0/TestingAsyncCode.md index 2cf30902b9f3..49e4c6721665 100644 --- a/website/versioned_docs/version-24.0/TestingAsyncCode.md +++ b/website/versioned_docs/version-24.0/TestingAsyncCode.md @@ -10,7 +10,7 @@ It's common in JavaScript for code to run asynchronously. When you have code tha The most common asynchronous pattern is callbacks. -For example, let's say that you have a `fetchData(callback)` function that fetches some data and calls `callback(data)` when it is complete. You want to test that this returned data is just the string `'peanut butter'`. +For example, let's say that you have a `fetchData(callback)` function that fetches some data and calls `callback(data)` when it is complete. You want to test that this returned data is the string `'peanut butter'`. By default, Jest tests complete once they reach the end of their execution. That means this test will _not_ work as intended: @@ -44,7 +44,7 @@ If `done()` is never called, the test will fail, which is what you want to happe ## Promises -If your code uses promises, there is a simpler way to handle asynchronous tests. Just return a promise from your test, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. +If your code uses promises, there is a more straightforward way to handle asynchronous tests. Return a promise from your test, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. For example, let's say that `fetchData`, instead of using a callback, returns a promise that is supposed to resolve to the string `'peanut butter'`. We could test it with: @@ -89,7 +89,7 @@ test('the fetch fails with an error', () => { ## Async/Await -Alternatively, you can use `async` and `await` in your tests. To write an async test, just use the `async` keyword in front of the function passed to `test`. For example, the same `fetchData` scenario can be tested with: +Alternatively, you can use `async` and `await` in your tests. To write an async test, use the `async` keyword in front of the function passed to `test`. For example, the same `fetchData` scenario can be tested with: ```js test('the data is peanut butter', async () => { @@ -107,7 +107,7 @@ test('the fetch fails with an error', async () => { }); ``` -Of course, you can combine `async` and `await` with `.resolves` or `.rejects`. +You can combine `async` and `await` with `.resolves` or `.rejects`. ```js test('the data is peanut butter', async () => { @@ -119,6 +119,6 @@ test('the fetch fails with an error', async () => { }); ``` -In these cases, `async` and `await` are effectively just syntactic sugar for the same logic as the promises example uses. +In these cases, `async` and `await` are effectively syntactic sugar for the same logic as the promises example uses. -None of these forms is particularly superior to the others, and you can mix and match them across a codebase or even in a single file. It just depends on which style makes your tests simpler. +None of these forms is particularly superior to the others, and you can mix and match them across a codebase or even in a single file. It just depends on which style you feel makes your tests simpler. diff --git a/website/versioned_docs/version-24.0/Troubleshooting.md b/website/versioned_docs/version-24.0/Troubleshooting.md index 2fadb82d7742..e30a4e1bf7ff 100644 --- a/website/versioned_docs/version-24.0/Troubleshooting.md +++ b/website/versioned_docs/version-24.0/Troubleshooting.md @@ -20,9 +20,9 @@ node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other argume This will run Jest in a Node process that an external debugger can connect to. Note that the process will pause until the debugger has connected to it. -To debug in Google Chrome (or any Chromium-based browser), simply open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Simply click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. +To debug in Google Chrome (or any Chromium-based browser), open your browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Click on the address displayed in the terminal (usually something like `localhost:9229`) after running the above command, and you will be able to debug Jest using Chrome's DevTools. -The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done simply to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. +The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the `debugger` statement, execution will pause and you can examine the current scope and call stack. > Note: the `--runInBand` cli option makes sure Jest runs test in the same process rather than spawning processes for individual tests. Normally Jest parallelizes test runs across processes but it is hard to debug many processes at the same time. diff --git a/website/versioned_docs/version-24.0/TutorialAsync.md b/website/versioned_docs/version-24.0/TutorialAsync.md index 7d027e83d7ac..58cd83aba048 100644 --- a/website/versioned_docs/version-24.0/TutorialAsync.md +++ b/website/versioned_docs/version-24.0/TutorialAsync.md @@ -6,7 +6,7 @@ original_id: tutorial-async First, enable Babel support in Jest as documented in the [Getting Started](GettingStarted.md#using-babel) guide. -Let's implement a simple module that fetches user data from an API and returns the user name. +Let's implement a module that fetches user data from an API and returns the user name. ```js // user.js @@ -92,7 +92,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is easy. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/website/versioned_docs/version-24.0/TutorialReact.md b/website/versioned_docs/version-24.0/TutorialReact.md index 8f138178b78c..02c7f1ac14f9 100644 --- a/website/versioned_docs/version-24.0/TutorialReact.md +++ b/website/versioned_docs/version-24.0/TutorialReact.md @@ -10,7 +10,7 @@ At Facebook, we use Jest to test [React](http://facebook.github.io/react/) appli ### Setup with Create React App -If you are just getting started with React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://github.com/facebookincubator/create-react-app)! You will only need to add `react-test-renderer` for rendering snapshots. +If you are new to React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://github.com/facebookincubator/create-react-app)! You will only need to add `react-test-renderer` for rendering snapshots. Run @@ -215,7 +215,7 @@ If you'd like to assert, and manipulate your rendered components you can use [re You have to run `yarn add --dev @testing-library/react` to use react-testing-library. -Let's implement a simple checkbox which swaps between two labels: +Let's implement a checkbox which swaps between two labels: ```javascript // CheckboxWithLabel.js diff --git a/website/versioned_docs/version-24.0/TutorialReactNative.md b/website/versioned_docs/version-24.0/TutorialReactNative.md index cf182eb1f3ab..75a9308635fe 100644 --- a/website/versioned_docs/version-24.0/TutorialReactNative.md +++ b/website/versioned_docs/version-24.0/TutorialReactNative.md @@ -24,7 +24,7 @@ Starting from react-native version 0.38, a Jest setup is included by default whe _Note: If you are upgrading your react-native application and previously used the `jest-react-native` preset, remove the dependency from your `package.json` file and change the preset to `react-native` instead._ -Simply run `yarn test` to run tests with Jest. +Run `yarn test` to run tests with Jest. ## Snapshot Test diff --git a/website/versioned_docs/version-24.0/Webpack.md b/website/versioned_docs/version-24.0/Webpack.md index 234806a7d55e..05a227db5990 100644 --- a/website/versioned_docs/version-24.0/Webpack.md +++ b/website/versioned_docs/version-24.0/Webpack.md @@ -170,7 +170,7 @@ Similarly webpack's `resolve.root` option functions like setting the `NODE_PATH` } ``` -And finally we just have the webpack `alias` left to handle. For that we can make use of the `moduleNameMapper` option again. +And finally, we have to handle the webpack `alias`. For that we can make use of the `moduleNameMapper` option again. ```json // package.json diff --git a/website/versioned_docs/version-24.1/Configuration.md b/website/versioned_docs/version-24.1/Configuration.md index ba8150cc0ce3..dfed5943ac3d 100644 --- a/website/versioned_docs/version-24.1/Configuration.md +++ b/website/versioned_docs/version-24.1/Configuration.md @@ -87,7 +87,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); diff --git a/website/versioned_docs/version-24.6/Configuration.md b/website/versioned_docs/version-24.6/Configuration.md index 9f87317043d7..bfad9f7500ea 100644 --- a/website/versioned_docs/version-24.6/Configuration.md +++ b/website/versioned_docs/version-24.6/Configuration.md @@ -87,7 +87,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); diff --git a/website/versioned_docs/version-24.6/GettingStarted.md b/website/versioned_docs/version-24.6/GettingStarted.md index 203966ae0afb..3ccfca5b3eea 100644 --- a/website/versioned_docs/version-24.6/GettingStarted.md +++ b/website/versioned_docs/version-24.6/GettingStarted.md @@ -176,4 +176,4 @@ module.exports = { }; ``` -However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). +However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). diff --git a/website/versioned_docs/version-24.6/MigrationGuide.md b/website/versioned_docs/version-24.6/MigrationGuide.md index 1c05db3b6a5a..64307caf734c 100644 --- a/website/versioned_docs/version-24.6/MigrationGuide.md +++ b/website/versioned_docs/version-24.6/MigrationGuide.md @@ -6,7 +6,7 @@ original_id: migration-guide If you'd like to try out Jest with an existing codebase, there are a number of ways to convert to Jest: -- If you are using Jasmine, or a Jasmine like API (for example [Mocha](https://mochajs.org)), Jest should be mostly compatible and easy to migrate to. +- If you are using Jasmine, or a Jasmine like API (for example [Mocha](https://mochajs.org)), Jest should be mostly compatible, which makes it less complicated to migrate to. - If you are using AVA, Expect.js (by Automattic), Jasmine, Mocha, proxyquire, Should.js or Tape you can automatically migrate with Jest Codemods (see below). - If you like [chai](http://chaijs.com/), you can upgrade to Jest and continue using chai. However, we recommend trying out Jest's assertions and their failure messages. Jest Codemods can migrate from chai (see below). diff --git a/website/versioned_docs/version-24.8/Configuration.md b/website/versioned_docs/version-24.8/Configuration.md index 3dc6f24909ea..5635054e8ea0 100644 --- a/website/versioned_docs/version-24.8/Configuration.md +++ b/website/versioned_docs/version-24.8/Configuration.md @@ -87,7 +87,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); diff --git a/website/versioned_docs/version-24.8/ExpectAPI.md b/website/versioned_docs/version-24.8/ExpectAPI.md index 0c136a9d293b..b26db471cb76 100644 --- a/website/versioned_docs/version-24.8/ExpectAPI.md +++ b/website/versioned_docs/version-24.8/ExpectAPI.md @@ -208,7 +208,7 @@ When an assertion fails, the error message should give as much signal as necessa To use snapshot testing inside of your custom matcher you can import `jest-snapshot` and use it from within your matcher. -Here's a simple snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: +Here's a snapshot matcher that trims a string to store for a given length, `.toMatchTrimmedSnapshot(length)`: ```js const {toMatchSnapshot} = require('jest-snapshot'); @@ -799,7 +799,7 @@ const houseForSale = { }; test('this house has my desired features', () => { - // Simple Referencing + // Example Referencing expect(houseForSale).toHaveProperty('bath'); expect(houseForSale).toHaveProperty('bedrooms', 4); @@ -835,7 +835,7 @@ test('this house has my desired features', () => { Using exact equality with floating point numbers is a bad idea. Rounding means that intuitive things fail. For example, this test fails: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBe(0.3); // Fails! }); ``` @@ -845,7 +845,7 @@ It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. S Instead, use `.toBeCloseTo`. Use `numDigits` to control how many digits after the decimal point to check. For example, if you want to be sure that `0.2 + 0.1` is equal to `0.3` with a precision of 5 decimal digits, you can use this test: ```js -test('adding works sanely with simple decimals', () => { +test('adding works sanely with decimals', () => { expect(0.2 + 0.1).toBeCloseTo(0.3, 5); }); ``` @@ -854,7 +854,7 @@ The optional `numDigits` argument has default value `2` which means the criterio ### `.toBeDefined()` -Use `.toBeDefined` to check that a variable is not undefined. For example, if you just want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: +Use `.toBeDefined` to check that a variable is not undefined. For example, if you want to check that a function `fetchNewFlavorIdea()` returns _something_, you can write: ```js test('there is a new flavor idea', () => { @@ -866,7 +866,7 @@ You could write `expect(fetchNewFlavorIdea()).not.toBe(undefined)`, but it's bet ### `.toBeFalsy()` -Use `.toBeFalsy` when you don't care what a value is, you just want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeFalsy` when you don't care what a value is and you want to ensure a value is false in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -954,7 +954,7 @@ test('bloop returns null', () => { ### `.toBeTruthy()` -Use `.toBeTruthy` when you don't care what a value is, you just want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: +Use `.toBeTruthy` when you don't care what a value is and you want to ensure a value is true in a boolean context. For example, let's say you have some application code that looks like: ```js drinkSomeLaCroix(); @@ -963,7 +963,7 @@ if (thirstInfo()) { } ``` -You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you just want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: +You may not care what `thirstInfo` returns, specifically - it might return `true` or a complex object, and your code would still work. So if you want to test that `thirstInfo` will be truthy after drinking some La Croix, you could write: ```js test('drinking La Croix leads to having thirst info', () => { diff --git a/website/versioned_docs/version-24.8/TutorialReact.md b/website/versioned_docs/version-24.8/TutorialReact.md index e8480988cc1d..6a8eb097f8a7 100644 --- a/website/versioned_docs/version-24.8/TutorialReact.md +++ b/website/versioned_docs/version-24.8/TutorialReact.md @@ -10,7 +10,7 @@ At Facebook, we use Jest to test [React](http://facebook.github.io/react/) appli ### Setup with Create React App -If you are just getting started with React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://facebook.github.io/create-react-app/docs/running-tests#docsNav)! You will only need to add `react-test-renderer` for rendering snapshots. +If you are new to React, we recommend using [Create React App](https://github.com/facebookincubator/create-react-app). It is ready to use and [ships with Jest](https://facebook.github.io/create-react-app/docs/running-tests#docsNav)! You will only need to add `react-test-renderer` for rendering snapshots. Run @@ -215,7 +215,7 @@ If you'd like to assert, and manipulate your rendered components you can use [re You have to run `yarn add --dev @testing-library/react` to use react-testing-library. -Let's implement a simple checkbox which swaps between two labels: +Let's implement a checkbox which swaps between two labels: ```javascript // CheckboxWithLabel.js diff --git a/website/versioned_docs/version-24.8/Webpack.md b/website/versioned_docs/version-24.8/Webpack.md index 9f8386a5c7ad..2f3d6b5c0870 100644 --- a/website/versioned_docs/version-24.8/Webpack.md +++ b/website/versioned_docs/version-24.8/Webpack.md @@ -170,7 +170,7 @@ Similarly webpack's `resolve.root` option functions like setting the `NODE_PATH` } ``` -And finally we just have the webpack `alias` left to handle. For that we can make use of the `moduleNameMapper` option again. +And finally, we have to handle the webpack `alias`. For that we can make use of the `moduleNameMapper` option again. ```json // package.json diff --git a/website/versioned_docs/version-24.9/Configuration.md b/website/versioned_docs/version-24.9/Configuration.md index e59960732e52..0afbb701c933 100644 --- a/website/versioned_docs/version-24.9/Configuration.md +++ b/website/versioned_docs/version-24.9/Configuration.md @@ -87,7 +87,7 @@ test('if utils mocked automatically', () => { expect(utils.isAuthorized.mock).toBeTruthy(); // You can provide them with your own implementation - // or just pass the expected return value + // or pass the expected return value utils.authorize.mockReturnValue('mocked_token'); utils.isAuthorized.mockReturnValue(true); From f060e21c15330a1e659d41883c8296df0088eba4 Mon Sep 17 00:00:00 2001 From: Carolyn Stransky Date: Fri, 11 Oct 2019 22:53:50 +0200 Subject: [PATCH 56/97] Docs: More inclusive wording (#9045) --- docs/Es6ClassMocks.md | 2 +- docs/TutorialAsync.md | 2 +- packages/pretty-format/README.md | 2 +- website/versioned_docs/version-22.x/TutorialAsync.md | 2 +- website/versioned_docs/version-23.x/Es6ClassMocks.md | 2 +- website/versioned_docs/version-23.x/TutorialAsync.md | 2 +- website/versioned_docs/version-24.0/Es6ClassMocks.md | 2 +- website/versioned_docs/version-24.0/TutorialAsync.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/Es6ClassMocks.md b/docs/Es6ClassMocks.md index a9b0adfc64db..f6c91499ada8 100644 --- a/docs/Es6ClassMocks.md +++ b/docs/Es6ClassMocks.md @@ -190,7 +190,7 @@ describe('When SoundPlayer throws an error', () => { ## In depth: Understanding mock constructor functions -Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own smaller mocks to illustrate how mocking works. +Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own mocks to illustrate how mocking works. ### Manual mock that is another ES6 class diff --git a/docs/TutorialAsync.md b/docs/TutorialAsync.md index c77b9d114af1..1acb3cab7f11 100644 --- a/docs/TutorialAsync.md +++ b/docs/TutorialAsync.md @@ -91,7 +91,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is also possible. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/packages/pretty-format/README.md b/packages/pretty-format/README.md index 022db7ea2cfa..ca445cfaf7b2 100755 --- a/packages/pretty-format/README.md +++ b/packages/pretty-format/README.md @@ -230,7 +230,7 @@ Some properties in `config` are derived from `min` in `options`: ### Example of serialize and test -This plugin is a pattern you can apply to serialize composite data types. `pretty-format` does not need a plugin to serialize arrays. +This plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays. ```js // We reused more code when we factored out a function for child items diff --git a/website/versioned_docs/version-22.x/TutorialAsync.md b/website/versioned_docs/version-22.x/TutorialAsync.md index d8cd2e227737..5c074993ae4d 100644 --- a/website/versioned_docs/version-22.x/TutorialAsync.md +++ b/website/versioned_docs/version-22.x/TutorialAsync.md @@ -94,7 +94,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is also possible. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/website/versioned_docs/version-23.x/Es6ClassMocks.md b/website/versioned_docs/version-23.x/Es6ClassMocks.md index 72b7d7287b09..74e38caea546 100644 --- a/website/versioned_docs/version-23.x/Es6ClassMocks.md +++ b/website/versioned_docs/version-23.x/Es6ClassMocks.md @@ -191,7 +191,7 @@ describe('When SoundPlayer throws an error', () => { ## In depth: Understanding mock constructor functions -Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own smaller mocks to illustrate how mocking works. +Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own mocks to illustrate how mocking works. ### Manual mock that is another ES6 class diff --git a/website/versioned_docs/version-23.x/TutorialAsync.md b/website/versioned_docs/version-23.x/TutorialAsync.md index a93f4f2b107a..44346e5a60d6 100644 --- a/website/versioned_docs/version-23.x/TutorialAsync.md +++ b/website/versioned_docs/version-23.x/TutorialAsync.md @@ -92,7 +92,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is also possible. Here is how you'd write the same examples from before: ```js // async/await can be used. diff --git a/website/versioned_docs/version-24.0/Es6ClassMocks.md b/website/versioned_docs/version-24.0/Es6ClassMocks.md index 7f8eb4833e94..244e40cd5444 100644 --- a/website/versioned_docs/version-24.0/Es6ClassMocks.md +++ b/website/versioned_docs/version-24.0/Es6ClassMocks.md @@ -191,7 +191,7 @@ describe('When SoundPlayer throws an error', () => { ## In depth: Understanding mock constructor functions -Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own smaller mocks to illustrate how mocking works. +Building your constructor function mock using `jest.fn().mockImplementation()` makes mocks appear more complicated than they really are. This section shows how you can create your own mocks to illustrate how mocking works. ### Manual mock that is another ES6 class diff --git a/website/versioned_docs/version-24.0/TutorialAsync.md b/website/versioned_docs/version-24.0/TutorialAsync.md index 58cd83aba048..8a4592e855c3 100644 --- a/website/versioned_docs/version-24.0/TutorialAsync.md +++ b/website/versioned_docs/version-24.0/TutorialAsync.md @@ -92,7 +92,7 @@ it('works with resolves', () => { ## `async`/`await` -Writing tests using the `async`/`await` syntax is less complicated than you might expect. Here is how you'd write the same examples from before: +Writing tests using the `async`/`await` syntax is also possible. Here is how you'd write the same examples from before: ```js // async/await can be used. From 1d4bd5fd159611af9670df38298714767a29a758 Mon Sep 17 00:00:00 2001 From: Lars Wassermann Date: Sun, 13 Oct 2019 17:59:43 +0200 Subject: [PATCH 57/97] doc: Update mock expectations (#9038) These seem to be outdated. --- docs/MockFunctions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/MockFunctions.md b/docs/MockFunctions.md index 65bf1e96ea02..3920c9b906ff 100644 --- a/docs/MockFunctions.md +++ b/docs/MockFunctions.md @@ -244,13 +244,13 @@ Finally, in order to make it less demanding to assert how mock functions have be ```javascript // The mock function was called at least once -expect(mockFunc).toBeCalled(); +expect(mockFunc).toHaveBeenCalled(); // The mock function was called at least once with the specified args -expect(mockFunc).toBeCalledWith(arg1, arg2); +expect(mockFunc).toHaveBeenCalledWith(arg1, arg2); // The last call to the mock function was called with the specified args -expect(mockFunc).lastCalledWith(arg1, arg2); +expect(mockFunc).toHaveBeenLastCalledWith(arg1, arg2); // All calls and the name of the mock is written as a snapshot expect(mockFunc).toMatchSnapshot(); From 309d95a55d999e8f7ab0e0ac5ac4eb4f280a1865 Mon Sep 17 00:00:00 2001 From: Yordis Prieto Date: Sun, 13 Oct 2019 14:40:14 -0700 Subject: [PATCH 58/97] Improve coverage threshold value (#9023) * Improve coverage threshold value * Fix typespec * Fix linter * FIx typespec of threshold --- packages/jest-reporters/src/coverage_reporter.ts | 4 ++-- packages/jest-types/src/Config.ts | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/jest-reporters/src/coverage_reporter.ts b/packages/jest-reporters/src/coverage_reporter.ts index 8aa8292c38bd..75764da11773 100644 --- a/packages/jest-reporters/src/coverage_reporter.ts +++ b/packages/jest-reporters/src/coverage_reporter.ts @@ -216,7 +216,7 @@ export default class CoverageReporter extends BaseReporter { if (globalConfig.coverageThreshold) { function check( name: string, - thresholds: {[index: string]: number}, + thresholds: Config.CoverageThresholdValue, actuals: istanbulCoverage.CoverageSummaryData, ) { return (['statements', 'branches', 'lines', 'functions'] as Array< @@ -226,7 +226,7 @@ export default class CoverageReporter extends BaseReporter { const actualUncovered = actuals[key].total - actuals[key].covered; const threshold = thresholds[key]; - if (threshold != null) { + if (threshold !== undefined) { if (threshold < 0) { if (threshold * -1 < actualUncovered) { errors.push( diff --git a/packages/jest-types/src/Config.ts b/packages/jest-types/src/Config.ts index f3974dcae59e..42efe27238c8 100644 --- a/packages/jest-types/src/Config.ts +++ b/packages/jest-types/src/Config.ts @@ -278,13 +278,16 @@ type DisplayNameColor = | 'bgCyanBright' | 'bgWhiteBright'; +export type CoverageThresholdValue = { + branches?: number; + functions?: number; + lines?: number; + statements?: number; +}; + type CoverageThreshold = { - [path: string]: { - [key: string]: number; - }; - global: { - [key: string]: number; - }; + [path: string]: CoverageThresholdValue; + global: CoverageThresholdValue; }; export type GlobalConfig = { From 01fd3a482051822533137844c944223a08165c2d Mon Sep 17 00:00:00 2001 From: Kornel Dubieniecki Date: Mon, 14 Oct 2019 23:25:12 +0200 Subject: [PATCH 59/97] feat: transform file paths into hyperlinks (#8980) * feat: transform file paths into hyperlinks * chore: commit yarn.lock * chore: update CHANGELOG.md * chore: add test * chore: add test for the returned value * Apply the review suggestions * Hardcode expected values --- CHANGELOG.md | 1 + packages/jest-reporters/package.json | 3 +- .../src/__tests__/get_result_header.test.js | 38 +++++++++++++++++++ .../jest-reporters/src/get_result_header.ts | 14 +++++-- yarn.lock | 16 ++++++++ 5 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 packages/jest-reporters/src/__tests__/get_result_header.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 60010fe140fc..0e88eb8eb88b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ - `[jest-snapshot]` Display change counts in annotation lines ([#8982](https://github.com/facebook/jest/pull/8982)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) - `[jest-worker]` [**BREAKING**] Return a promise from `end()`, resolving with the information whether workers exited gracefully ([#8206](https://github.com/facebook/jest/pull/8206)) +- `[jest-reporters]` Transform file paths into hyperlinks ([#8980](https://github.com/facebook/jest/pull/8980)) ### Fixes diff --git a/packages/jest-reporters/package.json b/packages/jest-reporters/package.json index 26e2478139ab..e01aa16e66f3 100644 --- a/packages/jest-reporters/package.json +++ b/packages/jest-reporters/package.json @@ -25,7 +25,8 @@ "jest-worker": "^24.6.0", "slash": "^3.0.0", "source-map": "^0.6.0", - "string-length": "^3.1.0" + "string-length": "^3.1.0", + "terminal-link": "^2.0.0" }, "devDependencies": { "@types/exit": "^0.1.30", diff --git a/packages/jest-reporters/src/__tests__/get_result_header.test.js b/packages/jest-reporters/src/__tests__/get_result_header.test.js new file mode 100644 index 000000000000..3c0c3351ae3e --- /dev/null +++ b/packages/jest-reporters/src/__tests__/get_result_header.test.js @@ -0,0 +1,38 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {makeGlobalConfig} from '../../../../TestUtils'; +import getResultHeader from '../get_result_header'; +const terminalLink = require('terminal-link'); + +jest.mock('terminal-link', () => jest.fn(() => 'wannabehyperlink')); + +const testResult = { + testFilePath: '/foo', +}; + +const globalConfig = makeGlobalConfig(); + +beforeEach(() => { + terminalLink.mockClear(); +}); + +test('should call `terminal-link` correctly', () => { + getResultHeader(testResult, globalConfig); + + expect(terminalLink).toBeCalledWith( + expect.stringContaining('foo'), + 'file:///foo', + expect.objectContaining({fallback: expect.any(Function)}), + ); +}); + +test('should render the terminal link', () => { + const result = getResultHeader(testResult, globalConfig); + + expect(result).toContain('wannabehyperlink'); +}); diff --git a/packages/jest-reporters/src/get_result_header.ts b/packages/jest-reporters/src/get_result_header.ts index 4c80809cdce6..81292fa3e518 100644 --- a/packages/jest-reporters/src/get_result_header.ts +++ b/packages/jest-reporters/src/get_result_header.ts @@ -9,6 +9,7 @@ import {Config} from '@jest/types'; import {TestResult} from '@jest/test-result'; import chalk from 'chalk'; import {formatTestPath, printDisplayName} from './utils'; +import terminalLink = require('terminal-link'); const LONG_TEST_COLOR = chalk.reset.bold.bgRed; // Explicitly reset for these messages since they can get written out in the @@ -30,6 +31,13 @@ export default ( projectConfig?: Config.ProjectConfig, ) => { const testPath = result.testFilePath; + const formattedTestPath = formatTestPath( + projectConfig ? projectConfig : globalConfig, + testPath, + ); + const fileLink = terminalLink(formattedTestPath, `file://${testPath}`, { + fallback: () => formattedTestPath, + }); const status = result.numFailingTests > 0 || result.testExecError ? FAIL : PASS; @@ -53,9 +61,7 @@ export default ( : ''; return ( - `${status} ${projectDisplayName}${formatTestPath( - projectConfig ? projectConfig : globalConfig, - testPath, - )}` + (testDetail.length ? ` (${testDetail.join(', ')})` : '') + `${status} ${projectDisplayName}${fileLink}` + + (testDetail.length ? ` (${testDetail.join(', ')})` : '') ); }; diff --git a/yarn.lock b/yarn.lock index db12aa6d64c8..9376627c95bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13130,6 +13130,14 @@ supports-color@^7.0.0: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.0.0.tgz#b1b94a159e9df00b0a554b2d5f0e0a89690334b0" + integrity sha512-bFhn0MQ8qefLyJ3K7PpHiPUTuTVPWw6RXfaMeV6xgJLXtBbszyboz1bvGTVv4R0YpQm2DqlXXn0fFHhxUHVE5w== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + svgo@^1.0.0, svgo@^1.0.5: version "1.3.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" @@ -13245,6 +13253,14 @@ tempfile@^2.0.0: temp-dir "^1.0.0" uuid "^3.0.1" +terminal-link@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.0.0.tgz#daa5d9893d57d3a09f981e1a45be37daba3f0ce6" + integrity sha512-rdBAY35jUvVapqCuhehjenLbYY73cVgRQ6podD6u9EDBomBBHjCOtmq2InPgPpTysOIOsQ5PdBzwSC/sKjv6ew== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" From d74da1a0dde8f17997022f40a4adc07823d50c69 Mon Sep 17 00:00:00 2001 From: Nicolas DUBIEN Date: Tue, 15 Oct 2019 20:21:41 +0200 Subject: [PATCH 60/97] Fix invalid Usage section for diff-sequences in README (#9053) --- packages/diff-sequences/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/diff-sequences/README.md b/packages/diff-sequences/README.md index bdee0d11824b..13affbfcf439 100644 --- a/packages/diff-sequences/README.md +++ b/packages/diff-sequences/README.md @@ -28,7 +28,7 @@ To add this package as a dependency of a project, do either of the following: To use `diff` as the name of the default export from this package, do either of the following: -- `var diff = require('diff-sequences'); // CommonJS modules` +- `var diff = require('diff-sequences').default; // CommonJS modules` - `import diff from 'diff-sequences'; // ECMAScript modules` Call `diff` with the **lengths** of sequences and your **callback** functions: From ecf46c23c7b282af9e48087fdd39a26a2b7ef51c Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Thu, 17 Oct 2019 09:10:03 -0400 Subject: [PATCH 61/97] expect: Avoid incorrect difference for subset when toMatchObject fails (#9005) * expect: Avoid incorrect difference for subset when toMatchObject fails * Add brief comments about returning subclass of subset * Update CHANGELOG.md * Apply suggestions from code review Co-Authored-By: Tim Seckinger --- CHANGELOG.md | 3 +- packages/expect/src/__tests__/utils.test.js | 39 ++++++++++++++++++++- packages/expect/src/utils.ts | 6 ++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e88eb8eb88b..2c51c2730297 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,8 @@ ### Fixes -- `[expect]` Display expectedDiff more carefully in toBeCloseTo ([#8389](https://github.com/facebook/jest/pull/8389)) +- `[expect]` Display `expectedDiff` more carefully in `toBeCloseTo` ([#8389](https://github.com/facebook/jest/pull/8389)) +- `[expect]` Avoid incorrect difference for subset when `toMatchObject` fails ([#9005](https://github.com/facebook/jest/pull/9005)) - `[jest-core]` Don't include unref'd timers in --detectOpenHandles results ([#8941](https://github.com/facebook/jest/pull/8941)) - `[jest-diff]` Do not inverse format if line consists of one change ([#8903](https://github.com/facebook/jest/pull/8903)) - `[jest-fake-timers]` `getTimerCount` will not include cancelled immediates ([#8764](https://github.com/facebook/jest/pull/8764)) diff --git a/packages/expect/src/__tests__/utils.test.js b/packages/expect/src/__tests__/utils.test.js index b20b3db68700..e78c4e597313 100644 --- a/packages/expect/src/__tests__/utils.test.js +++ b/packages/expect/src/__tests__/utils.test.js @@ -147,7 +147,7 @@ describe('hasOwnProperty', () => { }); }); -describe('getObjectSubset()', () => { +describe('getObjectSubset', () => { [ [{a: 'b', c: 'd'}, {a: 'd'}, {a: 'b'}], [{a: [1, 2], b: 'b'}, {a: [3, 4]}, {a: [1, 2]}], @@ -165,6 +165,43 @@ describe('getObjectSubset()', () => { ); }); + describe('returns the object instance if the subset has no extra properties', () => { + test('Date', () => { + const object = new Date('2015-11-30'); + const subset = new Date('2016-12-30'); + + expect(getObjectSubset(object, subset)).toBe(object); + }); + }); + + describe('returns the subset instance if its property values are equal', () => { + test('Object', () => { + const object = {key0: 'zero', key1: 'one', key2: 'two'}; + const subset = {key0: 'zero', key2: 'two'}; + + expect(getObjectSubset(object, subset)).toBe(subset); + }); + + describe('Uint8Array', () => { + const equalObject = {'0': 0, '1': 0, '2': 0}; + const typedArray = new Uint8Array(3); + + test('expected', () => { + const object = equalObject; + const subset = typedArray; + + expect(getObjectSubset(object, subset)).toBe(subset); + }); + + test('received', () => { + const object = typedArray; + const subset = equalObject; + + expect(getObjectSubset(object, subset)).toBe(subset); + }); + }); + }); + describe('calculating subsets of objects with circular references', () => { test('simple circular references', () => { const nonCircularObj = {a: 'world', b: 'something'}; diff --git a/packages/expect/src/utils.ts b/packages/expect/src/utils.ts index 6e77197bf219..a642e56b22ee 100644 --- a/packages/expect/src/utils.ts +++ b/packages/expect/src/utils.ts @@ -111,6 +111,7 @@ export const getObjectSubset = ( ): any => { if (Array.isArray(object)) { if (Array.isArray(subset) && subset.length === object.length) { + // The map method returns correct subclass of subset. return subset.map((sub: any, i: number) => getObjectSubset(object[i], sub), ); @@ -118,6 +119,11 @@ export const getObjectSubset = ( } else if (object instanceof Date) { return object; } else if (isObject(object) && isObject(subset)) { + if (equals(object, subset, [iterableEquality, subsetEquality])) { + // Avoid unnecessary copy which might return Object instead of subclass. + return subset; + } + const trimmed: any = {}; seenReferences.set(object, trimmed); From cc74b5159cbe2eb61eaa4d96b37a91eef1bef4c9 Mon Sep 17 00:00:00 2001 From: Byran Zaugg Date: Thu, 17 Oct 2019 14:24:40 -0700 Subject: [PATCH 62/97] docs: Add collectCoverage to Reference (#8996) * docs: Add collectCoverage to Reference Also noted how to override option set in Configuration * docs: Add collectCoverage to CLI Reference * docs: Move collectCoverage under coverage * docs: Reword CHANGELOG update --- CHANGELOG.md | 1 + docs/CLI.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c51c2730297..625c2f243187 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ - `[*]` Add Node 12 to CI ([#8411](https://github.com/facebook/jest/pull/8411)) - `[*]` [**BREAKING**] Upgrade to Micromatch v4 ([#8852](https://github.com/facebook/jest/pull/8852)) - `[babel-plugin-jest-hoist]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) +- `[docs]` Add alias and optional boolean value to `coverage` CLI Reference ([#8996](https://github.com/facebook/jest/pull/8996)) - `[docs]` Fix broken link pointing to legacy JS file in "Snapshot Testing". - `[docs]` Add `setupFilesAfterEnv` and `jest.setTimeout` example ([#8971](https://github.com/facebook/jest/pull/8971)) - `[jest]` [**BREAKING**] Use ESM exports ([#8874](https://github.com/facebook/jest/pull/8874)) diff --git a/docs/CLI.md b/docs/CLI.md index 079524e58d13..315b2de3c0a2 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -148,9 +148,9 @@ Forces test results output highlighting even if stdout is not a TTY. Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. -### `--coverage` +### `--coverage[=]` -Indicates that test coverage information should be collected and reported in the output. This option is also aliased by `--collectCoverage`. +Alias: `--collectCoverage`. Indicates that test coverage information should be collected and reported in the output. Optionally pass `` to override option set in configuration. ### `--debug` From b3fee0a5e3b34518d0c3684351b3a3337a0efcf3 Mon Sep 17 00:00:00 2001 From: Edwin Shin Date: Sat, 19 Oct 2019 22:35:18 +0800 Subject: [PATCH 63/97] Docs: trivial grammar fix to GettingStarted.md (#9063) Use the past participle of run, i.e. "run" --- README.md | 2 +- docs/GettingStarted.md | 2 +- website/versioned_docs/version-24.6/GettingStarted.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e577a8796a04..bee669671d27 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ module.exports = { }; ``` -Note, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). +Note, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are run. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index 8d0e593fcbee..d074c3f32e7d 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -175,4 +175,4 @@ module.exports = { }; ``` -However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). +However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are run. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). diff --git a/website/versioned_docs/version-24.6/GettingStarted.md b/website/versioned_docs/version-24.6/GettingStarted.md index 3ccfca5b3eea..fcfc788d253d 100644 --- a/website/versioned_docs/version-24.6/GettingStarted.md +++ b/website/versioned_docs/version-24.6/GettingStarted.md @@ -176,4 +176,4 @@ module.exports = { }; ``` -However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are ran. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). +However, there are some [caveats](https://babeljs.io/docs/en/next/babel-plugin-transform-typescript.html#caveats) to using TypeScript with Babel. Because TypeScript support in Babel is transpilation, Jest will not type-check your tests as they are run. If you want that, you can use [ts-jest](https://github.com/kulshekhar/ts-jest). From bd48ccce1214a0812baf8d122c8b906c194d54be Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Mon, 21 Oct 2019 14:11:48 +0100 Subject: [PATCH 64/97] Fix typo in CHANGELOG (#9069) * docs: fix typos * Adding to changelog * Amending PR link * Removing unnecessary changelog entry --- CHANGELOG.md | 2 +- ...019-01-25-jest-24-refreshing-polished-typescript-friendly.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 625c2f243187..1ac82eb29f34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -235,7 +235,7 @@ - `[*]` Move @types/node to the root package.json ([#8129](https://github.com/facebook/jest/pull/8129)) - `[*]` Add documentation and tests related to auto-mocking ([#8099](https://github.com/facebook/jest/pull/8099)) - `[*]` Add `jest-watch-typeahead` as a devDependency ([#6449](https://github.com/facebook/jest/pull/6449)) -- `[*]` upgrade TS to 3.4.0-dev\* for inceremental builds ([#8149](https://github.com/facebook/jest/pull/8149)) +- `[*]` upgrade TS to 3.4.0-dev\* for incremental builds ([#8149](https://github.com/facebook/jest/pull/8149)) - `[docs]` Improve description of optional arguments in ExpectAPI.md ([#8126](https://github.com/facebook/jest/pull/8126)) ### Performance diff --git a/website/blog/2019-01-25-jest-24-refreshing-polished-typescript-friendly.md b/website/blog/2019-01-25-jest-24-refreshing-polished-typescript-friendly.md index f0450cde7613..e2c381e21d19 100644 --- a/website/blog/2019-01-25-jest-24-refreshing-polished-typescript-friendly.md +++ b/website/blog/2019-01-25-jest-24-refreshing-polished-typescript-friendly.md @@ -76,7 +76,7 @@ The second one is an issue where Jest runs out of memory if the difference in se - A quirk of Jest's CLI has been that while some flags and options have been camel cased (such as `runInBand`), others have not been (such as `no-cache`). In Jest 24, both are recognized, meaning you can write your CLI arguments however you want. - We've renamed `setupTestFrameworkScriptFile` to `setupFilesAfterEnv`, and made it into an array. We hope this will make it more obvious what the options is for. We have plans to further overhaul the configuration in the next major, see the paragraph in the section below. - To reduce the amount of magic Jest performs to “just work™”, in this release we decided to drop automatic injection of `regenerator-runtime`, which is sometimes used in compiled async code. Including `regenerator-runtime` is not always necessary and we believe it's the user's responsibility to include it if it's needed. If you use `@babel/preset-env` with `targets` set to a modern Node version (e.g. Node 6+) you will not need to include it. Please see our [Using Babel docs](/docs/en/getting-started#using-babel) for more information. -- Node.js 10 came with an experimental module [called `worker_threads`](https://nodejs.org/api/worker_threads.html), which is similar to Worker threads in the browser. `jest-worker`, part of the [Jest platform](/docs/en/jest-platform), will be able to use `worker_threads` if available instead of `child_process`, which makes it even faster! [Benchmarks](https://github.com/facebook/jest/pull/6676) show a 50% improvement. Due to its experimental nature, it's not enabled when using Jest as a test runner, but you can use it in your own projects today! We plan to enable it by default when it's promoted from experimantal status in Node.js. +- Node.js 10 came with an experimental module [called `worker_threads`](https://nodejs.org/api/worker_threads.html), which is similar to Worker threads in the browser. `jest-worker`, part of the [Jest platform](/docs/en/jest-platform), will be able to use `worker_threads` if available instead of `child_process`, which makes it even faster! [Benchmarks](https://github.com/facebook/jest/pull/6676) show a 50% improvement. Due to its experimental nature, it's not enabled when using Jest as a test runner, but you can use it in your own projects today! We plan to enable it by default when it's promoted from experimental status in Node.js. ## Breaking Changes From 800ba641b6939bf83bf2177c78b491e7c35ced61 Mon Sep 17 00:00:00 2001 From: Mark Pedrotti Date: Mon, 21 Oct 2019 17:51:19 -0400 Subject: [PATCH 65/97] jest-snapshot: Remove report method and throw matcher errors (#9049) * jest-snapshot: Remove report method and throw matcher errors * Improve condition for snapshot state not initialized * Update CHANGELOG.md * Snapshot matchers cannot be used with not * Add BREAKING to CHANGELOG.md * Distinguish color of expected arguments with isUpdatable * Fix received or snapshot in some toThrowError tests --- CHANGELOG.md | 1 + e2e/__tests__/toMatchSnapshot.test.ts | 10 +- ...toThrowErrorMatchingInlineSnapshot.test.ts | 6 +- .../toThrowErrorMatchingSnapshot.test.ts | 6 +- e2e/snapshot/__tests__/snapshot.test.js | 2 +- packages/jest-matcher-utils/src/index.ts | 7 +- .../printDiffOrStringified.test.ts.snap | 295 ----- .../__snapshots__/printSnapshot.test.ts.snap | 494 ++++++++ .../__tests__/printDiffOrStringified.test.ts | 530 --------- .../src/__tests__/printSnapshot.test.ts | 1034 +++++++++++++++++ packages/jest-snapshot/src/index.ts | 378 +++--- .../src/{print.ts => printSnapshot.ts} | 54 + packages/jest-snapshot/src/types.ts | 17 + 13 files changed, 1823 insertions(+), 1011 deletions(-) delete mode 100644 packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap create mode 100644 packages/jest-snapshot/src/__tests__/__snapshots__/printSnapshot.test.ts.snap delete mode 100644 packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts create mode 100644 packages/jest-snapshot/src/__tests__/printSnapshot.test.ts rename packages/jest-snapshot/src/{print.ts => printSnapshot.ts} (75%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ac82eb29f34..507920b30aed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) - `[jest-snapshot]` Distinguish empty string from external snapshot not written ([#8880](https://github.com/facebook/jest/pull/8880)) - `[jest-snapshot]` [**BREAKING**] Distinguish empty string from internal snapshot not written ([#8898](https://github.com/facebook/jest/pull/8898)) +- `[jest-snapshot]` [**BREAKING**] Remove `report` method and throw matcher errors ([#9049](https://github.com/facebook/jest/pull/9049)) - `[jest-transform]` Properly cache transformed files across tests ([#8890](https://github.com/facebook/jest/pull/8890)) ### Chore & Maintenance diff --git a/e2e/__tests__/toMatchSnapshot.test.ts b/e2e/__tests__/toMatchSnapshot.test.ts index a051fd99db72..59336c948bce 100644 --- a/e2e/__tests__/toMatchSnapshot.test.ts +++ b/e2e/__tests__/toMatchSnapshot.test.ts @@ -196,7 +196,7 @@ test('handles invalid property matchers', () => { `, }); const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); - expect(stderr).toMatch('Property matchers must be an object.'); + expect(stderr).toMatch('Expected properties must be an object'); expect(exitCode).toBe(1); } { @@ -207,9 +207,9 @@ test('handles invalid property matchers', () => { `, }); const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); - expect(stderr).toMatch('Property matchers must be an object.'); + expect(stderr).toMatch('Expected properties must be an object'); expect(stderr).toMatch( - 'To provide a snapshot test name without property matchers, use: toMatchSnapshot("name")', + `To provide a hint without properties: toMatchSnapshot('hint')`, ); expect(exitCode).toBe(1); } @@ -221,9 +221,9 @@ test('handles invalid property matchers', () => { `, }); const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); - expect(stderr).toMatch('Property matchers must be an object.'); + expect(stderr).toMatch('Expected properties must be an object'); expect(stderr).toMatch( - 'To provide a snapshot test name without property matchers, use: toMatchSnapshot("name")', + `To provide a hint without properties: toMatchSnapshot('hint')`, ); expect(exitCode).toBe(1); } diff --git a/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts b/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts index 6ccdcdbd5e56..c795a8aeb14f 100644 --- a/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts +++ b/e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts @@ -74,14 +74,16 @@ test('cannot be used with .not', () => { const filename = 'cannot-be-used-with-not.test.js'; const template = makeTemplate(` test('cannot be used with .not', () => { - expect('').not.toThrowErrorMatchingInlineSnapshot(); + expect(() => { throw new Error('apple'); }) + .not + .toThrowErrorMatchingInlineSnapshot(); }); `); { writeFiles(TESTS_DIR, {[filename]: template()}); const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); - expect(stderr).toMatch('.not cannot be used with snapshot matchers'); + expect(stderr).toMatch('Snapshot matchers cannot be used with not'); expect(exitCode).toBe(1); } }); diff --git a/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts b/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts index 1a9f398a65a4..ed579226a02f 100644 --- a/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts +++ b/e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts @@ -67,14 +67,16 @@ test('accepts custom snapshot name', () => { test('cannot be used with .not', () => { const filename = 'cannot-be-used-with-not.test.js'; const template = makeTemplate(`test('cannot be used with .not', () => { - expect('').not.toThrowErrorMatchingSnapshot(); + expect(() => { throw new Error('apple'); }) + .not + .toThrowErrorMatchingSnapshot(); }); `); { writeFiles(TESTS_DIR, {[filename]: template()}); const {stderr, exitCode} = runJest(DIR, ['-w=1', '--ci=false', filename]); - expect(stderr).toMatch('.not cannot be used with snapshot matchers'); + expect(stderr).toMatch('Snapshot matchers cannot be used with not'); expect(exitCode).toBe(1); } }); diff --git a/e2e/snapshot/__tests__/snapshot.test.js b/e2e/snapshot/__tests__/snapshot.test.js index f9d79bbd3ca2..22722a34f77d 100644 --- a/e2e/snapshot/__tests__/snapshot.test.js +++ b/e2e/snapshot/__tests__/snapshot.test.js @@ -30,7 +30,7 @@ describe('snapshot', () => { it('cannot be used with .not', () => { expect(() => expect('').not.toMatchSnapshot()).toThrow( - '.not cannot be used with snapshot matchers' + 'Snapshot matchers cannot be used with not' ); }); diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index 8229292934b6..2b0c470e1854 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -415,8 +415,11 @@ export const getLabelPrinter = (...strings: Array): PrintLabel => { export const matcherErrorMessage = ( hint: string, // assertion returned from call to matcherHint generic: string, // condition which correct value must fulfill - specific: string, // incorrect value returned from call to printWithType -) => `${hint}\n\n${chalk.bold('Matcher error')}: ${generic}\n\n${specific}`; + specific?: string, // incorrect value returned from call to printWithType +) => + `${hint}\n\n${chalk.bold('Matcher error')}: ${generic}${ + typeof specific === 'string' ? '\n\n' + specific : '' + }`; // Display assertion for the report when a test fails. // New format: rejects/resolves, not, and matcher name have black color diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap deleted file mode 100644 index 1a5d74cefabb..000000000000 --- a/packages/jest-snapshot/src/__tests__/__snapshots__/printDiffOrStringified.test.ts.snap +++ /dev/null @@ -1,295 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`backtick single line expected and received 1`] = ` -Snapshot: "var foo = \`backtick\`;" -Received: "var foo = tag\`backtick\`;" -`; - -exports[`empty string expected and received single line 1`] = ` -Snapshot: "" -Received: "single line string" -`; - -exports[`empty string received and expected multi line 1`] = ` -- Snapshot - 3 -+ Received + 0 - -- multi -- line -- string -`; - -exports[`escape backslash in multi line string 1`] = ` -- Snapshot - 1 -+ Received + 2 - -- Forward / slash and back \\ slash -+ Forward / slash -+ Back \\ slash -`; - -exports[`escape backslash in single line string 1`] = ` -Snapshot: "forward / slash and back \\\\ slash" -Received: "Forward / slash and back \\\\ slash" -`; - -exports[`escape double quote marks in string 1`] = ` -Snapshot: "What does \\"oobleck\\" mean?" -Received: "What does \\"ewbleck\\" mean?" -`; - -exports[`escape regexp 1`] = ` -Snapshot: /\\\\\\\\\\("\\)/g -Received: /\\\\\\\\\\("\\)/ -`; - -exports[`expand false 1`] = ` -- Snapshot - 1 -+ Received + 3 - -@@ -12,7 +12,9 @@ - ? "number" - : T extends boolean - ? "boolean" - : T extends undefined - ? "undefined" -- : T extends Function ? "function" : "object"; -+ : T extends Function -+ ? "function" -+ : "object"; - ↵ -`; - -exports[`expand true 1`] = ` -- Snapshot - 1 -+ Received + 3 - - type TypeName = - T extends string ? "string" : - T extends number ? "number" : - T extends boolean ? "boolean" : - T extends undefined ? "undefined" : - T extends Function ? "function" : - "object"; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - type TypeName = T extends string - ? "string" - : T extends number - ? "number" - : T extends boolean - ? "boolean" - : T extends undefined - ? "undefined" -- : T extends Function ? "function" : "object"; -+ : T extends Function -+ ? "function" -+ : "object"; - ↵ -`; - -exports[`fallback to line diff 1`] = ` -- Snapshot - 1 -+ Received + 8 - -+ ====================================options===================================== -+ parsers: ["flow", "typescript"] -+ printWidth: 80 -+ | printWidth -+ =====================================input====================================== - [...a, ...b,]; - [...a, ...b]; -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ -+ =====================================output===================================== - [...a, ...b]; - [...a, ...b]; - -+ ================================================================================ -`; - -exports[`has no common after clean up chaff array 1`] = ` -- Snapshot - 2 -+ Received + 2 - - Array [ -- "delete", -- "two", -+ "insert", -+ "2", - ] -`; - -exports[`has no common after clean up chaff string single line 1`] = ` -Snapshot: "delete" -Received: "insert" -`; - -exports[`isLineDiffable false asymmetric matcher 1`] = ` -Snapshot: null -Received: Object { - "asymmetricMatch": [Function], -} -`; - -exports[`isLineDiffable false boolean 1`] = ` -Snapshot: true -Received: false -`; - -exports[`isLineDiffable false date 1`] = ` -Snapshot: 2019-09-19T00:00:00.000Z -Received: 2019-09-20T00:00:00.000Z -`; - -exports[`isLineDiffable false error 1`] = ` -Snapshot: [Error: Cannot spread fragment "NameAndAppearances" within itself.] -Received: [Error: Cannot spread fragment "NameAndAppearancesAndFriends" within itself.] -`; - -exports[`isLineDiffable false function 1`] = ` -Snapshot: undefined -Received: [Function] -`; - -exports[`isLineDiffable false number 1`] = ` -Snapshot: -0 -Received: NaN -`; - -exports[`isLineDiffable true array 1`] = ` -- Snapshot - 0 -+ Received + 2 - - Array [ - Object { -+ "_id": "b14680dec683e744ada1f2fe08614086", - "code": 4011, - "weight": 2.13, - }, - Object { -+ "_id": "7fc63ff01769c4fa7d9279e97e307829", - "code": 4019, - "count": 4, - }, - ] -`; - -exports[`isLineDiffable true object 1`] = ` -- Snapshot - 2 -+ Received + 3 - - Object { - "props": Object { -- "className": "logo", -- "src": "/img/jest.png", -+ "alt": "Jest logo", -+ "class": "logo", -+ "src": "/img/jest.svg", - }, - "type": "img", - } -`; - -exports[`isLineDiffable true single line expected and multi line received 1`] = ` -- Snapshot - 1 -+ Received + 3 - -- Array [] -+ Array [ -+ 0, -+ ] -`; - -exports[`isLineDiffable true single line expected and received 1`] = ` -- Snapshot - 1 -+ Received + 1 - -- Array [] -+ Object {} -`; - -exports[`multi line small change in one line and other is unchanged 1`] = ` -- Snapshot - 1 -+ Received + 1 - -- There is no route defined for key 'Settings'. -+ There is no route defined for key Settings. - Must be one of: 'Home' -`; - -exports[`multi line small changes 1`] = ` -- Snapshot - 7 -+ Received + 7 - -- 69 | -+ 68 | -- 70 | test('assert.doesNotThrow', () => { -+ 69 | test('assert.doesNotThrow', () => { -- > 71 | assert.doesNotThrow(() => { -+ > 70 | assert.doesNotThrow(() => { - | ^ -- 72 | throw Error('err!'); -+ 71 | throw Error('err!'); -- 73 | }); -+ 72 | }); -- 74 | }); -+ 73 | }); -- at Object.doesNotThrow (__tests__/assertionError.test.js:71:10) -+ at Object.doesNotThrow (__tests__/assertionError.test.js:70:10) -`; - -exports[`single line large changes 1`] = ` -Snapshot: "Array length must be a finite positive integer" -Received: "Invalid array length" -`; - -exports[`without serialize backtick single line expected and multi line received 1`] = ` -- Snapshot - 1 -+ Received + 2 - -- var foo = \`backtick\`; -+ var foo = \`back -+ tick\`; -`; - -exports[`without serialize backtick single line expected and received 1`] = ` -- Snapshot - 1 -+ Received + 1 - -- var foo = \`backtick\`; -+ var foo = \`back\${x}tick\`; -`; - -exports[`without serialize has no common after clean up chaff multi line 1`] = ` -- Snapshot - 2 -+ Received + 2 - -- delete -- two -+ insert -+ 2 -`; - -exports[`without serialize has no common after clean up chaff single line 1`] = ` -- Snapshot - 1 -+ Received + 1 - -- delete -+ insert -`; - -exports[`without serialize prettier/pull/5590 1`] = ` -- Snapshot - 1 -+ Received + 1 - -@@ -4,8 +4,8 @@ - | printWidth - =====================================input====================================== - John "ShotGun" Nelson - - =====================================output===================================== -- <i"John "ShotGun" Nelson" /> -+ <i'John "ShotGun" Nelson' /> - - ================================================================================ -`; diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/printSnapshot.test.ts.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/printSnapshot.test.ts.snap new file mode 100644 index 000000000000..9d9621f48717 --- /dev/null +++ b/packages/jest-snapshot/src/__tests__/__snapshots__/printSnapshot.test.ts.snap @@ -0,0 +1,494 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`matcher error toMatchInlineSnapshot Expected properties must be an object (non-null) without snapshot 1`] = ` +expect(received).toMatchInlineSnapshot(properties) + +Matcher error: Expected properties must be an object + +Expected properties has type: boolean +Expected properties has value: false +`; + +exports[`matcher error toMatchInlineSnapshot Expected properties must be an object (null) with snapshot 1`] = ` +expect(received).toMatchInlineSnapshot(properties, snapshot) + +Matcher error: Expected properties must be an object + +Expected properties has value: null +`; + +exports[`matcher error toMatchInlineSnapshot Inline snapshot must be a string 1`] = ` +expect(received).resolves.toMatchInlineSnapshot(properties, snapshot) + +Matcher error: Inline snapshot must be a string + +Inline snapshot has type: symbol +Inline snapshot has value: Symbol(is not a string) +`; + +exports[`matcher error toMatchInlineSnapshot Snapshot matchers cannot be used with not 1`] = ` +expect(received).not.toMatchInlineSnapshot(snapshot) + +Matcher error: Snapshot matchers cannot be used with not +`; + +exports[`matcher error toMatchSnapshot Expected properties must be an object (non-null) 1`] = ` +expect(received).toMatchSnapshot(properties) + +Matcher error: Expected properties must be an object + +Expected properties has type: function +Expected properties has value: [Function properties] +`; + +exports[`matcher error toMatchSnapshot Expected properties must be an object (null) with hint 1`] = ` +expect(received).toMatchSnapshot(properties, hint) + +Matcher error: Expected properties must be an object + +Expected properties has value: null + +To provide a hint without properties: toMatchSnapshot('hint') +`; + +exports[`matcher error toMatchSnapshot Expected properties must be an object (null) without hint 1`] = ` +expect(received).toMatchSnapshot(properties) + +Matcher error: Expected properties must be an object + +Expected properties has value: null +`; + +exports[`matcher error toMatchSnapshot Snapshot state must be initialized 1`] = ` +expect(received).resolves.toMatchSnapshot(hint) + +Snapshot state must be initialized + +Snapshot state has value: undefined +`; + +exports[`matcher error toThrowErrorMatchingInlineSnapshot Inline snapshot must be a string 1`] = ` +expect(received).toThrowErrorMatchingInlineSnapshot(snapshot) + +Matcher error: Inline snapshot must be a string + +Inline snapshot has type: number +Inline snapshot has value: 404 +`; + +exports[`matcher error toThrowErrorMatchingInlineSnapshot Snapshot state must be initialized 1`] = ` +expect(received).rejects.toThrowErrorMatchingInlineSnapshot(snapshot) + +Snapshot state must be initialized + +Snapshot state has value: undefined +`; + +exports[`matcher error toThrowErrorMatchingSnapshot Received value must be a function 1`] = ` +expect(received).toThrowErrorMatchingSnapshot() + +Matcher error: received value must be a function + +Received has type: number +Received has value: 13 +`; + +exports[`matcher error toThrowErrorMatchingSnapshot Snapshot matchers cannot be used with not 1`] = ` +expect(received).not.toThrowErrorMatchingSnapshot(hint) + +Matcher error: Snapshot matchers cannot be used with not +`; + +exports[`other error toThrowErrorMatchingSnapshot Received function did not throw 1`] = ` +expect(received).toThrowErrorMatchingSnapshot() + +Received function did not throw +`; + +exports[`pass false toMatchInlineSnapshot with properties equals false with snapshot 1`] = ` +expect(received).toMatchInlineSnapshot(properties, snapshot) + +Snapshot name: \`with properties 1\` + +Expected properties: {"id": "abcdef"} +Received value: {"id": "abcdefg", "text": "Increase code coverage", "type": "ADD_ITEM"} +`; + +exports[`pass false toMatchInlineSnapshot with properties equals false without snapshot 1`] = ` +expect(received).toMatchInlineSnapshot(properties) + +Snapshot name: \`with properties 1\` + +Expected properties: {"id": "abcdef"} +Received value: {"id": "abcdefg", "text": "Increase code coverage", "type": "ADD_ITEM"} +`; + +exports[`pass false toMatchInlineSnapshot with properties equals true 1`] = ` +expect(received).toMatchInlineSnapshot(properties, snapshot) + +Snapshot name: \`with properties 1\` + +- Snapshot - 1 ++ Received + 1 + + Object { + "id": "abcdef", +- "text": "inline snapshot", ++ "text": "received", + "type": "ADD_ITEM", + } +`; + +exports[`pass false toMatchSnapshot New snapshot was not written (multi line) 1`] = ` +expect(received).toMatchSnapshot(hint) + +Snapshot name: \`New snapshot was not written: (CI) 1\` + +New snapshot was not written. The update flag must be explicitly passed to write a new snapshot. + +This is likely because this test is run in a continuous integration (CI) environment in which snapshots are not written by default. + +Received: +"To write or not to write, +that is the question." +`; + +exports[`pass false toMatchSnapshot New snapshot was not written (single line) 1`] = ` +expect(received).toMatchSnapshot(hint) + +Snapshot name: \`New snapshot was not written: (CI) 2\` + +New snapshot was not written. The update flag must be explicitly passed to write a new snapshot. + +This is likely because this test is run in a continuous integration (CI) environment in which snapshots are not written by default. + +Received: "Write me if you can!" +`; + +exports[`pass false toMatchSnapshot with properties equals false 1`] = ` +expect(received).toMatchSnapshot(properties) + +Snapshot name: \`with properties 1\` + +Expected properties: {"id": "abcdef"} +Received value: {"id": "abcdefg", "text": "Increase code coverage", "type": "ADD_ITEM"} +`; + +exports[`pass false toMatchSnapshot with properties equals true 1`] = ` +expect(received).toMatchSnapshot(properties, hint) + +Snapshot name: \`with properties: change text value 1\` + +- Snapshot - 1 ++ Received + 1 + + Object { + "id": "abcdef", +- "text": "snapshot", ++ "text": "received", + "type": "ADD_ITEM", + } +`; + +exports[`pass false toThrowErrorMatchingInlineSnapshot with snapshot 1`] = ` +expect(received).toThrowErrorMatchingInlineSnapshot(snapshot) + +Snapshot name: \`with snapshot 1\` + +Snapshot: "inline snapshot" +Received: "received" +`; + +exports[`printDiffOrStringified backtick single line expected and received 1`] = ` +Snapshot: "var foo = \`backtick\`;" +Received: "var foo = tag\`backtick\`;" +`; + +exports[`printDiffOrStringified empty string expected and received single line 1`] = ` +Snapshot: "" +Received: "single line string" +`; + +exports[`printDiffOrStringified empty string received and expected multi line 1`] = ` +- Snapshot - 3 ++ Received + 0 + +- multi +- line +- string +`; + +exports[`printDiffOrStringified escape backslash in multi line string 1`] = ` +- Snapshot - 1 ++ Received + 2 + +- Forward / slash and back \\ slash ++ Forward / slash ++ Back \\ slash +`; + +exports[`printDiffOrStringified escape backslash in single line string 1`] = ` +Snapshot: "forward / slash and back \\\\ slash" +Received: "Forward / slash and back \\\\ slash" +`; + +exports[`printDiffOrStringified escape double quote marks in string 1`] = ` +Snapshot: "What does \\"oobleck\\" mean?" +Received: "What does \\"ewbleck\\" mean?" +`; + +exports[`printDiffOrStringified escape regexp 1`] = ` +Snapshot: /\\\\\\\\\\("\\)/g +Received: /\\\\\\\\\\("\\)/ +`; + +exports[`printDiffOrStringified expand false 1`] = ` +- Snapshot - 1 ++ Received + 3 + +@@ -12,7 +12,9 @@ + ? "number" + : T extends boolean + ? "boolean" + : T extends undefined + ? "undefined" +- : T extends Function ? "function" : "object"; ++ : T extends Function ++ ? "function" ++ : "object"; + ↵ +`; + +exports[`printDiffOrStringified expand true 1`] = ` +- Snapshot - 1 ++ Received + 3 + + type TypeName = + T extends string ? "string" : + T extends number ? "number" : + T extends boolean ? "boolean" : + T extends undefined ? "undefined" : + T extends Function ? "function" : + "object"; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + type TypeName = T extends string + ? "string" + : T extends number + ? "number" + : T extends boolean + ? "boolean" + : T extends undefined + ? "undefined" +- : T extends Function ? "function" : "object"; ++ : T extends Function ++ ? "function" ++ : "object"; + ↵ +`; + +exports[`printDiffOrStringified fallback to line diff 1`] = ` +- Snapshot - 1 ++ Received + 8 + ++ ====================================options===================================== ++ parsers: ["flow", "typescript"] ++ printWidth: 80 ++ | printWidth ++ =====================================input====================================== + [...a, ...b,]; + [...a, ...b]; +- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ ++ =====================================output===================================== + [...a, ...b]; + [...a, ...b]; + ++ ================================================================================ +`; + +exports[`printDiffOrStringified has no common after clean up chaff array 1`] = ` +- Snapshot - 2 ++ Received + 2 + + Array [ +- "delete", +- "two", ++ "insert", ++ "2", + ] +`; + +exports[`printDiffOrStringified has no common after clean up chaff string single line 1`] = ` +Snapshot: "delete" +Received: "insert" +`; + +exports[`printDiffOrStringified isLineDiffable false asymmetric matcher 1`] = ` +Snapshot: null +Received: Object { + "asymmetricMatch": [Function], +} +`; + +exports[`printDiffOrStringified isLineDiffable false boolean 1`] = ` +Snapshot: true +Received: false +`; + +exports[`printDiffOrStringified isLineDiffable false date 1`] = ` +Snapshot: 2019-09-19T00:00:00.000Z +Received: 2019-09-20T00:00:00.000Z +`; + +exports[`printDiffOrStringified isLineDiffable false error 1`] = ` +Snapshot: [Error: Cannot spread fragment "NameAndAppearances" within itself.] +Received: [Error: Cannot spread fragment "NameAndAppearancesAndFriends" within itself.] +`; + +exports[`printDiffOrStringified isLineDiffable false function 1`] = ` +Snapshot: undefined +Received: [Function] +`; + +exports[`printDiffOrStringified isLineDiffable false number 1`] = ` +Snapshot: -0 +Received: NaN +`; + +exports[`printDiffOrStringified isLineDiffable true array 1`] = ` +- Snapshot - 0 ++ Received + 2 + + Array [ + Object { ++ "_id": "b14680dec683e744ada1f2fe08614086", + "code": 4011, + "weight": 2.13, + }, + Object { ++ "_id": "7fc63ff01769c4fa7d9279e97e307829", + "code": 4019, + "count": 4, + }, + ] +`; + +exports[`printDiffOrStringified isLineDiffable true object 1`] = ` +- Snapshot - 2 ++ Received + 3 + + Object { + "props": Object { +- "className": "logo", +- "src": "/img/jest.png", ++ "alt": "Jest logo", ++ "class": "logo", ++ "src": "/img/jest.svg", + }, + "type": "img", + } +`; + +exports[`printDiffOrStringified isLineDiffable true single line expected and multi line received 1`] = ` +- Snapshot - 1 ++ Received + 3 + +- Array [] ++ Array [ ++ 0, ++ ] +`; + +exports[`printDiffOrStringified isLineDiffable true single line expected and received 1`] = ` +- Snapshot - 1 ++ Received + 1 + +- Array [] ++ Object {} +`; + +exports[`printDiffOrStringified multi line small change in one line and other is unchanged 1`] = ` +- Snapshot - 1 ++ Received + 1 + +- There is no route defined for key 'Settings'. ++ There is no route defined for key Settings. + Must be one of: 'Home' +`; + +exports[`printDiffOrStringified multi line small changes 1`] = ` +- Snapshot - 7 ++ Received + 7 + +- 69 | ++ 68 | +- 70 | test('assert.doesNotThrow', () => { ++ 69 | test('assert.doesNotThrow', () => { +- > 71 | assert.doesNotThrow(() => { ++ > 70 | assert.doesNotThrow(() => { + | ^ +- 72 | throw Error('err!'); ++ 71 | throw Error('err!'); +- 73 | }); ++ 72 | }); +- 74 | }); ++ 73 | }); +- at Object.doesNotThrow (__tests__/assertionError.test.js:71:10) ++ at Object.doesNotThrow (__tests__/assertionError.test.js:70:10) +`; + +exports[`printDiffOrStringified single line large changes 1`] = ` +Snapshot: "Array length must be a finite positive integer" +Received: "Invalid array length" +`; + +exports[`printDiffOrStringified without serialize backtick single line expected and multi line received 1`] = ` +- Snapshot - 1 ++ Received + 2 + +- var foo = \`backtick\`; ++ var foo = \`back ++ tick\`; +`; + +exports[`printDiffOrStringified without serialize backtick single line expected and received 1`] = ` +- Snapshot - 1 ++ Received + 1 + +- var foo = \`backtick\`; ++ var foo = \`back\${x}tick\`; +`; + +exports[`printDiffOrStringified without serialize has no common after clean up chaff multi line 1`] = ` +- Snapshot - 2 ++ Received + 2 + +- delete +- two ++ insert ++ 2 +`; + +exports[`printDiffOrStringified without serialize has no common after clean up chaff single line 1`] = ` +- Snapshot - 1 ++ Received + 1 + +- delete ++ insert +`; + +exports[`printDiffOrStringified without serialize prettier/pull/5590 1`] = ` +- Snapshot - 1 ++ Received + 1 + +@@ -4,8 +4,8 @@ + | printWidth + =====================================input====================================== + John "ShotGun" Nelson + + =====================================output===================================== +- <i"John "ShotGun" Nelson" /> ++ <i'John "ShotGun" Nelson' /> + + ================================================================================ +`; diff --git a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts b/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts deleted file mode 100644 index 3651bd201834..000000000000 --- a/packages/jest-snapshot/src/__tests__/printDiffOrStringified.test.ts +++ /dev/null @@ -1,530 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import ansiRegex = require('ansi-regex'); -import * as style from 'ansi-styles'; -import chalk from 'chalk'; -import {printDiffOrStringified} from '../print'; -import {stringify} from '../utils'; - -// This is an experiment to read snapshots more easily: -// * to avoid first line misaligned because of opening double quote mark, -// return string without calling print function to serialize it, -// which also reduces extra escape sequences which is a subject of the tests! -// * to align lines, return tags which have same width -// * to see inline markup, return matching and tags -// * to see unexpected escape codes, do not return empty string as default - -const convertStyles = (val: string): string => - val.replace(ansiRegex(), match => { - switch (match) { - case style.inverse.open: - return ''; - case style.inverse.close: - return ''; - - case style.dim.open: - return ''; - case style.green.open: - return ''; - case style.red.open: - return ''; - case style.yellow.open: - return ''; - case style.bgYellow.open: - return ''; - - case style.dim.close: - case style.green.close: - case style.red.close: - case style.yellow.close: - case style.bgYellow.close: - return ''; - - default: - return match; - } - }); - -expect.addSnapshotSerializer({ - serialize(val: string): string { - return val; - }, - test(val: any): val is string { - return typeof val === 'string'; - }, -}); - -// Simulate default serialization. -const testWithStringify = ( - expected: unknown, - received: unknown, - expand: boolean, -): string => - convertStyles( - printDiffOrStringified( - stringify(expected), - stringify(received), - received, - expand, - ), - ); - -// Simulate custom raw string serialization. -const testWithoutStringify = ( - expected: string, - received: string, - expand: boolean, -): string => - convertStyles(printDiffOrStringified(expected, received, received, expand)); - -describe('backtick', () => { - test('single line expected and received', () => { - const expected = 'var foo = `backtick`;'; - const received = 'var foo = tag`backtick`;'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); -}); - -describe('empty string', () => { - test('expected and received single line', () => { - const expected = ''; - const received = 'single line string'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('received and expected multi line', () => { - const expected = 'multi\nline\nstring'; - const received = ''; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); -}); - -describe('escape', () => { - test('double quote marks in string', () => { - const expected = 'What does "oobleck" mean?'; - const received = 'What does "ewbleck" mean?'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('backslash in multi line string', () => { - const expected = 'Forward / slash and back \\ slash'; - const received = 'Forward / slash\nBack \\ slash'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('backslash in single line string', () => { - const expected = 'forward / slash and back \\ slash'; - const received = 'Forward / slash and back \\ slash'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('regexp', () => { - const expected = /\\(")/g; - const received = /\\(")/; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); -}); - -describe('expand', () => { - // prettier/pull/5272 - const expected = [ - 'type TypeName =', - 'T extends string ? "string" :', - 'T extends number ? "number" :', - 'T extends boolean ? "boolean" :', - 'T extends undefined ? "undefined" :', - 'T extends Function ? "function" :', - '"object";', - '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', - 'type TypeName = T extends string', - '? "string"', - ': T extends number', - '? "number"', - ': T extends boolean', - '? "boolean"', - ': T extends undefined', - '? "undefined"', - ': T extends Function ? "function" : "object";', - '', - ].join('\n'); - const received = [ - 'type TypeName =', - 'T extends string ? "string" :', - 'T extends number ? "number" :', - 'T extends boolean ? "boolean" :', - 'T extends undefined ? "undefined" :', - 'T extends Function ? "function" :', - '"object";', - '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', - 'type TypeName = T extends string', - '? "string"', - ': T extends number', - '? "number"', - ': T extends boolean', - '? "boolean"', - ': T extends undefined', - '? "undefined"', - ': T extends Function', - '? "function"', - ': "object";', - '', - ].join('\n'); - - test('false', () => { - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('true', () => { - expect(testWithStringify(expected, received, true)).toMatchSnapshot(); - }); -}); - -test('fallback to line diff', () => { - const expected = [ - '[...a, ...b,];', - '[...a, ...b];', - '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', - '[...a, ...b];', - '[...a, ...b];', - '', - ].join('\n'); - const received = [ - '====================================options=====================================', - 'parsers: ["flow", "typescript"]', - 'printWidth: 80', - ' | printWidth', - '=====================================input======================================', - '[...a, ...b,];', - '[...a, ...b];', - '', - '=====================================output=====================================', - '[...a, ...b];', - '[...a, ...b];', - '', - '================================================================================', - ].join('\n'); - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); -}); - -describe('has no common after clean up chaff', () => { - test('array', () => { - const expected = ['delete', 'two']; - const received = ['insert', '2']; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('string single line', () => { - const expected = 'delete'; - const received = 'insert'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); -}); - -describe('MAX_DIFF_STRING_LENGTH', () => { - describe('unquoted', () => { - // Do not call diffStringsUnified if either string is longer than max. - const lessChange = chalk.inverse('single '); - const less = 'single line'; - const more = 'multi line' + '\n123456789'.repeat(2000); // 10 + 20K chars - - test('both are less', () => { - const less2 = 'multi\nline'; - const difference = printDiffOrStringified(less2, less, less, true); - - expect(difference).toMatch('- multi'); - expect(difference).toMatch('- line'); - expect(difference).toMatch(lessChange); - expect(difference).not.toMatch('+ single line'); - }); - - test('expected is more', () => { - const difference = printDiffOrStringified(more, less, less, true); - - expect(difference).toMatch('- multi line'); - expect(difference).toMatch('+ single line'); - expect(difference).not.toMatch(lessChange); - }); - - test('received is more', () => { - const difference = printDiffOrStringified(less, more, more, true); - - expect(difference).toMatch('- single line'); - expect(difference).toMatch('+ multi line'); - expect(difference).not.toMatch(lessChange); - }); - }); - - describe('quoted', () => { - // Do not call diffStringsRaw if either string is longer than max. - const lessChange = chalk.inverse('no'); - const less = 'no numbers'; - const more = 'many numbers' + ' 123456789'.repeat(2000); // 12 + 20K chars - const lessQuoted = '"' + less + '"'; - const moreQuoted = '"' + more + '"'; - - test('both are less', () => { - const lessQuoted2 = '"0 numbers"'; - const stringified = printDiffOrStringified( - lessQuoted2, - lessQuoted, - less, - true, - ); - - expect(stringified).toMatch('Received:'); - expect(stringified).toMatch(lessChange); - expect(stringified).not.toMatch('+ Received'); - }); - - test('expected is more', () => { - const stringified = printDiffOrStringified( - moreQuoted, - lessQuoted, - less, - true, - ); - - expect(stringified).toMatch('Received:'); - expect(stringified).toMatch(less); - expect(stringified).not.toMatch('+ Received'); - expect(stringified).not.toMatch(lessChange); - }); - - test('received is more', () => { - const stringified = printDiffOrStringified( - lessQuoted, - moreQuoted, - more, - true, - ); - - expect(stringified).toMatch('Snapshot:'); - expect(stringified).toMatch(less); - expect(stringified).not.toMatch('- Snapshot'); - expect(stringified).not.toMatch(lessChange); - }); - }); -}); - -describe('isLineDiffable', () => { - describe('false', () => { - test('asymmetric matcher', () => { - const expected = null; - const received = {asymmetricMatch: () => {}}; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('boolean', () => { - const expected = true; - const received = false; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('date', () => { - const expected = new Date('2019-09-19'); - const received = new Date('2019-09-20'); - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('error', () => { - const expected = new Error( - 'Cannot spread fragment "NameAndAppearances" within itself.', - ); - const received = new Error( - 'Cannot spread fragment "NameAndAppearancesAndFriends" within itself.', - ); - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('function', () => { - const expected = undefined; - const received = () => {}; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('number', () => { - const expected = -0; - const received = NaN; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - }); - - describe('true', () => { - test('array', () => { - const expected0 = { - code: 4011, - weight: 2.13, - }; - const expected1 = { - code: 4019, - count: 4, - }; - - const expected = [expected0, expected1]; - const received = [ - {_id: 'b14680dec683e744ada1f2fe08614086', ...expected0}, - {_id: '7fc63ff01769c4fa7d9279e97e307829', ...expected1}, - ]; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('object', () => { - const type = 'img'; - const expected = { - props: { - className: 'logo', - src: '/img/jest.png', - }, - type, - }; - const received = { - props: { - alt: 'Jest logo', - class: 'logo', - src: '/img/jest.svg', - }, - type, - }; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('single line expected and received', () => { - const expected = []; - const received = {}; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('single line expected and multi line received', () => { - const expected = []; - const received = [0]; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); - }); - }); -}); - -test('multi line small change in one line and other is unchanged', () => { - const expected = - "There is no route defined for key 'Settings'.\nMust be one of: 'Home'"; - const received = - "There is no route defined for key Settings.\nMust be one of: 'Home'"; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); -}); - -test('multi line small changes', () => { - const expected = [ - ' 69 | ', - " 70 | test('assert.doesNotThrow', () => {", - ' > 71 | assert.doesNotThrow(() => {', - ' | ^', - " 72 | throw Error('err!');", - ' 73 | });', - ' 74 | });', - ' at Object.doesNotThrow (__tests__/assertionError.test.js:71:10)', - ].join('\n'); - const received = [ - ' 68 | ', - " 69 | test('assert.doesNotThrow', () => {", - ' > 70 | assert.doesNotThrow(() => {', - ' | ^', - " 71 | throw Error('err!');", - ' 72 | });', - ' 73 | });', - ' at Object.doesNotThrow (__tests__/assertionError.test.js:70:10)', - ].join('\n'); - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); -}); - -test('single line large changes', () => { - const expected = 'Array length must be a finite positive integer'; - const received = 'Invalid array length'; - - expect(testWithStringify(expected, received, false)).toMatchSnapshot(); -}); - -describe('without serialize', () => { - test('backtick single line expected and received', () => { - const expected = 'var foo = `backtick`;'; - const received = 'var foo = `back${x}tick`;'; - - expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('backtick single line expected and multi line received', () => { - const expected = 'var foo = `backtick`;'; - const received = 'var foo = `back\ntick`;'; - - expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('has no common after clean up chaff multi line', () => { - const expected = 'delete\ntwo'; - const received = 'insert\n2'; - - expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('has no common after clean up chaff single line', () => { - const expected = 'delete'; - const received = 'insert'; - - expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); - }); - - test('prettier/pull/5590', () => { - const expected = [ - '====================================options=====================================', - 'parsers: ["html"]', - 'printWidth: 80', - ' | printWidth', - '=====================================input======================================', - `John "ShotGun" Nelson`, - '', - '=====================================output=====================================', - 'John "ShotGun" Nelson', - '', - '================================================================================', - ].join('\n'); - const received = [ - '====================================options=====================================', - 'parsers: ["html"]', - 'printWidth: 80', - ' | printWidth', - '=====================================input======================================', - `John "ShotGun" Nelson`, - '', - '=====================================output=====================================', - `John "ShotGun" Nelson`, - '', - '================================================================================', - ].join('\n'); - - expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); - }); -}); diff --git a/packages/jest-snapshot/src/__tests__/printSnapshot.test.ts b/packages/jest-snapshot/src/__tests__/printSnapshot.test.ts new file mode 100644 index 000000000000..7f4898a756bd --- /dev/null +++ b/packages/jest-snapshot/src/__tests__/printSnapshot.test.ts @@ -0,0 +1,1034 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import ansiRegex = require('ansi-regex'); +import * as styles from 'ansi-styles'; +import chalk from 'chalk'; +import format = require('pretty-format'); + +import jestSnapshot = require('../index'); +import {printDiffOrStringified} from '../printSnapshot'; +import {stringify} from '../utils'; + +const convertAnsi = (val: string): string => + val.replace(ansiRegex(), match => { + switch (match) { + case styles.inverse.open: + return ''; + case styles.inverse.close: + return ''; + + case styles.bold.open: + return ''; + case styles.dim.open: + return ''; + case styles.green.open: + return ''; + case styles.red.open: + return ''; + case styles.yellow.open: + return ''; + case styles.bgYellow.open: + return ''; + + case styles.bold.close: + case styles.dim.close: + case styles.green.close: + case styles.red.close: + case styles.yellow.close: + case styles.bgYellow.close: + return ''; + + default: + return match; + } + }); + +expect.addSnapshotSerializer({ + serialize(val: string): string { + return convertAnsi(val); + }, + test(val: any): val is string { + return typeof val === 'string'; + }, +}); + +const { + toMatchInlineSnapshot, + toMatchSnapshot, + toThrowErrorMatchingInlineSnapshot, + toThrowErrorMatchingSnapshot, +} = jestSnapshot; + +describe('matcher error', () => { + describe('toMatchInlineSnapshot', () => { + const received = { + id: 'abcdef', + text: 'Throw matcher error', + type: 'ADD_ITEM', + }; + + test('Expected properties must be an object (non-null) without snapshot', () => { + const context = { + isNot: false, + promise: '', + }; + const properties = false; + + expect(() => { + toMatchInlineSnapshot.call(context, received, properties); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Expected properties must be an object (null) with snapshot', () => { + const context = { + isNot: false, + promise: '', + }; + const properties = null; + const snapshot = ''; + + expect(() => { + toMatchInlineSnapshot.call(context, received, properties, snapshot); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Inline snapshot must be a string', () => { + const context = { + isNot: false, + promise: 'resolves', + }; + const properties = {}; + const snapshot = Symbol('is not a string'); + + expect(() => { + toMatchInlineSnapshot.call(context, received, properties, snapshot); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Snapshot matchers cannot be used with not', () => { + const context = { + isNot: true, + promise: '', + }; + const received = -13; + const snapshot = '13'; + + expect(() => { + toMatchInlineSnapshot.call(context, received, snapshot); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + describe('toMatchSnapshot', () => { + const received = { + id: 'abcdef', + text: 'Throw matcher error', + type: 'ADD_ITEM', + }; + + test('Expected properties must be an object (non-null)', () => { + const context = { + isNot: false, + promise: '', + }; + const properties = () => {}; + + expect(() => { + toMatchSnapshot.call(context, received, properties); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Expected properties must be an object (null) with hint', () => { + const context = { + isNot: false, + promise: '', + }; + const properties = null; + const hint = 'reminder'; + + expect(() => { + toMatchSnapshot.call(context, received, properties, hint); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Expected properties must be an object (null) without hint', () => { + const context = { + isNot: false, + promise: '', + }; + const properties = null; + + expect(() => { + toMatchSnapshot.call(context, received, properties); + }).toThrowErrorMatchingSnapshot(); + }); + + // Future test: Snapshot hint must be a string + + test('Snapshot state must be initialized', () => { + const context = { + isNot: false, + promise: 'resolves', + }; + const hint = 'initialize me'; + + expect(() => { + toMatchSnapshot.call(context, received, hint); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + describe('toThrowErrorMatchingInlineSnapshot', () => { + test('Inline snapshot must be a string', () => { + const context = { + isNot: false, + promise: '', + }; + const received = () => { + throw new Error('Not found'); + }; + const snapshot = 404; + const fromPromise = false; + + expect(() => { + toThrowErrorMatchingInlineSnapshot.call( + context, + received, + snapshot, + fromPromise, + ); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Snapshot state must be initialized', () => { + const context = { + isNot: false, + promise: 'rejects', + }; + const received = new Error('404'); + const snapshot = '"Not found"'; + const fromPromise = true; + + expect(() => { + toThrowErrorMatchingInlineSnapshot.call( + context, + received, + snapshot, + fromPromise, + ); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + describe('toThrowErrorMatchingSnapshot', () => { + test('Received value must be a function', () => { + const context = { + isNot: false, + promise: '', + }; + const received = 13; + const fromPromise = false; + + expect(() => { + toThrowErrorMatchingSnapshot.call( + context, + received, + undefined, + fromPromise, + ); + }).toThrowErrorMatchingSnapshot(); + }); + + test('Snapshot matchers cannot be used with not', () => { + const context = { + isNot: true, + promise: '', + }; + const received = new Error('received'); + const hint = 'reminder'; + const fromPromise = true; + + expect(() => { + toThrowErrorMatchingSnapshot.call(context, received, hint, fromPromise); + }).toThrowErrorMatchingSnapshot(); + }); + + // Future test: Snapshot hint must be a string + }); +}); + +describe('other error', () => { + describe('toThrowErrorMatchingSnapshot', () => { + test('Received function did not throw', () => { + const context = { + isNot: false, + promise: '', + }; + const received = () => {}; + const fromPromise = false; + + expect(() => { + toThrowErrorMatchingSnapshot.call( + context, + received, + undefined, + fromPromise, + ); + }).toThrowErrorMatchingSnapshot(); + }); + }); +}); + +describe('pass false', () => { + describe('toMatchInlineSnapshot', () => { + describe('with properties', () => { + const id = 'abcdef'; + const properties = {id}; + const type = 'ADD_ITEM'; + + describe('equals false', () => { + const context = { + currentTestName: 'with properties', + equals: () => false, + isNot: false, + promise: '', + snapshotState: { + fail: fullTestName => fullTestName + ' 1', + }, + utils: { + iterableEquality: () => {}, + subsetEquality: () => {}, + }, + }; + const received = { + id: 'abcdefg', + text: 'Increase code coverage', + type, + }; + + test('with snapshot', () => { + const snapshot = ''; + const {message, pass} = toMatchInlineSnapshot.call( + context, + received, + properties, + snapshot, + ); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + + test('without snapshot', () => { + const {message, pass} = toMatchInlineSnapshot.call( + context, + received, + properties, + ); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + }); + + test('equals true', () => { + const context = { + currentTestName: 'with properties', + equals: () => true, + isNot: false, + promise: '', + snapshotState: { + expand: false, + match({inlineSnapshot, received}) { + return { + actual: format(received), + count: 1, + expected: inlineSnapshot, + pass: false, + }; + }, + }, + utils: { + iterableEquality: () => {}, + subsetEquality: () => {}, + }, + }; + const received = { + id, + text: 'received', + type, + }; + const snapshot = format({ + id, + text: 'inline snapshot', + type, + }); + + const {message, pass} = toMatchInlineSnapshot.call( + context, + received, + properties, + snapshot, + ); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + }); + }); + + describe('toMatchSnapshot', () => { + test('New snapshot was not written (multi line)', () => { + const context = { + currentTestName: 'New snapshot was not written', + isNot: false, + promise: '', + snapshotState: { + match({received}) { + return { + actual: format(received), + count: 1, + expected: undefined, + pass: false, + }; + }, + }, + }; + const received = 'To write or not to write,\nthat is the question.'; + const hint = '(CI)'; + + const {message, pass} = toMatchSnapshot.call(context, received, hint); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + + test('New snapshot was not written (single line)', () => { + const context = { + currentTestName: 'New snapshot was not written', + isNot: false, + promise: '', + snapshotState: { + match({received}) { + return { + actual: format(received), + count: 2, + expected: undefined, + pass: false, + }; + }, + }, + }; + const received = 'Write me if you can!'; + const hint = '(CI)'; + + const {message, pass} = toMatchSnapshot.call(context, received, hint); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + + describe('with properties', () => { + const id = 'abcdef'; + const properties = {id}; + const type = 'ADD_ITEM'; + + test('equals false', () => { + const context = { + currentTestName: 'with properties', + equals: () => false, + isNot: false, + promise: '', + snapshotState: { + fail: fullTestName => fullTestName + ' 1', + }, + utils: { + iterableEquality: () => {}, + subsetEquality: () => {}, + }, + }; + const received = { + id: 'abcdefg', + text: 'Increase code coverage', + type, + }; + + const {message, pass} = toMatchSnapshot.call( + context, + received, + properties, + ); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + + test('equals true', () => { + const context = { + currentTestName: 'with properties', + equals: () => true, + isNot: false, + promise: '', + snapshotState: { + expand: false, + match({received}) { + return { + actual: format(received), + count: 1, + expected: format({ + id, + text: 'snapshot', + type, + }), + pass: false, + }; + }, + }, + utils: { + iterableEquality: () => {}, + subsetEquality: () => {}, + }, + }; + const received = { + id, + text: 'received', + type, + }; + const hint = 'change text value'; + + const {message, pass} = toMatchSnapshot.call( + context, + received, + properties, + hint, + ); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + }); + }); + + describe('toThrowErrorMatchingInlineSnapshot', () => { + test('with snapshot', () => { + const context = { + currentTestName: 'with snapshot', + isNot: false, + promise: '', + snapshotState: { + expand: false, + match({inlineSnapshot, received}) { + return { + actual: format(received), + count: 1, + expected: inlineSnapshot, + pass: false, + }; + }, + }, + }; + const received = new Error('received'); + const snapshot = '"inline snapshot"'; + const fromPromise = true; + + const {message, pass} = toThrowErrorMatchingInlineSnapshot.call( + context, + received, + snapshot, + fromPromise, + ); + expect(pass).toBe(false); + expect(message()).toMatchSnapshot(); + }); + }); +}); + +describe('pass true', () => { + describe('toMatchSnapshot', () => { + test('without properties', () => { + const context = { + isNot: false, + promise: '', + snapshotState: { + match() { + return { + expected: '', + pass: true, + }; + }, + }, + }; + const received = 7; + + const {pass} = toMatchSnapshot.call(context, received); + expect(pass).toBe(true); + }); + }); +}); + +describe('printDiffOrStringified', () => { + // Simulate default serialization. + const testWithStringify = ( + expected: unknown, + received: unknown, + expand: boolean, + ): string => + printDiffOrStringified( + stringify(expected), + stringify(received), + received, + expand, + ); + + // Simulate custom raw string serialization. + const testWithoutStringify = ( + expected: string, + received: string, + expand: boolean, + ): string => printDiffOrStringified(expected, received, received, expand); + + describe('backtick', () => { + test('single line expected and received', () => { + const expected = 'var foo = `backtick`;'; + const received = 'var foo = tag`backtick`;'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + }); + + describe('empty string', () => { + test('expected and received single line', () => { + const expected = ''; + const received = 'single line string'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('received and expected multi line', () => { + const expected = 'multi\nline\nstring'; + const received = ''; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + }); + + describe('escape', () => { + test('double quote marks in string', () => { + const expected = 'What does "oobleck" mean?'; + const received = 'What does "ewbleck" mean?'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('backslash in multi line string', () => { + const expected = 'Forward / slash and back \\ slash'; + const received = 'Forward / slash\nBack \\ slash'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('backslash in single line string', () => { + const expected = 'forward / slash and back \\ slash'; + const received = 'Forward / slash and back \\ slash'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('regexp', () => { + const expected = /\\(")/g; + const received = /\\(")/; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + }); + + describe('expand', () => { + // prettier/pull/5272 + const expected = [ + 'type TypeName =', + 'T extends string ? "string" :', + 'T extends number ? "number" :', + 'T extends boolean ? "boolean" :', + 'T extends undefined ? "undefined" :', + 'T extends Function ? "function" :', + '"object";', + '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', + 'type TypeName = T extends string', + '? "string"', + ': T extends number', + '? "number"', + ': T extends boolean', + '? "boolean"', + ': T extends undefined', + '? "undefined"', + ': T extends Function ? "function" : "object";', + '', + ].join('\n'); + const received = [ + 'type TypeName =', + 'T extends string ? "string" :', + 'T extends number ? "number" :', + 'T extends boolean ? "boolean" :', + 'T extends undefined ? "undefined" :', + 'T extends Function ? "function" :', + '"object";', + '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', + 'type TypeName = T extends string', + '? "string"', + ': T extends number', + '? "number"', + ': T extends boolean', + '? "boolean"', + ': T extends undefined', + '? "undefined"', + ': T extends Function', + '? "function"', + ': "object";', + '', + ].join('\n'); + + test('false', () => { + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('true', () => { + expect(testWithStringify(expected, received, true)).toMatchSnapshot(); + }); + }); + + test('fallback to line diff', () => { + const expected = [ + '[...a, ...b,];', + '[...a, ...b];', + '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', + '[...a, ...b];', + '[...a, ...b];', + '', + ].join('\n'); + const received = [ + '====================================options=====================================', + 'parsers: ["flow", "typescript"]', + 'printWidth: 80', + ' | printWidth', + '=====================================input======================================', + '[...a, ...b,];', + '[...a, ...b];', + '', + '=====================================output=====================================', + '[...a, ...b];', + '[...a, ...b];', + '', + '================================================================================', + ].join('\n'); + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + describe('has no common after clean up chaff', () => { + test('array', () => { + const expected = ['delete', 'two']; + const received = ['insert', '2']; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('string single line', () => { + const expected = 'delete'; + const received = 'insert'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + }); + + describe('MAX_DIFF_STRING_LENGTH', () => { + describe('unquoted', () => { + // Do not call diffStringsUnified if either string is longer than max. + const lessChange = chalk.inverse('single '); + const less = 'single line'; + const more = 'multi line' + '\n123456789'.repeat(2000); // 10 + 20K chars + + test('both are less', () => { + const less2 = 'multi\nline'; + const difference = printDiffOrStringified(less2, less, less, true); + + expect(difference).toMatch('- multi'); + expect(difference).toMatch('- line'); + expect(difference).toMatch(lessChange); + expect(difference).not.toMatch('+ single line'); + }); + + test('expected is more', () => { + const difference = printDiffOrStringified(more, less, less, true); + + expect(difference).toMatch('- multi line'); + expect(difference).toMatch('+ single line'); + expect(difference).not.toMatch(lessChange); + }); + + test('received is more', () => { + const difference = printDiffOrStringified(less, more, more, true); + + expect(difference).toMatch('- single line'); + expect(difference).toMatch('+ multi line'); + expect(difference).not.toMatch(lessChange); + }); + }); + + describe('quoted', () => { + // Do not call diffStringsRaw if either string is longer than max. + const lessChange = chalk.inverse('no'); + const less = 'no numbers'; + const more = 'many numbers' + ' 123456789'.repeat(2000); // 12 + 20K chars + const lessQuoted = '"' + less + '"'; + const moreQuoted = '"' + more + '"'; + + test('both are less', () => { + const lessQuoted2 = '"0 numbers"'; + const stringified = printDiffOrStringified( + lessQuoted2, + lessQuoted, + less, + true, + ); + + expect(stringified).toMatch('Received:'); + expect(stringified).toMatch(lessChange); + expect(stringified).not.toMatch('+ Received'); + }); + + test('expected is more', () => { + const stringified = printDiffOrStringified( + moreQuoted, + lessQuoted, + less, + true, + ); + + expect(stringified).toMatch('Received:'); + expect(stringified).toMatch(less); + expect(stringified).not.toMatch('+ Received'); + expect(stringified).not.toMatch(lessChange); + }); + + test('received is more', () => { + const stringified = printDiffOrStringified( + lessQuoted, + moreQuoted, + more, + true, + ); + + expect(stringified).toMatch('Snapshot:'); + expect(stringified).toMatch(less); + expect(stringified).not.toMatch('- Snapshot'); + expect(stringified).not.toMatch(lessChange); + }); + }); + }); + + describe('isLineDiffable', () => { + describe('false', () => { + test('asymmetric matcher', () => { + const expected = null; + const received = {asymmetricMatch: () => {}}; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('boolean', () => { + const expected = true; + const received = false; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('date', () => { + const expected = new Date('2019-09-19'); + const received = new Date('2019-09-20'); + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('error', () => { + const expected = new Error( + 'Cannot spread fragment "NameAndAppearances" within itself.', + ); + const received = new Error( + 'Cannot spread fragment "NameAndAppearancesAndFriends" within itself.', + ); + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('function', () => { + const expected = undefined; + const received = () => {}; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('number', () => { + const expected = -0; + const received = NaN; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + }); + + describe('true', () => { + test('array', () => { + const expected0 = { + code: 4011, + weight: 2.13, + }; + const expected1 = { + code: 4019, + count: 4, + }; + + const expected = [expected0, expected1]; + const received = [ + {_id: 'b14680dec683e744ada1f2fe08614086', ...expected0}, + {_id: '7fc63ff01769c4fa7d9279e97e307829', ...expected1}, + ]; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('object', () => { + const type = 'img'; + const expected = { + props: { + className: 'logo', + src: '/img/jest.png', + }, + type, + }; + const received = { + props: { + alt: 'Jest logo', + class: 'logo', + src: '/img/jest.svg', + }, + type, + }; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('single line expected and received', () => { + const expected = []; + const received = {}; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('single line expected and multi line received', () => { + const expected = []; + const received = [0]; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + }); + }); + + test('multi line small change in one line and other is unchanged', () => { + const expected = + "There is no route defined for key 'Settings'.\nMust be one of: 'Home'"; + const received = + "There is no route defined for key Settings.\nMust be one of: 'Home'"; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('multi line small changes', () => { + const expected = [ + ' 69 | ', + " 70 | test('assert.doesNotThrow', () => {", + ' > 71 | assert.doesNotThrow(() => {', + ' | ^', + " 72 | throw Error('err!');", + ' 73 | });', + ' 74 | });', + ' at Object.doesNotThrow (__tests__/assertionError.test.js:71:10)', + ].join('\n'); + const received = [ + ' 68 | ', + " 69 | test('assert.doesNotThrow', () => {", + ' > 70 | assert.doesNotThrow(() => {', + ' | ^', + " 71 | throw Error('err!');", + ' 72 | });', + ' 73 | });', + ' at Object.doesNotThrow (__tests__/assertionError.test.js:70:10)', + ].join('\n'); + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('single line large changes', () => { + const expected = 'Array length must be a finite positive integer'; + const received = 'Invalid array length'; + + expect(testWithStringify(expected, received, false)).toMatchSnapshot(); + }); + + describe('without serialize', () => { + test('backtick single line expected and received', () => { + const expected = 'var foo = `backtick`;'; + const received = 'var foo = `back${x}tick`;'; + + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('backtick single line expected and multi line received', () => { + const expected = 'var foo = `backtick`;'; + const received = 'var foo = `back\ntick`;'; + + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('has no common after clean up chaff multi line', () => { + const expected = 'delete\ntwo'; + const received = 'insert\n2'; + + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('has no common after clean up chaff single line', () => { + const expected = 'delete'; + const received = 'insert'; + + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); + }); + + test('prettier/pull/5590', () => { + const expected = [ + '====================================options=====================================', + 'parsers: ["html"]', + 'printWidth: 80', + ' | printWidth', + '=====================================input======================================', + `John "ShotGun" Nelson`, + '', + '=====================================output=====================================', + 'John "ShotGun" Nelson', + '', + '================================================================================', + ].join('\n'); + const received = [ + '====================================options=====================================', + 'parsers: ["html"]', + 'printWidth: 80', + ' | printWidth', + '=====================================input======================================', + `John "ShotGun" Nelson`, + '', + '=====================================output=====================================', + `John "ShotGun" Nelson`, + '', + '================================================================================', + ].join('\n'); + + expect(testWithoutStringify(expected, received, false)).toMatchSnapshot(); + }); + }); +}); diff --git a/packages/jest-snapshot/src/index.ts b/packages/jest-snapshot/src/index.ts index 3e587f1a89b3..b83d1b1bd93b 100644 --- a/packages/jest-snapshot/src/index.ts +++ b/packages/jest-snapshot/src/index.ts @@ -8,13 +8,18 @@ import * as fs from 'fs'; import {Config} from '@jest/types'; import {FS as HasteFS} from 'jest-haste-map'; // eslint-disable-line import/no-extraneous-dependencies -import {MatcherState} from 'expect'; import { BOLD_WEIGHT, + EXPECTED_COLOR, MatcherHintOptions, RECEIVED_COLOR, + matcherErrorMessage, matcherHint, + printExpected, + printReceived, + printWithType, + stringify, } from 'jest-matcher-utils'; import { EXTENSION, @@ -24,39 +29,26 @@ import { } from './snapshot_resolver'; import SnapshotState from './State'; import {addSerializer, getSerializers} from './plugins'; -import {printDiffOrStringified} from './print'; +import { + PROPERTIES_ARG, + SNAPSHOT_ARG, + matcherHintFromConfig, + noColor, + printDiffOrStringified, +} from './printSnapshot'; +import {Context, MatchSnapshotConfig} from './types'; import * as utils from './utils'; -type Context = MatcherState & { - snapshotState: SnapshotState; -}; - -type MatchSnapshotConfig = { - context: Context; - expectedArgument: string; - hint?: string; - inlineSnapshot?: string; - isInline: boolean; - matcherName: string; - options: MatcherHintOptions; - propertyMatchers?: any; - received: any; -}; - const DID_NOT_THROW = 'Received function did not throw'; // same as toThrow -const NOT_SNAPSHOT_MATCHERS = `.${BOLD_WEIGHT( +const NOT_SNAPSHOT_MATCHERS = `Snapshot matchers cannot be used with ${BOLD_WEIGHT( 'not', -)} cannot be used with snapshot matchers`; +)}`; -const HINT_ARG = 'hint'; -const HINT_COLOR = BOLD_WEIGHT; -const INLINE_SNAPSHOT_ARG = 'snapshot'; -const PROPERTY_MATCHERS_ARG = 'properties'; const INDENTATION_REGEX = /^([^\S\n]*)\S/m; // Display name in report when matcher fails same as in snapshot file, // but with optional hint argument in bold weight. -const printName = ( +const printSnapshotName = ( concatenatedBlockNames = '', hint = '', count: number, @@ -65,7 +57,7 @@ const printName = ( const hasHint = hint.length !== 0; return ( - '`' + + 'Snapshot name: `' + (hasNames ? utils.escapeBacktickString(concatenatedBlockNames) : '') + (hasNames && hasHint ? ': ' : '') + (hasHint ? BOLD_WEIGHT(utils.escapeBacktickString(hint)) : '') + @@ -163,52 +155,57 @@ const cleanup = ( const toMatchSnapshot = function( this: Context, received: any, - propertyMatchers?: any, + propertiesOrHint?: object | Config.Path, hint?: Config.Path, ) { const matcherName = 'toMatchSnapshot'; - let expectedArgument = ''; - let secondArgument = ''; + let properties; + + const length = arguments.length; + if (length === 2 && typeof propertiesOrHint === 'string') { + hint = propertiesOrHint; + } else if (length >= 2) { + if (typeof propertiesOrHint !== 'object' || propertiesOrHint === null) { + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + let printedWithType = printWithType( + 'Expected properties', + propertiesOrHint, + printExpected, + ); + + if (length === 3) { + options.secondArgument = 'hint'; + options.secondArgumentColor = BOLD_WEIGHT; + + if (propertiesOrHint == null) { + printedWithType += `\n\nTo provide a hint without properties: toMatchSnapshot('hint')`; + } + } - if (typeof propertyMatchers === 'object' && propertyMatchers !== null) { - expectedArgument = PROPERTY_MATCHERS_ARG; - if (typeof hint === 'string' && hint.length !== 0) { - secondArgument = HINT_ARG; + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, PROPERTIES_ARG, options), + `Expected ${EXPECTED_COLOR('properties')} must be an object`, + printedWithType, + ), + ); } - } else if ( - typeof propertyMatchers === 'string' && - propertyMatchers.length !== 0 - ) { - expectedArgument = HINT_ARG; - } - const options: MatcherHintOptions = { - isNot: this.isNot, - promise: this.promise, - secondArgument, - }; - - if (expectedArgument === HINT_ARG) { - options.expectedColor = HINT_COLOR; - } - if (secondArgument === HINT_ARG) { - options.secondArgumentColor = HINT_COLOR; - } + // Future breaking change: Snapshot hint must be a string + // if (arguments.length === 3 && typeof hint !== 'string') {} - if (arguments.length === 3 && !propertyMatchers) { - throw new Error( - 'Property matchers must be an object.\n\nTo provide a snapshot test name without property matchers, use: toMatchSnapshot("name")', - ); + properties = propertiesOrHint; } return _toMatchSnapshot({ context: this, - expectedArgument, hint, isInline: false, matcherName, - options, - propertyMatchers, + properties, received, }); }; @@ -216,81 +213,100 @@ const toMatchSnapshot = function( const toMatchInlineSnapshot = function( this: Context, received: any, - propertyMatchersOrInlineSnapshot?: any, + propertiesOrSnapshot?: object | string, inlineSnapshot?: string, ) { const matcherName = 'toMatchInlineSnapshot'; - let expectedArgument = ''; - let secondArgument = ''; - - if (typeof propertyMatchersOrInlineSnapshot === 'string') { - expectedArgument = INLINE_SNAPSHOT_ARG; - } else if ( - typeof propertyMatchersOrInlineSnapshot === 'object' && - propertyMatchersOrInlineSnapshot !== null - ) { - expectedArgument = PROPERTY_MATCHERS_ARG; - if (typeof inlineSnapshot === 'string') { - secondArgument = INLINE_SNAPSHOT_ARG; + let properties; + + const length = arguments.length; + if (length === 2 && typeof propertiesOrSnapshot === 'string') { + inlineSnapshot = propertiesOrSnapshot; + } else if (length >= 2) { + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + if (length === 3) { + options.secondArgument = SNAPSHOT_ARG; + options.secondArgumentColor = noColor; } - } - const options: MatcherHintOptions = { - isNot: this.isNot, - promise: this.promise, - secondArgument, - }; + if ( + typeof propertiesOrSnapshot !== 'object' || + propertiesOrSnapshot === null + ) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, PROPERTIES_ARG, options), + `Expected ${EXPECTED_COLOR('properties')} must be an object`, + printWithType( + 'Expected properties', + propertiesOrSnapshot, + printExpected, + ), + ), + ); + } - let propertyMatchers; - if (typeof propertyMatchersOrInlineSnapshot === 'string') { - inlineSnapshot = propertyMatchersOrInlineSnapshot; - } else { - propertyMatchers = propertyMatchersOrInlineSnapshot; + if (length === 3 && typeof inlineSnapshot !== 'string') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, PROPERTIES_ARG, options), + `Inline snapshot must be a string`, + printWithType('Inline snapshot', inlineSnapshot, stringify), + ), + ); + } + + properties = propertiesOrSnapshot; } return _toMatchSnapshot({ context: this, - expectedArgument, inlineSnapshot: inlineSnapshot !== undefined ? stripAddedIndentation(inlineSnapshot) : undefined, isInline: true, matcherName, - options, - propertyMatchers, + properties, received, }); }; -const _toMatchSnapshot = ({ - context, - expectedArgument, - hint, - inlineSnapshot, - isInline, - matcherName, - options, - propertyMatchers, - received, -}: MatchSnapshotConfig) => { +const _toMatchSnapshot = (config: MatchSnapshotConfig) => { + const { + context, + hint, + inlineSnapshot, + isInline, + matcherName, + properties, + } = config; + let {received} = config; + context.dontThrow && context.dontThrow(); - hint = typeof propertyMatchers === 'string' ? propertyMatchers : hint; const {currentTestName, isNot, snapshotState} = context; if (isNot) { throw new Error( - matcherHint(matcherName, undefined, expectedArgument, options) + - '\n\n' + + matcherErrorMessage( + matcherHintFromConfig(config, false), NOT_SNAPSHOT_MATCHERS, + ), ); } - if (!snapshotState) { + if (snapshotState == null) { + // Because the state is the problem, this is not a matcher error. throw new Error( - matcherHint(matcherName, undefined, expectedArgument, options) + - '\n\nsnapshot state must be initialized', + matcherHintFromConfig(config, false) + + '\n\n' + + `Snapshot state must be initialized` + + '\n\n' + + printWithType('Snapshot state', snapshotState, stringify), ); } @@ -299,11 +315,8 @@ const _toMatchSnapshot = ({ ? `${currentTestName}: ${hint}` : currentTestName || ''; // future BREAKING change: || hint - if (typeof propertyMatchers === 'object') { - if (propertyMatchers === null) { - throw new Error(`Property matchers must be an object.`); - } - const propertyPass = context.equals(received, propertyMatchers, [ + if (typeof properties === 'object') { + const propertyPass = context.equals(received, properties, [ context.utils.iterableEquality, context.utils.subsetEquality, ]); @@ -313,25 +326,21 @@ const _toMatchSnapshot = ({ const matched = /(\d+)$/.exec(key); const count = matched === null ? 1 : Number(matched[1]); - const report = () => - `Snapshot name: ${printName(currentTestName, hint, count)}\n` + - '\n' + - `Expected properties: ${context.utils.printExpected( - propertyMatchers, - )}\n` + - `Received value: ${context.utils.printReceived(received)}`; + const message = () => + matcherHintFromConfig(config, false) + + '\n\n' + + printSnapshotName(currentTestName, hint, count) + + '\n\n' + + `Expected properties: ${printExpected(properties)}\n` + + `Received value: ${printReceived(received)}`; return { - message: () => - matcherHint(matcherName, undefined, expectedArgument, options) + - '\n\n' + - report(), + message, name: matcherName, pass: false, - report, }; } else { - received = utils.deepMerge(received, propertyMatchers); + received = utils.deepMerge(received, properties); } } @@ -342,39 +351,47 @@ const _toMatchSnapshot = ({ received, testName: fullTestName, }); - const {count, pass} = result; - const {actual, expected} = result; + const {actual, count, expected, pass} = result; - let report: () => string; if (pass) { return {message: () => '', pass: true}; - } else if (expected === undefined) { - report = () => - `New snapshot was ${RECEIVED_COLOR('not written')}. The update flag ` + - `must be explicitly passed to write a new snapshot.\n\n` + - `This is likely because this test is run in a continuous integration ` + - `(CI) environment in which snapshots are not written by default.\n\n` + - `${RECEIVED_COLOR('Received value')} ` + - `${actual}`; - } else { - report = () => - `Snapshot name: ${printName(currentTestName, hint, count)}\n\n` + - printDiffOrStringified(expected, actual, received, snapshotState.expand); } + const message = + expected === undefined + ? () => + matcherHintFromConfig(config, true) + + '\n\n' + + printSnapshotName(currentTestName, hint, count) + + '\n\n' + + `New snapshot was ${BOLD_WEIGHT('not written')}. The update flag ` + + `must be explicitly passed to write a new snapshot.\n\n` + + `This is likely because this test is run in a continuous integration ` + + `(CI) environment in which snapshots are not written by default.\n\n` + + `Received:${actual.includes('\n') ? '\n' : ' '}${RECEIVED_COLOR( + actual, + )}` + : () => + matcherHintFromConfig(config, true) + + '\n\n' + + printSnapshotName(currentTestName, hint, count) + + '\n\n' + + printDiffOrStringified( + expected, + actual, + received, + snapshotState.expand, + ); + // Passing the actual and expected objects so that a custom reporter // could access them, for example in order to display a custom visual diff, // or create a different error message return { actual, expected, - message: () => - matcherHint(matcherName, undefined, expectedArgument, options) + - '\n\n' + - report(), + message, name: matcherName, pass: false, - report, }; }; @@ -385,23 +402,16 @@ const toThrowErrorMatchingSnapshot = function( fromPromise: boolean, ) { const matcherName = 'toThrowErrorMatchingSnapshot'; - const expectedArgument = - typeof hint === 'string' && hint.length !== 0 ? HINT_ARG : ''; - const options = { - expectedColor: HINT_COLOR, - isNot: this.isNot, - promise: this.promise, - secondArgument: '', - }; + + // Future breaking change: Snapshot hint must be a string + // if (hint !== undefined && typeof hint !== string) {} return _toThrowErrorMatchingSnapshot( { context: this, - expectedArgument, hint, isInline: false, matcherName, - options, received, }, fromPromise, @@ -415,22 +425,29 @@ const toThrowErrorMatchingInlineSnapshot = function( fromPromise?: boolean, ) { const matcherName = 'toThrowErrorMatchingInlineSnapshot'; - const expectedArgument = - typeof inlineSnapshot === 'string' ? INLINE_SNAPSHOT_ARG : ''; - const options: MatcherHintOptions = { - isNot: this.isNot, - promise: this.promise, - secondArgument: '', - }; + + if (inlineSnapshot !== undefined && typeof inlineSnapshot !== 'string') { + const options: MatcherHintOptions = { + expectedColor: noColor, + isNot: this.isNot, + promise: this.promise, + }; + + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, SNAPSHOT_ARG, options), + `Inline snapshot must be a string`, + printWithType('Inline snapshot', inlineSnapshot, stringify), + ), + ); + } return _toThrowErrorMatchingSnapshot( { context: this, - expectedArgument, inlineSnapshot, isInline: true, matcherName, - options, received, }, fromPromise, @@ -438,26 +455,42 @@ const toThrowErrorMatchingInlineSnapshot = function( }; const _toThrowErrorMatchingSnapshot = ( - { + config: MatchSnapshotConfig, + fromPromise?: boolean, +) => { + const { context, - expectedArgument, + hint, inlineSnapshot, isInline, matcherName, - options, received, - hint, - }: MatchSnapshotConfig, - fromPromise?: boolean, -) => { + } = config; + context.dontThrow && context.dontThrow(); - const {isNot} = context; + + const {isNot, promise} = context; + + if (!fromPromise) { + if (typeof received !== 'function') { + const options: MatcherHintOptions = {isNot, promise}; + + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, '', options), + `${RECEIVED_COLOR('received')} value must be a function`, + printWithType('Received', received, printReceived), + ), + ); + } + } if (isNot) { throw new Error( - matcherHint(matcherName, undefined, expectedArgument, options) + - '\n\n' + + matcherErrorMessage( + matcherHintFromConfig(config, false), NOT_SNAPSHOT_MATCHERS, + ), ); } @@ -474,21 +507,18 @@ const _toThrowErrorMatchingSnapshot = ( } if (error === undefined) { + // Because the received value is a function, this is not a matcher error. throw new Error( - matcherHint(matcherName, undefined, expectedArgument, options) + - '\n\n' + - DID_NOT_THROW, + matcherHintFromConfig(config, false) + '\n\n' + DID_NOT_THROW, ); } return _toMatchSnapshot({ context, - expectedArgument, hint, inlineSnapshot, isInline, matcherName, - options, received: error.message, }); }; diff --git a/packages/jest-snapshot/src/print.ts b/packages/jest-snapshot/src/printSnapshot.ts similarity index 75% rename from packages/jest-snapshot/src/print.ts rename to packages/jest-snapshot/src/printSnapshot.ts index b277c5fd51a8..853678217c2b 100644 --- a/packages/jest-snapshot/src/print.ts +++ b/packages/jest-snapshot/src/printSnapshot.ts @@ -17,14 +17,68 @@ import { } from 'jest-diff'; import getType = require('jest-get-type'); import { + BOLD_WEIGHT, EXPECTED_COLOR, INVERTED_COLOR, + MatcherHintOptions, RECEIVED_COLOR, getLabelPrinter, + matcherHint, } from 'jest-matcher-utils'; import prettyFormat = require('pretty-format'); +import {MatchSnapshotConfig} from './types'; import {unstringifyString} from './utils'; +export const noColor = (string: string) => string; + +export const HINT_ARG = 'hint'; +export const SNAPSHOT_ARG = 'snapshot'; +export const PROPERTIES_ARG = 'properties'; + +export const matcherHintFromConfig = ( + { + context: {isNot, promise}, + hint, + inlineSnapshot, + matcherName, + properties, + }: MatchSnapshotConfig, + isUpdatable: boolean, +): string => { + const options: MatcherHintOptions = {isNot, promise}; + + let expectedArgument = ''; + + if (typeof properties === 'object') { + expectedArgument = PROPERTIES_ARG; + if (isUpdatable) { + options.expectedColor = noColor; + } + + if (typeof hint === 'string' && hint.length !== 0) { + options.secondArgument = HINT_ARG; + options.secondArgumentColor = BOLD_WEIGHT; + } else if (typeof inlineSnapshot === 'string') { + options.secondArgument = SNAPSHOT_ARG; + if (!isUpdatable) { + options.secondArgumentColor = noColor; + } + } + } else { + if (typeof hint === 'string' && hint.length !== 0) { + expectedArgument = HINT_ARG; + options.expectedColor = BOLD_WEIGHT; + } else if (typeof inlineSnapshot === 'string') { + expectedArgument = SNAPSHOT_ARG; + if (!isUpdatable) { + options.expectedColor = noColor; + } + } + } + + return matcherHint(matcherName, undefined, expectedArgument, options); +}; + // Given array of diffs, return string: // * include common substrings // * exclude change substrings which have opposite op diff --git a/packages/jest-snapshot/src/types.ts b/packages/jest-snapshot/src/types.ts index 4cbc30eb7d8a..1b7d6e284b05 100644 --- a/packages/jest-snapshot/src/types.ts +++ b/packages/jest-snapshot/src/types.ts @@ -5,4 +5,21 @@ * LICENSE file in the root directory of this source tree. */ +import {MatcherState} from 'expect'; +import SnapshotState from './State'; + +export type Context = MatcherState & { + snapshotState: SnapshotState; +}; + +export type MatchSnapshotConfig = { + context: Context; + hint?: string; + inlineSnapshot?: string; + isInline: boolean; + matcherName: string; + properties?: object; + received: any; +}; + export type SnapshotData = Record; From cdf7f3709620a8139ec15c2d194ba4d82232acf0 Mon Sep 17 00:00:00 2001 From: Bhavdeep Dhanjal Date: Tue, 22 Oct 2019 14:35:22 +0200 Subject: [PATCH 66/97] Update wording on website homepage (#9073) * Update wording on website homepage Resolves #9067 * Update index.js --- website/pages/en/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/pages/en/index.js b/website/pages/en/index.js index 65068c138190..d7d1e789c599 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -420,8 +420,8 @@ class Index extends React.Component { { content: ( - Tests fail, when they do Jest provides rich context why, - here’s some examples: + Tests fail—when they do, Jest provides rich context why. + Here are some examples: ), image: '/img/content/matchers/different-types.png', From 8feb9ec6f470bf47f82af59289131872e01a96cb Mon Sep 17 00:00:00 2001 From: Gant Laborde Date: Wed, 23 Oct 2019 12:58:43 -0500 Subject: [PATCH 67/97] docs: add missing commas (#9083) nitpicking --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bee669671d27..b6b684dd9527 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,7 @@ Jest can be used in projects that use [webpack](https://webpack.github.io/) to m ### Using TypeScript -Jest supports TypeScript, via Babel. First make sure you followed the instructions on [using Babel](#using-babel) above. Next install the `@babel/preset-typescript` via `yarn`: +Jest supports TypeScript, via Babel. First, make sure you followed the instructions on [using Babel](#using-babel) above. Next, install the `@babel/preset-typescript` via `yarn`: ```bash yarn add --dev @babel/preset-typescript From 164e2095642420c393236e21dcaeddfdfb507c76 Mon Sep 17 00:00:00 2001 From: Anton Savoskin Date: Thu, 24 Oct 2019 14:31:33 +0700 Subject: [PATCH 68/97] chore: fix linting error on macOS (#9066) --- .eslintrc.js | 1 + packages/jest-haste-map/src/lib/FSEventsWatcher.ts | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 9ea41ebe643d..29230dde3409 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -105,6 +105,7 @@ module.exports = { ], }, ], + 'import/no-unresolved': [2, {ignore: ['fsevents']}], // This has to be disabled until all type and module imports are combined // https://github.com/benmosher/eslint-plugin-import/issues/645 'import/order': 0, diff --git a/packages/jest-haste-map/src/lib/FSEventsWatcher.ts b/packages/jest-haste-map/src/lib/FSEventsWatcher.ts index 468193e3d539..b275fd6011cd 100644 --- a/packages/jest-haste-map/src/lib/FSEventsWatcher.ts +++ b/packages/jest-haste-map/src/lib/FSEventsWatcher.ts @@ -11,7 +11,6 @@ import * as path from 'path'; import {EventEmitter} from 'events'; import anymatch, {Matcher} from 'anymatch'; import micromatch = require('micromatch'); -// eslint-disable-next-line import {Watcher} from 'fsevents'; // @ts-ignore no types import walker from 'walker'; From f7eb09b3df76121df1c2499df1ba7d17242a0a8d Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Fri, 25 Oct 2019 19:16:26 +0200 Subject: [PATCH 69/97] fix(pretty-format): Use symbol safely only when it's defined (#9075) * fix(pretty-format): Use symbol safely only when it's defined * Fix lint ban-types * Simplify printSymbol --- packages/pretty-format/src/index.ts | 3 +-- packages/pretty-format/src/plugins/AsymmetricMatcher.ts | 5 ++++- packages/pretty-format/src/plugins/ReactTestComponent.ts | 5 ++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/pretty-format/src/index.ts b/packages/pretty-format/src/index.ts index f1f6fe79ab3e..606416400e26 100644 --- a/packages/pretty-format/src/index.ts +++ b/packages/pretty-format/src/index.ts @@ -27,7 +27,6 @@ const toString = Object.prototype.toString; const toISOString = Date.prototype.toISOString; const errorToString = Error.prototype.toString; const regExpToString = RegExp.prototype.toString; -const symbolToString = Symbol.prototype.toString; /** * Explicitly comparing typeof constructor to function avoids undefined as name @@ -84,7 +83,7 @@ function printFunction(val: Function, printFunctionName: boolean): string { } function printSymbol(val: symbol): string { - return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)'); + return String(val).replace(SYMBOL_REGEXP, 'Symbol($1)'); } function printError(val: Error): string { diff --git a/packages/pretty-format/src/plugins/AsymmetricMatcher.ts b/packages/pretty-format/src/plugins/AsymmetricMatcher.ts index 83fe8a7cf4d6..197ff0530e5a 100644 --- a/packages/pretty-format/src/plugins/AsymmetricMatcher.ts +++ b/packages/pretty-format/src/plugins/AsymmetricMatcher.ts @@ -9,7 +9,10 @@ import {Config, NewPlugin, Printer, Refs} from '../types'; import {printListItems, printObjectProperties} from '../collections'; -const asymmetricMatcher = Symbol.for('jest.asymmetricMatcher'); +const asymmetricMatcher = + typeof Symbol === 'function' && Symbol.for + ? Symbol.for('jest.asymmetricMatcher') + : 0x1357a5; const SPACE = ' '; export const serialize = ( diff --git a/packages/pretty-format/src/plugins/ReactTestComponent.ts b/packages/pretty-format/src/plugins/ReactTestComponent.ts index 855bb59c1b36..cc9d7b5f0c13 100644 --- a/packages/pretty-format/src/plugins/ReactTestComponent.ts +++ b/packages/pretty-format/src/plugins/ReactTestComponent.ts @@ -24,7 +24,10 @@ import { printProps, } from './lib/markup'; -const testSymbol = Symbol.for('react.test.json'); +const testSymbol = + typeof Symbol === 'function' && Symbol.for + ? Symbol.for('react.test.json') + : 0xea71357; const getPropKeys = (object: ReactTestObject) => { const {props} = object; From f7c17a2c966f45dec91ec65ff5dd399956b49b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Menzel?= <8976542+alesmenzel@users.noreply.github.com> Date: Sat, 26 Oct 2019 07:54:35 +0200 Subject: [PATCH 70/97] fix: update graceful-fs to 4.2.3 (#9097) --- package.json | 2 +- packages/jest-core/package.json | 2 +- packages/jest-haste-map/package.json | 2 +- packages/jest-runner/package.json | 2 +- packages/jest-runtime/package.json | 2 +- packages/jest-source-map/package.json | 2 +- packages/jest-transform/package.json | 2 +- yarn.lock | 8 ++++---- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 59800d2ecbc8..bd99f3c1aa4b 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "fast-check": "^1.13.0", "find-process": "^1.4.1", "glob": "^7.1.1", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "isbinaryfile": "^4.0.0", "istanbul-lib-coverage": "^2.0.2", "istanbul-lib-report": "^2.0.4", diff --git a/packages/jest-core/package.json b/packages/jest-core/package.json index d8a45bb83dfb..543525a1998d 100644 --- a/packages/jest-core/package.json +++ b/packages/jest-core/package.json @@ -13,7 +13,7 @@ "ansi-escapes": "^4.2.1", "chalk": "^2.0.1", "exit": "^0.1.2", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "jest-changed-files": "^24.9.0", "jest-config": "^24.9.0", "jest-haste-map": "^24.9.0", diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index cf0855ada2f0..40600caff0e4 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -13,7 +13,7 @@ "@jest/types": "^24.9.0", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "invariant": "^2.2.4", "jest-serializer": "^24.9.0", "jest-util": "^24.9.0", diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index 3aefedd43667..495c121887ab 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -16,7 +16,7 @@ "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", "jest-haste-map": "^24.9.0", diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index c1b3180cf950..c95893d037d1 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -19,7 +19,7 @@ "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "jest-config": "^24.9.0", "jest-haste-map": "^24.9.0", "jest-message-util": "^24.9.0", diff --git a/packages/jest-source-map/package.json b/packages/jest-source-map/package.json index 8e9383e10a6d..6ea53e5d50f6 100644 --- a/packages/jest-source-map/package.json +++ b/packages/jest-source-map/package.json @@ -11,7 +11,7 @@ "types": "build/index.d.ts", "dependencies": { "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "source-map": "^0.6.0" }, "devDependencies": { diff --git a/packages/jest-transform/package.json b/packages/jest-transform/package.json index 248a65360083..4f5ee4a0a150 100644 --- a/packages/jest-transform/package.json +++ b/packages/jest-transform/package.json @@ -15,7 +15,7 @@ "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.3", "jest-haste-map": "^24.9.0", "jest-regex-util": "^24.9.0", "jest-util": "^24.9.0", diff --git a/yarn.lock b/yarn.lock index 9376627c95bb..832306110ac2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6908,10 +6908,10 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== "graceful-readlink@>= 1.0.0": version "1.0.1" From 3ceacecbb0418128fed8fe175a5ffb7bd7d440df Mon Sep 17 00:00:00 2001 From: Anton Savoskin Date: Sat, 26 Oct 2019 14:21:19 +0700 Subject: [PATCH 71/97] chore: fix linting errors on node 12 (#9098) --- .circleci/config.yml | 2 +- CONTRIBUTING.md | 2 +- packages/jest-worker/src/workers/NodeThreadsWorker.ts | 2 -- packages/jest-worker/src/workers/threadChild.ts | 2 -- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7b056fa95d55..71b2b7642ddd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -21,7 +21,7 @@ jobs: lint-and-typecheck: working_directory: ~/jest docker: - - image: circleci/node:10 + - image: circleci/node:12 steps: - checkout - restore-cache: *restore-cache diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c05952b8b330..cc3f55ca834d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,7 +42,7 @@ _Before_ submitting a pull request, please make sure the following is done… python --version ``` -1. Make sure you have a compatible version of `node` installed (As of July 10th 2019, `v10.x` is recommended since there is a known issue with `v12.x` [#8490](https://github.com/facebook/jest/issues/8490)). +1. Make sure you have a compatible version of `node` installed (As of October 25th 2019, `v12.x` is recommended). ```sh node -v diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index f33181f9f874..4e300884eef9 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -7,8 +7,6 @@ import * as path from 'path'; import {PassThrough} from 'stream'; -// ESLint doesn't know about this experimental module -// eslint-disable-next-line import/no-unresolved import {Worker} from 'worker_threads'; import mergeStream = require('merge-stream'); diff --git a/packages/jest-worker/src/workers/threadChild.ts b/packages/jest-worker/src/workers/threadChild.ts index bab076dce2c1..fc9105ce99ce 100644 --- a/packages/jest-worker/src/workers/threadChild.ts +++ b/packages/jest-worker/src/workers/threadChild.ts @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -// ESLint doesn't know about this experimental module -// eslint-disable-next-line import/no-unresolved import {isMainThread, parentPort} from 'worker_threads'; import { From 390a4eb63ed9cfcf19014870cf325019bf58e8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Sat, 26 Oct 2019 09:35:27 +0200 Subject: [PATCH 72/97] [ImgBot] Optimize images (#9092) --- .../multiple-transformers/src/logo.svg | 8 +-- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 3319 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 2153 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4842 -> 4563 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7718 -> 7204 bytes .../static/img/blog/24-different-types.png | Bin 358407 -> 252709 bytes website/static/img/blog/24-todo.png | Bin 930009 -> 558758 bytes website/static/img/blog/collective.png | Bin 326569 -> 162282 bytes .../img/content/matchers/different-types.png | Bin 358407 -> 252709 bytes .../img/favicon/android-chrome-192x192.png | Bin 9035 -> 7015 bytes .../img/favicon/android-chrome-512x512.png | Bin 25528 -> 20977 bytes .../static/img/favicon/apple-touch-icon.png | Bin 4875 -> 3737 bytes website/static/img/favicon/mstile-144x144.png | Bin 6850 -> 5138 bytes website/static/img/favicon/mstile-150x150.png | Bin 6678 -> 5172 bytes website/static/img/favicon/mstile-310x150.png | Bin 7257 -> 5756 bytes website/static/img/favicon/mstile-310x310.png | Bin 14742 -> 11693 bytes website/static/img/favicon/mstile-70x70.png | Bin 4629 -> 3557 bytes website/static/img/jest-badge.svg | 2 +- website/static/img/jest-card-fail.svg | 4 +- website/static/img/jest-card-pass.svg | 4 +- website/static/img/jest-card-run.svg | 58 +----------------- website/static/img/jest-outline.svg | 58 +----------------- website/static/img/jest.png | Bin 41253 -> 26036 bytes website/static/img/jest.svg | 14 +---- website/static/img/language.svg | 4 +- website/static/img/opengraph.png | Bin 33621 -> 13896 bytes .../static/img/running-card-background.png | Bin 487 -> 391 bytes 27 files changed, 8 insertions(+), 144 deletions(-) diff --git a/e2e/transform/multiple-transformers/src/logo.svg b/e2e/transform/multiple-transformers/src/logo.svg index 6b60c1042f58..9dfc1c058ceb 100644 --- a/e2e/transform/multiple-transformers/src/logo.svg +++ b/e2e/transform/multiple-transformers/src/logo.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/examples/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index cde69bcccec65160d92116f20ffce4fce0b5245c..114df33a9689f99d27282cd17bf7d4ea97e4485d 100644 GIT binary patch delta 3198 zcmV-^41x378uuBHhJOqBNklOEl0xYl` zJG(nacmMLobkB6p^z`)f%&w5yM@{V<-LK#KyzlS#e((3X0e|{RU+F7-<-{yxy#BA- zDg2%{ZQ8KlPoG@a0w8dlf+7HcA3Zp$dDJKLNf+0>z^sEA*zm_acL3nt0>l84 zFF*dy`u$&Ytpxxj%4gs4?1Fj6fvFJy`Ie_Hy+WzRBmmg6Ew=hEE8gD(An6B^m(3JB(&}oH^2M6*wMs)0VMnYl6?Zw0d#NuXy+FnzCH4RiL;yT4algPal`nB*RJ~D zdI0g9#*pPDwY0RzS1z7BpkZjuh){$^K+%T@nHmWk)d7&sotlm|Ex|kE9ny}yJC1z% z^u4d{2Y;X$FWoXw)@vxU7oGa32TJ0NRitwN*cS;rx$82!r&L$}5(AFk|a`yS4!6FhJt#07Qmk zZhu(v#O(V=o!ReNfYJUX9_VQ2jjiKCkLXHb6oUaSgrsyp=J5mqr-EBQ{~&d1ZG$?s zz7@*=;FG@{eCnB{>z4yK2q0B%2P-kHM(R##YW?x^Q`d#60}UVnFoUgT&s+eGe?aCt z0stZ~>*#Ec?|a~?wbNs<~IDaT_+K(UVIC5y8_K);8dI{|+4#(4!Y5+Xa zCT)tvlE=zbP9;rDOrJZcVa`os{}8NBo?~`6ud@Xe%9M2E6&P}CkNS^%8qa<<$sFSl??1y`^v%TtAF{{9>Yodf`25H z1Lub2^G2UOBf3cnsEq~T6f~&H*ml7N3azenOmtywee=qXH|{*v+koV2mVJA~#985u zLgrdmILtlje;jcc*Ca`gw45BeCag67ZrheGV}61~KTcY@=<Q#;JOqepV&W|8U1tjY0>whD&7L9w2WUa*trZnYv$K~dKJU2S14qb5f87qy9 zgXk$h1R!wpuV&sZMUrPS*cnU#IPQkV74<((MTw@)z30Wt7MGfFC`EGejrUzTe&|Hy zH?GZNh9XsAT;oiPt-k<`k>QA?4k4k%%2bcN)CC7(LenJ}-Tz$FD$O_?|9=V^r(BgA zt`is3M(bYwc+*$yUj30*lA@uZA$s@93*QrA?UX`b03amSV0P=Bs8Z@PKdE{WZ+`hW z+PXe1Ad760@K~}9t3O|kZuOXJ-KkEzzjWrS-|`w|do?lX`kzg| zM1<5+z{a{N_hppR8ZWlNNq;Xc6-;VbPzD@(nLOZX8yoQNvGlN)3Y#J$9KY`$91MvRpMJ->k`JOTJlOf#(UG2N8$3>a%&Wup z0!W&F+w}9L00w&LMna7_{-)}2=$RCef8V2V3MwZZe@mzxo(4b)@qds-kIg*Siw_na zd{nS`RNzi_S|H}U0ATy!zdBa5y?q0i^};is$N5TU9oyTTud%iLZO^q19vl4$(mNeg z&MYQfdfm5%pL}-B{a!D8G_em!y%WumlOae3gYntn4cOea64?x*KlPZu?Csi$h};kT z!$UwIr1Us8?forw9Dmv90e89W9%-jIc=+T3#Lp3zP z3y^Xmnfqf)C|xZ?&$NC7dRXTekk4*OOX5Qs?4 zz5&TZ(Vhd-^KiW6sRE=|`Sn56aYR=Sv~_oot`iY~!O%&t^(c`Snlr$}j$=ZUZK&~9 zWZxPajg)B>YYdVAO(!GC%wo^4>ykfGgWmTHaem~RULBH_5ep$s6S@x+cbCc^;7k5F2$; z`aCweOH{-$Qvqe!FDxlS_YH_4*c@~vN+3xf)y+BTF)wCuCKiSnXr{V23(*QE4Tfzh z1T3F3^`_NTh!30RSmi>6dsr;zEEmfLk;O48;eYgZsW>~EiN(BxX?A1*lXIN;nZXdm zcDSZrw$#sg084}8Xq2KHKu*j1Q2G)ni|tZ@y9mh~C5B^=GDt^Dx#o_xhZM$viT$;2Y)C97PI6Y{ADVj-h)%N4{}mcK;caEYX)MR z6SokVebNhrUml%t5BQuC6{G=Nn#iO;+9Rte%e0=`P0sN>F6vT!yWGhbH-j+d-t#UFw*llMXfB-!0DyQ+s6I(;@Ar=Eh+=Yi;i4<5NlMi%`hPYLZVE@5Z0tx zj$;NhNZ0cMC+-0_tds5s5ChQT@qgr=N;+?n(n)x$Q?|k(!@*k}b0*L4G1B*POS1J- zJfZJ`%kvy=3Q~7&iM>?rY?j+#Apt_<;@7w6<*&E%VJ)p#(g&o&-<2`*0tx!yqa z;riWe|6Ly0PIQINe0e!_e7-eaAEpIdA*us>JbR zeD{CeJ+kukXFhrhz<#7}3D!#mWHvJlpc+6GvNs!@2>+=`A-OTqca+5p<#fa4nN}|y zHJ@P*Ap0EqiCoxFOA7X05UK!IV~|TEiyDzGBP?dGCDIiD=;uRFfitI1iq6U4HqUkEio`H kGBi{&GCDIdIx{ybFfckWFqbI20ssI207*qoM6N<$g17P-jQ{`u delta 3316 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 YFgH3dFwL6zQUCw|07*qoM6N<$f)17RxBvhE diff --git a/examples/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index bfa42f0e7b91d006d22352c9ff2f134e504e3c1d..5401a03d495dcc9cf5958d45e20cd9019078d3e4 100644 GIT binary patch delta 4452 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 bj;_wZ{~dU|vAgmwKn-ZC-&Z55+C}^i-v;q3 diff --git a/examples/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 324e72cdd7480cb983fa1bcc7ce686e51ef87fe7..36145383389b53aef0fa0a5e44de2b7b4d589f74 100644 GIT binary patch delta 7132 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 delta 7650 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

>FU+4EUpgkoR?C& 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

O`lbBazAiM)s%==%>Fa8lj(0FqD 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%0AwLC& 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

cPC#gjI~9oOW@Epc82wtsd_P|b`^ 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⪙MVf`u4>4Uhg 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

V4V4c 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

    V(!;&Q?mkX>##&nh9}a~bo|O$;B!ETb zu&}$7x#$~NT~d1J>&+B^4OrjYtTmX9gvOF3Vffffm*UY|TU+fve=@<|HkXre7jc8M z2<%GCE~S8=V7=m5?RJ9NAQe;dtEPf2Hb61#5GOx8^yU<$aPxDxmiKB=Ff~2RK?KJ) zAX6N?UFF{UF3+D-9k*Cf0d3!ISe*NE5Jjf^lbtwM(eE;}tB2y_&SZa~a(Au?XIf$5 zqe^O{0=&T&Rz8Xqf`{BxSya|SBXLzjPmiiN^(Sugx&PvxUSUhcoCH*$-*<>=gK-c5 zw8E%9DhRl9Jp)K!&uaE&)UUXjJ|=+pySa6`lV5|P+GH{tS}eY%Xr&RMI`c3 z1W*IoV=QgD&bnR?FYTvAQ=|+b{C*>dh^W}AE#sHhRtjosN$<$V13W}Xfvslen{>>{ z@$F`>#bqym&|Y3HY-(bzpO6lsX1dCD2c^Ug$Tl3b8P^#Qv%}j!T#Ym|+>+0!~B*8P7wsff6i+ z(T2!FH=bfp3Rg^b+zh&F3*8ykDj;tKtb~C9eM7_Ozkl7ysff}V9%i1RXauylo!9!- z#XA=IVtb)Slh80=XGHNUM%f{}CMyx5M;O<*Mu#ni2aUe%AcqS^$wRJFn3JEK2?edT z3~Q+CHVA7&9BmX;j>95fccVXr3T?cHmHAX%RL?f>1n-_?wY(B_r@&PX%mXgYQzxm| z@1DeBPy9$m0*|kvpFXQghp>V0VyVHqMuv9Y-UJJpYF`9z>>WWH&m2KiY6dKN7%_lX z43@bDAsd;3AHo8#Sg`im?)ysdLS6P=e}2}}t_|nbU~P==hebz|hV}M{(=m1J_BnOv zaRD&&IJ%i-Dt~$qnYj$zo3bgr$m+JXHf!9sl>aclfG@LC2go^eq!+(a(IeObH?4Co+B?GJg+SoD8=9q(?_LipU;h#)_&Wfyij9o} zDs_Z)kB3&z;r~1~LzL`|Z;8Dnb|){adCQfZz*2k_N3Z6hLFK3|TgSY17xgTK?n-C{Ha#_Mdg?Ei zNhPC5cfLJULKojHIQ9rn87IRSP)nZK^#0?{FrWJC&4K%{EB0~Bts zsOG?)M?S`+{+&fMoXy&SpV8c!xJgV9Ju$$CJh)!@Fuq7X;`(+9cUYj%G+ zwuHRGs5mt)5N?MoFd1oS%57~w*9AI~B*1xq4+FN=EGf@{R`CPGucKoWfSps*2ndVR zc|>aCb=hBWn{EZtZVFCrZe3O{<_HlUXlTQPyQ^u`E;MHItGN%!s||3 zmfKz|Ta&+Y>W{>1dDe_+gE%?DZOxz zXk`8Wi2t6!GT4m@0B@wOk6Z3ugV2`8*Z2Yuo^yD3Jk-gw8sA>lX7;@09w+tONmQumTdgW%|X|^S`PAPrhF3@Gk;pUdw*~kA)HaAWah|kS0fJ6 zjc6c+Uy=*a@+a``Cq$SGm^uK~il#LLybfobcHA_awLWCR%U$vC{scP8P_o~8gskb0 zhk{?r!2j%S0sXTmFzdPpXy;d;6e|ei{}*v^^5fTAu2b;L90VR7cM{^pH_#Wl(Tr>U zf#K)a#@I)Nj2$>g3O1t=zOrGg&6HfsQMRC&*|;=$J25*u#z`t#WVWI3V-Y>@ue_Mb zHK1NuPVPgh+3ZgTH?qMcxqGSfHqPMG%pI;($Y`hQq&f%lNknWN6>5akS+7+)l|kd1 zuN$h`31nRx$q)WcAaqyQ6T)6IurS=*h4c_OdvbEhnZS|9xDg(l=+u$p=Y7z&hmRj+ zIOBlq(L}jf(bqawM$sHqvlslo171+MH*Y^bxD$D$_t@+?hdhJ2t~=$;C;qUk$`bPQ zjr06_RY=Jp1ixNxSdbc!B7QtE^7KpaP2Aa(0yA6SJSULrd$#^}LtVp+9|+avb1}!X zMQVd=X0cs|N_k4*Zgh92bFrDo4MdFBv%X>e$ z6AB7jXy9iXR1!CDM$o>~T?7owM%xva3Y!;X&%Yj%UKkWEeBX`jhC*JF?E;~6$T)>20(m*cwVuIS~&7SI}e_x1k}8Dxxo-LJun z9VpoadMQHe&WB>g9`*uNjv_sZK(rd5&B=Gg+7Iuj3FE04cD&9PCd=Yml-#agk2u(|o4jwX^~ zshgk5Q^_1Z1U}U;E$+KKVdrSdl}KHjbM*lJ+n*#jUkX8#gnnZl{|iZ+Z;dW-UeYL% zV7c|2z+q*@7qiftn33TzE5`D)n+F>FQrGx%3}5r%^q9ly(4*R@-tr44akYUF1PHDn zsyako2Rg2-7#Y+nR&YGfwEcR4N};ALIYU;zB`!Cstepmb^;7g^3{p}K#JlM+L#{K< z>W@THUlf&rm~nRHyO(zUOvm-I1=1zrldTQ)HlJP)%nCO8u3WciCC$>@ZWG}7?!8XU z5!^E!Cmn3H!NS7Ab7AqNkvBN_TXXxMlrx=|$6u46TQNzM;v)8%E3niYvsnTJJvd?EC{-_nqI%>`uo>j^3prmwFbM)Vg&ZZ*ZqeI7%) z_x%#p;)S+mY-8|?r3V2(splrs#xbM5-tAlxQV6-|A`y}bT zdmSCzaq>LmM#g=;J>D1Cx8vQyQyh8*C_bkT%;18 z?d-BMV7VPg=iuOQv7C}JGT!;~U%F^;LCxLyLz(U9{Qk3@?X7P!7{^z*aM<5jPxzu& z-O%xA%-Y_nr3XH>ujkTZV`I~jWh4gUKa4c*M`o_U@l-XPo~Lym`WO6ukw{{zw0OA> zkkKA$MrBXVg=J6ucJrIuI+||be3dpSnDj|gDVgk$mb0eI@}D+1eOuTvjxr9tZXO^?_g;Jf zg>e$%9XF)sgLSwK=}ZK268=T5DFPW3WS9O!Vj$a~;`4+8peTaC3kl8pElNy0=XdfI z6iEGNM|!1GHkoILM~`?oBWT`Ce0MT6XbwXkybSQ&4Sv0wk`K`(Ie}D^DKQB7o;pGP zP@sh^H&)sUgFNmLec<+mm^fDgYFPsW7wO7$X9Heq0da!7Sp`0=asDLr#5^dFd=|1G04 zBe1!fSz(;>I=i;{%p_JS55S^0XcgXvXsNn*+!P8iAk;97y4z58+nVdUK{-dTz~}ctefo4Z zQ`c>H+%YAhf$H`GhEFermA57EPzgr;3~O=8`20>LHxu$&L(c9o>r$}Z@K}HObT@np zNGb0=$`#}NL&fTUOHsb|bRq0b_XoQY_S*Z%T=|zBn41-Ro=aKvm6+s3J1|vJRrwi0 z9fJY{Xz)fgiLYB!Q^zohWPO50a&Ct%EZAz2R9FXup4yg@p=_3WI|ySqIKR(KMg#rr z1OGB-;ID9%C#XOP2Ex{}Tqs6_aWo%&`EMD$Fwj6O#Q_ph-_bvk`uoGABW z+;qeYQNtbtJidl&p?5v(M(E56ppGdIzCdAhHF0=&IOx1l2WgxDDOqCR$SWXpSXABT z|FycBS}|X5f$V&CT^&c`*0L73A~e(zc6hFHt^@II!@c$!pFnZ0la0d&FE5E`j5>@5 zlzg?1kzWEs6Je$wA5d6LJva?SvXe225^#);O-2U?M+PHE7vC!Tn33VAAA_-Y3sSQj1wMTXa?WatE)nM7r6#`YiCZKzI|ouuk$?lLNnG)uRdQ>OpB7udOYpQs zQT}YclSCrv87{?RsCEg_fW9F-GA0u|&I%blfb174h7hG|Hn6^df%*d*Yj^j>uT^S+ zfx)i08-!*#h&mr^hB+>!D^LOtCWtebcS?-Yu5kHtxVrlLswyH52|z-3 z;z_Q@y2d#0F_|YrDiOjxCyy| zGHz+-sTJZeH>9h9%ila3c#g|1!%~;_xs79~-mJ0Xwe0n{0#6(0W^39pbx(7;292`?PV!ONANO%D&D4D_(6^7*W$YSo#FfqzGN%ZdfpV<#^5=*G9y@v-q zL%^}hXT?vx>1CQ-dW{q!gND&Ult<0FBq%s+hX$evBqs>%8yUJ3rX)@`n1wB^ZkziI zni+HGY!moE`p5|tdFh&}67%zfjQ@|aw+@TCd-we*X{EaxL_`!NM21f324NIXx)cN? z29WNQ5=L6-mL8-V0g)DIB%~w;hMBW?zI*@n+0XYm=eN&)TwY$v%;&S#z1Drd->6mRFct}*hak?)$FEoEs0*eM02L;M+@zXz zUo8A}ggE})PTv37cY+n8XNIXV7Iip+#~ist{^=QjS*}+g%Ii>>cIdnl5?zMw7~v3o zXFFrD2SbaI#3XLLLZ6G)E=Zzw&dBiIn)CxQ2|NuZ(SNr6Yqx5*qM|G_5hKsldEzk( z9Q`_mrqVf>=d?$#2f&PJ0eg{gRYq-+Vb$@NLVLt9n3uJie_ptz5~y-3@)UB8rHcbb zkqyZ8<8svF3Rra#?Cuea-AyWpUBNg?JoZ5WwVO9Q9Y$dNS^dH31R=7Dtt3A&+$){ksPXaq3#V-w-Rl#XSIVy%$jbA#aE1-k8A0(_cS=`bSeD4 zzRere;YrbqjuXHSqOVA(;)mBW<|U|St>m1FEbW*V2~wrSRyZpovx&}{I;Q&FwpZy_ zsHTOJWfEQAHK}<|UlOTq$e-_8966`En(xS|96L*>#N2)5Xtz*GSKc3lG?IoA+vtG2 z+0-J;^`)~)l`qFr=BdnK(|e~EOQ#nsgPfvwak!kZ z4T3r#+i}_EYf>$!wId9b1Ix^%!tX2ingQtw^OZeVbg&Jaf?^yHh(0oPmpL)<@J1qk zXU!Y5LM=CXHJKG1d;|fyUfaUZ`RL;OV(j}1e_X${NSc0&Jd3&NA=W+!z=X90y2@&qdceE5-UUFh%Wgy;djqGb4}} zHY9ciMep^|RnhMk#0hBD)~<$8nRF!Ml}N76&hXyl0CF&?=_T_(HTSm(tK4*F6$ z0};RTbPkSs-O!AQii~tz%3^RidV;JkwAdxv>Db%-^<{IDpZy9<$`=b;v#DR+1E_qZ zTdci}uWUG;GxKR>D;)JF@gLAx9e7Mx0g6rE@Nm{03}2kj`UtF1!rQpkRwR}U5?Nnw z2#}96ZiHB^mwpY?_VwRPs(fi0Wdk zI9~QfdwpMrFl|6Tqik9^vVUzO9E310GBEk%C#a%klV=ClM19as7&Ep=lE4D>cO5Io zg=;>3(ht#2WG~V%3(Jd^#3GHzz3tr^G ztqDCOiqSMekBVZfGp<(R{U1PhBdcsg5Su0L{9|)}bJ~56x8`Lg31ng$K6IqDjusO< zNf$nQ=?jM6T(rIKoP@ckiREN|*3bQJ2loLiEV$Qlk{7yw?vD6$+>am9Ee*Q>6$}b} zN|5d)!V{xRbWqoRo;mewc)*Ily3 z1|!jA|0eEH_1$=t!I`gPmPG_^*@8RtkVAl@`I+vFCcm$wg=AYA9^AR&a8d?u$-!=CD&^<5p^M6QO{1op zL95tyFsdw(C0yq67W=w9moMK3AN9P2E$~XixD^fXKl!wTyFS=%0|Qx z<3f0Ej>DT=Zot5+&y~X@pXKFo6;8{0QI;`}&jHw3lK6v&u>=Z2OAL4zATL5kg$T^Q zI?O$tDv<=4H_~@`UcRjITJkXYe6?iXGed8%PB$>Hn6pg7oAr4!@aW;cJ#3#7m z$T#`K{R{R=+zF@c@%y#XmW)Rjtr$ovvR6M;y_xTK*O73kmUHa^vOkt0BCaIAeRDd^ zPsh~QI3OsfBluy+%!%UkZG~#Akbq}hId*S)PU50tWr$_y7=0}k8_=Wu{i^TN??=ay zzV&zBX-K0@B)ubxW+9q6Nu^DF?2WFeL;Fdy0ccxv?1(0_cmtUYxPd2Az73RZ!7N=& zH^YSA37f=vh*i{>WjA!gsmI@hiR5h{QU(o|rVp$FurgwqJ3=3dO`{4s39tp?Q!}Hs zX@y?z*U-S?3$0}%)y-fthlnF$^AQ!4miMK4rv)Z`1Xe$Sc(52CRLMRN&(MNy{;T_? zW!$gXRQ4zZ-Z!Xw^T4KBl%r>j00;Xan&jxHCh=-{9(W`J+NrC!?Hp7^Au#Cxv)@Sqb@mS2?C(i1s9XEbjP&9f37u?hZmEhg+Aq;`Dn?ty?+OWp=4^_}{9)4(_i1lD zSQ%KPI#`MPp*V?XI5;Lc!x<@-Z;C2cWDBbh2;!^riltY^aNVPzW*`oaj3gCT=d!cz zkm(YUbSn?E_Fxr?AyjRh+~Tk*&Sf;1dCu>fwO?j+%vq<9tevfg)J?bTteQ>yQg--= z7<$uJgTm(5K*Jxef~Y$r8OJegT`@0ae|)uQlQW>=J*NfUq^1QU{rh2d_0Q2X!ozSCJjQxw`Yn+p1YYyvQaek%_IB5N&kBd1uNEf87@c;4|ipYOYEzV zXaZ{KMBla2r;F~xf|W?{u7NqDX2zcIEjd2Pr+wl|O3GAD4D-8W*ZHJd0zsTF33v92nmmsIv&#NSC|MOiUW%Caf|t<}LwFJS(P zkjBNbgN~5Qglw&+$8x_iJfJWF$jww$KV3dsG!~C8kG%~Bf_XsIhIPm1#zE|3JVWcGYwm~nw9jZQ81Bewt&;=>O- z=2*AlTkdM`8zWjBfB_g3x ztB>IkCM7jBC#M|S$*Ig%+Jh1d!mc$+G}5y$boc8G2VeoMKk>qf8-4ch*;~FpOABJz9^O4ho zWVsgB)tPPX8WcPRWfY%ka};_`pkrci{~CsD?qp+Qqo5AjAtO3g>^i?4CjiQ1@8VuB0%6_ z+GI?N^!&?-^W^Qg`4*|GnVtU;Sd90s?m}bK)Crvc$JP!;A2$e}j&*c5*bT=}l|o96 zb86?y6 zFL7Uxb^3J;am>mXDlI_1jzA*ZaRebyFm#Hj0i;a{Hv0L(iXJ zdeFDhAy!V~FE?oe`=Xui>&3sDXccRsP^}wb<)d7q;8B|IuO6>^HiYrozvw*&T_RzE zo^#iar?{wEB%C}NAB$+{Shy=Rba=uACTGY|WDE26$8M26GK)7i-%afjzAaF%;}o8|yc<_` zbpFPx)q+r9Yj@_-wv)*%a>B-MVm=otjpzy2t$kcja59a4#3$j=aY@-%LU z$>CjLF*XZ08KsPo(Ny#XA~8|-f}4>Pzjuv59^0ofF){IvuK*=mM+SSq`h4(J9A9`m4Q7nctU4;1@VoWKBSq2QBQGg{$dM!7<|NFxi{vhW7_Y zi@*oL9wGzy%VT-U9N5g#uc;5bn47)=eN!a0fBmu+_sv%-rei z;0AL1Av?jvNqcDX`|L!E1Jm3CuYA*|HG=VX5F(DKA2|^?hxFFN+?g?ZkV>{ruAHvA z$RSfSy!D{Mtg%x+%bC!5T%y}huzkU4D^Ab0Ut-k(?zVOgCf&K z1=r=bKh=0VK+bhM@^ne#hH`f)P-bZFq;iU2K9zlY&bc?DkCJEH+`BiIktt{SPd7YD zDEH#SYP8il(%y}|_?O!RCg1NdH-GL;o)~)UZibA*_a0wsi?s$$B@*-{y%Y2c#~#>! z(|N<_KNPapXn2-Un7-9UJrI3gnCnMRHY}pJ^)C}qhz#2U(bg07i?@-V<`7SRaLV9xc5;D>3;Zr@2^CU* zNdUZbw`k#_i0bMANiR`gm2-d{{i1p?Ba)Ms+amQG4brHtBM|huIAL+jN}`Oi6JwnL z$!TIP*u;m#McwGfmyjPQhm3ZQsPf*oWYU((o;Ef{-et zjSp2h6qGncqgirNtnwzRjY%%BmwbHPsWT_AP?Y03{QbO?3Q|89xf`S)v0n zAygaM!pI*8p_!T&@km9Swjm4WR2iY$w9v4y2N1`jhmsG+&mm%BbOBw{)0@$73>Zm} zAP|HBT}ydkV5IE2YD>i)h&-bEP{|Gnf!CeYe8(~&Ozp&soMnDFLx31(P!Wz$4hKBx zz3FY}=I@6t4-VnVr`VL?O1b5zb-iJ6*G+QU60t2zzW1+D1Q68FDb1rCz#g3R1a_GC z9kBqlcszn3p+d4zio4oEEDtvGFZYB`<~mPLPa9`J>k#18{H!maG`QA@n4*X1!i)2J z6R3xPNZEO$)q~ul+=*ilxtcHMR?)xol>p|&OXG&8*oLLX*Hj{8?u45+zkYss&c}r0 z)5G{kv5G!;ASajGn#YotmzNZa@RD+dV|I$a*`0-iTsvuf#&JD!5j33raQ))r8=f6s z|9XFv8`(d8tm`)%oaRJQaFiBu=@FM6fvK;59nIZk2_(D!R3$dQwll!ge)05!Kp-GZaw0ykKSzg<8#g*$!(yjq>=`lgv~+Z*CT}mMDJdKV z?>cxgp~kl)f1~IwE?-E<6RmQ$C1l5(5d>6^TgqVVW@V9My_gh}JbSf1gpK$0`;Qv} zfz{Qzd{Azymr`x)LgUq27*gcS5Cn~*SNnZoA@IOgOx(Lh0?e3g zOo(YHsRlRXEH*ku;;b`=-NFm$9UUFZE+#xRLNybOh>d-%kT>Qw1z+3~o9n{r8}8TG z#^iR$U1Xk&*;*@&!c_4u)dok^P((z8F}@B~hugxLXtC4r zM7H%28I(;E`d&K5F&l<0Q-kp2V4kFTv30&@I*6F*gN1~=7_2DI&ZhPU7X}O1wg;g` z+GKQok}$W>^bRX5EKYQ3Xl8;O$JWudYo}+1Y8Ens+GE7Lc4_MGhN?!e9j$|gW@y3^ zMN6HJXYMJg3k~$)Rl5-1KX;ze$8v4|`rR=&XAulkqc4520*pm7CQ)!Zl=;YiR)oig zS`Q8v^>^v8e)#){f!-1ax9jM_Y3|2L!hm)l2vO8nM!BPxy>}i~3YYA`suN(ld1U*-}xx6k-!c9`7lk7P1Os_sdDym{-*W5bZVX>QQgi-W5B3heR{YQ{WMo4lKj zg4<8B>q&d7{BTeGkTR?=fcf*5WF7hoRq$L)hKlv!ff<|HeQMF=AE9A3BmUc6uZT{J z3=OT;4pXqWLH0tWM=!1W=^yU4U8fu5alNkVLv~W99WIql8}-y^zf(sA;O1Zt0D6;^ zf>b#0kVHj1AYZp~wZ#gHd+==Vdnyac%%!mt_0H*5C=`Nma6fgI*nzxS2eRF1Vin-H zCU9_hlKC24f$)!*$tA%DTwgMQz}YQEeIo;{63|MAEq=j0`w`a`_GoYS%g?XmPg85f zkic;7((3f?8y(Kava&&Y6o_1%R=`uB*+xzN((QJwN&;M-g(BMT%uunZtUHPH#l__BqKJe$((pA=hPRj9cn16VCZuLD$*IAx1=o7a2xIN6~1&B*~L{Ci0gUYUjP~KQ6`|R1N60Wgb>@YD4 z@vLWn0F#kfy^A6@*e>_EKE6KWC*T{vmsnBBbQs)gg3Yt?N!T<2V7$ z&lj9NmX_kNgT%_}49vY4#Gv10x*dAhAC35fO3Ffs-M`Svw(qH0>80#gOaZ6KSSJLp zsFdp>FK}AP%PoVTYk40tGoS(e*II9UwcfdLgpD)p`Bd0)Y&w6%<#!9%vpT9Mz|4%L zldJOv8fbrCw>9AcBUbR8MXT{IKIiA``7#NMaU?=?Kwl^DUfPeiXykpzr->rB^XTJI z-`^d`qZ5srC3RNzPG(2-DfS3g(Z}!6XKciz%Uwh@cb|C}TvscN)c>a~K|y*OavK8W z;^Y$ZpAECYkxiJT)Z!v2znT5b!iDjD>#U_hLP2NipF|bMB0)>OPai8tLCfRIbDyX^ z4$!E$ub7~S1TiqJ16`YTXBHi&@kHOBPys#d-jV9 z9@50ZLT3zUuyWB8F9De-@Wb~C!!AjHHwtKxnSquy@F}4jW4s*qY?e5ZH7+#l!K3KZ z&n@96zi$8sRG!nedOX%kUke3Jkqf29-(xJOt$~~KK2!KD$dfA#@4?_Ait-vV1PH7_ z9xGc<$1^M(;09>Gpfx}j{FUg3{G+|2GuO*w^{?OD`~Ije^ER6c+hy#Gc40W(CQg6m z;EKE3LZn!QQHuV+#R&vpK#&ZvtP;lyka)HJY$@oP-7X^eOjuAr{Yev{=(nk&E~teC zYjLst*M%8uq7SvTw}9*-$tkL5Eh>2P_8@vR9$tp3aYf73*4Ba4u@zevmtIfUzPbLp z6!}e7((Bisy1SEtNqU3c5=q@@ImzO#S~uhK%O(%P&>(T26Vlm-5BH#9DAoXD(gblq(5JC0}FIcqlJe0|8aCn;q<>BDcGgDJU9;+}mu@D2toNt^c zHse*g{_vf5+h*}PuFHD87U0;!h6V0G>*tTWu$o5SF6UZOQ&T?$6jWSXzi_1$a=E7? zJKkvs*Jq{|bhn=bygQ*~hWIlBvBBBY-lgEc;9!oo6g}f+udR4=M-a|cqS?et^byh* zn8mi;K7Q(#N>vR^5j51K$E5eb&tKTxJV@2ROo&(|sHmYH9rup{10d)20sPlF2-� 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%0Auh0QrBm72X5YfHR`9=BpuPp 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

    dIXr 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 G8(4oNYrN8*YSR`B%4AdT~*g{zN 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

    dwJSJAR=e>&IXrv{k}yu6ZS;`wZ&O9W3E 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

    qAKLwshWMD39vv8PL9ktT#7s3( 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

    C@GYz9v&e<&wgM@69T+2?_|(8Eum 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®WWsz!OMUA?7u{|#rf#K!-nNQ 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 X$zVAl`~`yCN`6!dnGfwCv_&NZS#rQ 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

    >u+Q(~xtifIdgI1J=W&{};1zvyyrl>#Ot8ALx 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�A{4xY=1S9`#!vU}AWq3D8 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 z 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

    +tm4otrZp7nnAaQV8{JsU>!2(A<@U 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 FXvk#Z*y0c;9G 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%0A{(Jmj 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%0AZ%T!Jg;*OC$V7hQW=_Igh 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ÂYWv6HhgC z=OV^^m?ROeKh(2|om_{uw?syDoiO^5L}^1#A!}f;W!yzh0U^tfpiboOxg&}0^}V(m zgh0m2Qo`E2;zq;ED> zSuUZwMH)j$%T$o)j_r5Htt5Z3&_Ipy@r)*JGz@(oJ&^{_YRfkoST!PSO5z9U-u?dj zH6yh0JI6b*<(m_M?_^Y_M*Ei`qYDY&pR=2EC|pb}dqBH3j0ssS-2Wn=fnL1Y{?w0Y zWHGfFwc(N4+%7G*^buFMyxKpch)#`be3t?Va>vms;|5h<$>nHzlpXgbu}--ov{7+lRoIoJBY-d8VOnQ zrl^S2T#>#%7WMpurT3BqcBl<(3TZQsZ}} z3J{fI&E`i_?NDJ^eltXF&gnZ90Rlft=QS*6(hxS{j%bvag!mkN3GHxT%0x1|RT$aFtl0BN+HEGm zKf_L6_W59boX#6SIJbrVt4a-0YU+!kbkNf6dF`*T&^H|<(%x>#ecNP3nhb+mW$+0B z6K8_qqswS7qqwJz;~#YO8nRpl)pp87sbSd~9klEP=_Yx46WHta>OuE&5ZmW^T*Og7 zti_)9K9a-OI6Z8k-fbfXhzV;2obnX)$G6YEcw?q;WM9KN`EjM)VW z_irAi{Ikx`!s>dA#1yJgAr_UDs_%N9~@ zh4-7xUyQ7m*)f{9rT4eXbX!r*xLfh2RJO#=E+3K!xNk6D3o_!9c_fna+oeyWiaF36 zU^$%^;GIdi@AB8WHTCyih*QI)!DJU|Ad)5b^Ragy0R%k$Zv`2qW&U;ifo*z*q=`%EJxXxup zfAU{`ddp5(oXiWjQ;)x0zdUG_xS9*ldEw{T7UNWq8UDi!S)t^b#Gt4-nD-=a% z=G3<-OPUUu6J_0tQ(R{fueFDm)vaY0tOhc|v~aFl6JJJ+IVB+OBPOS{s;!zxg1-q> zbD51s5L>}?lcu{TV}nW_Ly=QSExN738m}=$L;Y5&da(?gOC+U~`iancZT&b8K3-<| z=R%dl9BLG9bF4LJa!XTc`2p79{Ns+Dfr(V*{;%c3GY;hqz7*L(NuxB+9h>R5m-kla zQHT=a`Um*Dw*ow1L0e<2EJm%Bg!Z!fwHcu@^|^la8Rw3iulHGO^rG=??yH`aRX#IN zJz{~Rznpv2rt7e0eZfO_sZ|P^m`xN^->}Z8HVP-^l_uOIWa%1UAZ$h6sgqO~v~aZx>tkiZ08%k>^|>q8q~I;K z+>34}yPwx<9-gVNlDq&MZbub zt~-TxG{N&MWjZ5)9(<3Q)TQhm`!4FI{RQXTz_{>3ul>N0RLk)6E`;$q+@6C{n+_Rd zSTgzeSV81!=yx-L)S)hd6!}}fei7T;i=MC5S0BSeJ4Ev&UnbkX0^>RM4Em$;zOQq6 z`8p)_jSAx?=kC@}5)gt5BL8u!w*zz@YASoP(J@i!7&{Rn*1aaxom0XspG;}u_Mw53 zThnkjx0(}yI~>}17?hzg)_F~oRJwlekEVYs+;U0z*KGlCkZc?{;u;tK0M!(N8FX%o z($1C*&s|zfJu&EllDFLmcg3z-G*>oNJGkPy4xHN22qJN*nD< zCh|CK?ZH~ARg273YEFzkH1BPkU}^KR>d42|o0Re9cWi#rwH>6Hc2#1!8>IJQl%OWz zYR9RjQGQ;sagiEP$Opdsm%o#j?0db{BKJxXleHD~_d{zr}$CSp;kJudm9F({69Q3#@m43}uO5@qFI-9=uZrAJ4c zr@hFssmPWftv+Q{Rdf+!?&mZz&ei|E9M9Wf5lKqbo4Z zMWq8sbw;-fJej^WOT6#+sLl+0i>tgz@$x=aTYLNWXRomibS|;id5rYf>F8BBk)r5& zH)SQnJx=2MSHL3g=nHn=rFWsCAuAL+p{KH}^J24w(R-yQw6_i6UtL;cc-89pRG{mJ zbgn9ho}*!aRf5{dU4XsyRn<$;=@M1F#!5%p${(`EWZ~Q{7B_FNXPi>l$p0yPEJWfn zs#f$n-=vsk*YM-E9fb7B5~t4%Sz>^n{Jm3o*$M zu8H~h73JqVjAh)`Hj#1ODNM^jS$z~s5_Z3RTXH{+YN$zI1iA@xUbUDZWe(GZa}!=Q zzAkvfeYEeb#V8vdsllg#UQPPEti<2Ab4g-g>AR+c(7bQAY5HG*+&JFL$qN``mf+jpo87O<7`%aj-s5jNdgVHoE+jU0 zfq?$R6Moe;RUS!o4xtLNunp72(Vcom6poS0C#2F3!`E={;XA6!z+w_8p9h_**)$A4#zaQHF5Xj^`CLYQtRw zZ_8ljDjoxGj2s@)%@OHS=me1$@2h|%=>qst{iN%+IkIKvvqHFv9plMYSb2!-ep(um zo1f&PpHPuiL%UU#vomO+GuFAm$*H61xkO6|Qw@t}PPcK4Fekw@MAz>|#bSTb#_{eE z!u7ekWP>}MjI!SYx@T}e=7@=P|0<{cslwBNAX1v|-knEIB2#fkkZ}kkKpptb#d;#n z5MFm%-oV`D1rMqvxS@B|MGo^@EygpcOu{;au``1)?1s^mcx}IMffzHf!zUK#v z<;!l;J-6bG`P7q&3$CPfR4l)ikP24bXbv?=z@17_SerFsr{Hp@%B{NQ`Q3qv#!ndU z=q5|m7}37XWh5U(PINv5waz|WL4pd$nPws$?h`UF)P?0^gzuuHEAtM}lCkx*cD=b_ zJF=zIWK5#b*kg>Q zjcMmfj)|TfY5DLym>S=A!%G>l%$?v`6oAMe$Zk$pshHfQS}ZPk@lR8gvr-!6WQHc4 zCq;vJQhJAPFp(dDUB9{GC2^d5PiUk4tgQW1tL{3H^cyqq#ab|B*gI{Kh4y#F$%~^| zhvwH2tq(Pe%Y1N9vJ5+%M;qm3dLR+wD7TC}%J<2T)xEdDQ=7~MpTNZTM0&Wb!ais{ z$u|?}o_z)VP5ZR>P#l7-+Wn{!N`IZ|7M9qJ!=54gj{|OTLuc4yQ-JTW>Ph~-4 zezi)A=cvEr8z1DF%aNl*sK#9f`vgm>BUW;wjhKj9nLU~7C6gS5sEAzhoS`f4*t$IR zyqZd1GKTY2o)UGlV<&E0mqB$(@4p`)i zy*kyj+>Lnt+c0?Vdl_u9n2EAbCF;1hu*vl)Z=f8xX=b#RJ0yY5rph| zex~cwBREFOM#%$4#US z`||s+Fkkwnc2Am^k#hwACbu|m;7@sUD9iAQ7)KD+*8lv?<_8~A4^LI~(kKHF zA6!lMusOYK(|z20{MyW5*xlv%GR)p-dSeJabmk7oKfTnRH-_ zS*>)c%dV9J!WVHb{|EZ5!;HC9*c*0cvhzLStn~9-jFlLUN4!ogPJYah4qJVI1mdc! z;z{eymc%9u|3C*1ffb>EF#ul27rrq2=YgvsZR-x}`}}W-cl67G%qXT_7fSif1vJnu zf7~0gS$|1LYl-qfde52-gYlP{-G4Pf=ZAr395;hYGE=Gxvt?_n>kc=IOL}zkdrs&B zz^zdZgl(gio3?h_&Ng06(3~}ToD)zR3SY4ewBOAC9S}5%ox>wLNIx_aE9WVauyanK z3rH4p&9TSLX)YhmHT7hbjWm}iJ^NkzF;(_%9m~d9kb+591w$ENcFab2eb`QrH)C7- zuxNJHbZv{dt5>6V4#Y^Tb4&} z@jCm-p-26u%!G^ui`QDRiYXn)b^ilolUYL-2eKCw!XwxPCr{IGnjpB_@Df}lL12Nm zI743y)((}49qRTVCfA{OYfXWgfrzbPFJ*0|D9tesU*ivG|1AgT>}HC-C7T*k5Jy4W zAz=jR;nF~IV2-6{u8*WGvjq86jvDjlr>FDmm`yvvWepJ|$wyDI)@)7Kr6_7#zX)o8 z{l2dnJV)wc*%A#Mwio}!F7r6|-tE&A7?@?g>uo$?SwGS_c8;Rj(>({i)sH$&iJia5 ziw}DW8(>Vzjcis_WrO{yT^I(1mR~VHM$YD{>$_T|foZZ zXPgrF(rUAwZ+uL+y@wRjq4r)S(uX8cQ2BLh-<2#=M2C79%m_X^%oxX5!nu=cOY>`c zdpzQUIiXJh?^EfhMg0LC$X9LBIc@M+Tn)m>)X+&DHLfdJFd5E72(@%iVHI3~8km`Yo#nfDb>p zeYyBhc7+uklH0pC-G-dM`Ia<5VEX1KP^y4wK2B@(5W|rRR`mrs98b0>zDV<1UOBlI z1Z1c&g_tt(1ui^$IH+WNowfuC(0*^b^!g2<-l!(}4QQ1cb6-RzL!632qkRBnRok3o z&%yOMvUmOWT|O_9odQ(^B+kQQyH!S>`92)np@ZSfNj<~NKdC?oMIo0iE?uF|1EIZY z6><#UWU9M`(GGdQ>pbAw`9FESuDK|I&3o9R;c2XjXMVr0Ns}CH|EvLOfKd?)1sxk- z?7320yP-BY)u-kCzmOdWSMA3&>k@uX%3ggh`J+Kgw>RT&x!^)cX;Pr@H;NW*yoWG} zz2pL2>bB-qnz#vOvVdifT&Iw=#2cy?Y+3GTqgnL)>8fMAU!6CW*1Vwun!e^9ai~(K&XWR`iGJI$kBl;y14KMcwhA>dWRgwH_AA5 zU-0{U!^(GQoD8zF!$8~TYhszwI1tL5j#UNHMGHnE4|sucJ3!VU5Y?$}Ykmo`2D)%L z?Y{WAVC#y~_EN#&ZNzQnJH(_K>I3xpGwP>gYadeg1!33AJ!9BqOrChu3QM-0zn*LP zWcV`J&alY7Qw3f^=3M`*wfrtaF%h7GR9aGb(0nEK3g7a-85)QgjUyVPTD(dnP>TF| zigMH7K^U%-R&(w4HA#ns#$4_QQrdJ=j-u1hyQuQz<%^~+^`9afuO_9D0KDl>IB+YW zX{6v+HHLvY$Jj@aa$yOGyo*R*#nIe|>)l$riG zeWH`nbnIoxOYcmli!sX z%5?SQG$5Wkl%BwcVs$86(pb=(w+?SSZ3XO2x-Jar(-O)=NA@1M^>LRb_r5Q!e?hm4 zegji8x&rr4{nK&~?8?G_S&@oYa{_J5`v`qE^=zeSR=1CqbqvQjE2{O$;8TGTqjh)pG*Be*UzdcW^PtAjDn*H3Z)VI5E{Au3I9Oyd=9A;a5C~-W3 zJ9T_wO_3@}#O5VZsEa0|mp^#zMEG!K;p@t)i8fx@wP7SU*zNdvW%C@-pH~8u68;{? zDBONu(J4(BP)&XB-}-(5K%kA6%4>lp+Vm_%V0~EjS90V`HhF`ooaD_Wygj($IM3Zx zGa?GhuRCS#ik*w

    ^Yg1MhCdU+4`L7mPvCrmt2*W$cEPh|YwbWXj-2sqMPR|E8z@ zx}3gHaR>en=?;P9$#Z3f6uGWzKa*Mpi3PtUwOooDJ{StL@ec8dp#%gzBfcjh_mlzd z2EGnL6N6DeXk^J*cpPkelM#OE#H>Uwg(LK3-z!TCoKmc~z*z;e+@$mshGb1RC z=$;@FA?D!w?t*&#d}%256hLBO@(`WbdyYd2Lrz$R&{IigbVP-Hl}@Tlx26C5tC88fm+g25 zSE5W*#(z-cMpWAE?TAnlUk(S>uk*mi(!{hO|IWn*i;JJZEP6CLbI<-5vh^S8^^*>` zu2u3wosx}HWKgkZ0_3ws#V1!wwHD08CfXNEZ&OALog606Zkz4>oDw2gQ%}vOK4(o~ zZ#FL!7++POE~=8DwjXcuYO&W}5&Qp}M!Di5slFk-7s2$TUyFS`CnRo}hZVZCu&cP1 znNv2myo_F-?MSTC*XF9sz9xEmH3#@AE=CL9A`Ig8dwonMNm0VFOz5k|74#kvW;G@e zDjgD|KjZ~#egMiLr*R%rWbjm=-1=({dOtIL5uG(pLvTLN+JY;J9ReUQt|4t`#SDb? zA87-rn!mOGb*u5ouE+%72!4PFp*rx`{O2dM?}1*=|BmL3(xW}mHH^DVVd43RefYd? zjo1xa#j)5X7BkdM0i$SvS9Iv=W9Y4uvC08+8yZjJ@hW=y3{AIJ#lWMva$9v(8)zJi z+Bvr;>aAlYoc5SFUOTq*xB6>pN~i|=`9+7MpO{#MWcKfh=;P@A@~OnIVb2WI8tq6e#rMd z60;3KotHi2ws8hBmIpK*x>w5!P}MD`)YB8zs>u%%iYp)RUn$o9Pj18{|E*$pK=%)CC*=O73N9#&V&hGU(A_R!ni z@@Ir9s|arZq#D=IkfDIf8rWw;7#FTVXIw?E1zXRQ}VQ9u_b-TZCIK@ zQfGV1ZwIVhRG#2sIq}1!K8$AgX|57<%Q626$I)5_U4gu-dQMlzX2p~%z8%fy$J*w9 zU&MtC!-c9Df)t+I-?PiKUpWVI2pK*LGJjEiVAuPO{GLmGjc7Ft*!ff~_HqE)%HlPu z!#qOfvqTp&tq6JKZuoj*Zst1`rK-vf|XdLdo_pmQN_pxu5d zJIFBC?!rQ~x&o8I$7Q8JR%+)z#(yE-!#?)AUEkHdU*dg- zZbBK=1a1#}wP`C8>6QTJXDlP>4lI~EzD!qc!S#8I8HhRZSU~2R_#^I=y2#MgN7J}F zTnN{_FW0DHl};=F4Q%P*&L3)u`oM=%EF@!4`-kYA^u#g_#{{QzKoI598#3R$=_8kq z;d0L`1J|iM9g2tse4fNC#N8fHq}jVJ{ph-grHqc1WA9PmDvbCejPc z)f#mOTvhTx)U(k*kvVl(PTiT0=u)KjO;`Nu1q`}yLZ{eH|Bd>iycps4YMnk>vQTDP z03_sjM^#9j^qHh=YwFXGtMmmRdKfeG#$e8Gq+t~Uda{Mr z7Wgz0Y2<^lh_wfF0cKD*+q5nQM>C-mGT_sxjZ*$%GX8g~=0osOZ{x2ABsoC#iBp<> zR&+YAKpOTn^~kCJ#*g3`vhEbX@N>f;BY{LJ#~-9faMP_#EUb-m2jHs?iE$wjGgR2$&*I1DQ3-HyB94>q&cGUE<1)G>KdQ)p0VuIg`5y|n zF_uc8mt#qzV+OSO2PU7&4<6LFh`&Jfs1@!Bp#_FDf2WgMRg?iE#IepNv?{w8R_IO7 z(N&_MBvCQRJU|s*FuPkKm24h`u-(XCZnxvg@W4BLx&zbAZ zT0qA&B%LMCHpRj#&9Fl_um>HXr8*k3@2+}w(2@?d!ke~VJqofc>b=j zoipW9zcN!<71mmY-Sz0r7VmeUy_v(nJ#8z=$kHI*#OXhh^< z8k1{0gK#*?YzR#B+7!Sf{VYZ6HDjI%1vVWzoS)R*@n%|TJ`}wk(C2&V+n!oA@$x5r zEAYjzO~{cpx!Dji|C25JHJcYlT*K%iux=Lia$_uyWtINmKC^ponOe?Q1|j)mVrYbcT#vswWv#rTV+%AguN z=`o|wX^!AjAU#7LwcwC`!U%ltz{X)I#7~7G%6ux`SUm6GEpWLcl}d&sR1(_eAPl`b zlm6Ymlz?TOP7{Ip%@`2NfOAk6bTQf=r;B&K zQakCQBe$U|{Z!Y<*_ZpxocL>pB@AV(W~Zb$B~R(71D0Z_iqmBj!2-Zm0X39!D6Nb! z42%0&@EF#tcM8ftwerty>s@SoKKpK5EW>*+gHQf&)+K1<@Vei^*);Ew(gqxt%)edw zWV7GVS7I{%HdeM383?6Yv$;qgph^xw05BxT(8fq=xCwiB*o}A7F3RL_tbT7I2>#;$X6l3lP_x+oHGGw4| z*cWNz$8Ume55G&lR(0>kBfzWox2Dxj2Jrn1##UZ<06%8Okj-+a=hk1sAx&^dJTwmC zwqs3<1g|1YRxmzDK`7#wzOEBh6UuFcMPJH*p=7E_6ZfXi(J!H+q9V>qCxUycHl&z+ zbr80R>-S}B>}rXrbj<;~lF4O%9WvBIuasJj;BA-EJOc$*7zmoPmw*=cJ8=8SgrF*D zGS!&QLyw7;y@b37JFY%XxG-K#3FI&UTfY4IQmciouS3$jK?M(^O+)b}B7YXG^I+W4 zJItfaUbNw;S2&X*(&P6w+%SSGj46w?b_|FOXWq0!I;Ap4&1UASgr+tZCsCEQSKI*{ z69-0$c^2;Z=BhR(uZ$bOrKp74Vd6f$6X0vwUvkwM4xJJxWq1SYPYG1c1EPlA!wbPb z1sH^x3=@V(5MW`reAu;r@-*P*hHjis^o%;&lo*Y|{ec3KIdu~g^XDt`c>>pN~N@Ipz-D!&q%{8Tk9eSED`U`?Y>q?OUV!x_>i9isbL zc0+bbYD)ZAh~p>?!!}+JtC?cNnD(8W^>=0v7b&!ssD#YUQ9v#YHomE`I{vO#pEO0$ zL0>t6wnWUkzgx8at8b%sl*9}es7{DB-}obn{I(eCbEKzy;2X~6N`H4J-!bOwc)}wc zi>|j_q{spp=bU~mz0kp#!$c{78U;Ea3Df=d*oa`VpExMmuLr?F=113#t;|+~=5-_T zk#dr2HqHEC5Ia~(^C^nIgz{Nn@s3z4S|NScz2 zQK|5EjRn-Hte&b)@A$hsh(VzWK1jVuNtrqpN*^*gpHLbf#;VSt$&Ek2XG9$`=UE^* zSEZ$@STBrQ)S_tCVoNqwtUXhggiXODtLi;RfZcsY=k038CTjT%mj!p|O`SP|V5W#EF|EZMvpF4cBe`!0RF zQv4BE$*c6;YxumJ9BQAQ%AvzD=Ce6CI6aR-b)V`ED$pp9EM&O6AG|gB-mJGsS6up> z?BZDE%sdk>S?fHC4qXSrrGExj?R!?4&9w$R`@8aIokiUW3dm}Ia`iw$TC;oqobtU7 z^bIyWNI=tZ2s}3D1o46y?t@xA%S*?IteZwWI)=!whQ&`MXFE&jb*e4O;!rsTAEQ`# zv(ZEOKXPCM)IDLI6bwM`uUALhNv||jpt;I6d*366wWWmS2a1XTX~U~g(AD4ewsBgy zB2;G4-(MtW@fe1Rkm4yr(?ngi%hhowp{9a;-_-$AiTFy?4Pj=k-aCGb4fb=Sxvzb{ zO+;G})4^XA-25?V*SgXj3Qrw}l&WYt336to0@9O`+{V&s3@cTxu1&w=sm9TPei-D> zel3OmL5T{Fj_ZGLtr+)E;}-s^zd??>F3xqi$KAO6M$7%A~vZQ-04ojVuSWRFY&pwF;mbktK?1jyq?3~ z0JLFIfyn|GmHqq!YNHxU?#CA5^sk}7Q{8{-6A`Qu#$WnnE!yNK56Lz7! zVkCel*V#_Tzh)xK;N-h0U1zl7BtQdJ`}RA2<0L*!Kg?w&CgS46E0fN4CZ*S+bOs6G z#x-j1>_ub*lb7mU9RN_cR$pLai2$Bj0xdc#FcZI8Xzi1yj|J?}1owg75^Vtfz6!l7 znt!m4Pe_s{nJ)l)s(NNvmcJ2c8z#}Hq~J6;sNTl4+5&N8#RmR6^gx8(2lRi?;e>^; z{q695*A>|7L~Cf_F(}KpL{NAWYI>oBt(IAy<5(E!lsEm4(Ms6y7#y}a*2AC1V2Oqe zQAlB;%&Bp^=qZY{vjdHLPFSQCfCK(4Ie%8KV7l!MNaP5q+Ja{IX9tcbgBqqh(&eIj z{!7bI*rdw^a%iRh=x<>1x|}}xY;}&|SbCM>}57PNY#@8}13-7uJ?z^cN{i z>K0d)3i-h#X|0^ad>}{zpW^irl1M4nl{$j1r^U9=7BCNGKyx072g4R&Uuut=GHmQC$XWEly<2SLj zY`32?2<|;+r3m@l`8blzA3vK@?(-FE^aYE9ih85a+vY=jsM$ZyNMHEh)x1SBZ7|FG zcQ|kvb0>{W(ANU#j(T;77kOdS1k?&mTvqVtr7(FLj0+lV6 zLVj-_W=o2E+PxEbf|v#Ym^*Cw(%zZ!6(;WZ5I;tDuTiJ`Ve5}){f>^Z+>7}faH#*X zSV2m4>0CJEpP^wV1vfrb7UUn@kRDw?(w=1nIzbyoEv_*uL8x=u;bQ62eoi)y4LFxbgVCM(VytNBGRJWkM@l9 z>VNfFpR~&pQIPV>e2vUf4XV)2dJ+{>T-I;O*X`Hy(KUA!kdNRY+TA2mlF2>|>tIf` z*O5`(pU8cYW8?j6A;SBLspH&53`5Lgxs=MF`c4Rg6E=3k<6>(AYfJm4OMi^UoMuZ3 zvricEjG(_Mr!lAF=tD?zQvT7>AJt)+<`*@Q#ND?Wb0b z&`LA?7G{dp!thO~-~;CQQ1b^YL4Vwn|H5f2Mmb|$p6W8i$B)zcozuHTrS7kLJvW0H z0Ry!o6*RUeVjb5HTp3&~B=>h;*R>6ja7%dE!Sg8%JZx3A13Yg)?ITZ40k0hXplv)* zSZLd>(w!8Smw*0y;CsF_=&zGfZYhN?p|p@Oez9vT%_y`h(&jtvM84{&c@ffZ$npSu zG+)K5Vc@zTbfQzJf^ObKOtRs46k;$U*|!IiwDq0_xOunUaQr%}baTu|5>HDK@ALMW zNt|!%IMUepA@WygK`+97iAPi<3BXA;_NBV?*2WojO^?s4X-Qk8=t6R+osHoO}Q=+<;}UVwz~r}I{wxvBY%qX zEtNJ`{pEBT#~`A07&iPXhlPmFlMw09HJ<9X)1EC^; z6uDzk@gt0F3|(JUPasdajD?-zKJe)k$!ep>UowquLe5~L;F{L)&V_Ekg-EPQPuQamIjV|(?R8`;`nFJ1mM7x8dDt+WvNcmJPzsa*?#n;hAU*L zK*k7jH3vI0he?WAIR$lx>~blfFRh+5subE+MM*c2+s1>WErdPjaIU#C6~NTV0oD3l z(O2SoZ5k!`|2V%{wAex8zMO(NlgEz|*MpO#_XAe!+hogMCqI;!SJ|m0pL;z8*=y#2 zC`fIX_-)3vdKCqrU8j^vbXQgL{_%)y_xv98$1#B4M@80@x3ppI8(CbNi}kE&x+?)b z3`(32XrBwNXAcSd800%eE7P`=x3DF>jEn8g3bcO4c>(r+=-}YA%~TxV=bYN%r1n{` zn-MsMKdDZN;IVzAC>3h7BH6KoFTuD8IMGU# z`}&l+?Bs(~Vvkd}4Hxt|fYm1452DEDb6U5cq|kWOfg=bwlt@>m!^A^{S6!#xK2d(s z#lssi|LI9OT!>IJMDrF;jpVBos3aXZ4!)6zBiitF&8XX~m-NB@fnj1h^ROu+9AdM0gz1WEcR|3f`aE1>4e|AYUSRTk| zqDZyTG!&^su!zGP;Mb@C*qGgky0;7C;hSszEEsr>S${lfw4}M?$#Bx}uHUD3Z10Y~ z?(jYX+OdU~tljvv)pP5~uiK$xHpCCcs@!HIcH+vRD5&!Nm2`vmm`V@MGWHO|D45O_ zUdEBeqc`Z_lT4%*cqKkKtKJok`eA~6rTRRM@Zr`X@D}Ej$!zxtCTsoO+}C})LLz!n zNdP*3I=$;pX9r`4bH^v!kFo(^CJ$Kl0>JKD=2_e+iJ}gqQA8PaphZDIXlYaPD7a}A z!W~ULp$G~d65-n6_QF;p&FpE&9ekZw?yc0}{V#P!tbz!R zkbQournf(Sqj(11?AkIkwjWjAZYB0v7>1d+F@HL3{L1OZWBfMmsJVMDh-lC`aO8>} z$4O}P*2LMNnWK_^*e*{M+=O}ZyQ6AP?lT0yZf$zk9*#HX&KosvTLX>_Anqw1^d$rcMv;XP(M!Z%G zky>X0DH3tJ{XjuNdXhr8aw3TLT}S}T*{5>-Wnhdi!<5$z9hC{G*uFPhxdf5x(O@K$ zxjn9;;32>tlkc3QYiqw9G_kv!X25@@6i|u)pviA^*rll=9w-%3O3FhfR!<0v($@?d#}ai*T$UJZVILTey4pJv$HuNPzIpOWD6-_S**BTaqsF^6oE`j%p@64v z9*D%BF!&#uu`!2UvHnvdHK@{A=Y~Bni@qJ5V3G5fdYQpBPGb`~MaX}^_KoIwr97aR zNWA{Xjo9Pz%OHX4&&}RCz=P7;&@4{kIcF zuuEb^IaMe}rZN{M$Cc&x{AUjGZe4H=z56nQBKX(DNI0T44R{!Oxg9m3*FJU(D6TI? zkeT9OtsRn=BTPjmXOx|TV@KE#?b?nLMvAwiF*=z!jh zV9TSWt$TMx+mlfl^hB<#S_*%xvSN%n#%A_d+ebGCGH$P4t1>BvFa^?KS5>^)+MH{< z`$e?`bO3&Aes&Va`2b$?2+yd3shqc+Kjx@=xBh;T{WXy3Ml)7gKuL&js?&dcywE>2 znsoe9*Rj!I*@)Oz@1Z1yIem~o(vOYfP&Cadl=qTJk`V}-!T+g@RLO=|w^=Afc5 z#)EG0&SZjn3o*BM!6j4G`T(~;Wv&_Y{@S}wOCkOPQrZ`bGOTF9GF9ws!#z-BS#-N* z)cEw{*}Y-)msYo{xIUV@{wKF$u24Z^RULAlv22?aoY-j<;Sd2*#!iUBCrII)3N$A8 z!B-jbN{vvU4Wa?+u(JBp>&WvUeNL2_f(tD8(qir)>h!=KukMx?dmp=Zr{;YyaULm{ z)^)dP!mHE&5eqC2oM>(wpft^e4GZx|IVQlR@rZ-azm8FOTq!CE5yuRYGhn6;f^8X| zSLvE7Le_QGe^Hzoo1!d9<(kG}BBcoB#3re)OxM*CW2wyQ>C<4?Dlk2i^~8gp;XyO* z{ba$`KLYbn0rc1hv^+zb7St#=4V7_Kw#EWzsomh4+A?O2b6AMPqjeSo z<$yMyP%pk=N~Z4b={~$H0Vad&hZ57JJUtKBt{Ifn^-EJnQKqzaXiU|$DynG}z(%s( z9>T%rfDO-LM5A1;O(HnlLZ&Ik7|Yn~ra*VhL`r+nf*tHtOOz zWCq)EL?9(pWl!+rTKq<#h+TX4C7^;+hlDBz;?@v4q0LZ+!#;uC0Gvx`P>apAC}%!; z@h8=l*T7I8-Ahd%j-I>Xqdcv527V-H>k#5$yrWM55_qv&gvdxn))sYw)FV&?DEkyt{KvPfm*VU+44<~US zxRnxGE`6Z=wdn&SrsHju>!E9>4Quk+QOr>)9bP*_s!7%~1f+z)8c^gN(Vj3~zSjKxd)Vh{smayu=b7J=~tW5y8fuFf0dn==TXyr?C-b8syRqIR?3L*t8U2)B8KyAHG-%=GZuB| z71PZ-d3Z+X1Cb4$phn<9S@24}1a`&FqtiUQAJKk7-9!oc3dC%_4Wgts5{|245g86}rJ>om%NHV~sd|BgM9c zm0Fsk2l*p4srECt=Pcm(&@Sijs(%1a=GiL5E`a9Yp`#5r6EI_62XtlsxFG>au6dWY zV^dxEvL%ZtpWK!Lner8Jqo^l$9 zG#XfdVMCBNYc@>K`<-T&OEF0=l4(0^7^zZ*+gbtMAp_q2)Bn#zLe*GG`m^=;D@j^6(C0_J!OZFrx;4h9p4@+rn zeTR99wf5ZfI4U!x>F8S697Oc2GScuAJ<^}tV;Xl!zE@*&_1t<)ccbv&ndik-Pp4o^ za1u(=X6w9uHyR(tdxhnG$_SeXmGAg%C%o zYfIm)$Je=2Kq{>hgHPnx)54ZJ% z4&@~8dw6et{Ok*`&Dmk(n==R!eX!5?#*Z5uH3OcDd2#ubz6!*`rz>;a-ihr*{iy}{ zlNQ_tk@PeZey~`<_!^PAg-;ElOahH&B2n5Gw4{^zUtlq&t-YfEfb-g~vy@00FR$~C z>$3+@9X+n24ky9>7-Z}f_%^cQbekS@bG+8BH;U5TZgkjvSq`O60qTbqpC65_0bG<@ zU!{-V-sc4X&rnKiJ-k?vOKYm;W>iG#VT(c zIH|7>_4?}jou>1m>~-Wa4s3#~srjw>);@N87js=uw{Q@iqyM7wQW@H1rqrE9b*Zv9J)t@zwkq;l--4Q^tOEBZTO$X~e zE(c?2fw?l926I$-tIrBKpY!yh%Bke_{>WcRZwIg44@%LNI-g=lk3d&hc2#KxwFxR- z-$^VJd=3ixMwv&+4%sLwX{{by0x(08;BWecdJX?>B9figi0mk=jM@{NPu+n#lB! zUPNFlkbfF{&p>^bqjBK=Gi}xF>kb)XE!))J0mBoLWtQWsIY-`Qn;NOSr^Hwx2RT>h z^)&!(T>LKFA2#;@u1U5hwhP`mbU$e|s#56Hr)&6z;s>+r*i6{!z@2Wo{MK>(76}^- zU|UsbS7Tpt_Ap&8(7m4}f`j95I+5Ue|Eqt`14bt|Pi+n_X?}mpMD8g7eHm&Of2^xY zp)XYa@z!_q&3i!?I|Hvb6GgO&g7-BNUp70I-JW_88d12rhTasifh!DFAuLZA#=DR= zMXTtK_u%K7oeg@ct?pd^6{*-OX+B+hCV6yQ1&=w&BgxMb3w%<*%eAdMXs2HX|b-xvRnqOpoLT5{j)lO7h$b*SoeiO^jbOnfP7umCo z%yMQjujfk9qX!1@P|1$Ag($<*b}##e1T`=vJaENExj@-I%G_#IlAB%=xs}YGUf%qZ05n!w98p zh6B?O`U!N3tsC@W$73YVq8OC5dEkmuT!ox4WWDL!}v_6y?tCRbKn9 zu+Z*PkEhjNO>HXKOx~9Al>qrw@?F1=(9L@`@L8edP}BzK7BvHh2i6LVk51istT~L2E23H6cIW zov`~he%_Q|a9beRX^oc0xCH9^z2}~sM6MbqOKqzQ_Q}pleawIMU?|UJLLAcf8|flD zsa_)g#evLC`KY>%0sboy2&{k!=KQY?j`y#aO(4>#8L&NBg*17O_RnR1ZrIUJ!Mp*u zu+N2X>h?9iJVRXIo{Kr>q`h};3Y-AmTnG=aJ}{R{9QFi>6bu6qM{2pz2W^-Fp(oQG z599Z76uUwpp=oLm}vU=FPY1K$GWUT2G<9M6G5nY&nBb66UGud~1x(~#Y743&z}R z*8~90bXuA{rhJnK9pP&eR;A+5|L3UkV0fyW=aof$s>{C*9{q23%~Nk?;-7xAX!|`F znBztZo!g+-6prdzB9r?UAL~Tuv-?tzG)`P#$5N8T%PBSx72{0l#2DjWDU$*dcyuhG zGel>qgAm|87M==Dkq()5%0;u%Uup%Q0zJQefOg4Hg!~y*2Eh>5zspr5V(u2H>op~= zPQ&&#sFNe0jP*Lhu z>9+HTW0DFX#{14-Q{&D#f0@N_WEeW80?mZ5apD~ratk!+^q+}f!T`*Jc_p?MAAbJw z*~klG-~WoULk522BLHK0g9648rAc5m9gjv+Ao##mzm4!b%R(ThlE#B{=%$}>j`)_yatskCsa*RRcH z0{5@K$lh*e9$Wl<1K(DwYqb82c%F)WM&ZD5e=t6S`w)i4Au4~f=<0c!TS6c^pouCB zH3*#~q#0y(d^CoqDoGZiOwC_{)uV^3#WDX2@AyOC+F&uS$S??%W@wptHCu^ksZPIP zjlkVr{(0>u@>ozC=D2epL4TnM$)fxcem5iWR5(A=?orEjyMc3`hPm2{YI{tUsh)#EOy(>C_ZJ4rE{lal<{2eRDfS53K_4y8I(9a00h4 zxyBlY83fsZ_X;jvvlfM-o(zfGkCy+{e&@vG&A|oX*oE~mguS#-?EQPew=u15-(Ox+ z+nTWO2?>`4-O$G`A7%J6$K)QUTY;R4{5ZRXK*X>j%GDQzSxo15Pm>7-l9e6-&I_*h zmMN0cUU;?#(jdUdvyL8`k~E4GX^rInBkC=nqWZqD;h!QPQlcQzASIF#Qo<-mOH0R) zQqrA62+{~h$IvL<4MTT#N_Th7-209H?|s+1Si@r0I``bmx##Tj>}T)uY;YUr4%zmQ z+ON$FKQb_9Kra)krnugdD9~|hxLwQ{BH(&4;a=)~ zzGa85w<64R`jYGDXIHs#t)6Q_^YyIGzLbDi|K(=jBz~8{Z;jHHi-W(aB~3@N_2?+O z30Q)?Vs*t7gFtoha*t`Owmx<*jqIv^DMSaUJ6NjZe?bk4tsU)Y0q(4Ju~4Tsk@%T~ zII-Q?Lq6hqvY$}ZQ^K6_7^u~xvSoUdbBlIy_ui~~fgt7RjCzj^wP~$gG*w%}y^UwD zsHgMTT>;G=T>DAryequqY|ae6>VAPKKkX9c2QWMm96UK%@ zJ&)Vq2YwR-<6fZW8;koh7+--}k5V}$jo!)jOYuKN%~wKaqbQW!_lpKe$gJ`g8YMIf z&wURO97KT1F;D%K%HQLlFc?tR%sMRaTPb#0UgsL1R(;81ywKB@3UXWz+6eyF6XbxT zMBbX62~kq*vbp1I*)Bq+@>*kCJ| z6+k14w54X!^yRWE*UO7U4%lOtM0pNxE#?f+t-YAxhY~asc4b9aB5-6 zI(p`4n?=Lt=v1RRvQ$9G?W*PWPG@71M`3Jv(|dTIo%1~^hWA_V^4NnnV<6=A;`t`e zXPL9Ue42q5Hz;b*g%`zS!8Lr!&3r#1?&C1>6TGo?bD)B0E^OoOg*B)QiIu{=&O*N7 zpd`p7-!N!Q!WJ1A6Mra2Laq>deC@|CfJppxx0bWg)a_%m)=O_Ui1#a&#$;AX@l8WG zc&TCGPgVOWX<~y=O?kpNl2t4W@0WXkrhVYWabmAVbjvRP#5v*Rmr2+dAT~3u^Kwp1 zy&NRzp&@u?PgA}spefTkZU3&{VfG9L8|w{SkJ=w-&@Bgdi){N}4})FXG!%CJB6UJp zZIb7>g22gKb3ugbK_c=T-(=^!bq03fPK!akjmr<)m2|s~I4Suou;oehshZ<>kXh8b z_~p^yIvjhPSpguzUe!9f&^qFcaTZD62(ZUOJnuf`hPx$xZNcuBOeRQBfNyqgU#6BU zSB_nuF%&!9vB_;Q?s7q_Xn9OAHU2XU?wwF*4V2$fRpRb!VmM_8hz#RuaaesKJMGx? z-+(k+mMOgB)CR7GDjofihw4cQN%i{jAt8!db{6%ZkTtnUT&;v}s0Y(8iXIPLND^1S zF3UZd^6F6OK>q~WLC)z%R=_nx)3QT3piRFbxF|3i+Hf!-QPc4b%$fL58^bxZp6N5w z;3q1F)2f7pGJng|s!7s#_bMWfQsaBsx7+%G-ZpGqV_bV z_%(s@WB~_TipeFbYY`HS&vR91&l0mn9;nBC1f^x~;1HR}Q;cOP>GESl@=j6cmoRDs=B?4zoNiEh`{*>iLmW_DvcB zFP@@B?i$0(!MApXbyFV2><{{WzlmFRezEd+#aU%Taga#8tK=_83~kN*{l)->R*epH z-$oytPYAN3{L+H4?nJq9YT)$Yw|a4b&~ud+kybC7@Wo?l9X2$4|Lf4ZE9oS9Gbo&~ z@2AN-t9xld+9R`)6X=)csx$>-NeBFyGIg#%##udUmehb=xooV6ocp9D(^f|eyP~DL zZi5UO%f7F(nLE+g)I>tE=F}U^(uL~98#Q1fRT#szg-;6pJT2mj8*+BU&VkNv^hA@rQ2`Pv*Fk%aqF=8bWC=R1e!#`1UdwqtikA1uJ5hkUnZLkevHl~-_BvXwT(gn1 zTh!>5Y#5rK=1tzcjwy>SFtwv>frtI9|M-2i<(#YyVv}HZfdW_N@dmuA?tb$37zDfS z*%I9`T17Kpy*DVHbi=mFg&v))McQZ0zZ?lDiKlr=Bfbvt5kpk~@*U3FC9jm!nR~Cz zfdAh6tfS@Kdnn&M$e3*|cD6bop2UvSxVH380NDgSQ(Z@`=VGQBBuZ^3pwIG>3BUJd zTaLIPXl!Qtb!Yc@FEFr@qO`d$J(F0x01%J=>xT2SNXYo^L_F%})!}@h<2e3}eR4kun$$*@=r1YU7z+dfd$y|neFY2An1So$aOIQSn)cW(}4GNhS+tB zN$#r`=hp5W`>229x*ZWJ7N+dZKy$xV_m1g6(p^XU;>q!kjxm>(qv5GaDb9MFyK}UA ze!Q-z_Wp;i<7TzPJd2q$`}-ekZMsNQFwxl%|MF`HB|X8u%lBx)3-NZFkMEeqFX7g} z_BiPw9Qj(YJ8?C8g{bG(?6|u5*)}@RUxj!xi(1v*JKmU>qD$`SCZKt%8{`wP?S1hh z2tN}MK&WvQdpDAg3dquBRIboP1w4pMFPIv&DS^pbzLE#$m9}O#uM(mFxy(|hJGpp{ znp294Kc&=W>FgNkG_?C2K-|~<8=4TSXj<&&yJw|E05llL|62U)gZWfrh`4*~6*L}M zKLTkbXQE|H3j~M^ksHy2Gw9#Pp=b(SYprFB$m|r#yOP!VA1o`opb<~`-0v4zZbGBWbRg&A>;0_*n$=>hHrhJBE`ESd@UE8JNpN-qF5u_0GG~ng5-8Bh&Pa9J2j}nErwpXS$ z*hFQ{JiwMuYrU4co+kHw$#Gs;W}D!wLt;y$|<+zs2?0~D^s8N z)j;p8ojV_$*WE4v&jD%mohHL+$RDr07AIkHt|=?^eZ1ORCB3TZ_&D|%F(b#=fU@KF zjB}i*;)1YjX}8qGI99HLQr)|LI8Fwn%$N#YT*lQcQOLVsu)AGGPXNK&tUv#-Vmru>xKAIacuJ_EJ-F({~8MpdIw0*)} zL6@2jhj5Jro5ZXpz5ZZe{2>^x-#2Hfq(XhX+Y^c^xQ8i>EY|agG`d#D)OcK{9+i}o z6revxNq;;EDBkmymensByz84_yQ=-Kyn|pD=JaEq3)Fuj^NWrON)o@Kcrq!eZ(DmR zgo`(8bauS%=W?Hdd|%%i8+#!5;CU@;Ndvcaol_br0|Cb@ptOL9PGqScr`gJ#B-G#B z2roEoqz}IYn!n^x6fPER!j;DR#BnB!5dE?TJ^FyVT*_&CQHMdg%% zQe($hzyy{rFCew8zx(PsayvHz<7{x8@fN;7iT zVWv~oVSMn1O(U269ZZVKy$X};Xx)K(-jCM^c{6aV_1{3?RYBu=q=;x5x@2%4AVME}yd=ndTmx=JVt`rf8G|&e6s_3)v9%3c5MR7>PP`CWE}c|Iy;QJmEt-42wJH-KC523Kq%T zYIg$R2&l)v^7Bb<4|K^i!lC6F4UDs#ModrczhhD~#)?5g^F8n+v*`|`MPp}rsB5{% zAG2l=y`LfnN}jS~L_cWaBZZILJfHL=FD^N6)D}qwSbi6AdKx2~cR>}qPj&2$)}t2l zI4ONE;N71-SjBUdz*or&%5kD4+tvbTHV&YuGmU&H;4b^_E#B@jML2D#gy6pLa?OV< zxVzm!v5j*TBx&h@q=3d+$XGe0l~O7wU(&s zs!G)A)8Xp;JueV@*&bq7G)9}~7D@XP=L%9pl&`l;exv9KENb0LHEmWw(jU42nA>h2 zrVkd2FbAm;6yBkfsq?|KB-muK#-{oGao!437EJ%xYZ*HkeCO^q-fir&&VM-7ht{NU zv2~st^ND2bKZ~wMiuU^Cv|>r6EKtsn6i@3RfCNXBycHO(p*^Q|Pw0cvJNEhEZS)Sj zg-{y-=c-#`-$0)uxZ6p|4dIA%df1*#uuhGQf@|}P9^TZJlxjEK_cvPDBT$(wEt5mG zoQ0*M9H;q4(ZnMM+xvAa9~K^1=S*Z0o~!iLQ~MySDx7pw?F7Jnu1@dHWFVkkW+jDO zmNx|#h(MkQaG}Cc>m;jG|gGuGTxzj1HNhX%*sqeTv#nuiBLpUXf zrwm~G9L>BUJ8gs~Y8S}}FL{p~)T*(*N^@Q&14@wx*t|h*cl^G&R*}iV``GQbL3Q}f z0mVLRReJa*!vzo>OMmKt_8a0#Cgz|=RrE;tuA1x5jlgO`{nYz?2eP226zGz$zE~{X z$Ch?+Uz-Umm@bahW1QC;-jMfg?j40zF7#fKUeWABkkA{@gRsZ76IiE4gZZoSBT3I8 z^p}R-27A53(|balgTWUQUB?Su&wZ5$>?w6SRe$zctoKk;Q;R>8oNKW=edkcEHMTH? z@TqueYCgc*mdWWnFWp*4teDl{RzCV;Vd|?qm55y{3B>O8jPp$>;-t?nc0w|1@Wv|X zHAdmWipF(x5tfVACmrXT4*{PjZd&W4CuIt@wVg@DFv(xP3jdzL#zgxE&mM=}O%Gf0 zA)$6w59bkgxZ(UtaLGw7+gSWV{Oa{mpOtAOTC-MpYXNucsr8*>2zLGaPuD~&YX%3q zF6h|PR!adl-BCK)$3QQg&>B1C&hO&kOq>YUSwkCqMdA}kI^WfQsO#qgdgNykedSmg zAEY0zeCq8dh5PRPvOm|zAUICM0u@MJcgJa2DVX-Cbe$JXjKXH&N#bvVG+}X3f7IpF z6{ofa`fOLh&x)Q6AYxd*{$}{PWuhf#*`}2607@~JqEr*t@|V3{uL0Eau13+Kd_9Gu zwvl7!)gY?_uz&dmxmUdFa z&vYBbSZ&QjdE5IQ5VAC*Z>wfiksKBo4d)RnSQ1KSpj+IN(qF_?Dhwi<5% zg9@N7E+)-HhP<}KJQj5R9x3)xQ`TD64xX-yc$q9pn}U6Dchu`N>chVMvW!UEO=H&c zzP&&5i>b&LS3MQ1SI_rLxs&~jYU0RwGb&UF4_1P{_tvc69C@AtlJ)bGJYOha3=oC!`Md@^z7!9he-b`bQWEa>%|ZC=%y_ zZVG8Z|1s8=Hs+3n6y|U$rGA6)ywnhwp3Gf6rN>>*=afNKzW31>>%AjQdxq^~l|64t zmhb}Pm~=64CBW>-%~QqG#TgKxW4-i z7o50%T)%XJ=u(VFnRVRZ1N470f6Pz#>B?kZ!%KY*SuGkxtg%vKkyBdgO)Lkn;Anoi z=lFg_Hd;mK`h(XZo{ZDs5(>+^kxfC*7hZ~hrLgt=@fV&XM53F9m#icWjOqt(E|%wL z6umr_@Bdnn%UtEec_aC{PeLi4+{b>kQ2+>& zmaH9F9Vy|ktMCyR>)|d7{C;wKiPY%P;C&Ilfw>r1>1-o$C^%HPElv|IuxK4OT)cMabjf*-cEDYKZFd4Q@fA!vfDmj(l9z6ZCRyRu8#>;SNEv z5dkoXDd!$-Euck+HMe%KE-L(-P(PY@8&V?&cE;A?ea_~IQYkBDXo0;Ea=0w3%}Ti% zfvmzR`YX1CFv2d)p49ghK~l0}&Z79|=qLSzEj5tX_0LoXB*MS1eC9QESmU%zC9jR_ zo zVPP%#E+oUXDg(RJt^mmZt6_oz;G%wu*NAEh;x3yIR>Tmc|_HdNW!dHc<9xFh1 zvW<}xwi+sWqw)y(DOUIWB|}Cs1eGE2Ox|Iv@K#*zqBm2V0J5qxw%;maiA@Tu$SUkA z*R3h)U39|V{q^0SJ7LAT`teAN&PDi{&2q@4yb(>$*vsq*640df>iLJrnbde=w?Oy?61@F zSx|Fd0xzMDy?*xX=IVw#7T&#Ckl6tV8AO58XE$sD^e0PMEysv&V<*<=e6Wn>p``waxsj#D>FgBpi$YRfgki_Q-3 zLRm{c!|v}8GWoDur%#^=YiZeheAS-Z7k=fqqJi4Z%1q0O&fF~7o@w{n8g4@=kdk!K#D=Pdjd zNSgwOhhbNw0a$j%$6y*2$yzVc5Y})HZ75Yd14<3v4d7 z1$HVyc4cPy_&(}##PTsn3K0I#tXh#+epwmS`iafdu3Od0raax0My+``PzMe(0wu)r zlCo;c5IRAq(|h?EYs7P~we{i=oe{(9Sl{P_nTerAzPkBopM?Dc7(^c{VMTqS#PrUT zQ9%Ye7;$t$+dgHlaS}r-h+#KBR}{6}-iXICw8Tgu%kAv^0$BAv{17sx4dHOE$D7X- z_eYqJ$giwn&k~0C^+_R%@Ju!TGXVz%X{33WsMpk23B`6I+o?WG@p3*Ip=qQlhPI6-`J_3xFbBVV%ftC<3wZOj zg2vpwIl9=^IaK*?v0|O`-6r(Tw5R^h0Yr%BoG!TZ)r;IRm_}dB)kt5DlhYkpem>_j zq|t6h0DH25LiA?}-=YALD1QcrN0rgrBXyEF<8rOjzGrhd(J>9wv{ za)XPBL-x7{qN#uvJim*rpe2)z;n*G@E7=8mZ5QNolEVS0AMD@~zT|DA+A3|Ou*={N zg|QO~j0VPY?8S72Vj$b-J_eLeBBRNGcCAo|n{0a~2QZ3NB6o&EaMb&qYh7hX^9j=r zqCa0hXg$PVf1TvoiWa_u>n`(#*R-8n2yE?7OPi zUMpa-3ognBJN>epjL7uJ!hi2DFEg4w*z|KkeVu&`BF;sGBa5!A(_5OL|KCbr%g`uV z>t;vY*GGVZ%Q;XobNo6!7F#2tESnk`_DV@wInpV><4s&9hhipdMr#(1m&Ko^30sAQ zlD=Jk9ce^(j&Lo@A3A8f7Trbr*FHkW$n%MsVx0;66q^${)~#OpNNLxWiL{9j=5%v8 zNgoY&`@UwZDfaEgS@6{`aDQm)z@DR4h(k#u+n5NUa2)&2X0GI$A^=K>AeDE~3ANHR z0D6Y!L++ER+$Zv!>P6!A(3Y>vexnEci~7}=+at1NziUY7u1Qe!^?MrCVpC6P{X+dE zVO&zxkUowZaJ!vJRmh$*Wi>q;8$z9~f5Qw*zS6c)C>9}*j68cW4prUl;CIkIrIj|+zW3c7$@k5R-LDS7T2nubO1djh zug;AySYJb;y*Tc%uynI+jeGjo8(@rSB0o*$+J8n)Mn@iU{mX{wd>MxvfFKdWnB3n6 zm#hU3Ak&Z_-;c!WKdmoH2)>I3f&+VEgp4w16-4tf?a-`tFbIs(>lLW#UOShX3;y5R zn<%AauS`8&1$t=0W7c02-*deI9%?F^lfwLfU<56Z@JBLo|2W!^2VU-i4y&Q?oBdU; zpf!c4n=nHlMxv>cMu5xVRAcFbf@1x=6>yPV@;&v0Q+>@~eoCWim6LL_L%=C7f`PJs z4I6k3v`!HsB|;QpRpfJ+^4cD(KU55eS@W~<{be!3I$9)<@oiq_g0cT|l;ty+NiM|s znValdDP=l0*3E+%2|Wj~Fx>g7*vXlew=S4+K7DjvJClF9CthY2LJ1^j8pyG$cCe{Q zWxRK#;Hxg(@{p6iHDz437qS{1)BrB=UwZ6ieQllGyd?WgG5zlb~&TO#0cXB-{V0hemk00f_t7Nv}7RGt9yI& zwQCX8KuwC8zUyK2Zn9OWf=efT z9>Dgm4tK|$6LR2s$cZZZbxAa@v%346K2jEYj&;;h3p-zE3wD2XTV>dB=hSy6H*qI7 zlUrY3@3i8Foh!Vws$da;dL64e3wZ%C7e2#}FKqj$))mSh5AH|2zj6J`f;RGI!w@9w zxNw8YLEkc{7%@-t#btYD%F5<+-Id~Zo>wc`@q=@kb$Tk-Cw0(3sE zaOuNexK|&;YW$}%EIR{+MP)p5>|tM-l>+!)RctF+UZzmMjDebZ${ml=4NDt#GGA&% zj7cUeLax!|3)IaLFIh?cvA{}L%?1(v2_vbuucMy^RNa}}l9|-{^kH6wd5EMQYypXE zCnxls#KYe#X#c{}Av^H+dsl{`H1ztzmmCuF*BWX~eLO`~;U6^d$b&8}S8OF;+$AWp z_j}6ivUB~v)`a)C_hFYaf|r^w2Yg12>T6MzvGK=Y_juxW9yjn4G)`{^J8u`h8FUKP zUH@vv9xfZ_erWjC{N?ye2YO}WgA@Qi()MO~7WU%a&nG_|r9s{+#F9*wneo4ei8_}` zg{&dVXOGPxM;f8(P%kjXS%sHJ>|@x+j-M^m05ekY-)+unJKT?1+Cf&b}QgC#az=I8`xkN8?FX8>dZ&QlAL%}pkIc1Wjyp7w%^qv2?>sm`2D!o{AFo z9$v8UeB}St0x0`o!l%82YY0QT`q90g+CkI6@96QjQsCyqb&Q|0_eeJ^2kT@v_}^eU zXUxKaQVR!rd5Q0BuQ<8mIXH3I|GlLX1iA?}A6#kip}Px7IoN=1&WdhcaW8HBrIH-K z1NZcnQxqhjj~?sXMil)NfYsIZel;9^B}_2F!-gy^{Ivh?!QRNRB5g~fze%cJiyc79 zK{TUAKKd*K#ZU3+0Fn3O26)SfyTEqVO|(roAwDgWidbYo-v?v&gQ-kRWO&Q-c4Du{PPl~ zFB06TEr}n=wEHih;iD6JJ51x{cp?*($&~~^nhN&C>^|=Wl$Rl{uB*?ccPeA?b7AFv z8N{N$+Bi-VHXCcvL4sC9dzrKl`;7%nCerYS{vE0d?6v9j)L}{dw>Dm=2BV}{8Lwz~ za8xA^5Nr{%uyv##Rj)8{3T@cA#@NScbb02{07k0Hrq_*h8UYTK1p=^)w`k>|pSg9; znv7S_gZ8S`&}f$@;cQ6Tf6Z^87Y2V^OVxiZ{Ve?G{%>V@+$;4Jcf47J4H!9eNef>- z6j#-jJ4K<@TfcS0d~Oe`pm5-OO^9BJwY7wCi$X=ufLb;tjc{~yA4OFZ{4@_pz*swKd)v`^S2*MWWhWMmY~+XJpV- z$!f@HM=E)o>gz7FBY=wIPnxs+Y@(XUJLdgy(;j1yMt81csoPui!q}JMSJNjS1Cd zhV+l$=zTPo+iDL-^?V`T{@=3b1XS&_whR!Fhl(O|2J_b zh-&yDB?DmC>#nUf^mkmXp?!@&{Hb9O$k+96B{otZOHr3UZ{M#Ge62|&0c!L@N$9qX zHlHuHJCKCyKHv-`qr;Y}Q$MitwU7Q1#Brm0!AKCGQT#C_r)ITcN3KRFpU~OCh<~p} z+4O{0^pyW+hdI5Bg2OW>={-5Urbo=!>g!5aOd`S5g1jrG?^sfEj zEnK$Dm^K7t7w8^x9ioQExYE@Qb;e(;7-DH-wpr*@XRG!8hD@y-YnSQlKyhQ6DwE0} zcqX(Ks7^Fvh8~qGxSzq_e-oZ)n{%0S9cf`1eC`U1XUl(`2LIi?O*rGfga&N zWZMBv_Hv+N>iBth1M)eqBJAsIIU}*m=)u;g90>K!0+%XDVV1 z*%kBJ>eVpR-L&(z@H)*NIKzxlB((>)OfPDp`8udHQxQ2hlSJF4$}avvYsff0<7)vJ ziS4sxnBjADC#>|tP%XkE_VXI@?WiW_GTGPoj0X0=2bL15#;#lAUuhYc0x*-IS&?BH zd%!^E7atM28MjTvHet%2TX(|y6_$@gpx^FR=T@oQDaQZ_`0$4i5cHCKEHC00A&sEM zH+dT}du&4$f4cA>Yze*g-v2U~>qt;UDjOH23y&$Y2)Q_l(sY}?Thad5RWlmR!}nO3 zPEc#MR$PaFHB$~@#3eU6Nk2=s>^hJR;tp6qCw~Y8od`cn`rHy`v%Hhrl04=Q+kt+i z_ax_jU(45nR#v%8;14^2)X-Mx2YDBi#+@Lv*qa@iCN(N&{sf^+|;T1n$+09*)mW0bPK2@klSl8DVtHK|Gvltq9x8AvytC{`KZhjc&a56$( z>B;d69R`bTp``5`MezQ-{N;?rb};fShnu?gWuZofCd}qNnqK8E_vH8vjv2iTWYgv( z_?flgT~%T}XuS&iOc-~TGya4ajlH5u6Pk<;(s5T|RhsSKBnJaJK;z;W-WcUD;1lPm z|EU~Iq%Ihelq-1H1+3RR-(LP->vGT>9cxf+{5cCdAwBv~t+eQO!+x)JRL_1zGa+6* zXD*|bF-{5a>x3^k(jiO3(eaGt?+$aMKk*omQM^A3?3SMd43P9Okbhg}f3M$l&Fq{ zA5QtFC#zMdlRi)X--rAlihxGMhMS9zQYPwGVobE8KFD zv;K8T3}{Rf1N;j?ONR(6MvNleCpL2BfXUnDtg7BSXA&U4hU_A?IzF>G{gG6{|M}l( z4>+gcFA^7&YZyLoqdRmV*)L_I{=+m4w|ZrjTN`@<(U#{&$H^e2NIOXJ5ae17 zCA?WHZCNYLfA&DbKhpfj4>|C2%$LzpaEgYw!hez*BSyq>kW*D}H~GHc;S=_&WkI+6 zhmK-m7t@gss#BRxNVQK0QLZnHF_Yp*IshY7AczA}+(*@S&BDABb`W?|l4y*&%o`@O zhEyYX?&7iI{MN2W+LVQ)QvjT1Wf_K6zy)C4x5C5A_CVyhYbs(LNdFoW3i`-@gARsXy3&`#8qX{J)^_)u}2!E83H-UGX*a2LI$K<@}nQ0zxDRqR8Ce zu}Nq0%aI&e_K>aiR?j>yH_$p|ygje5$e{J%NPl*Wp~~0c{l-j9lht;w^fRhexI1yT za61i4^KxVa?TFm)Wux|9MZOqltLCC__(@-a(h$@Arf&%&&phm62V@L%B65Z#v!liLHWT$b#0 znVs9vcv&xiUt=}YE<5;KN}mEHvfq8IGO=?m)d}0c-aQz;A>H!Lh|FDs-C0n*8MD_N z*MCT0iiu_TY_IUctG#v&PpZZ26keewg7M9LBX-#I z{Y%)yhXmQ|Ddo_a!3E{5cZkhoUc~8|?x|$GMB#}?1Wr7wHB6x#MWqw zouvG4=w2XJwGI&FV1-`d+fIPu-u4t{$^F$ZOHPP^NR2;icc>@2yy(p(mxnt$8h6vM zbq@8iW%1Kuf8FQ4i8z4u^Ai$*ZHsI$WSDg)V1o%nAuTpDs+=bwcBqly<66Q1+09j&Xw9ufHO@qKNT-YcbiiIUDLJfj|f zGZSy-6K`$?SG-S(RdVm9Kf#6^)#uJy1IYsuR}qkMj`PTo>1mbtyinFp@E$f^C17=QhcQN%oIbFnFnO}U=5amvhdHOOW`ZIq?o|G5p zyA}@&bi;{a`lW^8Tmla2;D0$@;MDanw^^!6&9{sw$3NZEB#rF~5eOQIydGOE;V$@b zb$mmrmJJk%(nwmj)XdnfNR{tKG_u}A*teY4QsjeF>f&C^PPl^~LVO90A zm82T|l%Z=v@srTpW}w~Ke~jy=kfpE%Od;QRf@Ho2;(&^Ko7fq4$=S!}BlX63!5z3^ zQ`u7Kj}Nhe*N(uJ%^s!Ep?C_=3Wkdq{Q`Y&no62kM-K!Rd-9_1G@__hp^^&}B}5d( z53U2n*Wr?&^zJX~qNI+qsAYGji>@E<&kJrzb0nl(CgqE!pW(9@y+-fQloEm#4uHC0{KwHSf@02LY2g;OizLTSar27 zLW^omw?GHY#TflIf4#^3xGkec4g0BI{(sqV>gwcMip^V`J}0z)O7iIriIC@Fyv!Eb zql4MuHV;U*vDikwL{*nvl20IoCKkQ&XO-RNqNb0!cSbmKZmnSPHOmI2pDX_gw?lBh zoe|Fo_jyS+CQo3oi1#}YnzTVKAkC;BsPcJZ^e)q9m49Bh3OjEwaMvWS1~;3lzWu2| z$9ICj!|AAn&w?4@f-p3sDr6moeSI^lV20+|tgOF-&Yr;|5O;54gwW3}fMPqUAJz?6 ziB__qiI|<=`ULw+96EU2dwFj%^uh{D3eg?h1*4dCK51!SX#HE+UjX_mxXuBP?QOJ6 z2?=pDZ^m=hwPd7kvac$5ml-vZKy8XJUb_zkd5n&*yEmCS7z*MN2h=y-PkQjZ-NZf# zvdT@Zqg}F~^HR}IHI`b3dchn|?tW*dR6_2vrxLxIGL+kv{FL|n z!BNbj<)0J*etLP`SSF2b3#!ixug`+DEgBrUqb$f(@HY&mC7(sd!ZA` zG%KEuK#qba&Zrz2iY6Ud!QQ$vN`u@d*f;GptnBeS?{S$HKNai7!`^w-xc7kOK_W2#^(2*j6I$REvLAexh2mcq+9Nmu6)4h^q|u1P_*vNW zpA`LB=yU`@vKI!uTGtQIL|1K1f;nohzlvG^I=6=D`0PBvv(;j2)j(q}FQGsvl) z$Wh-DN~*?3dIbkmkaPjrQecW@U^qJ)Vv|G=XiZST>uN#daVUh!=J zBhP_xvXzWjJsmi1%W$fSKl8}J(kABTNHsgDu>A9n_R#djx;yHbnA%6+jcd*3B3H=Q z^T$j?1q(XCHG5=DDQ;^AV;80FgVo##*^3#iU+2Q7ZIYkY9OdCYSa?c7O#jP*I7d`& zgB>XC*7E<1Zxb`@m4Q98_|PjeYROAC4Dt;>sOVC#CcNTDOeySQFTKgLEIf~K4dUT_ z*ndOX^^m1Z`X3Rc@?YV8vq|n3DSCEG-v27u+BYWmX{if23Ie2_m6-p;#lk=7efx5y zSBxwdhj7(uk=#Z;-O_zhf8a^Xp0hA&g>Mk5sPIe=lS!F5T3kxT*?`YGuI)K2j?X26 zL^lHdSmcti^mZc3Bf;%35u0R{_E%9t0YUMe!rVi@S>7#vXxvwI8)?UsncUj}MEn-P zJtM|Qa#u;)``sIU~butTc|}2t+P^I;}jwzSY-O-utA<0hsm%9z{Ta%`GsW z)BWQek`w}0FV>F}1^;m71Q5L6VG;oo^jx$WcGlqdg9t?r<fG`s{KIWXov1=?SKIhJd(@*D+n} zqBb6NZhk94Xy_?4uvd{^%>F51t$IowHSxLNqo{yj^Vh6()AMP`mdM6bFVj-|S65-q z@6XN_oECg_)Mh2EkuPnZ6c4SNOMatNE6j>Wz3-3&25kACcRN164v;=Bu$o-{KISr{ z8f}%fANiUpQ6@}6vy7iX>%fn(>yt00{~GHT4dFV5d6JH39HChZ=wx1trK=>_5PUFO z;JL$2?1YpZtBb>LDs6_-47R&B6HG4!Nx3+79En;nXu4p*K10yDJ;D~1A)1$U46891 z^rYdU43{Lj>uNN6YwYBE>yLtL@r-l}0w-u0!V{yjA2C&bWqLpMBmRbtEA-cyZy`at z+Y~ZW@mYAojV1TWpO!UFFNYJEHAONne>d$Laq$aF!1?LZiwr_e`EZhE8m_w;qy+^! z2qDw-TMiM9Telxzkac@|XyGy~P4S{FH|>~yFG^ObOZN&n%?lf1v{;>|$qzi-&Yi1H z$g3Lhnr{H~Ebg~1Eo_csCkE#`CI*wmiwehbI2S{{ofx@nF4o%8ajiL6A*L6Y&amYw zlw1s1f+cVw`!gOMkW*Q{RPb*M+jLD1FMH4(xm*UE)WZ@vS~i~LD?fJoPt-T=YPLG| z*lGI$L4Ccj+lDx^Qs=KE=K;`;2HCw*Xj%P16)~lHG9z@j%^+Bq|KCzrcl0q4W6xnv zsm;OVY~rFae;^?@PlGW#bPoO*@#1b?<0~CB+Q2#3f!368?@{mKx-{EfH>vLo=8 zxI4T8oP`b8^xwm7;5L_Wef^hZkje#3m=AEs))~=mIVV8rrFxGf0)F(-1%eT1`gvL4 ze_#;qj^=u5l!8#lDteJ4&@`Jhq*X!ix$VSlt&ZIDCzmP|fyszInknwb6F7>u2K#mq z&+i=au|loeZ>2)i9|%KQbUWVO+bFOPQcR8y+LCuJbtRy(_~iZO#VRbe`jItdE~)W? zHbf;PKR&kBnR2lQ_}b#KpM3b1yL%IBgJM3GNvx_ZvpM}iUUGKYWJ}jF`fDZ&aoX_G zQqKnZ_|_t@Xc%63brOISFH#-55R2v}wI>NZEHjFPy%w}5sUo6iqbT{#EQICI&>8YO z!i{i8H6MZ^*2(nYgGJSHQ8J?An-lOGcG*?JtN_oEjlRK>bjT1$=DqnqG54KSJL^G-$s;DMq8;vMk8(s$^7YW!RQ`~V z)WSR#U^GL%D#K5ArKBS4(PxK(Bc!`nH1_ic)%s2hAC*eQ>CYxG?96#(&r?d}bxK8r zhlahGi?z!IhbT7VtZH-E_d)uh(q_710i>TrS8{--kpi#kmGviz)4alo!8bZT&KWa$ zmAI#$A*1^+D<8`Az6mYifAZVwE%S8m37G4Y-4 zTuhDia(c_

    3{h+GX)Y>9MD+#{i^>@37j%ny%qJ()Ic#Aq5Q6KZ$YLTZSheIhT6o zHKsZ6&oI~KULY2csF{I3Tg&QVf$&W>UnAK2)`8fW;-P#W_buqvHgCj+39$8OdIgIc zEJbdU?OH7(wdc)Bo5!1v-QiBPjY~`ESx!##HD&DHr(x(MDxcf1-T8=_JRabjb@vnj z-dvm#dbc;;-Tjayv!sSE->*fK0sfF!rHc~Xj8T~K;7=c2MJ=sMAlABXrNV;sD_e1) z?*0|zf=yTRu~ye8M0+>(V%@#uJ22!MnugA4{gZ)P%)U=}l;)4s%9CTZJb*m^QNn@%B5oxw`-+si(OaZ3Y@Y~FI}t7SgF6fvy; zr4~wVz6ndoZ}D&7ubDDjzcsdhCsOwAm!r= zV=H#RF7L@J?VJI&SRe0VV?N(ZwIFE)z0;=~p&%_Y4pZD~4PoalD_>lZF2hM=mpF1i z^FG*PN_ zsS&A)^j<@+QbR`w9YXIUA<6m2&-ZuF+>e{ZQclYc3rtx&5hal`gD4PxjkqN$Z>D-Og{=i>{4-Y}a9u za%H5lzNroF=OFp5C?C`>#eXErjm`XFGHtC|9Uqqa<-vw_dF)mQ4GgFHcmPS#Zn=qv zj2mUoSuyeKH0%EOlUome8yfF*s%vOp z?ynavaeH*+YxJhIS4Hz(X3&pu`j5+JsqwdOH-PCC&z1zkGS`*0Y~bKoH@M6&)mGewqBWX?2i_Q zKuG$%XDp{Yu;e*pW&u>>lO8d6mz^xE-WT~#5vIS?MsU6z@H2gG%J0B)4j(94QvCC! zi#RVeXHp3?ru!U!qLRoLP6~Rd*}}fKGBs z9tnuS4(spsvPwThh*51RK--J4p(-YU?7UtH$IC}Z3d0)ecZKjdo;Zyg()t`0M}rG>89@-Bid)AJ6u-L${XS(k=N&uoL^(^tIO%5GXsn)G=io z?hQWvCh^see7Dc?4H)|W*iHKizm=hH8-A2BeuXM%%iyH|^mv;V6~Rf#c6DYNf>IISusf8;~{*ZT-_;Ylo-*+jK2$YNu;3Oi}Q z9eY&1S-2Wjb@LDYb`bIR*)I>Wh4R)l#>~lC5hE@8y35uxEZ+Mba}?TDWRKE?FtL&Fdp)k~w8TXS`_d`>(rF8w_gy%IyjS^pi{$ zUe>{Sd7PI;>McXl4(-1`+`44o8lxfnyI5C0bzJWLf4ydq(e+tgyTacWe;XfNx@3X} z3YLQ`w`8AuBPs2uI(?)n>{ram=GT@kEZZ<>61S!Qs%3Lx{oft>3!(7Q)WBm0Tv5V7 zQw6a2gY@^)eODnEd}&UgPoa!&8Sw%y+jW$qdCo!zuXYYhd76J#drz4#Ansa_P9dLgmNKIStaEYt0KO3INc6sM;SN7&j5Ug7OeQki}8Xs*Tb|XA-M#YPDKj^)pUb z>g>u3e30-xH%i(y#A}Pod`pored(6~so_!_=Q;_JrLuVh>woIM4U1X_g9T)SuQ%xB z8zR5`oK3d*{=4}vr_%6VfV<&LwfNAU2h&&eUvUpQ@_wS6??3zD8ie$-w>keL+T?CD z=d8`^9?gUGnQ(~b@F>{22;9M*JTYbKr>K47umVn8Lwv%P8B~e4Y}_kT^H}H6bRiZ> z99$))N68=Pg?eQC2C|r7BR;-(zw$ayqT{Gvv_$t2%C++htqB||XGDgdfuMZlr*N#}o#`dwMvL zPf%h|KPiK|F^J|#=S=2ah?8-Zr=`kH3|@ZHzb3Xm`N9g_W(N{L{TDOs zo*k~2P|A>KCOqWLXw)N{1`*JulygnV+Bl|e@Otn`BF(KfRN3fTh)2`?LRRT34bTlv zhl1(FYX#TGe61!n$aI~6FwI8`vfil~%5;NvKX@7jAqx+jr zB$i9gX<8g-y|iQ%)E=-1F_Bu^s}^?=At9qw_EIYl;e1EY$o{bv{pUAb2ihEn+fCeD zTQgL^n-_Kz+=`jRD@~_oQTVxi`kuPh-P|Qo z?J{^je&?}^S@*11M4ppKgwgA-*Pn1NPbi#FV<)v6^vRLsuASEQ-jh`JLG#MS*ZXw^x zAf11ikgb=ytB&phJLaBKWeCx%v%RX_vo|Ph29wh&&kQ5fR0w$gt5(C{!g%X>S8lXS z-zJl7kciW4H4k&(Vb1y5x5P|NJmMGv(SpdYMte@a)5qyL?!y3zf>0XCK1}o!q6c=~ zu$ea!xQ|4WZcX-v4em;fNap>deJAa9sr~v@mE+VYQQ(H4Y!GUKcAkkG3)}fELVrcT zU~J09BmC9o#>O$yC$L_92iDLVhnKo1r@d5$g}nb(v%D^kj7IEKgq~0T01$ozRKXyB z(=%qTE*?t<^}D&`ouPgJ zZs%|%@h_GnZ_Dwc0byam4e&1HKJ5;Kmwo=_5zB12Z(?UBkj7vADe>9cCDDF?kTHR3NAJqcmZsQ3M`sdwY?guDo2!q4PLr%7;rT_-Wf5Gq~sa~ zeB)+-v8x+q`U&TSxOxSrxa!W74bZ(eu6V1P{<47Z1tTNLZ2{99MtHPrawx(xnu4xV0O3uRWxdk#%jRHx=T(;WiaCDE* z?xl~`9r>tgPN*#^5`42Ptp;0oo@U?sh!;*dty)Ywgsr(fht^d7^T6rPe0k3YtM3&t zi)%uXW3lh`A1vh$VD!xQA_Ey*ojGTtw?Juz$|$W0=Bn_r^BE-+Z0jb7QNiu5{|6f7 zmx0&3==LI4S(IP6F_PqL|An~rkHx-J?q*%^wovtEQkppNZm$C41E|`Hl8l;D0*$1n z>WVhg5o?0ck-*X@grS-Tsg36$qbKO#?a53psy_5WaO@Nm#vDg%3{*#NP3ohL)vhSf z8Ef>b-FSBW18Wj8;wArs`Ve(mZdysN>kPpHIXuV+Y2UN8t4R9Kzh{nUAAQ3psNmxf z8#Gkg#k&c=N5Af_RY!rPZa%`Pg4)=dJf$NMW=kU3>EP;@Wb#Q7*r-~}2s+s|6w>s~ z>?~63g{mRt&T>3?nhDfwg-6NWneV+6x>KpYDM-~SIh-$J{JeNrqbk5j^JHG4FqyZM z=6d}`+O5;L7ogmPo|{)+1NJGo^mX>9WrMh!pf*AI;q>H50%wQyc* z1famDB(V%5VU?TW`@4wxDY17e12^ICNmcS+yu^!wbf?$_dn-o~rhU5iPq120;GL?M z{1o49v%+;rpc^YOuZV$6E7l2n{*5^SvZ2IYlUVhcUQv5i=}!`x>8j;v4^R$u1s@8X z_bQRTM7d4Tx7!DKh3GnwdMf1D$4U{p=!2c0AlX-_#^!`tU5DOX>xKUD(s6ZqlO7qr zKZ!yG6AC--E;f#zOGIhCSQqR+i_tog;KV_K9$AuKIa_s~9LbnEL@X>*ILr>r(%ljE zK`3m@+-lPhJ)*fr8~matjZ`Y$wHmb7TjbJ*^rJ%U^p7(wS~0H?RzTpRarb3 z?6Cy38UG2mevsauSw-roJWh+1Jm${mv_!U3FlTc8T>7Xr@D8ylV-}lfhx~=c5YOA@0p_S2?Qv$=xho-DA8{@ zPev<(u;qwz7ZmiohU-IC!oK@-Q$a)8tS1_GhTioU(Xu6JiO!if+$^IZjcz?n3P3wN zjWdn&1yJy5k+p-U6XDQ4M8-QCPl{+TuLBeJNzqIJJdJZbg!Z4d5JpnjdM|ob?ppvR zizAShI+E!2&)Bev9}5WkXZ9dD8AyKB6VlA7X!Vx)2N9Ehr|=>|NXwsJp!9Ur4{1eq zJ_XQL-mD7t!AAf6INLVXiabU&rN3sj$N2m{&kp^zXV_0jacF*RM3j2`Xx@FIU~J?V zT@XJ$(IGZ&Lfw7u;SlSbPxIcmn1wjWnC9~kjk%5d<9~If)PT*YDxre&#^>Wd4B}=r zMGc*4Js_=B$_S1u34}~4R7!D)_2Z{ZP|BA$mW?a#iZlYRF{t?_wdYVjZos`CGhb`V zp`cc)Z%e-0Mh3I{DA1T>Uv~LZKuVvF!aBiyPKiO%vnYyOu!kJ9Om$Mo?7z*`I*__j zcAh>h2%G!xeux5-pr-Il{fX+8>ZmK$LU%GBJ^4r(ckBvFdhvphJA|F_qy5+I!bh@W z`L~TD@5W;2#|nDY##BUkqV%aK$hC$bd!wb7#kY;=H4KEmc0#meLt=Z>7#qIpbVgtm zL%r#&kKTf|+m^v94hTt+M(K}J0`A6cC<|!Tz-~HJSNgP8xvS6M;(EZ!>$z5rA(smM zG^a-4AqdPXeKshj29kQe)+BwL$~OO9MA@r(hFvdPquMq3DHn%E&XT{E+tseKv-UgP zK)lUG&Bx5-^MTUpp1i*jL%Uw(a${T11G>{&ZaLN*J;Spn1QkD9W?7FbztczYezX#Q zE8%#q?JH*-jNJbfp^CxWn(jK3j|S#EMID$TkBkXy$5ifo4lorE1(cofe1rc@ZYJhaD;4@EB>akVpaS!a5ilM*ScJ~{6oz!F1PPpb~+^ico??Knfko98pF-om0_EX zw|QlJ3rI4B1-^5~h38VyryX3z3#ZZ)h~!C}3B6wiRza3jB1nnB?z>!si`<}m?c1(IZcjndx5%!86QVrT0 z3m!Y_q{H*rAty~PgLPWO@@8T-4)cc01#hhW3pQj(hr-n847TP|HKo}l{uD3DyIscY zp$2_R)ilJw+IdW!|8O$TB16pTX<~S0w2)f1&YqL-xsZIW-7foW+JPm^UJd(qFMQ}y zhz^Ac^Nn4dt6KQ$6|_kWNq4~t!`E%+z97C+GoR^z*QeGbS8iqsi+*Mzm1oZ-nxSQ4 zg8Gp_brfRjKV9%T`NMvQ>v1~5j`|`3{4>_;r}aQdB9_uchyOa?2k!sE*wxCV3#szI zeB!(rc*dq;W-^hZ06Me0`ibI({N4{m5UKdKR+IX%WWV=SOq%=KZEC%e;oFU{H9XrWpLfljYJI|db$?2y{}dl!k-+hK~x zTEBqx*_5I4#;R~pmxF5=D0!E5Wge%B))SQyO^4VzuKOiKi#gBzfboJ8`NUdNoLoR< z{B&em;iclT);TQ7OyN1~5=NXNO`G%fl|DOjIX3%|PMTcIoJ=H6AhbPrH;g69 zu*Lcek3;c@!)}4RGB}osk`otx8duob9s1?#_1HMr?kfJLR1)lT6=Y32hyh<>NAg5k z-N{1=dx;yCa^H$JNGQzh(*%YV_MzdSIr^{8st5iTGUOPBWIw=q417y?_BdCie9nV@QLOGHhd2amOlZZC4zQz(0&5GrSqf+Y^U%n z>J1K-FDJIuyNMUvYq?lNyOr>Q9gq4UHQs;5dh1P{qmP=hd5O2@(_@UA%;883)(Z-t)m=2 zb;hv<)qI|P3aZrH7}-a@s<`KppjTjj@Rsc!Us~NOu4Zx`&f<}`j;E&q!`C!z+;_cK z0WsALZq1bjs*j5y3$fznMb-^z&Y0U{?%2;Mo8mE`-JogaUPDe~LR>DgrUv^Q+h00A z^I{MmqWFPPl~=1^#@i*SqMv~kWM7%t;pwQaK;_07IbF0W`Jsb_XUZxr4iGf?&NUv} zgSZpG27RG|OAY=H$<9L|E==1m%JZb0Q!CoMfQ6-|!SAkxpk9`Df?3;SMCO&x5p#Xv zW#Wfzg)zdn?%vMyf41#lcA!YD;d=CrUwVZ`j?U{Sq7_G0j77rL)qE#7LIlt$Yl0yP#A{@6_W>D*Uw$Vq24VMPRK8nKsHTiV=_ZDut+#drQTH@w=*Mt-Q& zFn;5A;83HOy)&F5zviN$P%e4v28?xV*Z8LKM=0Z*DiK;mK`dXer4{i;IkNEubHwWQ zkj{j!)A(?Vy`c1Kpm+$ZlZvxb19xf*&YCKzD-<>8<-+gNkH4bqVWm1jOvd--MG&?- z$5r<1l_7+KvI37`8Ht7Ssk;0O$e~J@Wo*Mc-28O&qUlYEdHXJFVXh!v%8h#8h3@-* zJm2lF$t5Cw-2%}(E)!v+IsxzN_2%csHNV55M}iWDar*|b@kjNEOW6VURuu8fKQ#f) zXm0BPJzkvG6X^4xonJB{#6P*NbHP{`-V$_h#fXyg;@$bRY?2)G$5hA14>u>#x}j~@ zxN=P8y^*d7$4qdIw?{n6G(F`K;D0(`Ib%RP1x*2ke4o(-P!OWsc04K@_~A*~FVeSy zT}tO)MQl@r>;lPUe%82evkwVy?5S-b3i|ipOZUg!ugmrZ0cEp;PB`X+pa7f~rR={m zv3DRbi#MrCQ_~RkX=d3bW+Om6%|fj^$gme4a2>`ea|&Jr!bth>#IjpJC|?*b8Tp){ zl$4@;tu~JxIkW(}Km2pmlDb>n|NQi;@<3HtpMDRP(xeNkem^JiC03YZU5-JKLdv8A z>haGCU>`?dfQj)W$9<(Aohu)>uOn}($s(oXan6(|&0?9GN#}W6ZMTYtaZvdWr#opC zYp_cHgnpcV+eap+@-8Ly;UmLMs=xhzxh$VYOvI)gaiQjwg_%({yW$)46y`a+#0)BI z-bAf<%&QZYbXu-2;_oik;-}UgmJbT1pXnxo44m`XXOrUC^{#O31k~X=UX53D_ji`> zzj)Is+8rHCoqzH8jXy2@m5{rdR%C)C){Cg(v#^0k#T;hYH#T2A%#4?Kbo3v6T6y}? zkBphEvy?L+84EL2N~@&}f`?gZz{f@%bV#sMpe2pAlA{ zNZIu}zlW6+Ws^eLO9wjR!Oy zsfqF+DX!NYrsC_2iKXGcZ?%qlmSF0n-xS;bvJ3CC|WT!*`f8|QN)@~1{iF|=uES!y2o5V&|Ln7>47S;~IT36!e$*j=Sl zst;$hG(>$YalTl$7&bUvySQXk$cX5V`a@^;^N6&q&ORlcRiotZ8(RazHEk@O*8q6a z!ARUX;Bi5aI#7Ih=r=X;G<#{N#%3?wb9;x#zt?mSq(z}sL!2(H(C=pCGL2D&U|dkG za!~Xj#FNOC?fc_;f|E7_#9ghi>uMaoK^?z|#k!YiD?4-GsKVmriaNh{>nO|mv$(+> z>i7P{Nqc(&Lq{p{H#5S9UYTj)3|t0GYdzx;YtSi&Ia$UFL3WX^_Rj{3qC8A}++gzO^zHQCHZgc|~W zkW%_)x3V0p8(#PxR`dj~U1#+=LjSGn*|$%Bb;wS|Qoz*riv$Xr3;r(_Gsrr&s5>?E zJZ1Wp0}sB;AxDDo7b!+YZA|;%CJ=R{!GEUg^&66Q6ZyYK0HGKRPC=ycRmEUs>FGVvYE(k#Ft4?BCYqn{A75LVoR7U_@U%>U5<@#~9Ch^QHJt$XYd}nUyMkNMM}U z8|q9~j&YAY!pb4_>crS|wAM)zYEswMXjaK`h>XmaL_(^pptmoLy3118mxZfa59zakR^!(Zn_$Ajc;t?zj#W? z`n44S<1q?&D?8>3XM^wY1IFa`Y03Y8*x0hlKiC*)=L_;P5dVKHfVuW?!~iKes2Ivl zoKVun$7guYrQJXv} zY**R6YH)ieawvJ;s?ppk5o%7V4~E&f3|#Y!J@ z^9l?BMY*xHoiS(PZuk=m*-r+Xu5R(yox<4P|mm=Ov#ZC6A z&K9eW012xMs|kqxn6fG^4wJ0&S%-tuV=xT+++lfU2qB?|10rDl9=KGWmZA4UdA8tH z1N2YrYO^2wKQF!#O9=U}^UCVk>}TgB;btymqBcJ+5YL9r^=1zE@@U;ZXvfan*erLEmy$G{o(kfi#HexCxafwjQ;KnDTG}NDvV2Fk)4HQ_!eTy4!jf z;onWJ*Ww0XX?O#0cr{v@BYO^ayg#dbYIw9@)jtBVPIb$hfgK4dc@)K0>RbMENtN*; zE;V^I{4ns}DZdL%dG`%TPH=ESjgW6@>A&zn459Eh`Crw4cS7zUj}cke?S1+vhdHVH zbIoiqt9#<$Jd29w}ZT+W)JW`sLv&v)Tb9VxCxKdKGmR`oPRNKwooMj-}qtoii zj2>er@+)n(l7H)4-w;gy5^DEi<{sO+<6KH3y#|v%r5^IC-Q7E)TVgp9PZ)V_h~Jco zcjLXsw)V`3!;z^>*QvS2&6#~Fdg>S49DRDJdvWQOEw}<=u@AoS7k5&Y@LseK~uNvDW^x5lb{Rzh)X)r|?%I>6R-5_~(jPCvHfl>A^0wjf& zk-mOKz~s5gYMq5js*qYswPJ+mQ{we{%$Uk51^>c-3{)|Y`lT3+|0AWbJ?E0NHxtv@_U+n_wAsJO(vmMh4tt2NwZ`YcqIE!ewFR=rlQ4N%P~+qOGTmq} z(M|e|ma8Gr3n(={8hNvw9nOCw%+@Q}hHCP9tHi!(jjuMvASs<5MN8#((#Ujd@#hVe z*8iob9S?z?&j!H9eMAAm1qy}Z$6PZFnkDZPlV!W@v|lxw=wH(G4!=wZ_+4(At-|tK zeyDqRZas;}XN!}3svi?4W@NOXBQ0qVOFLidsK%?G1_?&wNVdei2Xl_H#wI^Lmq!?;BQ>%f^8wLp8U z%rHPwE!9Am7?re?(+KSV8|m@TiNJLB$U3QrCj=OV4W#8Fdj`xTjbM<;vfplWso^9t zp?hD9T>KY)qW@G4YXJD#x`L5xq7=+&B^=zs(z2}SqI&JA98oAveI#hZ178!Ai@A_K z)axD;I~tMmzh&}Mv@hwS&w9?04>YnM#e*o5{lAiV=X~VF`ygPtZ23*(*+C>J((ly0 z4Ew{{0eqwD0G?f9t9%#aDS@5F8~-R9&%$S5j!Iob%UA!q4_Xt6g(zQjo^yyk34cQJ zmjs@pl!|>NuIAOO)3+n^oj9gDvb%>SzhX-M=hS`W&YBIB3egVUF|H@SX>@jVgxp>C zd$9kBc8qkI&G#7HacO2`xw8qUQ}Z5vF5yuWik6AwydujF8SkmhGR?3_-{NZmh4BtJ zXWR!CYL!N<_01`DJNt2IvJU_%uWOn?y_x^ea4_M*|AZ`<`|iOMUdMdeI-=3zB7eEp zcH=4?wUi(~NB5^9>e#Ec+?|Py7^8|@0a>%rYd+t=N1#N^^zmnKwP(9Z<$Je}U`cj6 z!IX5cFz=22NG-DFbP%*nHzaPZ8!qi?(x;fQr1vQ6j*amzM)meJLDtFJ-0I)WjoTdp z$L{l=ikf%mXNezL-ClvzDH`1(2R*`ljmq98-=6#D0%pcNhkMic4Z#~R$ifYQ>}{hH ziMQI-!75rZH~o{+7~JPxh6d6Cj3HlCU$YwQD~aC``0wxq%Es;v?`!|{w;w5|jh>Gs zGZc7^y4m+!jg)1Kc?=_YbumfR=%&K_$;&jhnGXsAyxOX~yES$!Qj1!LWm$DEZEuUg zHh&2C-FY2Dj}2AbeHzOA${K$NjM2cXwCF4-(WV#mh3g{dZ@JFN!?GtC_VcwRXm?6} zY0PuV>;z*)yg-X*mW)C4O1)*=V6<_qII-_PSbR8OP668R{7Ot}%1&6sNVx1`X{f>l z+T1r|L#E$VO=Z{O?k~N?r9M`gaTl1vYkF%hD*IIuRbmjYD~L*?%;~_hf%+p*`2i7) zv5eJbF!ohw-1-5Zb=VZo7dyYzNHWLw=t2%MwiW|QG!aK(%k=1Pl()aDmWrqEHO`wHq-a4qQTb8)L<4^yLjJ4#sS8MhN!(F2 z!(}FE@m#<~#0V_Xa^iHL!K*i;xM8(9RYvd0fQCK2Of7J`mt{l8T8#baOM{zdN?2j0?QyJb5;F7vNdIvf9`I4te2&Dlv$xyLjqRR1gtx|Ob3gv4}khOp#xlUu2z zMRP^#yd|`AOU1sZpdk@Bw;#}TL%#bjv0HF)D=L=Lv5$2-yw}}4zoS&Y!bQBc$sMdh zGH5+iHn}fwL_zVO0aNV!T?rpNNt%FZqK0>v9Fx~zB6jG=N0VvJsdnT%3tEa>p)n@3 zL6W-cbQG_DET_8_%o2UiQ;|u~?q`GZ)~SNUguGLUdB~e z46Q**0De5VCoU)uA7!G`&Yu+4{}5r!t%{s4)toPro6k0M50$u`J6qT% z+BB_TZ_|Br&Qi%|KUgp;+O#3ARn@t`NPMhmVaapsDJu3_>_J>m*p%I8=6yQ6m^0vC zq{tseiP(`aN!7YMv{!a`!d#BJvQXUb4DE0dhOPotQ3Apo{6oNxD1jsIACa-({V-O2 zztj8^F&p*6LK?*|u!7PH84`1Ld{LIM-^@1qtfT^eVxM=AVSo2kiW<$EpQIvnNO6Tx zHDA9}^1G;DP-LuD#4Vo?qDW|VUh1vc{2r9Kdbtn|m3HK^Sjl73yidn8{9-O(Z_&Qy zIz3gM^^*2?5_R!{QGccrbo{w`L|(jX5|cU()b7nAA^7#d@!Gu;^e`8Sqvcq@bS!G> zJ51#qTbZz)m&^Bhe|E&z8~3+R9&SpAoX#WJ8~E)NK$xB)nQ9nLAfk6jpeAV4 zpuD-ckpL!H*df!;cfqrF3b1%&nIuFzOCs{jwsE(`V@iEY3j@dNl!>JLlM(|PtQ1KP z6A8K))Qapg5!iS`(hMw6K@B7&AU23E%2g&!MgtqrFT;8+L9>Hzq#(wk5Ovz0OEVlh zejSry84OEnV#Hrt0xIz}6Rt-YK4j^uqF*Md{40Y_GoG6gO5a)veY-HscxIaz==7oD zXaknm@G5}nZ@BamfkCJ$eP?Z*2rG%56Ucz+RVp)9pXGu}%1rn75T4>H4dO}~i8%q=_O zE4Wkp;qcpsq86ndpZT>Sf!DvuZ*Xw#9cH%`BXGrKmiqfnF;G^z&~(|6Wfbh!(2 zO?psm_tzLJazDmMO7K)%ka!)Hf2%fTN&+hA5cB??(pGlUgR5;%WXm_|Tr?;%S}i%U z1^+wV_&A_XxkfQuQYn+hpdQ;f)V+^yskRRF4J#{6a_8~U~lQha8r6)s6)owJ*Jh6z9tGTvnK9zdL#6PY(*B!1{a=!Rbp zS?Gu3)l(q*qLnwxV=>O8fQv|^-%GYyziAQe!_|xEFkQdsQ;`*J!A`(JlH%agKVl4l z1Rwn^*k4T6f$$c}X826(1BvWx%7u+h|HPmRiNgvQ8h$#PF5!VdXJv!Ki2(soXK@Or zxX)({J0sICF(99B3*%dfYQhz4aZq8dxir&4>esx~> z`^`LZ#}CJ^y_v{ub5e?xo=+%$(1G-12D&8j$C(M&n0yq90bTQHNQnP%7CvNLSb_ee z=6yGJ_Qwy-8VxoGnZm3C+4kX0d&g9KG9#IUs1?6`(BkU*yG=r}56ibP5z_VfKUQc; zX{jV%7s#z><1p!JM-m04&NiYnZKGUATr)z4^B+x!M200(}?%V%W-h%#;KYNxg^L$?=J6NpjQrWS`h#-e>Dj zfI0o1fA)f-eErf9+lcYS2-C!kvhu>EnZ(xmz|AR zE4{Y+JdO2b6DfT7v#QHXjsN`VJ8*$mqcwdtY3}zFIJ7$Oq*sgiN@w&H`OGyeivPD)WnNSx-%R-OVM@p z-$LBEJ8%cME&ixC!gvbY5IRw&$nBxL`uWIKc&eWgIRey{%=g5?2qgBX1Au$y_qPX* zP3-xP`UKUC{d6jD;2+?>4I&);>p0iv*hF*ejifUkYX_Z+6!LGX|V$J*%uTla&SU)NE#rI|XxykHkv+e~&3IUcJdh8G~+*-2!~vQING68uk!q-RIUA0{2= z>kY>uPk#TJff;jDX1r2h=60wQ=Knb+*j$Cy?=vyI%M3@54pD@Ab&d`{o>3k*za>$# z{~yxv5UfPjqFl*nut35!`ScP)w|gPKoi-dhx-aH~G+FKbVme@S`tu~y+2bsY#_0D( z>4IUwPikMU8IQWxjM8aQ$}MY*o6rAAHrLLkhgVIh#M{Xx9xK<%Tjh%R-6F}|*E5{0 z7CNeX(?m^OTsHo`bQ(8&6Odu^&|sggTJL7N(c*+STTJU6UZ>;m=$zmxMp&_cZ5L|xW|lwb_jouQ{4h4SMQMofgAe70nPwp; z#4#%+JFfN}0&cUxuVHk75^zG`Ldk(L(WdjqJbM8ah7||2_BMOL{4K~TmLJ%&lMRGk zzLdkD+U+DV=3bEOPqtNeuCrCv!xzENMQ30;8+Q(*e*tv(Ed5v0E^|rpXQWK(=4o+h zGiwQ|{0Wqh0ntWDBCiJDA}}D9y8rRa-9N1WKQqnQ5*QjkUhdVw{5N#r%T8HDO5j<=nx1n}I5j3(x-ba;Kg{)k?7k0j z9!2mDcrn(11}ZK%4^x@-p|*skeCLuBE50cUgW7c}CP&#P<}a>F&fK|C3^u=cWi{*> zyVVgpCndW`n3cv2hi|tvKHaIZCZ|idqj>enwP-5wMKbY}7MlOf; zMynUx5jTTBF#LlIWGxctjk^By< zq6S9S6UVoq8Exd{Dy3U_;*z+73agtxII1%cFTDr%9J+=+(H^;1d;-zPvEE6o|Ft^= zJ3T!stN$5W#QgzEJi{`KoIwd_?0i)uU#c$&{wa`Uy;HaeTBjYUzE2&eN}rMq6LWcc zftUG12bU%gkq2M`QL$t90u=--jH5u8ggW_@(@h#VpQ8N{P+ZhzoOG!E9pmAbKg&6} zo-t6iJ^TICxYWAC%i18=V32-thiQI-L!C>p(6g-A!<#U2v@;XOO+}hywhQy6{Au$Au<^7K`dTK{OMGu2XzKb6Y7@D0@ZmZqM745+OkPyh z6(3C}N)f=#uEICh_sb)`H~ZF_mCCujZcz=OvC!SIT*2j4+*)$ySPuLoQ4A1*l#md^8rp7E9CuV<2f{Gr4ZMp67RG^g6V zB=IyfHL*JWdYtyPo7vPWw0I89Ar7;&mqY^SS(Sp9Y<`7lUI>N-$=)SkF7|5x4F9Mow1M2&G$B^qkLd;$TJZu9MVybLByE zRBl;%N!UsI0blzhh!-zkOvN)Z%E=SJ>hb0&I#HO7{ot87XKGG6jr+wM=MQ}#3$a(( zBvZ>XKujcrQqZKh1WeW?g9*oF)Si}ri0L7kv^LMukF{Gbn+CFc{_3>$h%=bDb?Xjz zX$KgZSM`$A#Di8-Z>;q?1!9w8u$w`}_!r_>CYp-Bm+H+qwzf+m%|Ag*)e;^Il;{&m z+XVWRTY&SY8VBn5?UUTd&Q%h03qidkK5STwsmyxAh#$$VV2N0M z8bp7|`85U*sygY9c>D}PvZn}@xRt~jSizPzgK`4rPO?$&-G#Nd1cNMI_gaSGeY!=a zfgEl5x5T{>z!=*AyQo^vB%>Itsm<9~;er@D*DtrMC&B|~?&f|^vXxskSXTkCadX;{ zvkBr;zpxja0ZjK+QAclI4`iTD3(OUDyt>Zb!CKx8aLK#H?UAjdH0tvE(z#p_7U8$x zIu%luc%@Q(w7RVF_`KD~8T%SL58H%MO3CyNrENTbl>%bZ#+FQxK@0VYLLr)pWrUwF zlc3{5QzPnZ4`;va8f`x927IJD3VM-B6S%c;+{YI8J-_)>yZLwE5d*ZptChE-PGR9F z7Tl#6RSL1eN1fZNFM3Ut>vzl^`?v-aHA1iEV9qc`f?8t)E>1HzjPwOKn?9lOG0LC_ z8mvU7U&0VTd~WY%To3>{i9qRYTWWJ;GW$H_%FsmsccQal{zNpk4h6#zrW4EoJQ9w; zooo&u5NDe%?p=kL6A7A_oq^+sJvlnHna2&u(Ny=2|7P$=y;V*$$GlJA%mh0C@e4 z@s;#PH7H|7rGgo6CjsM-}*XEsX(Yi_0z{-zITX`0^J216=AX1I_Q>XCB0MOvXKW?cc3HMA=f31uzML zs^Xj@cO9zk1kN&OpC9Qe1&wpbLP>Ayao87d%a}5_VlivT1rsx4eU51iFcF2jrqoGizlk8wri=$FWyw*+(vM1c{y54T@L0XohPc-acRk%L_v z@LcW$zfL5x&!PeKtadVU(C(P~35CnEb+U~@0AVyNchP)o+q$tcSWKKlJ)>|kt-nxg zPKg1uXPKfGPg5iq`Fn625IPspA4B!aTD{;dr1WSn-g1?OgBi9WQ?%@)#Jd`2xLbez z4Ti#{A|}NVaxM5Crl18>m*>`D=lVv5^HT{_VB!_U*+i$s)?+5phoitHu-odFqZfW( zH`C&jDH;fyf<;#dfsGrS!E%5<-f7rw3P)Fr?4Rx{KXxjRicEj^09!VKP0!`T zD-nm=!4__!-0o?BVP}^k-?Zgg=G4%&DA*-o+BTFkO#7=_>**#WDmHxeC6PFJG9n50 zCw{qM*Kmf<7(}E?6n|K>-Bb!Tx&8>Vhf1*dZnUS>Sobbt?a=Yd=9a8KvwJ=34oi)| zj)kf1{j|)RM;z*BK72xf-X>8}FV;p)xXtCR%yzBV%yc!o0kxY}-q6PG zuz*0E+xzkEwOcdKqD8jy97GJo4~BcvA8bJXJP}FdFXZXT8lxD8=~zGEYRKY=BhZx3 z(zg>S_F~#@i$Wh&TN^(3(9eXv6l?oHa}zh?^MXpdk=^C@Qvs7Do|zZQqzcJw_O2N9 zK3Tx1ve@m3;+W)j4jLN6R%8!#Wgp+1gx+36f!*yADEbbKu>)vf9ASs(ej>s1@K4yR zXx{tw1lpt*mKxN$#h=T*+y9rKZzQ}l*3ZdgB5OBmzI5wH{3NHWU?mr9nT?IPl1rxY zI*1W%FM)loYiQD^%Pt@_d74XO;JFi{q}=$}H8S{=jZNzC_~yfB(2^ECqV2AjIYlh9 zj5waiBG_2+)}5u`-Sg;P>GRSYc&y3+KC9AW8u9e9G{9>X$YZD;FxDzuSYTUUMiGSO zUwi6E9f-7=M;7DAEesoO?KvHnMy8(En$FMu$7IYwVPWVrL{y}ad%Ji+yhx4<+O2gb zh-9N(Zc3ZENJ__JB*;kf6u!xssKml=HmklEUNr6FN;f4i35L;Il_9V21Y(1T8WHT95NbrvIEnn(U-nS%x4^p-aqRCb9{O#@0Hhfcx1oRA?-hz}pEXGm zA)lmcP@NP8rcGoXq;4ymoBF-S+7&YXeeAw)A-vGK0O63&P?YpW3Q6BnLQl~>dPud5 z#5?El1D`q( zp7hnuiyM7(nX`*Llsfy^ULDuJ@{eC{(bZ4~T8qP`o8NlW&FDQyU4F4cDtXuS-jkD8 zVx1Lhyp;*Z;ztv~pfZ(095z$?RaZhLc5#fvm1YRV%3+AMNvBM=R;NX`?h7`C-UR=e z+ngAQN+%QcO7($8k%Mk&EU9QYWZ;w{lPQaezE4aAw5wVADKU13MFT&s)PP3KP#BX@ z{_|cjWVKh{E=x_&=bG!hC;4Q>kgNF>(L_1Xj;2ghS~bW0DA?oJemqvnqk*>d0Gzzy zzc;@WV|0kuWD0(>oxDXB&_@-kWnLfDiU>WTivQwb6ulprO7tsgpB@7e@_f%-Rgw)%*-d1$ zi9&ZL61Eychx3P-K}_-^lb_|M)Qp+p0nF3(1Knm5Wo4nRd3G7RZO?@sCz!wB-=j}P zX-UeM*1|iF2fM_$4ve2CL-`N#j+UAr4GG0qzYzlt##??SBDKmc9}Kt1Y*x|TN(cI_ z?wz^^W2JVs9=$hC7UDay#7Lojw|wfFz$dOlT7~<|ZDNCsEyRoO1hC%w1b#H>FCh_L zxs`Ej0>pahSTvzXvmB^IqnF{|IYk~Tf}_xl6~%SW!J-6mz(v2LyUwBP_*f;Q4vq33 zy!VUUG5|@p`nX_f@df_6J9fajOmK?P6{8$YdccAcBHoDa5ND{1{`nxy7kq&WWmT_A z@P7AAVd!WJ26iEto%kyy{-OW^T=keOY8DqVaV53DxXi1MQ*3{(Oy!_m!7`#E-j8}Wk!%?ic77vzm5t{CP4cIZ%Fnzm zuy3|A77-#k+<_{EgpvJT$7zS%w)v|i@^?rfdxBm!TmqxjK|qr14rHJB#3gan1rb(uMB(&d0SH4T-_aMq!LkWHHLE5HhjCXt&((L0RJBoC@x`vy7v-uTM z^r`z0)?chX2Cg+brj;K9>v2h;n%E2Wj4wjjG`PvsUj{_}`6qsNhv?rNUv_9Hpq?E^ z$Pa^~Jx(b1MmZvN`QxmJ1O7z-+o>@wuQ`JIyFfIS5cRu0n%ZCETW22a??%5G#KDee zE?Z;QRI7`0Za%ShXxx}r=HVFwCUZqiMKVVfSQ~Z|t%QS?v=@3qq&o>Yy>w1htoj#Uzl1n_cXeDA00=<8PHhv z2l0>lqxwtNP_o0~zXc+}#;@${Q8Dq23_iAx|5UwWSM0PSjk8#{C)FIn#9{CzTAb|t zL&881Dth+43meBLRB+OLVk}quDZ}#S2Tm^sfyHEhKZQ9~XxG=Fj#52G;97@2lr}Ha zwu<9l(ztA6%>rswN?zk5WsXvw1P;$@Yr|VEnp%WgN{Z$w59-O=-hq0a*2w^JNaRLd z^zVuI5lCF@zwr`Jv$eMFqcgi6_j?iwGpgF!dc^6n38mCCIoenJ7`||3jIBS1m(^K< z@@!UW&i!H$YkS7VKz`9<2h_a-uHwVOJ;dJfW)Z;UQX_MZ^Df+5Gd+JTgwD=bm^ij1 z4{jJLivmy)EvDA@Yx&Qk15gJypmc>aDn0%!dCi+tojZiJt|Z>bv&Qw_R&=jk zcW?aTG1edGEV?*U89E4(51S74AlFnvA<(gxjisiedw6&bg(uo)l7g{8}Kud(D)-;2Xq$bq>Z(ai&Ga`uY!kC(0*S|JtnWSe=u~Cmy9Fp6tm9xAV_qSa0PD#J9 zZWGMKRgx`r!W3Y9KLI`DK2Je^o_6dn1-}OQZjxzQ!Hnm$;--)oIX)# zTGVXb<1h=+=%T5N{S@Wl!|}0=V!=*nCA<6w$^Uui|M^b;&y@QA^NJb~*I#tvhyHWO z!#%iOgdVODS(Earw}%_7_)Y9iibr^7F*Awo(%OwyPb~w8d{*PxdcHH44--S(D$ym| zqZwV5McR5Ya`!fW8#<`bXVF{MmW-eJGlQ!Xp(IO`5MF=uFAIsFQ>p9A-UzPwNZ0gvW@#=wV!*}gpIfi>)>2pYl4AY?v({00$N zUsw7dU2xxe%%ki<;I}Ou=nWEn8L?hpJO&_^bB&z8{bG7}6nC8aWRvA_l%L$seJy?W zD-O26Q&{-xD|DL9YtQ+D9_#+1Nq9_~4Ek+*Q3kG`+Jbmu}udU1%`AQOj+)C(C zM<8hg^VWa^RGN1PrFadx+VlFqZp$|ePXxmqc&i1e^@d%z`^R264Kq~Yl-tVwyF)8P zaQf3Ei)<&C;~8f^S|{K_fPiSrC`(W}P(H&PR##ko)&vp$yJs$cwJH$35u<_@$O zpzkC+b1BYsno>uyvW6Z5xpt&mxDFVbu4~cOa8&})LZv1bZKbPBe@4OU%qq1zEv@l2 z*`)JmFlHvKg^z+kQNY-xWPD2(_t}TMUM$LYV|wZDZUPK?zM>3C-EEphaoEcPH`>Nnts}h*dQEX}j1* z-Ai{|b1rltQt#xl5)cOj0rlK!3;II!Q*@1iB$1F^@B<^T7Z77zhC?M>AD>)kwH9^eQ~|T|NS4PEBloy%(2C zjX*a;0rsfcjG3$6UFral7YojLV<6Rn#&Gw$lmdI1m|q?p*>BSC6?X@`Ro)C+EWCHY9aVzR?(OKtXt!|iSEL`soW>leE5~vHk)xRMl;bhhzZ6*(`fg{<_+TH z2X|$h^|?vZ-ToFvS8!1YG)8zfxkKB?WwVij%JA-h?|2;NgWt^A{?=O%QRC;} zxv>)E>g|ehBYEeuQsVhQ>0{T<{MS7D!E7iY`t1$GcCC5;Xzk)$K|sQ@XIL`D%KHfx zTE5sC4dPlXYc?gV)Ps-a1P@-ayfUu+?^|{+Y&hZ|*ER-PWMu=*B3}cWF6CQ3xeKOY z*X^N&zk?fN^59u@L(c!av8%nf-DFK2MIiDBHVm7vuIH^zVdwyjJRA1O@;n8QkK~;=LY>J#!w;W}bd`?l%5HaDHx5>gO z8ezo|cj7M{F!c)Wi%wZ;&b$_~7Z=1^7(OIJ4wql%6K;Db{V{ZGp(?TeS(h~unvD}N zo-;GJ;&QcLTL(l1EEUyU*0=}M(=8J8sHd~v9@CiuuyGXbg-g2Xd1V2CtXy@A-57)) zyr3HIQsP(HxPa9i(~T=li| zmKk?xfR61u9qMw&$8twR$4%I|W27x6s$--Zc8pbm9j_;F;+Q0%xt|LXnriZ15gS9# zHTiRm8!YB63Th|91Dt8k4pN5I=fm!L{XW|(*F|$^J9An6H@|e|flQG?eV7{Bq%O7Z{V{0W zZ0U%rP8#z$Y?)^|I#v+L37;oyOMSqksKKe0wFEDxSvK2~cR#1jP zCQ;62pVstNPO8!e{vw-N%lrzqH&K#X8WJQl9R)9R39jnyb-q>4PkC z0z?0E{WDQ^NQ_6sa`McetTrUtGnc2F!0mnRpJg*O>EUG46^o4{XByp+P^%-nId5Rt zRo0;SYLDn&@5Non#m<#joNQ>%PoTI$Q{aJbJ z`y70!=AT{RNi>|}@QXCQRA%sHm{;j~44Rxg>(L=pq;VZ*_O@&6+N8ScnoMra+o(^; zPqIbS^316Lun_1XuV3ych)ui9<3zAPA)(a>)+<*Vrw9i;PVp<5p^kW?5c{R|0(EG- zllzo5$ihA*$X($>qZoS%OKw#XiTqGHM@Iw#UQ2Nee ze5|hsw7jx%ElSpyq4TV#Ci7;IvfM=uzJ#3{AC^r%$5z-_ZYsoJbfB$X8M6}rE8U^Z(ZYD~tpMsM$o&Gxyfa2(T#Bfqupe`+85|9vq0HsBkxvJccVeNCv)cNQeVRnh=Su1b;VJpUV=`6}^X z-BU+rb(2j*wZpObs(|@ewKXNxBRQ}YL62tF7Zp~yl6w`VoAg_&0r-nTVF_nKj9EXi z57D|5C>vO0UtAUc-`fv=`XDQZu+8cuS*6sv-~P`{g0_^XX;TjNvP?GV`zSZ1xy4Zz zCk8$U&HsHugsBZTYkbqnq!dcGv&hxvd3Ir!a1naI19iW4uvj`|`HiFzk}SOn*CMQZ zSrh--U9dOOl&ehFyPYCXJ<&rTR(jcjpqV;-YG>`B?&#nnYs=bw-A6rRtzM23QkMVf*9+j=Ok-SpET1mq9tDLB>#KpLRel_cOSgSv}f^_dE_|m z`)uFK#?nTdP-+642EM!nB}V$b1vmK&1ep)!bH_-LCxaahC16K<(qH++7YaxdW0&#y zw+#0ma%SS3{vMR&FK!*464j_C3K9=(@% zmT2;J)TU-yOiq(8gfv;&?LbYU;l;Z_&eV05=Ftvpg?1YT`ZsQr-iycP8FhB>3)Jtv zF{?cD{xFSs8!2aDyH&iQjqb$N7tTNH4O5x>pJ1Pt*iI{%bVCSMx;(EHTYn_l=oBx0 z*K1w6srh#C`}$VBsGqNkj5h99|6s`jV-?lX>7DvQTfC6=fhX;Y+^l_f13%i>*uE^< zTO0f|QAZuLrAe)=HwGpT{DHN{$blYuJ$p&4QohG965gwO1wWb!PN>d!5L+q*WfNqD z1q*=4D|fT_eGnQEi0;Z(;AcF~md`4_R|6u?YE*xfnQfg@)6h2upwdF#$2E43EU@Vg zw>(T92uySqW6$)n?oQ$)I`dZ_fR}Sh>-4YdfCd@UP@9-;70u!q=OL1Dk!k6@mGp8D zCLUtlJ{+D)95P*vi0L?0}$CUF;qnbe%2w9A8c_xzRZY;jrX zP^VUcd%|_L0b4dFshr01j8wZT*Kv%_d#!8Q+eQTzLJgv{iGm?*Cbyl57nTxq}qmb($|fy5|>I zUjJ7$lR|lYupyO8;JvWOe_L>R9$R1ADK6Z0#1<^eoBV8ku) zTr~o$uTJT1y+FLRltx~ukn)+K{}+>Fa)*Tvzy$9s*0*=Xf0-c2>`EluE6v~Vu>hn|Xsib2OCdpWnrgDLSuRq16@ z(uwpVGhZsAF9RKeM62XI**H+28W=YFj8DR|?m|#76E&AFi%oDKd9w7zOmV>C-@u7% zl7$y>O;GoNScl1?xO6!`=9Q|ub**i=hCY$HWBxDG`KdWLbQd~4wsKmoPt6OCK7x+B zapuSyLmjUNK15XuWgX!~icvn%6<4YZ{P#NuM_bH7k0!5Bg<{#{ML4~ijUdTgZef&& zn?1v7niT_ZyFT8?M(YQ$k`+8M+|3p~K(F7F_CqDi5EaHv8K+D*TvPUk8f_Jj{6G@J&zhGP`{<2SPu(7f z5i*OGzFLPL-ek(KJ#P1&d={mg_PJfogD5&zBs(1T?Zc1AH>^LWx(yC*Kt5YkKLSvt zwnYy(9=(C1EkIu>vq|mDC{H+y2;Kg(M~l2L6Nz?}{WQ%Vm`T6;@jut5o?h)$r(4}W zAiBl7ONx3M4bvXn)UJSU$p9*X&6eajo$HRDo z9FncW8q5)C{PS_YSOOO&M#V(FNtOy$3J|JNfB5^$%C&};gZ1qsn8jf!S#+v-B_g#c zOE@DY_h4vS1}-7>iZ0CnDW)9!Zb!B%D}^!L2(nnsRXfrZ1y$oZL5+V_VyZ{U`84cd z?Bo@4)}t_dsebB*678 zR`}mn-!y;>-wql*-AMj zl8>M1;@f8F(@rU;g+{+}x2Wd*&7EAZK){t9=ECV+Pcl3fR+Fy(ifXAvvnP6Rf5`m9 zKQ5umBXcpN{3_Sgw_o^|Bx~d@{vpLWZ$+5FO0g!;JN0aZy}?yft`uWA6jZal#F#aB zul|D)S+xkvs}1_H4D4Pd+kPG0yizV88bG1v@prs6h?Mf<&(QuHFKPmxb-|~1KSOuF zCnp?3^J)U0rUyV21t%?q#R68#>BM|2Q_}O^DsUbTbim^S7WWH4xUZxe@wU3y@Bo}) z{tgFSXTMz<%G@iBXublN56_LoQ2RV5SGLGYCU>hlSTn05t(ljs$G z11sL)ub`@4yq>z~YV!YOXi?qSz!!XVJvWDzy!7NCZ|vvPhj5ml${z9U7*l@X`^A&$Jl0#l`VV2I4-iGYNOgldLaGMh7U`Fb{M1R@j zuX>xp@7>CuVUS!&1Z$v@ULgTBf@cO;l0NHRP_voVo3C&Y=kb`f5Lu1>c}#jJt3oYi zJ$*MtMARzKG|@uQ>^s~J7-&@#?eTyy8aJn%eBkmX?E^iOQer9ufe59e7Aw_!D z^;RoCMT+cfLz(R^6x~tNAPlW~7tWgWC=p8%*$`c61Y7gs=pM^;_e)C>;X!j3DDps_ z3EUgw#4#0klp8`H7VC(Od^Lr>UN`$}XtJ>BPm|TCL_JcGz+t7NBQR>9{aJC_ApH8A zOz3W%F{*x2hMUW8+daPYK;MBmpUMC4zksE%qLSIr(C|Mso6P~^{fvMEtqHH+w?ocR zJ}l)U^1u3dg#3;Nh~1dFYsE%EbtCe7)Ijz4{Kjrd2#&^5utk)p59ZRlA6I(dw}!%0 zjBkfBCVijv?L)UPNJ}4*b9DBWNz#%xNXgWG0t;VRmMf$GRe>QSl=A6e*n{(BB>z7; z=fe*Mre`;iyRnRuM*%3v%^DJ(dvBG&A7m6T`@F0j-P6(-0aLjw`5${XV>QKU9(mOY z0RD&7$-P%>GdryBeJ-m~;z5O`@f?m|`HJpXGFPJPQ{`i zp;F?wv02u5=@re@dzh%%SDMIqo6DH)7vp`@VSQb@)OZad`z25!iQ1d|9qxb1$^I|? z28F9L3N@70Dpg9uHD#Kl#+4r98w;F`D+Pv2-*w@0`u4dR>AQnyBYv&7s&aP#DCG-H_+kZ*qQ#DuYvhfPJoHZ@w*Jb<&1qlo`5oQ zmX-S85wHIGlFZ-mVnQ)RZU6DJS8^FajteP-x0B@~QdfgIXO-Lw^07e#2-;tQb+K40 zl~uDi&gfRPKi#@0h`eo%C#$LHpPs|{MDt8SeSiB$J$k8~Ymd9sA5q61=4z?U zjMUuhqr05qxkjX2^2n(EvfV4OSGX7jlRDWIv#)Fb+jJg6rPZ; zPA}t(rTGX(sUnXT{+ns3*1cbvPvBh~P1mu@JAj2heN9`&nZLItb%~a=AJX(Ji-L5$;p%C5(ssMDs^8f_Xixor5nP%@(*Jw+!3d)v_DM%^4D7qB^}zIGSHL9(KdVqz zjH&%Qtj5LW*4Ige#=0kQCxC&Lp&!Wl->el>q>*Nncr%%f-P-#t2DJ|^ryKT+ycX~g zotP_;))d&H77_WzTP|4WNovU+`rT@X)&7a4wI7e_`)>ih+&#h77=#R2^971Hk`_5#4dGCS z@1exl>2*JpaD4O)O?6WtB}RfHyG}TXS|uyU2W0_M+-pe;jyXkg0@YDGC*StI5hH5gt7~bl`1VYvM zR$0#%W)0qjpGAA{D8_r9yH&Kh6(FcYLg}$Hv+-?B{`ovlY~u+0C!Q*|vn-L+a<*S< zZi$kxJ{BJ6!*79r;I&Q zlh6KAk^jLPl6&g0vUA=`2Kvx+-4iyKEjhyD^KP!1rnr~tkquO?);Z={-<99Yr(yyu zwkqVeDoqIO9(&%Kzw<#GnWh|cFLFdGxXH(;z(~qIBK_dkyT3_BFGOHLT|IXck!#n? zG_O-aj$gjL_M!&2Nks?TjvrJG=9s~m%d1fxNMRcKy(91#FzT(r5E4!rv6P>C0J+TH z1MCh^{>n!ABIg|TVaD-ipSnr`s2PpS^D)$ktwC1+>gWbg6g(C-n0Io63P7EX0k(ea zj{y-d_4-@@iv9U@?%uaMxDLWt=FG2QuvS*hlC*i+^d+jcBj;t8WpqZQa)-O>?Km?X8cxkLiF_m^I zwo8ohZt#f!Zo>Pyw!1__C4FP}xNw7a&P{p(b2=1Xk^h|4b~WQgUAhNgo-Qt?Te-3( zTq2}|SUkSWuL<+M=4b+sfs_;pXFmDy&Q${+7VBkRH{M_jx1w9oALkPz-`vlOY2Me# zsl|_tFExzOlfzdmP=wN4+}9jD5W2k*jHTIDzR9ld8=8yM;qIL}d@TJ$+>WvWb!G=C z^cHU4*XRV#(`9zeJWfhG;Aq6@_316cDeZ3hY*}T$ zV-K)y*-P-v9*c zV2x0tp-M(?0={Hogs?II>S_->zkfNr!_gO+lnz32b%{b%FnRnH7yzBZTup!%r~#z5bW_JOGJ z#gah*47rOdo)1gDNb1Du3IQ5Tz2Wx?hn)yDqQQ~r;f!Jae5-v{Xd31%Yw(~Mj;OXa z)mkd=8-cH1H<$kSXCv#V>whP0h{eWIQ-|7EW?g^y9U^$SQGZ~42gk=bFf9eJS+iVFt9#}dIlRHVI9fX5O64tMplqcLUFVGzjGHB~2~mJcIoa1Y4e-~JpT9qY0FGR_l)Q@1ZGin9~Zfs*%C z*MLLiL! zlki#-zgim2zmCX1BUY6lAEa)>R*^i=ilIf*v#_G3yPBE9pZ=R~8Nwr-8+HUGi4Jm$ z;y}XPVUbsXg(d2D5rjBUZlxu;r^fpdkvPxWWZr)q*!Vaejq#m^{naR=z!|pp>YGj4 zaMeO8ye2tJ_kBsNV}^iZU2(H&P4lg-792A>Ri(2YS`^Ny&+lcIz2KdCkgK=&O^zBB zLqk=9ag|S{-bqsx>Yxc&Gz^FndMu4~4)D8mhMh3@sd*pHp!@6W_W}Z3=D=!+?`)cy z9Gu&rpWafRiIP!40M1sh*L@?qOiUZa8>$j63PUTi@cU1Hknw{|MgDN|m{e7M$Q}IX zsCtj#*Vi#HJ=O;VvfE+*#&}m&J{L{+b4gNnBQDS3u(*laLdXq@@mc!8lcGIvHp&Ni zdINBg0i)QNXEVo7fgwGpqOC7^E#a}Xbzq^)E+Fdq@w(@h@331;&K~%OQs(_7@1RF!AW? zbtbX#bMa_VI#AlgaSz2O!Pl)jphNL^7{2SG3uDz-TS~VVrNBQXqd=Ch)*xoKXUJ=& zM;%rL30Z{Wei5g>^c7aTPlOciHTLIvaWNUgxg4Dj!;29Vi#m+{SDFQw_v8C1+zb5x zFO%d2r4M(Vnm@l-F=XF$4$gVN{|3CC8YD}1^&2jFR=e%zv+B-+e$PXm?KA5&h84nIr{D z4YG#l%)KBE*oEwrjKr>icUCXvz*pYEm{v|t7q$jF)O8h2K7e9jH(s^CW8H#O!=<-- zU2l|+fFLJIGjDr=US^kJt4V60#mDp~f@JiIEM{C%@5g;v_dxwa*MKju<~ZQM)C22S zZp|`gEGJN3;30tKqtRyt;(S?dMv?F>&XMkTZ)6+}QTS5n1I(%RpeFF{)kVOjw8Kvv zTPtVI(9||n!Gj<^fo^P{7di<--Cdpz-rrjT(GwXIfZAY$4Bx@G<}4r)6{*}`SZ-)z zXDpAi<_>;%r&6f|YD+YZlY&;rQ-{*ManyWhVFI6%npbiO>`31yoV5I{EVD;V8s$5` ze=4oB6Iq$mlZq*Tsk%ffnW4E?Lcl7jA?Nt{i>_Mi0=QH;eQmcwx%wt1Xe4Kj*zY)t z>S|mn_zn9U4;_u?*VXPAR{8JEe%UwiN0Xz~gKNf$PV=semU-d4qI5kJ*~f!9+7kuq zQSTgyWR?8H->k?zH`YE`LFL*8``I%{LO+iW20Y)`XoemrWn&tegoZc&NCM36Cs;-v)~&wqVjwfi2PKh5Wq-voBo3~!`9#?I40mg{d) zRCvUG3@VE+K>3^Oklt(SBX#Et;vNNmPEw4m0j^N!1(IgX$vFBr8GTv@E&FsJIsbju zF>-X`^s$3w0xraN@TF0O{qBgHc~Le$`lX2GXWv$Z_m1vF?|W2ejnbOTCHZd2t7A%a zzELim$F0SDw$FFkDke2-*Ck$jBJ9!~x)lR#R)@Pa`obGU?%-2+S}Sv)v6%jaOPz|7 zf%u^lG;MbcpSwh#?VQ;IWMeZ;C`|r%vf(xcl-%1``%BM|SDQkLuYReFf#swloK;67KR+P8S@3dgwDis? zAi=V(AUCPLz@CZ|3xw0#{tPo9KKYBC*X3PZxQzu75i$(RmydKgot-G;}@4zxc+)S z$(VYITL0Ns+RdWUew($^21W_*^ktwrdq`yeM#hIT_&507CdVblE#GZC zxMk-fvG-&FrHd=ed^kdKHjs&Y77E$ zg*9El)rIa5aWCg5PJsxd)8*TnF?qd%C2PhjIn~;j|`L$<=AQ z(8&lscCPL(^ZPw@{P$oKR~Ai2h}+?fah$yW?vEX^F#+r2%W$66G>uc`QMTj6z3YnP zXm1{#e${X96xVXBG54c)3_Rh665%npnP+??6kK1QXN1gbzof^hN#L8`es#X?u;e%E z@vmxUOf{k7cujVPo^&B13vYd^zycSl3gDRl7F*`s|#AWreBn(xtRV5F{%C< zAbm5>qfhMz#C+0iRgKvQ1?)R2^tsR@j=MAfX!*{$GeMg92uY}5L}^FlmZuJlsc2d+ z&q?s7pQnf!=D45T!J<0jn3w1E(7(@{iK7);BwKLkkMoBBA7hdm*b_@px5dA}j3K67 zkDp;g^)y%QU|G*5&GHHLl`P3LHqh$zM6SJIS^2ve&O_;SHTm@$UYLVjPQ!#60H^S} zv5}#DON<onyIC{vaq8ykLRdtf zv6+bRL#b5X8z>eBF0iUcz`!Y`W0jz+3%n&t*ORW_ z1p=Dw#^^TWIcxqjEITwO3;c(e7M3Po`#acOF)8V|WWrvhQR`{#o-ZohG{Xn?LIgH> zIpYNHi_!7di|hT&sx!hqL)x%LOAIx)w8p)5-@T^w75*qA;yvsb00$@YqBePXQD^AI z;}X-Jv@d}=@my5Qrx{{czCvCUuo-TrzWK2Y*S7-ARKJ3hM|R%c*(Ih6hYoqt>g%6! zyC_lbKRY~A-|JU^fAeroJhwNpS*OkqQjiylm=?7gAILx1y1{L5K$6IX{_Y2l0YIcQjO z;7mU6I5jhJRPp0(e3oNDg^i2Y)vNmWo9jnKQ9hOIg#s4Hn9tAXbJi+h;JN{4GW}mY zZu31>lI14IL=?9Mn<=^^qT1D0Q_7FEGwjKqnh-~A%4g4K4Ojk*M$XUvCapSXEj%h1 zWf_)Ep3xj@`>7pSM&&HfSIH`AINiz%6{s1LLHnOFF+btZJYJMySp=FMx7sSw_~~U| z1*Uw#ifV-v6NUwkh;y9Pt{v(=&=ZE;%87x2d`FyItIbbON#z2_?0e#iC%Wfc7L zKOIfiZ6()ht3~|R*HwsCv-3uHecw=HM;6LI{`;&ev>MZ#IuS!1Sni_WJ5oQ{%VmmE2#Br+4md;KcgHrf5{pV@9 zqUzue0dLH&-AHxR?#Rw~eEyENdV7iA>Sc9>j4Olq-~jc#-^AF<^Q`CQl!|6AR(#2b zx7NZCe0=Hq&@`i#+kWE)PQ8x-bcjT>9qu+xZ!8rC{t9>UyL3vTS-p|g$B@`j_n$~f z1jD$2^^#ZPZ2n|WX7im=b$`8<+1QkhZA%gki8w99?N*$HflR&!w*O5xGuNHa9@u>jU?xFO7Y8;*iAX?U zYjeOc;5YjV97*siFEkCXc>)prfFBml7WDk)(A}6s8FRI5$Y~XIoZ@WHS?b0oilS24As6%_rsQl7+H@ z2{2vIL$XH7~F zGx_BRm}btAV-D`)S-4PQIF$z&Y|CP2#CS3B4MuI&6fBS(3+?`mVY0zA_Cdvrk3xWt zdXc!0S`*$UjZA_1_5p^^>)UkiB?(=9zW^>bKm>Q?&dlGf( z2t>n@;q#X$bdgaM)yZT?&%m7xU)bv+RabOfp(ouK^84hQWKvS7=i#PS*L&bz<&P9; zY9L)z{jq38t=!X(gwBw+9x{|0zM9FgSm51KMB@{dskN zTH1nYigKqKxtw6_7oh9!GUv94Yw+3qy!)0>>)Y^=IA4sTQy;<|WjwVbIboThatC+_(4q&JOu>!oSF#b1g6nCoa8W!Imk zgzxh##6c?`(a!OH*b8OK(NWt^uh4m?sx_-T?x~Bnp7}d=N%5S|AXF@!d0Q}8HFSJH zYv$^lkXdPom?0YPJ^2l=Q!W-k@uxyTr+*-!6@@9Wh+@2N5DrVQH8yvE*aJs0{ox-~ zmu~a5Xkt2#*%#Xzip@<1Y7#%*e{QDM`+ym)PD5p=VffbE8{i+MK#?JRKwh;X8IpNd zi>U_o`$_LLe%2V+KM)!IRmC^35SWFSrN3JeaXHhwpH${%GY2K3hKLA?}M*F+kYgdy{x6G=id zVGl$o);H;Q>?_PA78`%-TK}GC-;nSBNOTox(z3Ox^pB1Hjlrl?O?4)4G|&ar-86`% zN;K2!BhJSb06q@Qa3uFlvcJe~v4P*$md(6iclhbuxYW)HLu<1neBXTMj+2)Ibopm! zD0DB|5_;}00j1(J1>YmPcg#hM6qr?SvCjDgXNN|b%X!3aqMLzBXjIp{a&_*q*G`;* zu!iuC{n>8X?XYai4M{W{*=_L)MP5Z@hMmgprVVN%1g%pY9 zyyC?MrgJ~+8wHRd!|zo$7z4;Rri4-ES(VMe{fX`qhA33ik`w2c-`zE%6=eR?^e|?h z6{?aJfDmqIIX6#9?F(S?Q;4AZu|(qZ3J;s>ACGuo-*@~BYa?WQu=T}t9G~9HteV>+ zjOY6QaJSc_k*PU|J2ah<80k&o2145~9=y#=b5OX%HeMn6kgBQKJj&u9qfU+Pa}dB_ zv<899AKYfVdL4C@|>l<~Ch(RaI$*4D&Pvey!No(`E&mjS!a7J7ftsK6il zuU@Pg@bS9Zku02lT`OOHfs3+gA7-zYA?TzE-GXO4{`x$byUeAYW~VabTX+GcxWq+G zYRyslFAvD6$xt@f1A^bX!8SG?rb$+Z3QP~KrWb$R(AXc+1pV-`ABi8Z5s5L95&3$6 zhb9_WXzRcK6X}5pt!+0^NAOuNWYHdW7X@%sUWX#LYU5NT0uJ6X1WYEMj`yf`GRdzVpj9KhwbT8)W87 zdnb-VNai?t_G%dH=C?5rdRdK5dXMdglunTrunm-p9PG@HSm(YPIA*v*v3e1I(G0%8 z+7Z_Q44Su&oIgA^8RR<^j_~2LTI;FhLsko|J%GkRtj4;PTc>WMTzG6E18nCe$unS` zK8{A(r5NVkW@f$MWE-#r^0I>cqA(V8NKG9DGb?!x#UU1BumG`ijm_8dG2RQ;sDEPt zdNAy`uJm(Pt!Bzr1f#am!ojC8RE;IZ?UaaezYpA8jPfxgj^lx73Nh9^UM^8~hOW~5LAninn8m(|EBJ_LLQ1V%8c zje)lp|L3WoJIRM2>RTqD5Ba_2RF}29Aoty6O18x3=A-_v+{k7}4397=;QDUsU+3qA zf78Wl4Y(fF*OWQ8B;(E{Sz=jntADC?a?ncQ$|A^`Y_A$!*r~T}D#&5im^GuPfN?~P ziKS%$>(VCJj}6+@3|*V@jA79}RncpE!;E|Gxr`bu{CgS@ww;G!c{FfAsro)lK75tM z&lbB7yXg94EY)drF+SJ-7UN6spwYdD=lc^_Jr40t(-qzMzxaC3pr-yW>Q_a@0z^PT zY7kVcAfR*-m8K#fqN22*h;$;or3ffRO00lVf+8T&yVOWWDG}*4K!DIgNC@fY$?yN% zdtcr+naN~MW-^oSIeV|Y*JqXDqBPk`-)qa)&@XahRTGN!tK6P1IdnK%?qfX_lobqX zHp6+fc$TfOcsBYZDClnGCzlp4X+H~rtD+{h%6kRRw>q6EvR^&Poza;YFp4Hy_Fl#h)R8pZ+v_^aLO@@D{hs;JDu1qv(I3u48EtDi=(X){^ze z=x>vJotkk~{rh*`t-O(DV~8^W@RTyuTi*(sW+Uk3D5Zw+Dn zGlac$0o0t9&p8}36T^IiuL#}pny75=xVX541R2=+RGB-XpR>7FPPe_Fpb6+OcxZj2 za9oQ$#<7 zN$_Gz4EjGqV)CzOyiDE}75;yHrvGEN{8s?t^8vR1|5^wYtF`TpU$_2MCa zCm<;x5sA#a*SP;Pc}}mu$oJm<&xf5J_AGTf-L?};KEAx`=DEqIB42g#HA$pu=Ztjj z?BoN}cQR!8dyJWpUp`H(bu*ri=ukJffWmrqR&FT}ff5nkYg@h`xq_W(S_j-4p3%&X7%a{%c);u<3uv~b*)S<9hB1Yv9vZb(`uO zK_5)PdUI)pO*5}-Zpuj);K~8)bdZ_XX?3Wo4&W3zl!CSm+AF{%|O_ z9;v;#*nurWd&SDIMqkhj;ph_hY1X8qehz{vsb6pJ1ofqN@xfL*yq0jUihl0GmsZnm zG$RA^!3Nb_QT+r)1X}P7KM?({j=fo@_u-o8;pl-9!4c&rv!a!me5#cO|2zRHz&7a5 zdNt+sb5u7L5fr+7_)7BBRu!7Fyda30-RUNy7~%_(1e6(bP7>zr>ryvyKnOkhgyo3~ zuLr&ME)MbWbm;kh=Y@zECDoBt(5$faQ~!{b7#G2cSv?w4)2^G=&< zo^#YQXPpIcp97O>@r!Bs<|~Z8IcH1Z&Av%D?tq2m6-z=B;AU-eRU`3EBv`F zRvE?Hp7{OwJ+IvBrsDl^`*&iaVrQ18lle&=!=}Y=oVCub_EUu34AeLdd{@fTh&fdB z`_r#ru`zYjr?(%qU4D9{4~Q_4I*FQ2Em3=)ipQrt79SboPGr6x+g_Fs-=Ivcmwt=? zeXR7+@sX_eK1Kb{ISykFJ6%%>Gnk?|{45S1N4s4Wx}l=isQU^I*C)DX{^K25|MVAf zuxIni(^U!m@j3R$2LVvi)BLk*1x|#6Rjh=7P>RXFlJxutINxo3ei}Xvb(FWFnDNh zhY@j?ai5#h;9jF^SyO+mW(zhlTHAB^@U4*(=_-|%Mvn?dYlh99IN!i1&({p}#A=3} zDL0>5iApx#{A$N8!qNDYrDB-32dxHfx`)8$;gq(;KCH!reU#t4(Y0SKpwNnYqCKQE zF>cT6Va?Y}!{2k)1&P-;IuuAA-%cDMG8z1CU1=wo5K3@(1v6*yn|1p4zO!Dn{u?_P zJK%Fbrk0cx`-fTIMPPmvX0M`)P0_WoWt&vgMzq%Rc{i#u=xNm6j}N&&ygeRM_rm`& z>!3WLnk242XiXKpZU!mhB!a`ubpGqG=)%Dtpq?+=7L zH{te&Gu?GG`___4uwcqljkkdhL$0oW@W)TX`Wm&9-%xKa+BGq17e1=iPm^@(9|O&} z&=j~3yJuDPBKlLPD-|>PWw*mpoR-VJb%fr*+0x(cl^DivTl5H&%i7|WFeA3Oz|Kxe znonIBUlcRczAulMY1(>g2f3HYt91RzwyP?kJWL1*;?9e1S-;&TN!ze?v6 z+_>;5@;_R#sn5oL=i@&QV~kzfb4$L3N%7+NHwDAHYuR6**)%*_LJ$Xq~*rgF`EOeffu)WmT%~Y}6YP8)Bh0yQm>;C;$??$LAfLx*x z`E%a!)-PP;{r(fHYZWyD8C`cDjCEEcJ|Igs-JA^}?wq;qrfaf-FwJ9jAx9ZUmvbfX zdgJe9JwoFvW#20bztlwjc$;0~U6U3y4pB+pzYk2xcQJeDtOG*u5fpn$1PbS8tg5}i zjiYZ$DrS#gR zu;6ah@rgJQaM|W(Pzj@9HLcgkY>l0Y2vBPkQm@>_W@we;H<3|o#iwvnTjltlKgMof z9>=ZS6zryAgVbhAYvyIo#;g??t0S({)8dIXEtb!M&v0}O^3AjzLdH8zzP3^;+8wxk zYPW}*rJ%FawZAtv4Ifvj!+7kUr-47&Ve z*SjVB%(Wv8oWXyeOW89*M!;dk$d$l_7=F?*&)-$j(ap0%who98{8NLPfSm{Mp6E(h z)F5gLly#x_C(o&&APyIAZqdqM8qMDFe*b1j@9F77hZ?#MEM1eNVs(~F)L()fuKm@R zY4FT41a{>QeUb!D2n`u3Tg+~g=@;kZUoMK#7?>0NVO#s$)wYZuoCi7bDO|7k*imNL zT2}istu(DZ-En=hEoucNoPVpK zVQP|%FiTY4{li*S<7+~cQy=5qfrMV`#Q>i!oqIiT>-=!_p%(^{#j)W&=ZrpU9;2!e z{8TQd{XFi%;w-Bg$03ErffwN)T-e}BXe2~#X4bkjdzcr`5DQ*&hVBc${LBB&_u1bN z-7}lR{OCSpX%TX~h+7Rpb~O_fE(~ryMNcuByNW%Wz1y2O?(2L%xFGjDpILeBP{Idm z&t2*loPPzreVY19^a7*H>ep&Ze{>0I`N6NH6lB1kruqJ&cwq@h2<;AjECr&{;AM?H z$A0Faj^d1rZbr2n|B{k~9vzaD?0WO!eq@r?%b(iPXB-D)Fcy6k?}^-#Sz+IT^El(= zDMua$$5`Le;ti2MzzDRAIZ@W&cLfaQHDO+yh@CwjeOD+9_7r)z>`A_q13nnXrT zGG>~3qjn~}qFW0wt+C&5kHvaL1m&XEcv`}3%C?Q;9p0wDO2MxD4@eV?}R`Oda!6=7t!@pnrb_8P9weM||5q;Qab(Z4$^d_cqFk*&N zXZZ|tEIy2$6LdDH+Ylpn5xrUkSA}lDreV|Q2?3Eq>G4A9o*i(ClS<;a@wq!+TwljF z1yWM(G0Hod5}#vmeO+UOFUrW^ zIDz3irlnd2h~R%Q_lbjV(kSi!f(%XD$AvxlcE30&XOcn~um35ZWJwOA?E4n?buBy4*!BMhc-WbN zwz?FYQ0sZD-S!lwSDqeokE`?;HhALrDq5=X&y4RT$>b3`g<1Bp6C0aSnzEJDI#s2p zQ}1iASgiUeCuyp%IB#U9?sEM}PU?M$j^U($rQ4~(o&IkR7U|?XN}Q>_uUYn6-(GiF zf~jE>6t+-v<=y(~BiZ2<`bwtzuT3>AN%ic51+G3SJxPPUzmH@V+ouNLlRHn>UP=KW zRgRp5A(k*LW`g@aH;Q!AVZTPc7>FH+3QT+e=ga7!0gB2~gWYSMhxpjilq%pQiuOz3 z{TTX5Y0;SJ2qg*T>?$OUd-8*;wPXXO{kwi?_}J0P-I3AC&d2jAO%{$s4YWT{+WFw>fPBo%O|ge%2KTnBiB-_LW}O$b zrje$hTl)mpl#3Muin!tOh)ND84f=#JwY81iq51J@>xBFQJOIOBgQswg&Wa;s^^bC5 z(|ug4r7R7qz4_t+J6%T#$fYYCRpZYYH&^^b;D4m%yvC!R`M=_l;niwv`Tk}QLs=b_ zqQ$L4`S`_g)vBW0ikIE1(PYDz?zc*vlYrd@>N{r$*tytR&~z{(wAZ}7gOpZ%;ZDMP zVH5eP6UCgvF*w>Q{6&lbU%%L1tnU_`aG^)<@Eai~=*3RUna25jHXl#N>XWJHE}cMc+BShoEl4qa7ELPoYxR8GEt!cQ zZY#A2>Y!x$O&CykG=#DgUcTPnOxG?$)w5Y5z>hHKRWk$oSQ^&L(} zV8+xx(L7(4>-w|&&P?7M4}5sn^H6f7oswo=Kr!^_!X5R`SCtk1CCisBPhKq=EGc}X zI`+==+2utO{jYw*HPO<-c+hFr07pyXlZkp4-1YZWkR#va`fm61z1n!3xTLOl?A^Ik zp`PKAoBxX0pQNnzS3F8;Htc;x=Y{t;zAS} z0L6Y&UCJMVe{;5#mjOv^tA_-Scs!k|J*7SW_f)7y6T)X*DPAPN@5L7h5W6nK8~BRc zmYO^q_RB5(k_#?z>?`uA_OH8}HtWOt^{dKuUwovrBXP9oytZPF`T==JUu8twabuJG zgU641c%8_;_SX_@j2JJE5?=OV&g7WY&HgSfEiZAZz9uezL3_>Fro6IwAUC$;paT1~ zK&mm!1zgxsQdSk>)@~HUPqa~|S-08fyTEu-dxxI+Z9Z|+!8!c&`={H{D|`9&9i&P@ z^!CpNZ+QklU^M$xhtgI`!mcrUTpb^5FxpxdY^JySw^%!f!bt>MU;!xA5;XwE4IXS~UHUc|%a}&L@C)hPdqa*XKU% zFXTbe^1(f6LEpW+ImOR6T`pY;s}AD@vn76pU9)iF@#8M`@=-#+2S;G_(g??doj=cN zAMsU@z0Iu)FK@tZdOXB*;>VjYftnrne*I^As;IqmJLa(_V@-;5Yn^_R?|@a+!|Z$e zsqo|#{m5b0^(NkhTdm)uNFVkLQ86XOCuEV_vm-P-m}qNtTXEq(E*-p)pHFQmY&_{2 zGvW8&qzygHr(@|xWkNfvYBT>;%=#VOX*a(ml3}>8{w}fn)MLHfzikC-;)3;&^F4S^ zIZ>TNoqIm>6N4Wsj-Nq0b|3N@`kh`bdrt4guf&ni#7QT{(@~i7Q2jrhw)AdBiZprV z9zr6MdWXAOl-GG;;%@geILq0iVymwpyrv^v4#)FMn+m`zaf=tX3F}9 zSOJyvg>0{j<9UgE(?X)pIyZ~I3l_4hSw7w&`1Jci_R4S);>yD+)kkCZ?5Yq(&)jEQ z3i)TzW$>uSQRfd|n}3*_Uy|@F?Yafh{T9zB6g78h8uMANQnYMCZaF61F)%y+tMnt0 z->)?vTpZ2I${QlAys&idJdg+(gR@V@Cmhl}sz>1)?e+cQC1OS6w``$VzS zT7Poo#m8UFM~cP$($m!)zk;i^j>LmBf+r?kLLSS6IkLVMbc5?4D37(zX87}H%3-WS z(^^IGMSuWDmNsmIHqL2H`oU^vhuPOt;$WCUPo5%S(gF_bF1hX53H&xqO10SkO)QF9k&)Di+B>NNYTo`Cv*AJ~ z*X@Yb@MqjyI@N(uC&#WE_Dz&nBgUplc?eIf4#0sqs<*&f<9!6If3NYvMAOzjli#ky z==i9S%Y{OKx|Di{er7)<*b!w_+pP)bvcfmcl%RLk7n)+^FJk0%YQLX1e{{8;)|FQrk9MS&t;B{dquOGVX zwTkWnfK||KN1!D0qh(_Fkv2TNrY~+|4Ckww7T}sh&t3*I#W%C?r~HHQs$+A*dJSK? zL^~3W<^O!;2Nl!_c-T6zx{gmo`*N`>j9|8J)%M%QPJ-mYfuJ*L%Us!~Sm4%CBzMAo zi3y+L#u(2JxcDXI1fHJcTTaPL9GAmi;S6l_v=xx@-@cf+cG&sU-vfmd{c4RY1ZzmG`Vo1>Dg1%p!K62<7E*u@avE5@!52a79uGiD~f0RZ%b%JUi@V5rDjxTno>?%`}5Abfy zMhOv)w^a#Mn9McDtl@&H>jS7~H=`Rb2kwc|b=oD$kQmieUzqN3x~TkT(@;#P=VX=u zMkY=cEv74lJ^r`pozuWj-IjBjmC(SjX?wA-d8jDaeq3J zy!Krca-Zjn?~dcF>=v}$i$cCm4A-kgX5TuGycpN<qo z?pMbKO^Ln`z8|Kb=(jSux<#a`<-BPhcpAJCJOyJZ}R?!8r!X_U5ZM8tr}niTg#Yrw=bJ3r|AZvmxq(%VCG0wbm(Dph@f)Cbui}&J3)-Loi3e`Q z?PN~m)e~O~DPfQ(Rx4-<%6@%AnBK;PyM=GULdXsjPb1X~)aFE!UsyL8?Zsl&G@w~M zQ5Xv}Lm6}%Sd&AG;U3WDhCYnz^WaLG3_x=7zWpiG23la8>1HA0`g{DoKHBUZod(|9 zkrT|Vp76msZVQ*BPqS2~HIZx1;0*b&r7z2$b|xDq(QJYwy;QU9!3O`>U7aB8Z-Px# zT0FM6tpOR5zsWeEmeGGNUo$p-1MUBsT>I}Y=V9n87_)@ZX{Ze)u1CZsFk&mW{!*dm zucR&9^Z<+VTw}S0u}e3IeJiE z_A(2Yoe}q__|Fknl)Jy@Giw$JsR7Q%2RU}DmPI&=w?&0q({ zetnPV4>5>p;YIggx!_;UXGGirfAu$C+1Ly){d;^%D|4ArueG^%ml;B7bIIX3Y`@(8 zO@%~SYoEyWzRAb!%?g-;M3DiaV^EHO(&LetTyFh?Rx)UiVtmsMS7~4xq59PRPPHgZM?HkG+Zs36uO`o2iF_ri7t%Fr|sO5dkQk4LRP>+DO-&KzS{h@f#STV^wyiZQN;H0!QE#W`Kx9NBn&_ z%!t4HRW%zE1xGUv=fc7|O>@~`9)~u|P^LQeKpnI&6`5s&^_O{T-DNz2-)hdXY8$j> z=e{apkrs^JsEG>-vy}B=Ps4>)FY~%2k)gv=6b5?nA8kfSHhP_TJ+iQ0hf+eK2A2b0 zW_Ih&;m8<*B-SRk1o7J}&vm*N3QA=S*-}mYCmX4?*(q$Wh5L^vN7ot2W_{k*@lLQ6 zjRYs9#7mo0Y=E`XeQAj<*$Lo;MbXg*X@SX4ki5^xN%Ep}eJ>Srb0qH8?E9?bw|~%J zDQ~aJ74^vEvH&k$?H4@S=plpK$4_%2+EWQzv|$dRqgB16Y7E75ySegd?)^vK{(|jb zi+`*OLmZsO_3_wca20QmWw)w|zrGH=(W2`*%(f{k3~xfa3FHhDy3E(1saHIJAy@o3 z`dv)cIQsp|plvC|rsDW#VTLEnGz>!7mZG2(-5jlR;68`K zg6zw~?>E*zj8x}I?K6QZ^jW8pBJ?mDmo`eDWPz0Rj>d2^AIL@-taow}Jw1HC1wh~n zqK&7ejpYYqy3H`|JdcYXjzT}d&=H>GLZ zcV@s?>Gdoq?3f&PI~cvzbM1}g6fjDIalzzNhzxLf+#vWBjQ3_xx0(*vZc>I8Ta%YI z8}k4-YYJou=eAm2Ua~0!!F3rSz;0wwemO76To zb&!t$N!mJvuhTHH$=yM&`441cU>#o_6kH5G&jokO%@iMcQd%#2*y~xN0K*~QU9&-y z17qX?BeYI10^w!J%juBl{RK*n>O!sDK%BVJ-K|BK9*HD^FGRpP|H)&wf%eQI*eCy1Zi2 zs8n2jW1F}@$^0B==KHT85qKU{o}ge6+Ux6hFJt>TO*c-8;7)C1Go2Wa4PHMyL zJmoJjF~{=A7SC)m21-f){;vPt`gWZxfRwtC<-eIV@_tNeg?iQAfL;qywu<9DS)SLZ z)vw9UkODu_qS|YZPe8IUi9g~q537b?jZ`QaG?!#+P@BI8kySXS=oa zcH1d$Du&xX8#~}UpJ?5wc~iaY^iXw<^4C)17|m1HMBS?67yW*9qPuTFmu|6M#H2GS zz}_?Qpy@NH?<#_6--&pmf$115abnI{AOc=k3k;q@7|MIC6m1_7U)NxCLqj`K1hepi zvUr(K9b#vf3+u+eUOw+b8=wA$bh>i*QI41J9B#vABTb&mSy;|d4Oyf$c0-M?L<5EO z8>#$Wf1mUwIMMJF8o)L9@Jj)k26dw!$Z`OBLz)fVeMv_;glWs|wO6}8{CZ7IKZ zW;v#p41PW84awG_!Y}h|&|?+3WOi;!WeDUb?(ViVu%nlU-YyeVs@gkR(y4^SQ8F=> zXfhg@TFyhwW)!I=;j|jo1qKKV?6hvHvM&t5qXXv17`*YR?2o=NII9^TVKmvO1$Y*Qy z9n;1mJyUhVJgp-clP@@u5UI^3dfK>cchsoH;7P4nmh+OqEobj2U1_5!cI8n0qf9{F zcLBHXB@@Wp4_Rf}<>n-dKskY&H_xU@^X1zf7)lVtMI|T2oVs9$QRPo;J z(_&Wv@%DqPdVL9@#OnCs?V4fOeu2xl2Rea4&j5Y=4tVP8A|W{@3|MxbsaPa@Mh|3e zvx=eKqjF4zH&lC5`xA3IP<&uZ#@v?!p~WUDrx_<=zQS(*M#?uPLp?g1<{wVMSkQ&w zZ-U;hAq!`^W74Dl33qMZa3l4*17*IGjbDI7`p)D*{BME{c&Y!n7ZoYG!*cz`F-Cs74`~down}Geb)gUlDoHO7S{x1T-zfB>ma~ zQxI+rfi*J)$2nglYF*EL9UuR|-?Y0XBZIftjJY+=1tm|3JfHv2x!JDw65eBnC{2({ zxQHtKoW6Cu3Hi(M!pa+OYNSfw4a6TqMw?LRv@v?|pj5+Tbd4eN^1mb}pIybyx5iHg zKF}F30o}C$f7sfLkUw=W!t%nP`Dg8wX9(J<`3d@i5zVl{#vJK+afyRrO z-nX`IHfTzL!x{Fh>nXZ9%CtADsz2gYkuCAei>Gy!V>=?GVmHs*1o! zWXU>?{W--Pn*e*yO58zsvAB%(FTffJmxQ7?;-0FLQkYN< zn%#|sa;F6yFLVEpkzQdtf)G8fAi#xU9k(LGbM<^0bGZIqAP9@OY?c{HqJdHP*Kja> z5qFU2+(fu+H<_P7Nqgc}i0@w}k@?Mh;1{cnH0 zRN!zPbr^?yIUsJ6F57&&oq*!bfwd zT2U=$N2o9={K9UVGGKcwpM-Py3cXRqs}`aq3~~s;Pm?fJUUr&0-c`VNX5J#d zykW-3AQP0f&8tYmgaOWlZA0Jj)!V$s*FCsJ+gb+lkkeMxqH~w>xt#;yz}t@Y>2sj| zT~%a@et-Ln(nq9a@z;`PgOq&VLQE0Di_dRP-Iel1*}HZPIUy9TpbafBomDsR5eB-| z5(Lxpl7|t<4(h|Nrs3*~>u&#i4$VG?MjsQbzmmF?hEi#;qAIw{_dKo-lneo)9fUh- z5>ngMqI>qF%)yr^s%@Jk>4mO}f9Lc&z9wGk(hzSP!W%z75M3euhBXyRYR$fgsZOcR z#FYwtG{)+(G6%ARXE9l`)-ivh%7x^;Lr1+RI>BGjw6^ZL%|wjuNfbPzeMItc^YUET4>UxwIWQbpSRui;;2nn;GcXZ%{^` z?d}edZ7EB<$fIQ3MBJjhwHCy_e>|!{h{2$r+8^;|3qv%=B&3>7tkbZRw-f03JJl85 zsGjrdAqR+$8#qQBYp2K357wO$MYm#*r>{@+zQBCae&3*YP-%&mWVN2Cm0>d>3mD5Va zzgOd(2R@>6kCgvi?4kee5u0?fCo^k0V2Ln%OyMJug(7{!}53Xy^ zUavPTyv%7y4r&ZyY<%r-^3j zUFddLu5K3!?Y}(Zd*Nr3o$PZ{Ws||ap#f(7%84`=QN1kWY_r_2F@7aJ>g8jyEc-)A zB_=ur9e@1!Xp3GTMv#+k_R3^?TLDb4YMfL{7Ek#Y^`5NX6QY}9ELMF`;^kFQ{1Sq>EOP%&ov|cWyeW*0`-W~ zt<@|L2c0cJ8tQB8~>q(mS62aoWpn(WZDCtKSRyR#FPYx6q0va_C^?k z3Ud>D(R31(zto)>9;{axkV(PY(%)J_^`|5SU;D)EqZ#8HJy|~_4eGg@eLlO+qht=e zIGJ4cDXxYZq$44W2fEJ4Wgk}EwootFf-#|$z)izvrJqfb?|09isPNznF$yTb&IC07>;Rg|q&S`45#rGQ zzV+RsE5HZ`Mz!pPdRugf8-7;pDEJ-0zwBg%2QQyV%D)19i$GP@G4HN?-w-_k8VGee z8Z=1$j-$4PT&v4=II^Kw-_oFYU5@PpHomxK$iqze4-R0fwbVWz^2s*td zaQs{QKSPb=t&9B&*ZcNC)VI&-JiRI_uX)EpMu*;Z&gY(8#@%o)ghHEp%3n3haJoqEYKyVdd%uoEwf$z9Aq{qyl?I*LzwlT>_vs~_v&Y9C?K&~B*J6)? z%ZJTIwL#&ddc<<)YQw?Jq4uQ1G68YcLLrqOO#|P$^H*|%7{64&Ctp8{7nGT|XK%iZ zSIzY%YG~dHSb`$6d#gZTdCF6rK!oFTaOwdqubG?&Al3D(*_ICP%eHDGYOx;ZMVrhj z#~{HX2wPXrG`$@dS4GolRjNs_Q?_pO@z=FU7k(%)0v2;%te&7#t7GiImOR{U6W`@w zvw=q6Gp|=~wh9I}l?eO42X@d6z!Pyn|4gu;=SeRWU4YaM5A}@G_>oyPF$Y08B*d45 zQyLwPcx|A~0yb7#mNPn7Ong&;!<4wDSo%kk4k*5#zoGfok<(B=z*vRQ2;Ik^x1|#k z07EW0%Jk)P$)UFt!i7vD#3tuStOZQO3w1em^_J{u#SaqVE(tih$bk)K4WYAjXMC@G zuCh}bnKj*hwg!yjrXwUMlPP(v+!9{R7pc~o4SDDmE@U90pQLR6wh0{>^MID`v1oF8f=_NX@#fwOVZRLVfCI7WB zp1h*%JWC;qgWe;sRaN$zarC7#9)J~_FL_rjQ`~ETH3M9=<>H$YpLYtohXcEoD(|vU z^vZF4BIu0c_dgGVhSLkH4hs`wHAY&L&N*Bj{+LO6>yxmQE_Cj^(Eice`tQp{F+IH+%*UmCyEJgg|y0cWSmevR6Cp5I;L|E zPou0zIgc%u88Agf@KGn74q_n2*~e_=V2@toq_)l*bL|C4rxp5KpZ7&*h<$j7kLI(; zhod|9g<3>bZzFg{5Pqd}gD^Aiue20pxxB!Pce`op0l3;1qB={{M?jP^`kl;mhYCC-_eBQ7H`sMeapMk@@$_ za^rK|;ri!B*IOkI>m86Q9S4)CUljL@LuL{slO3XuZ5Iy#$G=Y;G5VOiW#5gSf4Dk( zg=$ZpON<0C0+<@UaR^LgfTvVp3Vcj%*^t6HL~pQ9{#anF7%5<>rKk1SG7s@{`Ty8^t4 z|BRl{ABYyI`eYm4Ygt_6Z_x|&RGG{F!G&R8J0IBAIi08++Wdp*dUHUM%OM8%UUWf6 zn;5Jm<+naaC?9C!5cbcz4{hfrE@l3eiWgDVt8Wo^geQbls>9UTc>tS zJUnhClwoC`{8Fv%+D_=DCebTfT47`pPEn}ddKFs_J2C`}jfYs4HjepPlHiTLQAnwK zdTC=7=@CoMvSnxq>B6C^t_|ST*s&(`q+j>Dhj`8BO}j@b4LlW(x~hF}?s_F8?|Q1V ztVmW~UF86F4CEa^du5OkR2@|{YGn$R>++Yb)PSg$zNzt-@i!pyv#Mg1n|xm_Uqkpu z!YGO67bs^F#T}@MeJ2p}f;USI5A8n@+jpZ$--|*tPIJK|_z4u&As+w*$3c^8XM=|54H2s~RmpDmE@*)aa1 z9t4&_YJw^F%wC^8rM>})D-8|@B$CV@m2}&Unmd=dU%cY}ZQ*o~kld-$^||Ubw*9M9 zW7Y@JeezTF*SKi1seCHq)K`XNQ!)p=(T}$Th%#t2D+9fq{}Zsu<+FKJQ+?uLck1Ms zxPC@=SKT!xPKu&4#*QTM0WGXu0eRdZ0@xT*~j=G_N{QGVs z>Oc_qZH41Na!qQ_WN4q;#ZEP0Qu=pkv&~Eh)p8q$$*cpe@Q@NK%n~N1>anAZZCQ_4 zBH_Usry+{WW=i*QLl$I*-zYS+hiJuR_P99T|Ih_fW8p=NZr`c-v8#?ZCkV_*Tsuw zKzd&W>~)`4{E>asIn@`j;z6k2KXc$2RwpDZ31%)0PRJmR9QVL%xWUujurhUG=DwU5glCS8@s z&()@9-jT=o=V??tBky%Pvw!1PV88!kHv9hV7oGe{OPuoDugF06K6H#Y8~U7^Hh%W@ zyyQ)#kc9A(0i|kE$*SntY~eaF+?~tf7y2L}4~T!6hX;k<_=`D?w(g|Aay@mXcK+~< zIBy901cYPAn0xtWnhMTT?&pi69iJ$1H<4_3;dnMi=z4YgNC|?SUCeO$a(>oEzS>^? zOoXKa_JirozlOJh_M7U|4w@f$aYT2ec_2BfP)X|{PfGRu)4ZsvllFS0v;u4bNL6{? z*w9S8Gqg*%Db5f4;7q|PI^gdY3cK4Zst#^J0|v*;cNM1=rP~#S{FpN(%>nB+kHW6FWCbED z{%)@Vd@&UKd3uWtPV-5$mQ@Yg(8%q?Jr8Bgb1^ExGnS1rnaid)swb<+?x#Ud{7*nj z8s}OIn${sw4MP03fPi*vUK-?LY3*my0nHGqQNO93=d_skbI!}hlc%et{~0IX@;rIH zPqwlB_xPzNHO^n5F#m#MBXDj$#fC5J<36MRtLAEku}xdUEVKO{K!3-zb=>&FC32X% zy;0RP5OQl#E`V^o^2ET_T>`GkcR*ZBN74ME+BR2-@P%eYyf7h%X-L+%B3&^JjQ@3y zdsHzP+UP()cRu`V&A)_dnIIu9c4{a&6-l*3&xxR)XkXQsj12$v)JjhQ*R*!n1e#Jm z@F(h%uj$@{^zQ7f$7l#hI9QOG; zl4aW}vm8JTwk`8ah`_kZ^>!sa?;$KhF6YHpu7}zZ-2G+YFC&0g>{42x5w6PU>KyTqec1YWYOA<*1Za zpvuz~>y`odJ^YNjGGsk!{!23d=BV<$@4)M;CnEnyY97f!1XNt~(-i{4PN(Q*7)tW% zR6`hH=}0}K{Vn)wBV#FQw>M>Wy>%pyH9jqRj4~@4RW_jcfc@70g)ExZ%v&{+U4P@; zJwr!*5#SYZ)DH;04ytJseTaHu`1Z!Wtg$51zVtrJyD*hSzqdz3g+a1aD#6PGyRqpI zYVq+OzNQ;LhxpN#bl{L)UAM23(nhZ-gnKEtyr0if|Ln-!R{hKyhjCVx`zDmCR|ELZ zX5K(3=OSi8IE2SKL&l(lnnLBBuD@Z;|JC;5Nuhl!ju-m}W_mwEl2UW`S?>KYHSG7c zXDx4)P>xOm<_DGa5k zkz2n71xbtF{l9>oKaU06r<*5A;@=A^K4CBvU2E8P+M5T(WD$xqCwI?}o58=S_cyvIlT z?p#d|pTVrjpPTCuxaqPhtMyat?afj(%IH56u*0pVtP!woX6w~ldjxGW2X!w^ME@Xe z$x{G^SjpsG3JPIFsY29O<_07r4TygQ^<%3g>04zVLHLF&frxAozkqhrlxpN9IO{+^ zN;gMAVR*@Jw};fwD@(b%$=eI!ClLn-N93{%_k%3Kr%mM%$kf#I3u;5ZS%W76+d4sz zpWj!#zklF&w`#c^R&*x~ODZW5%Gs6_m9nG* zIZPorjKZAStf)o~qeOBTQK*n}lr3ioBZoPk8Adj2X2;)K_vicj{r-8Iw}&~r-mmMr zp3m#~yk4T2b2WYBrE3X$>P)&@I==my`Faa@s}HQAK2gi*cDTk5;8Ek#HSZBqj(Q0l zweKI+gP8mN*0%Rbz7A+>fD{b$R=&wlxeo<>V{R*?j(^{Cl-~eT%M{DyuNp2)9DQ0} zlo6Y_pbWl4kL_No$;*lk%Z=90oeXjJZ+|R08&+^Ibl|2M3xA4JWh33 zlv7mtMiGtNgnPIGyx1sW6U#-vQ)9~7`nX?(2?yUD`VeCF_+X_!wxab@mD47W1mX-p zl^RA;Zs9xy1K$?<0IkTf5S~MmI=2M(6uoLTE5tomhSTQ2d)f%JECJ5tG!3b>}{5{ez zRN?HT`gTl6QbrBqvkb-%pB|R?kq{H=a||3f1yMx_?puk$0^`{Y=NusmO;3(*rAWx5 zkI)0HL=AEJOCVC?@;-s=LrPvG;jAR{YoMqh_aN*L)v0bk>sOYvp9g5|b~7Va@lZPB zZ7kTkY|4CA`a`q>7UQByvP~QSa|h3r56}r$adsA%HDy+5TtAP&6gN0un$G+_geSlk z722#(%8{O!nDOwX#tp0?cs`Rl}_Z7{C?9-xmyaKC2-qEJ@O7pUaU5;Ihw z@894QAwQixT=Jwc4o_y!B1@d#pTE*hJ}!Z2lLa7Sxp1utz2Wdak@X{=mFwR8Bc~7A z+@x*GO{<%I7sbhA;niQO$pngwJ*Ag2(ZP<4x-F*{|vI$ly_upP@u%1FNvw~^we zpbkk9>y^JRe^g~%PI1myabMSx69FgPRB6n}txId}J&l}uJk6zJ$s!@eFR50{RD}lB z*9%wjDUP`GiG|4!Q>yO2Z<Ad`2-WR%=rrniB+0aQ=Eu#Ybx;&Ky=4ez!I}mHK&H~>K2;oL__1nwabe3 zVeLCI5~rRPsq^s7Vr$Hx8oJ~9H!g+DJ(S6Gt|&SfBh$0z9MAUeg{;rA-Qj?1`Bg z%?-OL4;TM=z5VsEV0kamcRPg>3zg;2(|&RJyfGgZrqYYQ&g_Kq;zbAcihh>fq9Y4L zan2Xb?=RszMY8_3#5QgT^;zW9!Dr{QVK=lZXW=q7t2l`4Dkp!vNH?`@s99Kc;$mp% zWA|?AFRHLs1+2=M9Mx=WZkP58zw_I_e(59L z!ePRX@N}-zDKA$?RPl; zCAS{Z?coT0(C6QC>PJ=(<5z%zu&UIONlC8}EG=`c?SRS2;qFYI8TqLrSL^A1KwtEz z&Hu;-<}7FqmNz9~5>-LdG~NVc@-GmZxmL1>Mr-M?G-D2RgH2IimngE-`TjHSvWD{8IOjcjH`T*Zb<-M*=3lAFXSAa@Wh&W3uzL;z=#;k@n%)LhM$( zwKpbQCx5hBwa>|+#{+dmd`+`wrd|7P>^;aQ7Wa4vOHn61`Q@L=n)Bf{)TNE+jU1JR zrL0kD*%!EF2^;y6*Y8sg@HYV0+TCqE^bOy6;80Ly|2gm$$!v6*R%nad9u~iHqC2CK z-R0MP)rO9PK(W$qK3aD9|J%Na`#iG4cUiB35ofPhK6`bi^G@B|Jr!4*%+7ogP8kgJswL%r0l(#~&@_+RecbLQi3=ZCxqU?TX^u4= zVJurNJfYz5P%}&*wX7P+@}8c&5i10@4Cj`j@74>+HgEhng*p~Lv+M3B&XkU+G}<~H z2pU-W5jq{t!!8~OGIE*p7FxNZi0ug-M+e;lBXipmR^sRFgg+X#JvX%YtLV(h6*GND zns*QHw;5E=tIWK{=GjLVGv{NF-+j{OFAh{~to^-D%lmmQyy=(Rn7^T3ng${w&Px)$ zJmD8`_~1ic)A`wgnzmsR*8RSY-Ra*BW!*2lkiRWt%|%}iHU8}5ORcv$oSkI}`uf4o z(1gHBaVnF%@Zv@_+mgIyxo*J}eyO0rPZ%w4fW7ZWYqqRH861~)D`qs!&yV#*3C#S5 z!oQI(3^}?trsvK~s>l&nc9KXYxVH$5Vx8)<tF}_%@T5NAT zIP^H4$uvvtmu8Li*W@SmF$rKlHwUiH4aS%v==taQ9_`yUL8}Lv&dTPLLC${Fsu%Jtgfy)_nUeO4v2bnY8$Qozn&Hk{D?O$! zUb@irMdl?4AH5?{%8L*Z$CV)?ce9S9=FAce;03mTIB6;S?uGLohObSHpi{gKoRjdeM0iA2v$@{ zVNZNIH&E2^JMgr|-=z__xm^R&e}V?{dL9=}q)~7GLF$ zMq~0_XGz?BGfZIsznEf8l>106P4oL)^p!CfG@X!{;FnoXn{RydmHzgZwD{S~+@G4y zMjb9aFSJ15-@o48_Kz-`JTWS5vbqJf@1XG6T)^R*vEBYz%R8Gh@zwjJ-;91<0p7c6 zXN|QXffC*2sDlaB7^c3o8O)kOJ&m*b*ku7mf4j2^IEa(IgBI1{XKfY?0V z_9SRRIwstE%Epni5bmxh>gkF=*eme8hX5)yai<@XJuzh|^YRz>Wr*;paFnSs#6f zwhF?s4W%AD~TXEoR*^T?3IXt)- z2O46(G-*fU)u`qsVEqXwgc9kBMSo_cJzH@u?`Pn_f&=Smpun;O%cca@_bo_x;@r%) zaoJx`fVs4Q4?&8US=nKII!e<PQUw&02eJHR>N&^(We`X=lGzBb` zZ{eYM>CVHu4x*;YFnT44Ti}bOA4@`tdmu-*?#@U$c?GGa>O9e!llTSKSj7kt!}4+4D3dAI*}=|}U( z@SOa6zNZl55C4_%U*1ZbwnqK7;yIk;@F;)9dPwP4CmdbWp_tXDE8Q>#b1&yV%#a-I zv8!@YG$4#cf2-F+msl8uW=u;3e5o>8^6$#4x-W{|cb?@LtTEHOcs`c*vLDRgb-Y&S{=h^*?r0h_b9(ZdnCp+nN(*1I5{rIUNWPkB+wQJcGKL!I{Eknwk(1?L zS}D~)x5zkj+@H36m8A;BXi&cFHv=mjf;Hqyt5y2sOC1t+StNT|u5_A?>1Zs>TbgWG zdYq5|=0~c^Y?+YUFI|2QOsMt)f9q_@upH1mf_-vP#k(fqgf>a+@h{|>se81qx;zvz zH0N(RcUN+-nZbM@39aJHO{7YMHRbvYTcggV3UzG#Vs>~;QC}s_V0XQ?UL|V18L}_u?5P^s+Vp(qrz;Kt62!9_ z8*?EkrLyN{$b@8A{48Z3&SV#hUk+;UxSL|5p#G1i@Pf{zgQ_y+(?GZE{P}ir9Nwv; z;E1PSo)T?y@tBujem-xrLzd z4zu(;y_n?HXVq-5d(8IMTe1L`Yu!HjSM>+g){w7NKN@s(x?mITv?ggF93TB!>4yOQ zZJmCbF&ALjnXkRE$Hk_?%_vyK#w^-@e^aU;NfI4+q2)B*-fC*9!Jjf#mwHjMb!yc) z84S3gBu5h=hH@IR~g?K}>eCTsdHX2GAe$(2ndM~(jLzE^mpe>o~zM`~zQ z&UJS!pZUN1 zoUX6L+~R4zkP$zimTHW?&~amv!1LLDVF@05X$qKXgZXfARtNhf% z1v4POhU_%6x8Am8-Mt}Mc}~$NL1*vnjt|Ar#J}9fg&Hrvi;G{_Riu?; z%S2w&)JH_4Q$f`sbQVlxJ`%6{?((Iz9{LcEoKqGuCTMYr&k4L{e-L!B>|suiA(}qW z>~JL8_~)QsANvPiBBQlt3bFBY(ug|$Et%d8S(@2mr}LR@HJVgfvCf9>J@R$AGfK{S zD}i-1>K0b_GXLMAjmtszG+`G@fAsnNt9YaHZmgG)N&)Krn+)?*KM(UvzQn~!ps5@% zkXg@Y773s@Djg}}@(vVMHnT>*=xc5XAw9mTmqE^aqB^E+`*TC0F5DP-#)!Dw-^xsw znS5>*a-7reCyWTrBi2#A^ke}V?W5N40AZsLFa`mWz_(Bou8vvi!^~T1I_s;VDr6ts z@7mMpd_FUWgtFWipEmT9iDxGGPr$*uQMDi&%;F*JP(`9IbbJadlX~?MQ<2mEAVgLt z>^GVD%yZQ(W`(tdXn5!gH&?2H(|=(ZGyWJfDy*i~{3daL*{u7OI@h&q%8^IkoYF6z zhe!1VnXY;r9gWyy*8|}gZ@C}dNh8lQyH0wykGvK*khJlqrYMVd%bic+pN?tY+!#}Y ztj^u}bRUpY(TZk??8r4*4%YCac0><9)#mD^H4|&RCLkdG`8J4a^FOylzH_o?vr&QC zd*ak5|N1sSjJQOm3$jPa3xd*7I9*VBJYgw&dH=}u?l4KNm><98m0eIJJz!VR_b7L%Pl zjl!V|4=+G>FvV(D-(uAXE%tS{X1;^s<{vpHGVWihB0v|PmH@hZ`#}dKuCi$#^J4~P z@^oCRR#vV8OgClP+Rv2xF3v+?csPFoKgMa&8|87SST(|!lMlqx8v(x#%Spff4 zuk>M4jsLYv|5T-$C1^FdP!Lpu>)}y5oKk{XLq!gw-PoeS^<}Q`aq;-gD`8ZiZTe}< zDCH$r_>P1du(Mg<;WuB33YSInW#~^*iBMSo@MaB;$^+hKdGXbx6!07f!h8gf8^Gr{ zk+97j&TAPOWmgbt*yTlnP6WRJfjQa=`u%m8H1_;3f9^z z*#zX|qw#DPwK&e8ype9apmKM&E?_nj+m(!FZtCr@v(qM5bKh<(NbP|He;$G$&x>mtwF-L_McwKgAhrL$%Mkd z*3U296-_k!f-D>)Wwg{-FGFg5Fc$@nA0Ql%yQtAqp&<^M(e!N(Mik|QtJuL=r~{@G zx5HQ?a&KoPDub0Ecw6LP^z&2haV}>BPmug2yu~PbFH#f?GGd_^UK+iH_z6%$l9OMF z(CU5vZAn#k!KPap$=2TF&!!x%{3$JjeO#XFH<2N2lTstNWc?ok0ZNt9F`SOx89A1q z)ZYgvLWG8U_98dIr~RsLJ9&sq*48@>@Vu<>5Scr_pQM@DAvTQk59JJhvtGftnV`CG zC9`9Y$Kb<)+%ig)(&B_LTOws_aoJV~1w+EtrUegbR13iktlBS1&n2J^X-3~c)m&98 zjb+3&`yozMZmW9nQ-nC!v4uyZw=~KS%`UARsSLYE@9y`@mwFeXC%vW+%`HC&14bT2 z=V`d6CB}0Ge|2o!l)e#HZ)h7Yi~&Pi-_-H5psW%=_~?Dx`)JFOv75Ba^>Cfju5&|i zo+?AFESJe6%2=(e4-ypVt95w1bWSX3+^c){EFn!YpsN^J)-HyT-u*a2LFT3rx+K*Uo8(08j6Hhq|}}+JBmH zFQUlz;(5iX%mR4ubc!y9KNl@yaL5m1^A^o_J{0dX>VB(GU6}jL&|9qiUJG_Y^v=%M|ubKY4JKj$6W|nQa0_ zUH#r&^OgUIJ&$x9C!$lHZgB2kM0YX(jqS`x6iM-oNdHNle*%x7k-Utwc3j~2x8>y? ze;1tC;AXGro#(%yp(0&9kn6`8Ad-dIn)m0#4!J5cL@B-tzLOn|lip%IYs>UXeNhp1 zqJ1X@jZ0|?X zxY4to`eXp^M=iV%3t+q}cxTws*oNliDm}R871v0W9*KCu)T&e4y7P(6y`dz6BxG9Z%X&s5Vcx0-(&&h#*W&x7T8OW$ct(9jPKZ8#8 z1pz*;g?9pwGG~csQLV##zccB{xalbo+t`~5{}Pf8l!Sz= zTezU+KaIKx{(^#~-DWG7Br<~8+IR{MNdQ(H!A&TrT(lUHCvc}kP_`XkaA-^UlRtSM zLPh;pjRiqAEuz?(w|u@X4KUB;tph%tIsd;O?w~yj6?xj6#fpZy8RvKcy$PKpEbb1b zyW(5k2HZh6=9}mljWkRXAI4-+_z}Z2N`H8H44iT#Q_SwIM3f4Q%b14J;UJd^&H_F! z0mXlOLEH@!@V!|MjrIn4{V+mvrr}fd5e@W$43!0LqOUmAo~H@JEVSgM+F#V@fVyIM zDlp;xA#OZDGDCmOLUO~|9i!C{B+z1C@#Q8?-t)B|o4bN1NON|ggIoNJdvsvjD&H>e zoVef>O5)!cyV@khP7^XS751WP6Z0)ns}&oh9fODUFJiM)lD;{gsxucXTBgMir*=!= zoERnW4eq&T;K6vU$AHc%E*)EXR&UCpbYKnw*@5M$BpCuWysqtzi{oYkAoP);M+B*4 zPL&97{X~=l&?GhH7^!4<4^n|&FGhU)u_#ZYDhaQV$nrQAH12LZRd+)@coJw4&L8WK zjn5*AD;a>m#8#9_GQ+|i6VQ-*wh5glYGG`d5DQOkexlv}5Sq0$S$L=3=8 zg>HBC8UMg?7YQSVd$^DbJ3a_3C}J)EQoxSxR{_@7%X5iLrDapO{o^6|K(z&z7u#Ir zAmHw)msJTL|9C!p0yO{aWt%9wWRJpI%r}!d@NgK*vV_-{kuhQ|2Bo9qP*_`ZRhHv2 z^3Tni>%t$rf2MT;?g^OVpw)PYlgxzGE+2I(aciF0QXTlnH?Mn|4S)xyu(r=Xa<<>@n% zsS3D_mqUmEXhexe(%n4V49=<0MiU zSWZGY;`1(IweFor_%9sR565sLeb>`naNxe%O5_2;&p73U0VV96pZplPw~a}mef8i9 zd8h%_rS`iXszu8j0-3U~ND0%184u2x4#1}Bb1#dNrii)+%`5N-d%KBsstL-p@4VNwygMN3`ib*u|>vSXrPT^(6@ZZ(}i%sNO{bXj*>CS zvKTt297L2PF|(uL3~00^h9i%B7@*8IlON+n_)b|PAFfflaVPdKF2YfQdeys_1GyT{ z1UIdq2_b6Wz79dI)P$_!4#={mF>{_6@-H-lc@`b@gTpL8)I@~o91b<;C>W9HkvF|F z{@0bi$HRAAC8ggBw=;LY{KyZ*$bzGd6(SHu`+CjGy6RQY57d|`FCpzsD$0jfYW%R=mFvGEnH`G96wq86oB-IoKplv?MmUiDKmxm|X_X$nCg1 zO~G5~iJOux4YWN_$0Jiiy3!bHIqHkxSR{F{&VoQviTHj(V-*b6zJaCLCV1r{gXN(x zU8k0iFWRuZ+%3(*+bS^Kc&7E4$y;@+q@!}FS8J>>-ks<(nd$x?;6HcDg-t)goKAct zIt7Y*xeo_O$QA*?1^}ww0IJq}R*<8mm#Ay~@o&xH)T?LOWTkMmAO?;U-5qmu2^E z2xF7TqBE`Qz%!y$Cuo@CRl?Sn;PFwERn@55l4V`1@=upnffwO8rJ^|+KRN;i zV~X7tQ?^Lj;FkK90d>&(RAvH-0_~SuOIWV2M9e)Wgf+>@RXw1t6TC_s5kpet^RJXkTVJRQU+xIvx1a^ zt^?25Fg_}#-`@>0rT+wM)l{j;)pg?ST8I|H6sO0{`tM?b2d`LccWT0e^WBYkTwiZH znyrZWQ3{Rq0d_nrG#;FSo*qcXpqNp^G6rWq&7E%94?REFQlZP}eEcc8NOL2xg>l=b z9r1Y&X00TyxQ;eRt#sDpv{ZFIU9$*r!fRFTXE5e!AH1W??V^y{~%A7*tBK${J7FqPc zBFd_-5qvWP*LZDKIVFamS+pe7I~)5Mgn-YPjUonH8J88`o&}Y}IUrLAgc#qkp5h)b zim5g+RWIzGZ3W$5^9VEh*6_42K>E&OzmCq_ zSYOoJYEEV$skqJtDjJ`+=Pzx@PA}}$37oVE2ZP^ULl~h;9TbCi8d`|Q?`lmy@YmpW z_gs`sYd22%(!*AV<~ZHz#Dl$7MJjC`I~L~V zA&QYQO7B3pHMOwFB+}h6ZZ=|^)?fB+_puKTnTq$D?nc2#<z(Lw*f zc@%b)^mgI?&&phcWPFJ?P|)BF?_&^@><|e-f6lGPJeZ&m> zx4U0P0R`2ju&P(sy^+ZtV+pO7kysdG(|$Cg5HkfQx|(Q6dep znl>K>^8rt&go#S9GS`YiWvZ-HP)0Zy)%b# zZdEyPHG3=kMg9tt6ZY_)E_}S13THr$TgEhtT0X9U`Vs75PX!qVc+mK?;NEuTbFV1y z!sM;(UbSs#Y#pF|(ggm$6Q*|t4&UgwZ~MVa+=ED8InvndM3jeqjYtH)QMmSI+g~%| z`DWpR&)l7*HG-uT+!ko5+YpeoZ{JTRp<=Mn1gRWN7ULtiKyxj@!z^Dz`vfCfbEq{2 zkqX=iK0V`(nX&+S0Sa9B6T)$AzFAX(f5<5gSC$x@N2~SZw`ku!2E#CvIaSDzaUYa6 zDR9nTUV`Ibr}w77B%Bb3{f-Z*13kH9tc5xzOMGG3O7aucPPDRty3NCEQnB75Nqopm zV9|7)V^TS)-A>*oqU zPX~jPi{@6vDL0lp4ldxf}DjNveK=vN6c=iy{`oGN$RAuV~ zw9lt?0;>jCZtj;q75AS@>vCF^uyIA0LJe6L2?cWU-^}PxZH?J8W5-GPTKq~HAO1&{ZTw3lNF)psxc9P5O+he z73BdmHOQ#V1WxRv;#Sqo^E3k)exgP^n4~pc|2li{gj#}1y%p9aODby2-jS+5F%vc~ zL1OnXeUY)dU=QxR)LOOMIWu==@GfRyXGsjpzVVzAyU z589VnD)O4WsQlg9&8H<$&a4%tm?`BZDX>4<4MHtA$K%!*7C*|1M2t1ykCH6&cZANl zr`S$T>5SnxgPs=oq`ggYZ=ZIW#$AFk)?|C%6)|ehB}YZ*o=tJ%3{7U^6)_hS2U{2k zmi*IIMe@iE7)Fp;Gz!DGTqgqI7wdG29YsK+ z$KU}e^V6oa8aNkmld8W%xW1{!rfvr5&$<9T#&xn@CbEP-_TKji5UCS%8~kmSp~wGS zig1XBT=X*|9cf2igY<5)qA|czM6um`jP#4Nb<@07`O1iz|I&Zu@%*LizA?>00e)3} z9W^$FOBu6j#|;P1nqktaMIobGQ+4UfYWyp9Z2!4v8sEzvBM86EADoCb)aDU70tHk& zJ8?lJBBrJ?kak9^#3ZyK?-H(=vGh_m(H=8&N8U&nYj5{?AE9(hGo!rscRZ9I<@>3u z7oV%iiU;7?3dd}AU>o*oYdw@SZrZ~txFi{%4GV1r{7ML@JiK2bi8B`!%illG$gES^ zVru%=-ft{P?-6O86FaV4^%=4n0;~lnqX@##?d?(dh(R{q@JnLL1Rbf!R4Yx3FqvCG zh!*zeN@tnbYwML2xcI6MKF?P|xxB;mRDJ%*VZ?hO>@mS}HfQ=8a}jf`xlc+o0|18> zU~s&%*id$Zcmi&ffTCm~s?6ZE~XP|lZqfV8vk(o^!?>=opu4!?dCinzEL!U3%hRkE+6 zi$w-HEutP_QPFY1yd6<_Xwyx9bF(vxo)e^oyxq*(p9Hk(z&@e>A`j^9{vRp5OvVn~ zqV6>KgPs0d5HstVO+oKh`2yJymt|rbaZ#sh>h15eH|s=sn~^K1>bV5m{m)NJ5Ykx; zVRrh%eE}@X{Nw0FWp8FdL1+c@sfIyaMg_a9ssxPwY^~J$t`HX-54tyPf5%d>isRh< z3{0_YkfXdt;TNoakGp`G5~gcXM5jC5eR769jVGaVkqE~&bwDSpfdBqzOGv%9HZdikgvQcUlgH)lo2c%QL6f^}Fj&CS0X6JVX5~-)9RA=U z@_1NU63d;OvT$U@?7GA&$}mjgW~06}RfCaZct&IG4NP!PW6qN!OPVMqQ))hxBc2bz*vhv(P+i-+qD~G{61Xk3_^Rl>rX^pw*VClWzC2Kd* zK0p~=!70=60Fg@Sme=dQ*}u{Ax3t?p62(_+riutM&F4*UUss9#mngpsX`AB`id?cc z>Co3;hoIxDX|);o|FzeEp$Hw@+Q0y$E_Gdk^EOMdL7a{%$1(b0n=rA52U^{FZ4({O zlmcn}e+xbTu+j~w)<-_xvq^FP;kn`0$H*h#8Nh^G0@D_4AZ)4#<~PsCK^=Ib@ae1~ z_`(7``j_q6g%oCSc7YTMJuw0Oh44i~7FrS}B3|eQa&r>%qKQNtr%V~mcnV$1Qh=fa z`#u`VLx~F>5egX_c<@Z{S_*Rs$Hr#}$A@s}_6XfXwgo_Jl;GyZWuaUhrQP}Th^rXa zfh1k_9nb8r-;k2wQ9J>Vf_xcK)KStvZ;T9{o19Iql(ZmP&W=Z3jMR5k} zq}3BY%`60Y8u~m&WVfaIV9LEIg!e_vnIk0-((R#VIgL6xh^N9nqWnId?3oXOjXQHUkDE*5Edrt}hb>g6EV_ zAYuDbFN~F9t&O-%Wl;4tO zHVyLHc=*WpBGq+T9ty}8r0kx9DTcze*o^AA)2)6{acp_``q-&mP9|!+3jebx{2Nwj}k|pD2(?NDW2G}6>RMn z+35PlRTdwom~+yg-^}Xuu9(euJpQ2RFGvs@RE~v4yM%SXm<#%s&p} zw$xOFd6*@#kr=nZt7o2$t$wdLFgE?v;X2S??_H(RF44%r>Pc12G}kfyO<Yu52h(8-^K4-|rbU2%Ezu9}3=A8t49lb$ zzga>o!Rx)11uhg#=9Ow6U=qnUP?W{cu@414F^QbsXS#9~8_#Ed!2{MOknKFV2g^e^ zH*el!+z!m*xJ~mY^6(juQjQ{uw{=Vx&FQy!0c!R3Rj761g29*_j>{sFFxw@K`xGR7 z_Q!^V>nJFgqbMGm0LfY zk6hl5ZrN)4=Io$z_ZIZ!MA-S~OlvCqo%TY-E09-lb|Ek)^MXBQQ738(;kCB3w$A}$ z4NyceBq(wZW^yNd9XX<)8YoXR)Hjf3vZ9H{VM~j8H0VQDZhL604_3PZ%W3)i@0iSx zx5dyGOym+s8#4~f4|AG5X=@o4YbIY2kGa?aLkSF{9^Z~>x-1?=C=6@phN2eBvkIV# zKS`<9NYV1gda=G0~f@*E%=yz};@j7b^s2 z$2I>++uFz;Zg=yRsz>Tx0>@Qrx-VrL9W(_HP~#ci99>*S z3I)mfAr_Cm;L4QOV|cT;>E>Cuz!~7WU7KjWsB7UKlV~Jr)58oGg~@)<8;ps z>3g_n9!Aj_y-zLd9hcN*fDX)Ei>e|~B?t;R|4<8nf||zsesgJp#0w&GBFlYrO@dNy zVU0?38{FTixnjeaQ>fQd;=iI z$<94w|F3Xn%1LFu571em?S)k|g~yWG3&PIyoLArXl$+Ah;_7^QTs8|-yY)&Nd6F|gB6Bl#kJtGMpTFntW!^eN4SJptO#a9YhrvM zkb6*ASge#mB6G$KL;3osv3!~T^fgE4FjFmI%7$!>`jW`#$&zxb>8N^6Nz40q!uRmj zzjtMd_xB~d+}+Y)bl<2F?7Fy?tATonKW@lbIjoFVeIJ!`4gR6MiE~edB3R$j!kNp8 z@Hq@9$0h;yWqb($eWg*%a=DLQXxz%@5jNC_)1(ftmtp=Qz?+LFYljiJ+=DLjLhQ9vDb&;%tFh^>XVM#Io@pfV#ta0q zW87WHDr`Gvg+ZS_3^Ufa(?f+}SY`z*DaYXPJZSG8ouxWeh)M1%5zKtA+$rJUXWI;% zU)}ZpD3!w1t%wUw0Qgc?Np}!={a?QRAvEqVqG4}=@duU4=7JF78Sz2J!a&)+nr3#nKuF|edF&c(lcrp-lGg)8rD>& zs=hqr;Sb@*Xy}4)a3?z8dsdI$p_1bytd#Z3kKns;TYyI{KN?tU`7yq1#0DNj64c+E zb;GRf$6VFJB|0#Q+hzB$9q#Pcfy*E3zYLOxsmK0&&3MV2n6e;RJ2GZGK1#v_s(W0^ zlzC?rm9#a3Te6PB!WQ8xi&VZxD!NoD5cuoHEnBMEayNd$y4r!+gS5{pl$JS{`rBK{6DznPSnKcVs8GVh?o42 zi7^&OVtBrza(tf7dOTWl_3c2Udl-+uI{cL~8YFtPG=vL(iLHiaZ5?CjeTZfFI)n&K z;S_j}a&f*3h!}RY88#LDO3>PkjO#`2s+0S(Z>JqN*W^Oj^6hS-3G8RzM8=mnvA}rS z0ac*t1yji6Aqqg41M1)?Fz%sni^1!b&e9wo$)>F^SJ9C!JVAr`S|zwg*>&N0QO4fM z@NJsS(0235>}UnzTyzm?_9kebHaa~8u)onostpjUbGY;IMMpdoaNlZY#mZyO9>R~ zflvb=c4c7G6BsD<;2H}s8ObLzuOxqd+5j@cFe}!9LqT`4J|Wu58oNPm>k^lBYQa*;J5iHorz_wd+1WdUjgh`3c$?I2wO*8M?`}0+)$lyJaMO^MV)w@HekF zOw>Auu#&S zw2=cla>|&wj@N<)TN>V-^jX^<(v&Drxk9+QN@KU(5OQPDLWi1QG{TpD6_G6tSNd14#fcV3N)4#RyZ>{>;dwL3@ zPM(0D0hG?hfW>%u2$(UyIzBj&Q9*bi9M-=P{H)*W?N1fI&sLqI0zg1rGqR%mrWo&S48 zLPNtu?YBY-C~z2i3BK2+&?t%VW%%O>&<}rj@|Y;0t7H02$L)Pfl^jOxboi0loQ7O~ zWSy}Ga;7&&~Pg|PZ?nW2!L_FzXJ+wIasX5LZ}@k zee&|Z{toHt@alo~f!7!{?ej*a2YO2D1KTS6WG_Ip)#hw03gLru`Ley{jLw9HtI67{ zoe{Z;!h^p1xji~0T|mE_tevEFtXUO}9Y-oI=DVi@o~wofwe`7s`=@QYY@TW43~wod z3m_^hi(r$09)hPzK*M+Qs^AvojlNZ}gJ4CB^>d;dqj%TKUlNcVii`;eF|gJ%(d8Us zj4fYf*s9)`9ZT8^Oi+xnk+1H*um)8MkR*GpQ9czF0S-Q+CQp6=BASv~Ra{`c*{+`6 zNHmn2dirYv{z1Y`@CNtr)~3a!*`T72==LE`fXoRu_*GmxJfC(U>Cep9qTHUUP3R4p z$^_~*P{Q-4E31;vXZ-w~Q;aKMdU7KhMg| zQAA_>y;ZS8^hhs2@k~9XON(~TV?(`s+CWpFYTz`prnhCw%aoAej5>>qW!12Gu|&Z% z6EQ+NgTXqdPRSyX3*F{&MghR0bk!z@a=$+_Ok}O)OBz&juUQ%KP6e)IeJavitGf5G z2!7Gc+VM`dk0?J{4OaDCE}8UpkkR$HdD}d(g2QOf^>eW>S9H86$O3e1#jkpVJlZ)df=r6CP z<>|^0pY3gEkJw@L+w3HGcC0(3p&<59;7;L;wO^F4k!`FdjCmKrBWQkJ^Y~;(3_Z;M z-o0HOJtU8RnKs+sUxo)i1_KUKW4aAqTeGrptSOyYS%T%PLA6Ep-!vSXV*qWvwDt<1 zafq?~hwQF0CTbPEk!?ey+LVO0)@WvRU_KA5^j*` zp$({#%WZ%+e^n*A6LXqjhf`~82B84QcJmI%vX6JPg$%oKv-QICH>1;*~Dy9?clr?2$2PbxKu~ z8OmNxzyt<|O`e2)WA4@*n{@34sY#EF2zO#5DM}&AUUCw5nJvFp%+`j_&s|{;{)mx? z!ULVY$FphfMhf48*EihjeP~xk+RAyQSMh=1D*^i2=*b z-pITkeeOs{!wkMo`X%@u@&=U>Hh6No_7a21|4qcXq%t`O3@U8kc{+9qY(yq7Hhw{D z*o{VK!51^yCw+xM0>|YC%RfmtT39iUQUx#b{Vn7PH!5kA46;4WTW}pUzjfZ&1o85t zM*Celr2t+j9Oib1jW6CKcbb1;6|?>yroKF`sdMZ4?Q1KoT2rNp%8*)=Xi*SR27%=E zqUJh4^xBGwkP^@+gNPu58BSZo$QTtXGf`>9Duc`*Ln;sk86qM>m?8-hhCmWR=H#63 ziM{vxzJEkw5Ps~l_g;IgwVx*=G*=TV(J_kI)$oWmWWF@mR(DAEr&BN*yubASzH0o! zrrxebC|A*pn}vVuiI4HQmXQs$7yG}2V8w+$obLmNr@Fx3^u}X;Ca$<;jRqpuxYt4l*)RFa&~SdC>5KF3cTlzJq`j6^^@Seu^poU)ZC_sdcl@o+HWX>suQtawUa&4H%#4U$ z-{CVRl^?^3%;+-sy84xb{nfizO^{=|Q=oTli#~uby^gW_=!3@EsOeAm7Vo*TiUIrH zP>kCHSNFHF0)%|u&anUcIyjsx3^%Llw>tWvxXgU>o;%~+qJT!8ubu- z%KP*J2q@Fmf(Hc$c$Q6h?yirFJ>qlB8j!#rPqOoD&sR;~~YvLbg^GR|RqA%Bs0 zkhNgp3tch9HJS}Q8`f4dRv4m;j}2lzPk^`~sq`O^&29!fgycZ+VTMuDN?*j(S|^Pl zRIMywHnSx)ynEIT9{m};{25)T=H}gnM>pWcb8bY7vUo0GmpebSGksEH)gzMF!L-Wf zmNOOHC;E*Qo5YLi$qUb!_l7Wmjw03?GxH6FWBYtwPNx?|Oc$ajC^9N+7)nuJC{11N z@>;kYNS(ZBVmo>j)fd0CP_Y*w?L*y)VKd}DNES}7e#W(}UwOo5Z|6PX3#kpXkF~nI zbz6?<0_XB$(i`1B9$#HfKJ;KWkD?CfQSYgc{NZ+x2`+fJs{h7BM%iEJqZYf*CLMB; znVTA(Yg)o#{qP4|;AJ!0^X{u4ZHTCV)-F1RlXco)J-*v$RpJyp7TS4E8r4}j*;<9cW2}n;i)EU3#vkv z%+IVeL-gIw2-zyyU}?{JNJDzB8`Bx`-BOPj<148Wp_$eeqAX%O;-{4_hwe4%{X z3-gjjNNkuNLo4Cy(*Y7<-eU}3H&kb*gsW7g!QG9}q9Ibk5@}w56*u}oXC3$;u^)Gp zjZhGGpVt#O6%1agQQ1ijQW9!f{gbfI*p7Qp@yb1G zWev@RDB`FKJD#7*&%ue8tgyM@vdQ@%e6uQt!&$MDEFF`}9;Q7#qqI?Sp7vC<;9aYOuX3W>9Y*>|t=i z;@7eK8jm%HSz&zS$B-+AMnz1>ll^_!<@9P8r1(73SgOag6bTwB(lH|8m^mEfpH5VLXERpcVld77l2XH5{9Hw*E4zvu?o@WM4 z%0sA=!pJ7^d__1s(&27{Jxf~z;4=W9Bsx1=EA}(AtG7hQqJh^JYEr9ipflatoaf#l3LNQ zQJ6;5??Kg?G`VI#7O$ACAw{*Al*^`chxcWNIHDn!O7kv*1d&W8C$#1SW|rB&Eoz3x zm}^?wKb>UB``b%;aH|R&-pA-d**&YZVeOMA*2D+D82NIa|39TRdzu?Amrsg3ZEfO7 zM@aU+IIY6vTwU(NFa1fz*i4vYHDxaEZVsIsy2!5;PF8%cRbgDs>62uiUD~>bvnSPB zp0`~-vFH)0jWD|t`J5eh%N}mEUmM5zVsj2PVqaN*x-&|+TUoh*a%F~^YiKBW}+^`~MAx;M`z>cc%!Inj~ z$nCAGV_H7mQIn4o>Esg{wn$=3#xTS76`;z_|HX5NEE7rMFu8HYOhZZjb$w7XeIBtP z2abmtBBmd$QP_0?yhT1eo$ogKA$VyVibl!~kC1Pa3OadWxB~E|I0`&$^0;@suI1zV zvOd1g13WubhYye`#`m28cZb7d6_Jw5-8$!|)QqXv6Jga@e07lKokT9Fz#h+^-@4hC z$;Ewl(W0q3b_caQF{dQfCC5rTqW{YLoxVSPLp^$JPi$3kJb^zLxfJW9z+k(VM?z;L z>P}v8L8oR+mYi&@9Qm+}g}|BylKPt-<|XZ?y=RxZwxWXFL)8gTaOs)ls7r1AhbO(g zvF%SGjFNqbzDZUeBv?t>yE3J9;X-D55I)0_zl@iEZ#c8Uei1d$&m2Pqstd%e+gDq= z?>&HGCvv0LH*(IUxHbvQFn%tv>S>n#5_SZ55_lVhUwM39!uho#OWWp`>x#7Ltg!sH zadPDCe3y|K4{D|+0lDe|U(TIP{(i#!r~Y{|xhQfikEEafbY;J@Zqi9&1)HMWFp8Kek@)ph3>K#QgZm|5KPZ6n25(9kb zPGV{5Ql2nZjw`0iiJw3jN9Sk{1=%jyE1VswXOD&+nTy}Cb9-gkpjk}Y%!+SVP71lm zQK4v&v?zbsoLtN6j{9120=F#Iy;1+pHBsF@#4Nw;uG(bk3^{cQuNol5q}YFwA^TD9 zidauslR1OTj`vO_g7gsK3t5nMHf{Qpl}(oGn4B=-UYYy}%OkD)2-?XqCz17~)syJJ ztZIgO_Ib}*FYve%O2gM&63kcF+nchLtiPaeIGL^C{~b;d_D%kL-qS{%qzZq){xzO# z0`oqOLCE0$jA%uom`f`DI3&t)99^hs#3>q&iQg=;hYSSosn367c|c12tbr#db6Gm8 zm&PE=yYm(XkLvJ-xF)ftUQ{YsT@+u8Gmc38i?s^X1g`h`3sq?&^druIkq{@^aS8UP zC8|a^q-0j4RXH!5^<4Uc{QTAo-m|K3;Sqf#SboTmcb*+P6`2xnlY3=O(UKcR*WRW@ zR3@K1p1Uh&S$i9mL+Zu4QgIhoG1hD_&0y}dKfDy$*@DaFI*iLISY;u)U9AJm>>Ra6 zswHOL@fb(}>C79kv&lN zF|}n&JChQJZ0t*->7)&4R%XR`EJwWx4p9D;uO>-VmkQkIES#TuB-O+F)~=r%-gjr> zRjx5N=)098s<^K)^{x*{LQYOZ$4p03@=))_QrbS2R^Z*u%UA0!=3b?LM%?uSH7-|P znul#t4~c3uxFJ~yTf#<|8R5Xq1JQTgGdF=E*QWuj{_t3_jy3;O6$(HU2=TC1So#dt8b+J!P*p@CWhS)G_)IUGs!~_vqRy6& zB(1105YYSAh6(e^wm4fJ9m;BHiq`H~o=rZoxUN9c|ETTG?p_;rr1nOBKLMxU-90q<#<1}d#Bc9y*V)b7f8_jQK`ZXq5|4UX9n0IEvF!%7b9lfG z-g@KTd&lCBRy!e^E8^~4Aio-7kIuD-L=G1T_jiRZO&>Ze@x*ib^65SHz1-p9*d=S$ zFka;#ntsG=9-0nZ`!5SazPNceYPnR3l6m%qrvZ$>R!{%j%97h1mak@o1zungg#b&c zFZI8|b5M>J2g=1s=)%H4)289u?s|b41Gc8h%!L*)wGk27xO#nu86;=VOU|umG<6vP z3lu{mtPx}c-w}h;3Hp-EF54ZR9*5U<$OtEJVTO>On@?B7N6vmRz4s>tWw?2J0$U`{X+zPZZ^iXLHs)W ze6F->by{<3`Ub|AakQ{^67)sAG?}~diRRwGAlIJdxtvQ0d-*w?=B_7|n>xEKNo7}! zQ3&_O%a3rrkpJnjC5ZG*^hhb`4V0MOosoju6MRpw`9%ECmA@iiEJxX_>zhxW^b98P zdWRhc1GIky;=(%8FFU7=Omfv&3!L;9=J4-q9c~R>@7V5rABE^szU%{&N#PKRW&b+5 zw>Y!^$=LpjO{Oe@vI>LE-6-j1yQqd!k2FXZoo1VxTe{Fzq+|T9L^5R`3rq}WSzh)J z&U{{ovZY?z`%<5t5T5?K?Sp6ys7jgrHu}w{-1K`|9@le;Xm1Tm-J>~y3w&a)w6L~J z(F-*FabNjrIY!=MR28mbMG``xJl#`6xrc`Vpsus!BJPilpt>sB$DFI-mlLVVu3}uC zjV~lI1WJe$WK5@`BQN+ku?nR#w0!*Q(=T-N3ljzJx^#xFQAHmum<`npcGHn^KD(P1 z2tEP-Nirl**++VhZL0mHgUOCG_J>217 zp`wbnA6a7UuE&lRX!JP;JbuN=OPT5fG^W%G-Lq*47wFv7)`IrRaXnl%vlM7P9V%jl zrZL2$+m1lLX8(L<^g`#Q|DFX9xxUk@?I(rqr>lEkiq%d}?meJ=k%eVwOt~iC^}aJx zrEzVjxt7`LRO@;-cs4?N(@j=6PiTyt>@K?(_x?rr`N@qTT8oPWmQFuwW5*VNLhem9 zTs03@U)>^HmaTt$wRb`hx35Vc;5qe9+t_UeEGHICi&jj^zhJE0kZh4)jv}{Bdos)W zFP@?r+^}c0Qq66dA5|D^L3&8!*xQr#vD%g=^nWMw4WiO8YOJdBR5>sg=tt!ug@#!C zW`ab!zS!ngT9Jj#L248%i{H?7-+x&C(ePVXG;e8KA8rV=1aokcXQQ<|k7p2#5MLq> zSmRJprY)`>$=6)M@pP)|r)#{G`o_7mzl(9;d}(j8vSV(wp_pBwCC%I03J#pAf!*aN zy~-4#ET%HO7*`r|=wea&U{VZuz7)w(WN_b%q-l>gA{F`CMQx4MV#t(FFJEwzX;xTP z4R>#)j9HAd&kWBN+NNQjm5%Gl4T%|HO)fye^Nfwv_KPay&NNvz6iedD8W^k|yqbjP zIWHy>GK#A;$Im-x4UA}c52I)krxX{McqC2!M~=|tCF<-o!=6Ppdq>lmr`WW)5N_R_ zc{BU9nEC>M9cLu>UhRu3o6Gr!?AVnRrCfjWNjbaMG4Mf(4Jfaj92BwPUK`eYNsE{N zGFsb=!GIrRB!44Qt>s{|f%c`=FK){>W0q##&cm)Mlm(^ddIs7 zcK0cqek$}U*PP|0AAQA3h2t$&baq-0fiYY_>c-|sE5cJapA*)&SUHKSgi9OfH(p9R z-ZZjuy+^GVDQXSF9N9o^nhdd~ZAymd)z?m@QSEXN>n}{I76tV%IDt$8e73%TzmN

    hb+LawGYa6|CTVzvq{Q5H$Oo?WS6>gv^)?sB8g&`?H`im_3$b@W`W23q>R7$&T zRo?a-IkxRD);80Sa)Hy;YXsAuyV8mhop?cvx$mjlUe;21bM4IO_#|JP`BI{N{-Kja zZGT~TebhD-E6*jr&9rUn4ZCjw4@dC`ddPBVBX!sXr%unt^*)h#>BXYjjxD}{U&R+` z?(hMTSjO1wf5RZSV1N4BOO0SZu6&8O3)a{OnSgf@ZosUGp6%#+CtK%JB-mf=x%|*a zO**dI<8qTg$hWJb2VU+D?VK{junw|{GFg)Z_oj-{)Qw2@E5JIjVn{{|RTQs0N7*)F zP`&O118!E6NK!>SEsXVf<|vrGNHh;KlqnedUl=(CC5R)KU)EN`2kz~;G|vt33N_Rz z3c)|BuKS-39Nqh@LiqQWG%8esd}CZesB^!dAS1dA0Eq1e`VR3MA=y;?#B=skE&DQ5 ziInHC5@W5fjip-7v+869ccMVTzzLMD1nNr?U{}1T)t^HNd}fmRuT_xJ9Q;~B+Ct7V z)Za&SwtDts*DR6x$z9I+(B?K?pEDXPfueA}N-O2$Q~`4f!^tmN%dsZlogie7ETAl> z6-&K#13UQ^A28z_T|Jc_#IfCIjxvPb{f2#v=JMs!Bm2+9?<#vS{M);zSh)6P&3nb& zPlL_Sc5ew7Z{e%ij+qKnAszj%Ygkhvx~#u94HB-yxix4mJGV>ky?Q8rI4d#1!x=}Z z9g{b427r%P-YhOfo$BnNODx@u)h|Kq;cy#s29Sup`{Z0Jy5`Mcp1={&S~*DTA$3%n z{gv3xpI&$d#ZUopD*eD>Vg&^YS+F*>SU)aP5GO0l=55shyWo$EAq4gubOeeJv`W_s z5zuyq&5II^KnM^_vFp}mD}+W;=|8>FUBy|F&cVb~R~1*;AEnQ8G@|1Vl&412Q;iXW zjtbJy#s6mfv}SgE7=R@1T#0&+h(ip2Zi#HdH4>1$X5i)%+idJKt(XwVB^&j6t>jUr8o_FNGR}AJK*SvU6m@tD zJ}`_b?i}u~7-~B?rfffN%Xl z-6zLPy`kGy2PaJSr2qb9!IXOnq!+H(`Ddx|8;UtV5~4-(mVXHv8h(FpniyIhnghLT z3xGpURFfs$$2Rfy75d1*l_sR1WWLPYM8AWoe5y|;=$GCM4=>3wA^W)6wxlG6>fV-8 zdNt=yt{t^}=~hd4H(p+6g>4~snZ3eKCO%KyVxQ8s35z81ho|+tCC*8iAgBk|=;Fak z+_`oY8vFuQvt@S1(6XG#e6}*ZHdhQsmLw12Dfa&P(a1QMK8fKS#?dBEC-^(G!k5r# zXTa~j9PR4-4_S|&U2Y&mm3}jB%)BC#n=xr(K=JbzO#cg!+^ahbx^`wHNdoe7LZ=#% z@GJ7m)0dqEDj4pvD$5a-=Em6Z<&wNgf|)NXOvM7|r9RS$RM6Ibx*qH1;1R^R37GHN zSo&A-PZoC8Ni|8T0gX@2QVtl=hu@n=%G1z~O=S2UB+cHN5It?THal|tYJa7=bqIx4 z-9$@ZPPIh{KH$xx&5nM`HXAF~B9hZZhqsfLV0b(0RAlN zGd#>`WwLx}x=`-=67{-9^Zuk-|CL`@;G=N6DN@<17FJ}JGfUjrf|<`!_bd0r?NTQa zZnb8WZSlzr1(n0sFkQfW?}aY+FBw_3s$OUA(9Ir>EgN=vQlNS9N>dilWuqqvCx^fw zWm~r?%9QO|(FxY)mQCq_7vrCVg$Z{LR-V=OASG-X5{;GsvqdJi>+D}WxcP}meR%I0Co>xSbtfRCW z8|#lT9AE3=Eakc-BTaZc|BUV6XH7;~ckq9+DTfw};Am!7R!Hl_N9ka|Qa1RnkSDa8 zdiEdip0z@)sfcxET5BtJzO@v!kEOGZi>sHguWo_Jb(>O!m#|dxQ}S)(biyX>$kXA9 z-MtppIaU&=HmJWOTK)z+t66HEmB8czv1rPay=k&y9Rro^P#E@7+Hwi2FSp-_ZoM_3 zZ%H!4pZ~$)8eMaTvW(f!)X#`E@yZ`bRH#{5+W{G`H)0mg`(Q@b5(TOwhNE|E27ZzS zeR;r+ZkoFgp^a7f{$2B)k?F8P6F?uk>!9(lwH4ar5Xl@%_xen=)t?^ zHV#K!63}l!H_i*mOq(WpZNy%e9VyftWGYmVgN)mcPM;tiN5w_v0!?7a>sET=hwr5x zPi2DTP!DauKzsVQ46u~!Oz}w?c8~tXUVVLP6NcJ=g;%k>Hu0<;Gx$?I$aA%dx=Aiz z#pSUOWBqM{qO(IvpLu8&apf|F0aEcJJ+41lFp6=;sQqB#7P)ZOSY)dd8Lvq|H&3|c zpc!P915ipwWK|N@N4TTAOqrWtf0W}Ip#`ASnJ9te257ecHZ)t$n7a^DG*ZkAQj=9o zfx`Llbu->`t!)lf-1E5|W#0v@^!e;t4(G_wSt3sF0u&GR$fQt{%urK?z1X3=0v_2p z!hDn>7ZG#Yc3NqV!Z|DWn=xZ_^Q{*nzj7OG%eP|5!;kl8u<7Nl&U>-o+X_#3;8usV zVyHCPau;;KVgO1Y;AA<+s9JDLV#`C__PsLxAFgGj&6({}*(pv(V>0^hR(+$WNcdjV zr`)GxN;$84|Mw7Qo%w#du)WyHwiaQs_D!%biqopdVK>$8@T;DjC!2XYP39ykTZdFr zk^5LeR$VAeD(`8E_|Tqa7kW)5@1O2JvwTv?n`)wX%7@9w}2MHUhPc6~Y|`d;5Sx;NE!J_^4uq>fplmAYbVIZz1+~ zGd|`~BhTo3P7sX-=k8D)1{dT@qj{o=C!I;D)pqp1+ zF%k>UJql_#Kt>;`B8P%U0e~o9$YB4DIQPl&Zw4avTk^`eU427o7Y*C18D0u}bcDp* zGNlfgptar9(?O~$N z%9hz)U(SuDwLI!{?zCY#t8Lm&=h$sF7fOE*Aq8;)3sakm{KhV$vF2ef#mlteAi=$m z7Q9yTUi&ZeS?7F;8?J0PwvvO2_p<+tcHkPfRpjQ7lvofIFompQ?T%A(R^j}jQ+?3; zoAk|(SL4pRXV=-Nmdg{jH!+SM-|Gaf`8caB(1eotwTi;LO;J+;%fF%@JFE9xY>@I2 zN>lv%ZqWn ze-lXHg=fPOq#DdFw}ZRm=#~F|8)k&MRX?SM8fcAfMpntM*h9q)QhJeleC7%C&;lK7 zdm1+uAfM2Nu=CZNR`TvoOJ!|^=&UAH{%-2t`)Ok>i@m5mPbY^e-i_?QTwbS?=j-J4vUSed zAf{e|5#exp&$c;k*}FCm+Ize_>tEOp-yqV~CqnbPUcec15>`d4Q-AE!Wy#*9vE$2h{ni#5fPg0LEjj!i*Y}HdWd=cT6`VVeR*&IJ{H)}eiVFz_V zTE(kacWSi1Hf_412d8h_f@S@yNLtl@ci@Uawl#1lR?)%=gY)a)w8i+O=aKD0c<6r- zEaJGd-`>E1beeFO`(ydMi|&3YpT3&L6TKzFn1g+f&4 zY@9;KqNzcCI9pPNr+&~ejJAi5kakALl?OHUZZH^u?ij$e9~}`P5*7u4F?8fTHRoO9 zJ#oE)AnCxXN=Z#I$an3g{7uPTy)_Zqbw?pj%=0Hh)9GPh4X%VyPrY8J2$egdtErsb zPomY68*rm7Q?ouf>_YS#sp6qNsl7LLlJeEr=*YD}`B|l*ogu<}DRX)SJEB!y$7QSa z(|XN#yQz&|7(5bMRd7{NmDA-8b!y)4a9^NKYmcSjUx?1!6LN}suDtGGA6hA|5Bi@k zx8P$Bu3v{hN6D_V)DvYJKjjklVV_P-iHIn!@j zwc2${1kQ!%NBNm5jXgZgzHY_}xj4kvG%f0477h(Es(u|Q5IYAgT(3tudJipV>Jfj@ zLOw)+!@+Eczm9M4tEl*lF9*bY@X2}LRgmwVwKQhz$9V(L29d-uohXX|kApuG!2y+q z`bN+nhb3sGj$wcwNh}5OZgFoNAE%FGLo@D~EQnQa_ydD(~QkAz!%IbqmToMKH^E z8qeih;)o3xV95(0P_aFDUB(xH<@x3Q4`qv{$8Hs@OjB8-;E{Wp@79sLK|KC?g`p4E zW@=^%c2ZDmMBo)6bECU(S_<|klGinHPWH}bhb+ZLfFTeqXwNLqQK#21e{*W0H;~az4-&9`fC-@jk;GGtJI*MnGD!FS@k$&(Phh=`_NvL-pP@+ zZ(;W2dEf4~KRp~m2w0&kq_;$oBvq`T74 z_#?nNM!Y%>#BTd~!I2N7C1Y|$`F~3_cExx3Mk~W*`(X(X!QST{RLS3-eW_wT@7;y| z$OBZJD4rev(?esRjePW_fZ}T;<$;~0298E%!k1{JOv;^ef&y)hm-cMToq4tobcd@j zOQY=sD*o-B%KrQxaBfsVMKPSE?qPw8Tmc;^yUP7ND$=4eyWf^tPF++^^`IYMDbbqW zxzX36#p~Q6_qR{wtZ(z*!6V3Y){BWD|Q&KThDhxj?yN{4w^yky@sw|TwA9eqe zh&w$llg@T>!|wIcn9iS$He0;+xN>CYN&OAAA|U%kV$U{NuxOh=_3NkqIH;1i#}^wEN3fAtw96e zZL(ru=%Q{FE6tBdR|}}OxLCe)Bk{BoQfyN99|0RDK^9CG9%<{5*UeeaK~IdF8qnAi ziu07C9?*pkuXB_}*MS%SR%T-#HW(*;SO?8XG`6cL@S-6`f&jnY^>>3T9E4nC<%$@N z7v{sy)(xgA2l>Y4_x}+*z$IoFq9Q**KQg}^Gkn(gjQ#ACyt7n-TQ+3;d=(x*W;?%i z;tiB=FA8)yHFTI);mL6>StO23s#Gzsip@$-WTM$(qeD)Cl!F!ydZ|MaECm zE?3FP*7Rt+Je7^Lc&FA}5)Exi?%8<3413l|{hZHwk*H4o5=vv`<6N&;IAeRg&W zS}*vTHQqXO_!Jk%7TkLzRe-0#?zB3TY@toW;n<Rm2u*m$e4RDm!=*>x|O!%;6#Q@Gc^G279kQ2oX%W^>QG;EKS<(yFasej(~EsnXPc zld{Z4NKdSXmaRAHGPkVDipQ2qLWE!uKc)n#=1l6I!MiSQs(>@q;0M29;r((6C*uMB zYpqOp+?3z1?^J+ungT8{Lih|<6;hy^!Pq-3exK^uJvAxsva{?xomSa0u(nW-ek@Wq zUxvjeuQ{x9H3x2@K3d=?`JG;#BNyQmq|tTgR(eN;5Zv&pj$58Bxc3i+AoQYG z3r@@6o%t#9I9_#kS(@a_%1?n_26g)GQ1G%()rwmrhmPEGM)tJsL@)oVD3NQD@Jo8) z$=m`>u5F_U{dapC_QvPYYG88FaxiZsm;E^<_G{1n;6{Z*d3W~{X-q7M(TsBT#s-F% zWuQrJVOGsTmiWDD^DRDQ{aW+^+7E6GL6I=3MaW9TIlD9osAj~5M4ae}-x%Uz(zRm^@xBBY`Y6RbZ5Od8=VhH%Z0_ob`?Op9%(XSn@*(C%L|f$a zw*@ff);Kh=ShZB9lZ@s9@w&-Yl7~=W|Em5X_A?LZ$D!jim=%mYvv)jVzO<&Q%{U!i zF&LD2!&=>#Z4FE}7=*?goTMiJ2k&@AZ%Qt*Xpq0|`VVIiNdyf0=($J<5e@cfx3~t6 z4&QdT&X&Db z_O_O~pk6Vd;hO}O2evG;!qogjp`QWWL@yhjb+%dfS5AHyb{70b7=CI6Fa1J1<4_?p z8<*Smvl)K$%yPdoLi!8i*>6t)(1JAEFSj+*dhljNrKvU#u%oV!lI``2KKh~ACrN() zKKJ#Mmy7q{R7bg@B@e3>SUe{0?HrbKJk}9^5L_j&;qMmjmzjkKYNQx?Q|Fcy$meSf ztwZ4@q)P-|AFVqeZNEOs#p8HWkDK?cBulJ&n2_Wq`s=~2$MP4P*(Az7en)c;t{%(1 z+Fg)I+E?0^0cKL+>ylcRaf?&Kox`^o&h&;%z|6`LSm6h*$r*$~X40Q|yY#@8JovTl znxFrZ6!w|a>w@IX-jPQS=clbvXc(uuIqYlVNS>Y;^7bVU_=$)VVD21(`Tp~kJcDWs zV-!v(@D)PnG@ilCWw_sR&1&Z}CEx@{jU z8Mr7~7dcJLB>~qfze=JemCgIR%QPE+7eU9A%FQALA@bECV4U_ zs~%1NhKl-$l#?(ztsNJYdMw8ummP>Hz^8IIjUehiZl?I+SX^t&@XxT0y!!#GSm zlhp$}W8T2Ad@H){*NFB)Pg9l{3pq*eW-d>!+lU4SNdB=>jgL?JNkG~5P4M3BRPU6u zT-uQxEA4hpaWb3q9VfrwI^$kaX=gM-%{>NAxG!IdswiYTQ4eghdR-mcIn#nU7QW^~ zg5>@XIkJ7{#Qln{=-&7>v<>V{Y76G3t2y(}H6jWZ$DjUlTwO_q<)-b9IsmMlp2qgu zTlSh@-}d^m8seI5S7LPlA(I>Ss0*m_V;kuXbQAWbwnp_{DxI#L2D(=Xdw%?djnV*) zD5x7Yh|Zz;^dmB4e*I|QOBFCPg2tPd^JplFn!&v{Z1 z_TU>M$Jg=KAdw8juv+CUV>VyCc);Gxtp+$1Ko3v|X~Wa}SPa%9o8Bp1D)NZ9N5DnAsT8U<(*t{$sLkx&I%#KB`n$+RpwZb{jhQ3WV*Ai7=Dh*J18&O<0d`E6VuVTC1MWr>(qA1biMUiSH4=31)es{Y ztR0|58O6$6a~jI>J1aDfba|IHb^ER+9=gY*x0MTf=r2>+%~Zs8Q~C`<;;8*xhvxR5 zd6vM{S#zd`_BtB_=r_&n#AbmR+`5(fpuwUi;tsj}G&Is%cSoMu%%W;HW_YlryyLqT z@&y&UuY@GnHEy~zQihN0E}Uv6Td%Y`9M}gmJ0bluc8@#XRb@RE3I9j*YJ%#K^Av~@ zNO?-9#8GA_Is~}%vTVo{I9K!H%AM=|K)yt(P8&^K?buP_IB;-|*edmPi*tjwOwL+A z^|;REhY-e%hE7m*Rg+`efu0#&?Gx-4zVHYvPE;{+J9-AuL+5zL*~9>AhQD50?i~AO zkVUpSaH<;YIKBJ3$?8~s(5T^E@&aVYxbe&qr`7Y`_=G6Ohn{Qun?^KU_AH&o6b@M0 zbV|*c9y(LinOxXobvJH=D}#mK@`NWHDlizwixKPAMhb4(pH}nkCI%dLJngVn7MLP# zVfKF*&22tvx7N~vS&gZ8Ytj^mxf7c3vTk-}P!I7qA&{KT?W2B03;g+)=`%XRA+>m2 zzF)4pe)^yjt!no13z@XvaB||GaKZQZJzrdY+`9hz>C4StFX-C!Pnk!LE@1x>Cuh-) zQIR+!=i=*uUv1+abL}+2x&5J~f3(&L zd;3ev?COzJs5jM;LU2-PoL5#~8Ug+gR;tO}4+Y~ZqcbWT)(Yj{IC*FtuY|c%ojBWV zZPI44+1NN4uMoxh@>{$(`A4cDkqD>DdJ5H!R=QAZHsnOQY!55q?$2BA<|`E@i0h{i%w-ZO7G#VEw20t;bv~i6QT}&A^0;i7x zC$s<$#18CRxG;{I?|%ftMTXzBjParj^^6&jt?Z-56QM!D0AFu|HIJYmGhgv6S?eEML1*a5?fSxghwP&paX?p*Tp3};q6hiEq1zqH}bptL(HIIyb~ z#ZE?o;bf?h3kH}KgR>=UN3%xch7Qi743{o~92UcD5x;JwxJ>!Ls9w>kz?Ry4D~)n? z0+2w!7X4iH!B$mjEUF(J^&vk2kOb&~kFC^y=oAIHssol0Iud6HBO9qa&{*f?0!Rjj z?fypZBa-CO6tp&j{!1a)@#zOHg2W+zh3E49805k!Lo%KdUpfw>SK^rTsP^Yf!ur)% zfrQ~QXTKzv%wKYacI}gd#pt3K^MO>oIXScE6w8~f=L@~`*UoketQJvkxwrmNuRQ$<*+*zG)kQfTbP-B;QQqy`DQ`}~cY~dr@jg2lrkyj=$Ejf&c%gGMH zI~DV;KuISsJnE;xsob-}H%Dui3*Fg1YQ}5}nk-5z2kS4%*f1BdL><*x;lOA+$k$`? zopN@ZZ*ufznSqlj7ds=aIklyl88yoLuUNu3u;0W>ux?8!XcG1iH4k$`#?@ zA{&8edZ_+-!*@E^()AAWDeZR)(6VkIe1qz|!~ga6YNLu-Q8K0*x{jaFi6(Hg zp)!@E5sImaiXWB$)YHhv<;Gk_PUBT+VwJtlki0*@!^LgXzG_{QN;2Pg_v4JxLMd03 zhVTKDWz|6nl_)UILls2v);YxK6qI@HNcR&%F8W*if{L^)-eKYSx|x=C5o~svg*>9S zt|g{ez1(Rw?+;}{?>6yz9D-X6p)lCXEjtl0U2AUYQCFzB*EbZtE3}y$Xw~LT49(=Y zW#c|1?8Y_7dbr3}xE&0Y)J6J=dWe#dhd3bM*FU zkdkvf4dgF|iH9N|Z~wh>pJu(Q=|33de|WYXxIp`v^ExeTc!U%G8-(4RvY9e+`_$OA z0h1P=`ZMA=;Ztx*zz){NHe3C*Q$?Z8S?bU&WFZ(p#1Y$^(0d~^Hua-7xi)##W_Qy< z1$^O~^th!VyOk4TY11usc2_p_-&zCso$`Lxr~QE?v#-ZCci%vr6aI8W=lYWSk>g+yD>T2%R-CCL3`4@FCXx!vlbY zb=k=Ietk^H~kTltQ%wqHE^W}>y&A98Xz0tMUY*8s)PB!&c2knX2Cj*v@&Yb69 zcs#!*cdZ$w0ZhqSl5&c|f+7~xoCSF69v;vW9}03CLynsg>o>)g<)HY2uVY50avGbQ zUQ5J&>Zw^N`{tUZ(r-;en`6`MzMq`HWD%6|c%dg@n!W9QnEoq|tJI%@cu7AtNc+jY z_c|$k!Sc(woMkBFR!9GQh?%4B`4U+o6ve6*++2sH*_Swd_e4`by?PLZzAR_V_Nfl? z+S0qim52miuMU09j#isiL|0F?X{In6v#~u{9{M(CS~n5Lj;#hZF-|acIo+lyb_aSv z+JCn(8`nq{gc#RIfnD@=f;qHFbB6&9)x6p#Sr#~BV9q%z&jrWoL8=DN*%qT+gL^JX zwDl9S8ag1^OCF6w4cmucu-=f5TljPE5M?%>U0x8a_ru^Q0fVm>Wqr@*^IL$poP6js5I<(R1}s^YzjB@3_6A;or$YPrqdf@? zV15B^c{&=>2w3^(Y_&eg)4Bavh?6P6 zW=uCJ0Tmx^m}cdDmNdM*MYB!Ve8lY2D@fY^?5qsI-z^yE*k~59M%$vDOBck z0fCj)3tBfma_!@$S!C(BLFNAZqW6gBNMJPL;rQ07+?dCW=6Ut9 zi9DmF?}d#qw8v8Wz=9}9--^MHipkuO`Ny<>TAoZTQ`Cf>uiHuNd{*_^G_KqTsmA51 zzZXQo7!&!WOUOs}&<)^2na@4pX&6^vjw{Z+6P@()2@~ge4Y{R|+Yx_cLk%0Mn6&Q2 zvk(tEwj2FSgwxfZCg!q`Q0VR<^+Kv-}@16{iR}`2% zin~`3)fqvMcU(*>b!aaPFIP!9w)EU$le+_UgS7l9-U}AW@-ZeH=Jnq-GtbBo&z9#o zb*@#k)WEIY3^R#`e)`k+Fxk>}a{QKdUcEHkd_}PTNHQW5u{G?$uD^X=Wg+?7%7#_;RxlEJqUl5?G!3dq)QC2Mv1M52*3Vt)80q%e29fORsM* znhAsn*JK8(bT~4_5fHGC=j)h9a5~ao+BHORoB#2>KQvUtkV2AKVUg>>X%4dKTNyda zR88zxIYEkwfznjbsqREv7^Z2M({b3sX~!suuj_Zt0mPp+J*g)jNqOYuU*tB?2xY=? zbL|)iyR@Ho@5Hs`kQ}PE?Wg0*JTDsko(T8hho$8TTs9M}sC3D;CZgDao5WmCg;Zhd zOy_LJlghUjhKDMWN1?~T+7Rd_f!Ug1@5Hn4l_jU!+9(0pPEmH$aQT*F^vqDXUEk9Iay(BFJ4RozGmFR|}3e2pj?7dU%i`M!mO&MO= z1<4EKV~RHd&|GX6H<{y+Iz?hj5;_;1OjBT?g~N?nZsj$k7m^YI2ajt%kII58jn&P1om zFzAx6zu|8D3dPsL*x8X0sa!$b=zAprZBR)dIeV-*lwJLpES` zyLZz}xmz}q{eP(X5}>B8_wA~!)MCY@6|6v{6w$gwq-70>iZxY~6tRL;hyofB0om8& zYEcnEB8sB2q>2hwC9=zwsO*agh!6-%*u#>Lgh2M(`<>{o|Cw*jjN;@HXYRS@U7qK8 zpQ|_e9%4WO5_!%IR(6;hN!5g%4zC3pDWh>$Xig?SV=H)`dwZW4(1^-!nf+s#*yXXx z#^xV*9q}paEoqA3gYm+#_>>N7N&O1sEOwKVaz1a2Fma00QP< zf3eiB-P?5V>3#q|jvY9R`sR31bEzl^1N3^u@(pFm>Du{gIDR0ecK~9Lap2qIpF}m@!v*wwTVQ--|wCTrKGsPwpJfNur@s1SQ~k zFo@TR$HC0bNZ~T5!KscKZTEB3`KKnDSGR%tzzvkQZ#Iy0-!>$~H3SI!hKGACTZ2cW zHEf*LLwxF>rr~?ocuo8fO}rt}GTg?VK%@)2A8y$yxeJ!SoMoe}8up4CF}K2n<_>Um zgMc*Fj+sYNf88)B?m3g|{37!+cUGGTDyc!J!13jYdG8V%v5cj|__(Up^&ua0;859T z;$?<1OPbuM-C4_|@FM&H{eWUErZ#OH{#TAG4BP4_W2%du*TZK~DJTycmT|8A=59Hs;&UZ~R$L#D=&Ohau zQAS!l(BsA~qg&wTcJ;K^VEmCQ8YZ;$u3cY`t0nc>mGstTQO4XtL{hZj)Tp(qUHI60 zd;66C=E!E(%dX^;Ps?fLd^V8Af8$TC<2y`e_3E^?IzWM|lJ;Bo87};9!(K8;1L3o) z`OL0Ab+qO}nJ3iWGmO4wvaK|8MwAeK7Lc|mrbb81W9`EF*D$Tb`qH!5 zQ5(ht)JR~_0?Af4VL)CrXPWorM^8;B60i`GW-8ZMe5s*7UVSq3Q2a>R!tfo>*rL@# zOKe$owDY~C8=6E(Eo(uWv~i1GJ;{9ga+~H5)XH@Lyye~F8{IN_O3;jKT(jm^ONk}p z#&ad9FAES08+^~^tU)VlClz|#SxjIoAbizQn_g&*t*&k-7z_8`NE4)jv^-+S#E1h9 z3OW-}HaRH+?4e9hR2#i9Ma#H5K@!%0V3}kVpb$p z@Llo_WwiBJ0s{SyQ4kWUBkk%h($0_Q-^-#$T8Uq!PTU3)2nW^iM#!DR&%|sXf4A1v;|2HBD~kjK312#%fUmdI$8EKl zx?SHa^4;8ELhRq6{0JuQA|+xh6xllw)#%6G==4I&7ZFxS5`NH6y-rL?!Y$OZ;bD!3 z)_f6Uc>ku~n~$lP7n&U&P`@N#g^Gnmth(#FQ+p{=*QUQW&xC$C>&LX6!zXxEhdry6Uj=ijwto70 zp%eO^saQjNF=1x&qwjIe{KVfa9r7e5T)oJr(ykT`|*>v77{wgs!vns+qDd&zUfOQwCE zuOhfR?_PaoR(4@cA`v^8Nf>R-L%!Z0Yt{QWI9{8xfz`0Y9EdrL@~~B7KHr0Pm%0?$ zBj=woqD8~SzexniU7qu~;i`G%Mvf)Y+I$k(zO!PZ=V9^2>+1<9Oy8#UNoK(v>96hL z0u3@JY=!mz0y#nQm3Y`8xS=g)Im2qC_b1$5f<0}%lj!Ir9g%;7bBa4sofK@GlOJ+r z_u!9t`o!a!9jO!ML~r1THHHG-U<(`i?P?8YQh5qXtolA8?!Am!3Z);4*}sp{$j<1$ zO;>zf?hSYnt64>J@)KUxdfa_JVZ>G>riu+xE=&$*h{hm*xuZu(EOz$Y7=5{4n=YnBA%7fiKcbC$40K8yysLC z_B42AuUyHKD045=2X1Z7WKx7ctNEsyO*1}J?Q=7cdfPULj2(HH#D1y-jbuCwKkNx# zL&Sj)7v2!k$j*V$Pc~{Y{?>fGqO}ggz2!Huy4~6Kc33#CXGVIOcxyD=;_&*8J44|+ z;xC|vrAbf8g%^^)G{9wJQQtAF!2fG&ST=P#$!w$R(YAT;Jj^U33Pw8bBPPs>SNig^ zSV<;Hr3xuq1~zqk=BE(_-E?2;eIR=7rgdMkKJ@|AAFjGGrSAs-*hP4UH@+f;v#;f4k^}#z z|M>*$^{5lAPw4{Ws}(Z%p+n_a5s~u%!0k9GeEJ5`!lNl4g5fXqptjcZHq|I9-pahv z1A;crYMu9|c65vdWRm zo|4Wh?4=!@?=?KhLN4h4zt>~3q3OEK4B)bH!`#Uv)`0nXxFHkA3w2FYd`Cop#$C*- zPpnapShmQ~zR!6LC_et(Cey?mXM!U&Yw+J$vDTi`GIh=`pN4rDmb%f`|KwIcvIA?& zi{D12e?rf-r#{c#m3vA04Orc!I4>tjT7;ZZSvr_%7wqQysCkiU^2wl z!2kL#`p*l1FTb;Z4vH*wB+l1gO2)o3T=MH6eFRE}D%s*z!}CHxt!;)q#YPK1Quv)0 zb2Vu-dzP1-9~tYN?=^YE*G#QK#U6=Q)PHC2>%Kq-I6T^+TA7yUrg5I%$2&2{!PCW^ z9RanMP~OsR0{zBy5SHITnPTGCl8xcZb_}n6vup8!+p^7c*m@*jc750Q zd$g;}6iXAdd1b!1H!-Mb?z}=HD{%*NB-dSJ-)kn=SPgrEso;}}fLBaPX=i2fZGg2& z4^v_@By%OYMxE##i6~=`@-vYLlNG51!#}`P>#K9P8@F}SThxV%Vkd}hJfCx3H~1X( zolq<4x72y(fjw;fzoBMTP>hav9Q>aKeYn~&oR)HX_7leiz5!Cn(b_<}Ag#I728#R5 z-VXHU76|xwc5}XbyK5wbY@|ejl-&@+M8q{5X79V7b0U4u!Bd%W%A0vf2D$f!rSA#V z$Dq^6iBwV;jcK<@vtvSz%AN{uSZf1+!}JW>N`|%Yr5ms9S}aq-dz+no<|-O()6sUpKg*URw&IgcOn!Tv|IPLvL2Wo58Gy#zgkw8{#K1lih$*~iVKt3bF_e#e(PWg{;K(Q7S&brG z-Pseb^(;DbqHo-fXW?*#0k&AhCS@IZUs>;%GtVeQ;g`>dr1ZLy3!7H1x4Ql(rEZfe zR)85BHhs^$yIg?Ve<(6^SqD0%!NaGdxNDz9>Ene{QyKks>M2_APGDmwnKxs;BOF~` zwn+otCQ-P`yPsSCkNp14^61jczK(cnigsrfvusWBotHM} z1S-?l%^PubY`gO}J-PKi#Tn3Mzo#%p4rio=D=7}a@eaefnNw_Dn8AYUk$|C^EzO@q8x0@(}g$KARbtwOawtIK{hpc3K__JMGe~DV-X@OFMEr zOG6@~35s50F#SNH&X>le)QU_ds@FG~QCJngrL?f;5sNuO`#_Ui_sY7kpdR?mDmg8% z(314r0Oy#s{B-7QDj`QOERKRZFC(sPuio9gc;6V+bkJLN>&T-6KMc&jzsqb)TwW4ilxJRGc-jz*cc9Mkn!sax7~%?0u*ECe+&hqOX0)stpdz_cNGH|y16#b z++};@UYo`?o0dF#KGaBJqhnx5A7E0-<6r1qTb8k7RGi+w`qn`laMh5Wa@lG^l#Sea zui%D{3Fi5UhYXLx^|hA!eBXj|;WH!}F27jIXETiO(%$Xfo<2X42}a71FpWy^AUXO% z?`1GE9(`&+n~8G_{Av3)xD>Trlbd2nxiInp%=yP*w0?qQ^*2x|t||$*6)D2bpGqs_ z5F&rU)uD+B+8bu$G0he_U8mVDg#;>TSvAmXt3NrS1czSw%LC|MDkjfQE>Fs^j0s~z z{YUbVjy8-^D4Z(UjlrRCHH4S_DoxyKEpuPIRMd%pIV=uwam8l%cqp-1RK^I zz#Z^oC!Ny3<#Nq}x8|Jo6umT6JV_8Red5P8`l!g6*pW;R5gAiOJciszrrVhY9znJ! z&fj<`CoE^zfGMkDe@%$h%IZzWd{?d1WAi-gNqT@rBVfwBWs{B;e;#<)N@f z!r;<+%@zqS6B!}SoRmT}P%oOUyQI= zyg`f2^MDX-mkOBSzEcXMB=ssR0xIqw<09bdcO(+_J?(uK6SYVgXL}A41~*UDopa^J z^Hnq;*c$}1M5g4+5Dgbc86jU~9}ViI{DM>@+D-smFt}edTzlS|D|%0ZBHt(0L~6OG zJ|OtBlsAz4i=TEc#{53=2P!3US<6#OlArbH!7A)z{Dj_;B^~2yDEeEp0>cERqMp&% z4o2lv@4vMTO7}AMmWbnvy5yJXH+m*4?^>qJ{khd>swkPDsTF+7P-yB-0sXWI)*Egv zHV7L5I@8R3Aqtxu`^1rs0K9UzKDQOyM|=y60IaU#j~)#CXgr*k=}VG&3?q3Ut6&Gh zvNe|7yot}51*d)kbk)cDV+LZX`Jy}P1D>e9gy`@&Vp{Fo{-ds)jlj;{emime9EW!& zQ->Q0;jnB@6~bU3Q3XBDeS~JNduOALgXx+3vjE6GLjk1ldCI9X23WM_Fj<$IjvYfq zU5(5snmX8(6Ztal{QRf01cbarXLMGdd0HPfEdaGZ(KKtz$+p|EbMS&GY@$q*WXpL* z9rP@mQq!WWjhbK@WkdCp<+F{7meVu$Q)_rju3Z`7`fSKT4-CjxI&F%vQT}m`(yVQv_w5{rS>!UEjtg${3WS-b1 zpw);FMqI%2GU~nDt490puC@%>sP|{!tqot_BqnU=k@*=(k01?_{|s6C$$pBEEL�CnV)yfKj3uq29vSrFC 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 diff --git a/website/static/img/blog/collective.png b/website/static/img/blog/collective.png index 63cbba73a5ab6d2f0247d8b9f3d705759523edbb..54a182aec1b7bb5c587bd5ba0876ce2494da2ae2 100644 GIT binary patch literal 162282 zcmeEtg3Q(!O}Myd#iNC?uUbT=C@Kt)=H#27F( zBquo<$vyAs=llIVzrW#mke3U_oBMt4bFOop>zq64nU)IGWroWj5Qs`mRaqAVqR<3^ z&aqxR3%v7r*fkh<_{ULEQxOEJiMw)aeI9ttYOAUXd?;5EBoFAzTRY`1pfCoB=u1@N|<`n&TtTzdTvv`P|VJZ z6wdrMWA~9!l0co*p}Bji6GQ!m>f_L_C-OOZp)Z&|K5I0`1+OeYg9SH%b^QCqnsbfv z%zs{h6fBfbSN{7demZ`eeAj=!=Edic|9K7q9Z*RM{`Zwa$p8Pf|8J5%?(qMDm&B(u z?l1{Z@!U=Rg*J}siqNc-nwm-QjM^jz(u-HGGU>^t@J#QtW1VMm6BVK1S`uC6EYj9`2< zJgWR+LIKr$=Y`t)PT)y}&6l`^O&+v)I${0d28Ei=hPGIJ5G0h~RdgW^aa+@xK8_5Spn2}UU?L*0 zcf30P*>T_RBrb-(=JHhT=YOub>Z(gS^J-mwRdk$P6DV*wzJMxU!k?HtCTO%LF*N8au>6ZjloPoD|NF%Ac=mN$pro5HzbnW0roHmsl@ZM(F2@4M~U>YC0 zzwR6g2|Q8)V^0UWlH1KN8p#y4{LIPcRXwaSKl`bjBzI2#o~6`Bs4Gl4=~R^{MW(=)2}-;^hzw#)4PBLdavx-EfqhSR48xuHMlo1x;61O z+fkc3dCVo{a8)ZQobUbSoJS+X=vRy);dxox+HMc9bJL9_?7l)FpsXPO{LM z&Uy34NU0tRw@)i!J2ZY%mN@TFPu#(#C?Ty3C2W*cWmexFG!%09c6$x8YB}wRIsfaB zHMlAK&f1LQp-I?Ru=fM2OVKeo|2$n1jhM<3&zqK(aVNsXYU`~t#oGGMhPE{A9@Hsy zV<{utsL2b8XZ+V0IYc9uss<@f*1D31*lYUF=5uXCpf&f`Az%;5AluJT5_&s!)u~MI zg>c2Ts+h{gr|mnXCo{rhO5HK-k~RsZVfu{uy4n+^31TD?@N|;3p(|9Ht&xI0U)e1%DcgD}bw($&Mqgq~NYPeDrU(X-@)7;xDDVZszO9j?Lg;!)7*u&!S zIJSMp$U{Tk6)5%OME6e-M#+FVj{1=O77o~m~g(_A}=Ae;g^Q~8I@0f~^BREdlesh}_m8F;smL9p-sLpB7b*{U7Fbfgt z+adV_bymIa%=B&F6wAx)UfLAgm*Zza+;?!j)=LXQ^b&tO#wvvMZxp84KFWp&vrJ5g zH9zebzM#t#WakKmDO@q3?aE=;WiY78&2C#L-X%oVG7_~u92~l`EWeA4Wt4AU&t$RE z5%>5U#vwnP8@jPTU0XUtVx$%A?+>#qU27S)&2#z_cXlj)eKYkFo1TncK>Q5~S`We& zE3l{nDwdEY+qH&Y%Kce70#%WnZDMwBXi4T`!<{)Ftkz88fObDT)A z6oahQX!=!gCK0uQY_Ey+Z!d|KEMo1xy(P5>t5 zO!b%qyT(h+5o6Qa+ZW)!zCs7D-YS%rlG_0AMg`$vjH^F_zq<1`K$!nJpA`ej&m;#w zotEH4M~1H|{oOV^@!ioqO$NagE25NBm#N6;;(?)Uyz`tOO-6g`5G;z-JqKR&XgKpFgc= z-gkSRiK??!k@M?dqoC3)pnujQeSJ4UYHpJkrPm!{o93_cvqpAJiDUT>3|OK5z0##D zi14Ymj~=k5vW!#z2X+r0EK5^y^h=EgYNuU6>U7M5vlREJI7_or#DZ#a!G7np?vt02 z>hkZFGU)~cx^de*7HVQ6GLDI}Kpu33cs-l3Y?+T&Z*`}|n}&_1<=dr}KY!Ob+X;AV z`NiiFDda1#UipifpP$pwJ{5=n+(EggrG5s_U%`p(z62Ab-lWMEQ!_ZjiL8kiS2h$$ znEm!9xIDjq_IeR5`SE8_JX71epjRZ4_3xcS6#hE=C8?X*OsjGH_r!)PXZl53Pox-kvt%QVH&=WW z{pOg>doylqRYLDAyr;>miGcj;a8%^Ge?mKKJC$eFtRba8sc%|YZ|0=8^la&&T9e%r zZKEf}i}T$xTPu+XkMOgs+|)rOaOjWuytZu(`Ox35O@3XfV%b_}Aqd zRhxQImmQiViFb%^E`N;-foCvn87iw)Y!V{B+Xho|-u(BvVdU#xoXd8Lj?bRqo_npQ zmbC)6Vme0yf_>!q_}(BUs>jphCxH;r^dYaZH3gs6Zh%?V@N~c5Re@G(cv32&Tku{z zT%RkS?@`~~d4&(aGhMbMo)UfX4@Grd?w?pW@WR5lWns2SNRAR=t^GMP3kXE(1A0;Z z2-wmqIq}&`eeQ6F7+XX&O4BG;^A>2n9CMgOYWNg>e8<^)CcM|Speztr)yZ%9>1S;h0`L7$bGL9AH7)jvO4 zd{~k?k}XQ@!Uw5-^CgcXF5T=wld}hU_U-K>`Diib+T}q3_JoptS@|p55{bEocVr=!BFDJ%w7e@bGeH4&GP!TvxGg=fJu; zuH|#eLQ9q^@T3?!O<@zv6Sz0|lc!fphSahitbIqI?z4B;b*9GeD~!^>;&$);yG*M) zK)QT!UfSawgOesxqye31lY>XcwPapq0bIR!c_Zy&tZ3@|M~|~>3?Pt@4h1OH z2tXk#w)pHKtc~#;ZB=o<2zXq>!ErVfIicYUzqpj>eS5Asrhx@;KsQQ>(6&#K@5?G7 zQ_~*{koD?NzbotwUhoamEH$1RwRLgjPTAGnU$87^6=^wL#23eH0mOhdC{77 z=q$)8H#SNN^m&JDP9)*k?R5VreD#-FLwX^5w8FR*t+soU(u2rZ*B%>MaBD> z{PZJ4sss;a(}@|eL9-N{y#dRVJKbr2;RlN^cV&|f=xwvsUECjRP|dpi)YFAy+?h(( z1-VcRBkF7uV>xclcb)d$Z@9P6QE+W*SfTutKg>OI3vZxl=ORAA!qIT}&l-d2+!}+{ zuKh=Ir4b=ZPhHZ1;+hJ2d7lSu$ub1D5DUDS-wJvWB}GQbB{HJGGy<|6qSV%pAL24o zB{-mk(i5^a>EQuqK&f7j0@_1GKRoYm;oB%E#aCxt=f1Nv1C@}VV5_oZ12b@drFyqU z-%ifHf8i5M_W08JZ+(zWe}pclXqRmFyKb#C7J0{$qsK?xm`qVBZ%1KS+@PCE=L>eF zSW3xL$Igi4o&xN z$W0x=e>Y3P6u>HlHk+?kw4X6w9Zp;7Gs}=D)VjN%EdD0kN963e7fn6|nA4F4&6;-& zT)#P8(kp2sdZ&LBMpI~|=9>-%^?)l9*IK!$uFlRZ^>NfzM6S|wUk*tu^C9Ds?^a_O35QxEs;2361SgfH{$mfosprq{@$h~DNgk5{7&{PPQny2+#05nZh4 z3ndR!vo;Tm%5PHbpcRKI?N28IK7WV|{LKPw+Gj?nRVeO7_Aa8{Crxl%gwgz)|K@`0 zs9@Z2;mGLzB*(s_&V{}a`#y0Ru4#$*H^D5^^ubH%ozIjm{AblS$*T_KXg<&9ya6-$ zY@Hk}uTj5K?eNJI1bRqBR8ev=+~9NlZT2{>L$A`vNUZU;8|Il~f^!UHMa#*95gOK# z7pd>U9i45k1e8bzY1?Cmpw^q$#B#R#ow!@i=-pYJnGP5T?$=3Nz4AV0EvjJ>kZFov zmOsA_mQo9UmSn7y9k+HxVfFalZ7H>+#kZ(j$CpI)J;g!R7*iUx)hE__+iGVvAErn)wFXp7k@83T!`cJ z&X}P(^PeR?Brh>^F?N`7pLVwzwN)u)H5Kr(S}tTQ?Awj&poi8!=82(A_uzml#NRld zYf%|DomY2#YvW)2U)?5er6jDeSA-^GPxyi zC8(*kJ3k7mMa7ZRylN*hFAAg;6I|wV@0FAtxApr;&a+q`S}NLC@|()SrDPBmtEL8< ziHxWs%NiDGYkc77;lv86q6Y#U^?4GoB}WUzJgd~7s_zZ~Z(j{<)7otjmua;;&}kTE zc(Q-tKg+uWu;Ujp+0u)<{8oum3=y~QgX}WZI?rLTHt$_LeuhHamJIbCbueqXMJVCT zPk^FKy($9W8H1n_;RHreBq6`4J!?0;>4>4b08?Ih@`6otOaO&+k z{vG4Ix*6nBXwh`5^~mEekIa5hd>E}y1du8e1jwwsNlWYMR{HwcOzFdnrC9l}Z^1w$ z+e$+pC#G2PHs4Y|#kjDw{W5-n-CAG1*ZDYyW89)mecN%#k(VL47moSLBPhozif$4*Xu8vflbWft;>mwmsF z6qTAliwE>Jhz{i6SEdHMc0XHWkm|-W*V2Antmp^c!4JF?z!TLaQOfFcXj z+U^{352grD3>f_iKJ%ZnDM3bJEykAT&|=VH?B;DdRYpf^%gmb~A#+~AaN7Q=n-rFf zSJm6-WGA{G8uo%6z>7RXchVE0{S-pTYx}ftzB5Idk|wS~EUOTZKD)lXR7Vu(w=BDI4VDKB*ZALY{WqE^$rzaj zAUnJ*J*CO^`M4x_Bp6;OEwcK(pVD(xV*Cao{ER{~&sheO;j33HQbhS$ZfTuj45&nG z*@%AvMYp%5AzHtrCL99*p3Ctm9QY^Z839Nc3@@e!;<;t~W~f|(@E9*4zL2#ktBFagrDgK>#N^Kguds+t zLU2Q*b&T-nWsm}c83)VM7#(l5Ih{Wi1s7nii8oT1357|}b|QT^fKmai85NJ>|nKN--nUK#uoep7HMIG}y& zt6G?~haZS*H7Wol&`*w;@At^2^2!%SHMd42;+pOye#v-WI-nWyH3Mnj>UJ6bu92@L zs_tHw37Vd88Khyqvim$2yk7e`o%j83`AbVD>&b~}3m6`QS~&Y=^xJa)H80V(U1KPX zp~;4$_O@R!z@lSE5)rd|zv2<(-Mdp{-Z5V6hn759sx?l*0|~F?gtAB+bmNz@Y`2)k z=owZ&GRS2L!?7tg4h^s2MI#cm2v-QO9_9(`*oc$ecJYnGJQ6)fBU-I9(qj2d#b-F5 zJ0SD>vU{|X%pV{7Jb4Q%6Rj-}wqI*N59Et55qpn9wKFQ5ty?XcG~9q_Y1L43hJXBk zSG@!a-+2{QzKFVUsj8j19I9ue-tD{dleKx%*Z2R?ssA+Fhn;fWyBqdjXU>o^N)L&z57XI(X{phS|Q< zAM9?2Ev&p+ibS3owh8#39Dj6j%!~ix;3?sAc3!tfR;CYi z$#x@q7u3bAt?c_#k|3^&ysB8=@Y57c{(LSt&!k`ME+=UPklp}JsL&lj3}qpTtNCCae)_Vw36zIc7BRz~lbDu~+bSoiJN9 zOHk@CDq~3bYzv=zA?_VXuZ3e>*3JH7s^31yB)fiZaxpeP-bk=*h3;pW-rQA^TLA-D zs6wB+C2hF!{G# zSKgB4O`l`@awEJgppjGW5_D^CdFIaJPZLOPKIflZ=Ac_^S8n2JGJ*OA7btbOqb!K2 zrGCQWVE!HaDc(RcN*$l18P$L(jS;k{zN^JXeUzkis2o+>Xl7zo8Pu-6qzBVgzYE<( zRVRpNZyQd*v#UmqnGOIBM8oMlb%PRg1)AFy-z;tgaN>#AWRLnfZon)OSn2jpow>)# z?8eL87_VzvhgjedAwZ2?H#@mBnR>Ly6u}z|QoZ;(QywflEVkbn!A?-xEY%GUV3Bqi z@I4P_$bu}hcB*wE123p%k+i#7w9>P}C$)b*5jQtuSQ+1_xV+$ORPJ@2c5C;J6fPTS ziwHXtxXnJ7wl#hiI$f#Xa#!^#h!w%HjLkq*USZPq0te^%b|wceL0t9?Bt|Gxd{QbW z!O4rKMmfc5q-unC7I}L;uL9av&!zXH3@?9V^5d`!&s^Y$@8*ERp&?Kws$#F5$k)0l zJ24-DF^z=d(??u%TXYnscA6vM>))iTM9ulmF*5>^B@Zn650>ewWhs`%M8<-vA}{ZA zpx*3)x1wyK;(Hyy7iE)fE6c@uTcXROl{ByUm*2||DHKLFN}QJey|RFfAr4_tcI?6kUfqEwo_2x&4hFoX!IA&h^| ze%hgFtUtL7IB|RiS)e**L~rmWEEzEC$5_bWb5351!&-unmgt95^?v%U=hH*ayb!$V zdFr6&QZ5Pg*l5xV+YDX)@vVdNyU7C5=fZ^ehv6FQz(Lhh7od`pgwP)rK>Dwee47|7 zd0a6DD>f8my~;g|aRDTM-Tfmmpa4CtR$sa(oVf>z*Q4DnUMYu4ybtkgF0H*gpy0bd zW9y`qgkY9Ta0@cid4Kw;5-M@chnbvR#L4soCT0<%&^0+ZsgG}BC>gn!K%ZxF)VVtzlWJ{*#E#>fJW#C<` zctBl$&wVF-5@NOa-6B%ZysizVu-UQ$aFnLuC7baxtQd}E&OpXO zo#DXkUvFKP#_;&HU+G(j>E&hP8unIZH(nFJx#x$G0kw!TWC~#dPzbARZihZcob^51 zESPk9eRCFnQ~U-8)JGaDm0quL5@UVO{;)W;_y(Z)YV_nVvAhv=<)W5D=HX^M=W~!n zl~Vb-IR=jSRwZ&9B-PKwNJirHhg1LO$K`+M-aBLF~U{%(Z|#8fuAo_sXj zd>WB6MUOjb=Ktpj5LRxvZIb>0Qderx`DxpgSR?DY-dTspexHJ*C4qKd2t$9BD|L1k zIRI}10hp@&C?HSnmslp{jcsZg$s*onPksPlwT!%}Xe8@MPpKTe3tlL6oqaY=$s-5G zYbKvRUPQKs+Dn|4{wRHmV9GKdi3sDEn7p}iu|`JKQ0)E5y)2l^PKRvcs~GD?mF-qC zZGy`xHPfZ<+*+RBp|s;$uBbpnqi%&n2YV>0O7R_S$e(x2e z+pgl)1$J~g@%4z6-<}iiYFJHb*(++w5hc(RhWZDZTKoYyrav~emR+zA8pwt{ zsOqrmSefb5j7d~3>)va~DO-{PqkWolxBb-u51J(}x%Xqv$EDQgRQ{3y-mffN8E@ND zYish1jvSC7pjSVrzpRc8kb3b7zUO>DyW^D5Fz}MCn?%y+VX^d5-CZ@b!pg=Q zzjTGguQG38w@!i5^~pcG`FXC5Rzaw_5bXZ!zx0m7@LCh?Qj=7nnc~ zdGl)~v_~oUg3UWNcj`uyZY~M*z#U(mpV-TmOIo~Rn8cF$q{*XW^UPDSTHyKT-o)R< zwb6gicAA=)C}o+#N$Dg9Joj@6d?rfO6|RBjqU|^_oQv5giwvYGhh}QR1FeGRfESF= z*O5p3ecy^L?HI~si|?fWzDTp~wgy2vHjYiD?moE15f3`Q>Oyg38+`NaSsDnG_^g;j z(&U(i+4yQQmXdLED9ulav1AO8YD!~>W_9f9AG#WG{n@vi+J0U?Xz0H`o{7|cg zEDRaxry|KnACrA};A=<6Ov#~UHHh|>6l1xGjKwiUBF1w`5zvyh?OpbF6)odMFUM)PeA7%0gUEy<_Po=4eP8AcAW~~hez(r2bR|{TU>1~t={wO>r zNi2SR=g~zo&}DSNo$dBYC`YGat&FNgF=?pg^tb#PB)5)du|l{P)u#M_xC}tF`mzQf zwOs8)(q0|rZE=$~Vc5+ZccdwG#6Bq*vGxVVx&`Oi?(S}4FK%jk#VRYS5d}PbIa{A0uI)B>{ig+s86PXExN%K(KesY zuu^a?pTb+0AcsxM=~pO5EaUmh(*#l?`V9-RsH^0RQck}>piWYo!B+_g?jA27D;yO3p^=E{v)FGDln2orH3H4rNxUwCw^AmZc5&bNIt@KW zPCY7`8%4%)5r>sAX8`(=S$qU8qsxAx2L1WF?;OQ2rK_c!=hubW*{|W=c{3;WBT@;5 z{4)RR4)u8#s5#Jdw+CU`Nq)bZmWNthM@;qC00h;}$o@6|@yE80EMX8K%m{R(QzBKf)Jk^*Tb;p7n6ktP?=L|?mZNbtp?(^nt~ z-6Ei@m(i<~X_Ie0$c-AhK)yRpht)Ns!fVwQ^6Beuoxyvp0Yz*$G#0)NKAIFsw&Znf ze|RL%^grA8$h5C}GMN`Je|E_#Q!lKDzUL4db;8{11oiwHXcO8^>Fe)p+0q^P$H-y;?9x5mfDo#|W&)w5QG+}&HzbhD% z%_+M{OZ4Jqx}OG1C5g!bx}#V7VVDMBcxv<(>7*Lw2BI(1dwzRSzSQtopczoxMEzEu zuGKGUIe6l8MUA({N{ln%_!S_rCyid<^2~}JR0A|T_Z%IJQ@?}UWP@7*|{KcwnH}R?em;E^eHh%2Z{s4$_={`U9WB@CcE1}p|ZS|WmFDj zdX~*?M3=$?D3}ZvsyXhE$x`qr9N>5WUCNSA{gUZ7ur#?7y1V#uiSiUp-V0yyUK}+3 z^3e^@cN)u_M;4TYDYeqkdlnC-yKw~0SjCCf;!Q(~Jf8cle8N?nWYw@w@DIa1mtaQgykLw_%yb~?oWX!QV|27FuM7+di%^MA;;oG*67lkEiQv$ir~9PgUox|YiXm zr+;|FN$y@vyd-l7#cw?ulhm~AMQCukIZtDJjQG8!{2Cu=)4LsTmY!0beg9sG7;k|3 zmFZwe**(?f2;quF?Us=-CX)S;O7SQ39QKs~E`iG0J8|=Mhqa;J1qU`j<+oH& zr6(Q;=%2en^a&3i*z4hFkEAui4$im*DwK>%SXa0KJYi1(5-c`i#kuFFF|nNT@Jl$Q z1&#KWYaP=+kwqFTku?c|3NN`^$`aV4G7+Myhrk@9d=AXZA{2|u>45<$N|Gp?!X!e_ z)YJaZ?S%(~+rewIv;A#G1 z04Z73zP8HT3p)pl9Fznj=@{&)R|oPk|(AV;19AN22(P6Wo#!`Qj6i<9-dk69p1bG z1>k5a+KV|Or(#__)TyBkZ63=Eu3Q@n|K!n5uycxJp%BNt)oMdb#3_xdrpZ0LaT#Vi#|?7H9>zJ|awxTwV%#c!R&?=2t*wvq95S4w)A8IC@(6t`d zhJPIC^ZtD%kf%?gJJQ<;oa(s?7}tL&K=CfLyHW7yu!<4WcvpL;1C3_DYgx`Uc@E_##VZ`xmA~NH) z3{opZ5g=TR;l4YlIOJ#{@91>LxWH$Cqwrko2DpDilT)P^Ugu<#%dO-B*RA30WJ}6! z0O>#93zX7V0sMy^`trF!z2y<%9tw ztt4|_T!mJW*pK0hEeHm&c5^HzLIB}P%Mr+K!axKM6eul`-mYmn64vAX$dDi)FW6=D z>lVi8c%i(=z7G(LxhFN7@qUfdrTFw={ZGDuULy0qNet5wM-_dVd2^G?6$2e7WAjJy zmKfm$MN|k=u0!9>kbSD$*&CPHS}k*K-+g*61a(w%VjjVJOd_?Gt(VhTXRs1vr=r#K zy<-MoqAFwdHq3CKd|`=QInB=Di*aj(JS3anmUdSSPA4i-k$^`>mKGw8O&@pG?@i}M zEdHy5a$ozc7O?Y0d%P|dLu*JX>RX9=Z8q+59pc=9)Z{gmRIl|~q%r$NKtuJ~ z)tZ7X#OS?_kCk=|%-+&;eu5~`hJ6>7dmy1r__pB?&}V=8Z9^tbtHBYIHL?1*OIwn^ z0rA<4fD}k6Ak(%^yd?bY$@vL*Qh5tGOx3Yf-8H7OWz?d2$N zOx0tlE*x31SSf_r{F2I8zgcoMI~x^ct#LFnXNKC1`n2?J0c^Z@x#_pNJa8ri7=<$V z$ryRWBp^Fz`}Jt}d>~wsIGL=BYH7(CWq``rT(~ihbjmR`b8E7b1BOKk&0wV>&HFxJ zulXn|fKM$r#`vRJR_oms9NmAm({byy(`g=Qs=sXtNVI`0W9~jKfD5lVzFpY@ma0Xn zlf_!UmD+vYxL&^xF%ij<)!x@r;+7rBS7(5Rjszzr3_m4)OWo_}Zc6nWe5=kMc({Ex zxhv|E4mNuao0I5mqpXX$thXpfh-pS0M$iH|bluux@lM=jE@8hLDo z+_SSZaZ^W?nVR&$PS}UIXw6jRUuJR51CEajs0~fX+)qkh_t?*2+BKz{d!)<3VS4N; z;Aw$YPm?pP)VPeZGxf;+QV72Awdu$3McntLNVj)U-U1Ac?y`v}_WDwt6s@CW6x>7# zWA#Dv=(<#EW{RdfL396GY6vRB5T468a>uUAUW&7eQkM~9E+I)Ai99;V#LR4UIDQ8T zjkr5?llmgBvYwz?Bt;1gsWO;VRNG@H&OC5{w+qmhfR-AdflV`GD8&U?Qg){E7grnJ zXo@R3@KwZ70)}C^-R#r}tCS8CFR90$W-d976pH%1Dqk82IZ7NBt|-x_)XWQ-yyR(G zlv${K^zG{1HJW=xO$2Yb0>ja?pzmqN+`Gk@;`eBGxe|1l*ReI6b^FbmCo2 z+CTq@#K>;n#%IfOwsPd}0P}aUgR5QWCTyLoBQx7-ljMU!q*1_P(bNadh=Jcbftug6 z-`y7fkgB55Lu3Y0W%St``5&&jGXx}2-rk`Rs?>1$Wn}S1_?6N6>EF6XVxxFCv%ny{ z@wN$|yrwBnN8BWA0iTkpdR*t9G8b7L1#AE8RQ*W6jhE~a|GYRm6sND8`9oZ~VE#=+D~BiBxj zqa_rOb!KiBX10^B#e{TiA3l4sN7UAG&k!9e>N7faXvSkU%s zoDD#5IS&_|Dmv(<)1fN1Y=X2QUifBaev^J!4f31<8#q`}BUuDsPv=^&H&p_%9X$?G zA_pcGk=OuL57y*ux8?gcC+P*p>9)SrbHk6-vH-mSC<9?Zp*zl;3t#(HQDCp`(~c-( z)RCQ&H}-L&hl~Iy9!$F{f&lnzA%Yc)xeG>7cD&UJyrN0%F+Z00W?LQ zFB>1%II9WH&4>{F3rN4J*T+})CevO5iT&IP5_e0ii2$qII9CjAS^A}MSwhkxbb8Q?BaUJ%U7FlRn9&{`nRb@0(gqwP zp>{};Sb4Itu4Q}B00@^RM=NAOkB{8sp6F^!k?Fj|$ah7OxS8PF-V8^W$B_ns+c;|Z z?k^sp_He2fQQJT+z3H}m(?WWrhmRHadEWqah9et+sz@N~i-eZ=i?g}`Dw^|1-dAB4 z_GRKO5uehp0!|Zn2(U(0lMxM`(RLXKK9-fBY1H0#GIluxg?;#46H`_;sNjV!#qMoK zKH&-9f9yic?PDPKAF@v!p1~iudjj=oD-dhR2_F_PD0Bg7j;uzex5{7r9~XaA2$Ta2 zl7lcn_r9kjMn7EZKLG#0K1vOF&h$%c?wTvQuy82?X^@dVYrUy}fLSToZncj=T;P1D z@OPA&xK``EIid0b4HmNTpOv09^+W{%)tyY-6=JVZ7H|`SRDjQ*HS=}Z8@dYE%sv&a z*zoRpk$Vron567w40Dy3k|Z>Do7ncN24vWMj$E5+yR=A*O9A}Kpdkq$c?+joPA99K zU&bJ(PULEW?vK&|{ME`wLfw+Y3ZuwlroGws_!?4xRj{o};&N!%bzkZ=XHEHe+4?er zOWgs#eML&h#}n3O-&>Fv-CCtYiX^KN19EWH5f?9ftj=^B>5aYzc+Jl=t&w&c(hPb6 z=(KT6h%*7xM?m-LiEc?e&&hWXP*WIqb;t528D2N{92PRa)?kNT1L|tOau$8wzcYzd zYth-z!dtGOo`$GHZv?<%9cx*!W5F&}%xWYGpz}Jg$P)fP1zldVp2<4XBJw69Mi7x;9&Cn$^^Jtb1DYGvlD9VL)NeJ8}k=y@Q;_d8_TNdg5y@np}&HQ}Y125O)o_PJJUDXzOj7bPU3BxS}d$ zY@czo+zr}`u0D_?BKmEa+1i@L4+H4Q9bupt^+u5SZS54gXvGjRfheu?G?ho^M${gt zSpT=6e(4-F9~C?Erl}tW&5XObeFrQ4IC6@Y^YHji+lQzX!Uay!BJe*qZ3qzuyj!?R zy~@%Nv#sQnvdy5?S6oVG>Uj1>atj-wN(>&K3n1PWGkV(#53WPOcyH7;r`?E~M}k|_ zl4=Sr@t+;eo!B~1Dh2c!AE-BhePkQia>579K~4A^Wl#X|-roKW$RM5`xpIk3!Po_- z*Kn$CqhuCizd)efmIOCPZCSqlzpTz7mEK9MuPrlqTBN-1{kX{0Lq2iM zX`~GCZln?s@HEjfr$4-&KcqQVI7`+~)WuA7#A>%bOpV;kinz0a78-R#uR+wj z5Z!y7>H&f*#EiU5apyuYy}TYv(B&%&Tb6w-K+iy>zxkLH`Y|zqC)f}e4OfHvaC(vl zyF=%XFiaHDJ^3?cyeEri>^+)lfu&lw-q^-M@pTZF%(Tpy zcJhVe%zb9*$vpUm3~~1ApaQDJ?@c-6o#56J-(Ax7`EI*LjjUJk__6*mTK1v8^e=~5 zH?NQ~W7aD8Lb@1JIfCT>$P$>kIBuCO{~~ec+MjrMhZy)Wa+?MwPN6;6KmF>zp2Wh& zpU5lojs;VBsk!p!BQYdhx*@AH+#4g3I!&^kx;rg`h`>BDQ^nl0cX^nz9czkZdz~Qg z;#K{Qr$n3Sq-6zE4(Ak*jVXQGE(b|SpO{BpD0$YCp8TG!^-OI=2Gc{RvU`>kIwOk> zn9>P$Zl5I}v4R=dga)eZNy-J}Af{7_B-bX`ypRy}SIZytZ=qcu@JEqlyc79<$TSs_}`u+yRiEAhN4FPs8IcS>OYm7g@2RNK?gB)}bV!9Qrqi@}+^%_UIk7KDqP=R$B z>PzP9?vCvj!RD>zz9XmB4N|q+&li{(&ryRUC3JEI$fV_h5+0y4iwjlcQ#-X6$g(eu zbi=mMx1WHbKG(EdQ=hTT0R?i-y4f9H^X$y+W`TAuSflfZMlRkz8Xx6Jn0Tk~O_jT) zdT9H~M^@Y|_tWmfMPQCEnrblX&W_CB;?}gl#O>#}>N>$8gtexyGL@0ihf5@qgc$i2Jky#>k=KFwj~A=If>&Qpl*}zSJc?M64dpU~9{oQ3b-Drv4nn?74SrCSvt20- z4VqKnQ$7WNsH4#&j8Y5uBpf&E1fX{ZFh4OobwHNpXzom*6DBe- z?z-#euPil=QgE3~OH69NJqsLUZLo( znm26a-eX#R2`|(z`Fb>Y)E4qN78zx zo4%qh-A}ume!C;{TLFkaMV)HR4G-Y~IN>Coy+$Qzrpi96u_K$-Os|2^xet2QNGip8{Fs-Qru$jRN$w*nXg!h z%D&dn@cu9S9*QH$Bh3tt9VwiakoT^w&kHi|vvH%R-urcVw|xz$7;6Hh>x&xdd?HT1 zLc|U&gd%v(yg2LY@`H`{Ni#2>lf*O`dWzp3#ewr3#w3X^xlGU!y2Fh3SFkLy)_bWv zux$!uld$D)m!U_MU~-HMLDxt_Ycg@|!g|dF!kJge}1Z>XWq0;FI|QjXvgoxH^Rt(r;;% zJV|b8z=GW@ZoQ?Hw%uQpFvApA4$qTdE9g%TT3;}(RE1}me9veYb&eKVKYxx3q60>T zS`t)OA|m87S(1lsADxcCGV~d57cb+6Z zySCQUcYRs5Wr#M61Nx|zliDTXahm7C3VUA?b%Zs=i_EOz!4MZ6C1Df{Jo+PuS&SS% z_T>1HORLmaGZMwZP5v|YqKeYBELqxPlz4~Zx~bG^*wOH#CU^~KiMo#ZLM#J;m(Qvm zm)zQ?=e|Y&F%Jo;&uWeBR=Q`m1+y39l%pv*DWEbk*6I|bi_mA&HTv*e)nU#kz z#twPz+L6|tb|5U6n>|7{8uU)OpH3z+^4Zz(TGGq>AF|#8EXplh8wS~ek}BOG0)lim zN_Pp;E!`y@N=kQ!!VEDeAPtg^l$3M~ozmU)t#R-3oj<%TF`0M0Ydvv4buXjg+v$>9 z@^uWSW+C^h;r+3s8xLU__NI5Rd^hXg1Lr?*C7JQlMeh+bHP>lX@))@yyvjy^NwbZx zqFMjSD;Fa(UX!?#knQPlM2C^`AaPD}m4BO2vEcTpJ*cg1US%ZDL1X*Aw5>Ub!(s@J z#MGb62F|YiNyJ9+=2Fi)Ao9pL!C@>U1Y^R;vZuHHD_o?16GB3XK?3g8*oumTZwl{Y z8NNDNDO#G(O#Q#wzIKb#>xr>Znh@|^V+Z?>HIC0Q{f@j^*S%@=#oqnslaeogb&A^| z@iq`K-JG9mHo5FWa2ss9nvwA6-IhfX7AcpMa@dnO(8Rvyv87M=&G=xfdFY6hBoL*$ z>f>c!Ei%9J%UktyY;bwV42hBdHm+m{TYB6Z>DPe~evZV60qtmS?5&%S-E-0X zl**p&F+sg*VAMNzb3bl(D>~(v4Xer5Q-72Q1g<9^axxOKMTMj)FAi2SoVj&?H+X5A11?nihRaoV2m%Q+&|DFakFe0t$EIH4YB$f@~(Daag+Uo%`A*z94tG z04UF%jNJQ^QI)Zm;B;&x=-iK&wrx@vfG9HYe7;h$_cdj4p(S!)7ckG!&hRJJuC z1L`BECWZHXsUzVYiQ>tEZY45O4b=}nHXw>Pz*lL6D%54!Cic178^95VD=-_uQ z7P*{+&uq;?Q#10BXa~h-{a4{+1WlOU?XOOOl5cP!wY}fc2v3dzaGvzf2!e>-HY zN^G3^PgBQ(GIPd!>53nt1U(x*5_9{+mn8pT7@@3H*gP?q>O@r< z9hpH#HiJO~osdmmd0lir0b*LiLWXG%aVc*;*I5o~9kKU5=4ZzRsT_DnouA?UT8F9K zKJ>TU}KR@m} z@WJzk{o9eC-SYbL+$J=4-EeC_XF%TraXY5o?=)ReZvdu8`kkFC(b|4w6c;s&y_-!( z0*pq^xUT;lk$54)dq?&rqkqjAz3}<*7`z#@M1yv1ZS_AhlnwnW&YLrjaavJKzH~-h z5tHjJ(Kj2HZUIAVDRn(aXKAU&KS~DCqa#P)&yq)eFcuQ{Lv-3f5Mv zA)hn-m?(@6k5>RR<^JCq{f*fiFePK2L)EA#L<>^>zxw}H`Re}z4*DIO$n*TSi`?V~ z`M6BEHpj&4Z!L~TI`Y1SPv*?&cl>A945*L(c-MAjv~8fF6o8qH>roo-Z|&?GH}eQY zer-ki^&ip~=7Jz90@I0+Cc~LdF)6H;w0OenbGt9blj!^jbHUW7c9BPj?g&SDqr*g> z(E80R=j^|G_a=1s@v9MZ6rBqElO7}_SYB%)#?W6sC`RU!E|AP4t`TBuY>e<8(C4r0 znLmcev`X541KR%^@%v>CK5+X)xRWQzqL3K(P^J*jUov0sj>WHg^BP72pJz77)+Z%Yg(rlMDTivRU#Jixq zp{15x&$WNe3j-x6R7^eZEn?37oo4s<=8bK?H>60wa)hL$TY0qMP3s@vh{??waC5zY zoq3vCj%6e+Zms8MjuOv88th9>di|Rg!;njKmQB1$IHdM-AJj*B#U)8%DnU?fMl%W@`02%Z?rmEG4!iL|iEts$SCWz3>oC zh{&peV->N@3PZTU%}yVnBw9A+WE#R9_?{uA^kT7 zef0%Ns3F|)mFKf2L|34%=ADnc23mNqtzrZ}_CBfR2?*0y>$a&UU;*p%MG6G~<2_%y zAM_y;)WAWSAvU}T>X5d6AossBC$W|>Ez9zpRnvE+-{At+u85U~dy8p^M&W3CsuZ)s zp%;|;^*=F!m`KX%JrUg+Hqz~PEl{m*9Z*^oT+3=m-8jvvX(b=irXkU}fmWPhTZ)o| z53A&LXwqd8bjS-W94rNlFu@n9OMURh5#&a|ab61N#SJEO=bgn9u5W(T2A3}NSx5i57PBJh){upJiQa=9sPBI33gR?C^>K|jH3?B`% zrm#3fcy1WFa;|vKr5St3rR4Tx*A37>KmW|MN7lCB%i&i$KLWnmg3}a&iE=(U322t` zu6<+k@ZdYz$kv#?$HZ-iX+Qg#A!r@k{$yD%P=oqOjd8OC(bID2@qU@{YSXQV^{>4} z@{PS@Bl`~7i~ps>kKmSrFO}y|vgng5di9Q@8w(3t>r9pDa?B37$+FC1anuoi)8JyT z&q54H{1N$G`VFJ5CJBlvzV3e%JC2%@v%3yqD>!Ki82#=`L%(TAc5dJiw@Gk3=IAee zx1-KF*S5HE^Q#JDtoBjsnBqt@asxpQ=0IVt>r6WC{$T)AcmTTP+W8Oh14%HdmbX(| zelqNL^S4K!2$_SVu!!5Z1qv=a|R^M#m6@bziOQw7^IM(CjlAgo6Z1$moy8GiK+G_Y2`T_He$dj`^R{`y53AX=QMn zBwHUAkZzqUEKVK{-H#^cIWG{NmQR?6^6#&G{c4EWOqS>te?$furxCu=AQ$+DYH}o? z68?N;S{_@?^yJ?sc3NFMe}v1{zv^xnYd${*ka|lqmU)Q%KHok(9EsZlbeJM2P*K z9Wb{5K!O7KYx7P+zpYE-7zK6QTPAuSg~PIe67S8n`Y}kpsIbEz&5eynrx7xJ_!Tj| zq`qftZ{vU|XoVqAGQ@2>2Bxz0g12{7OEy_CksNIu+H^*rTjJ$6cySMjRsX1_J|h#j zhNw7TeY^~KBl=2oFEI(&YT5inu2uV}@A2qT59CWK9Lly>1lMs&sWn9*^N%%)bSX!f$xaZGu_>Qb`Zat`ZmuU} zt5=w3*YQdM(85=Ynn5d~G3D42B{^_xY@P&CVgn8C89Wpv!nwA+Aa}bZ+w3L$&wq2` zACY=|o%@QJ!C1~swqqq-_+HzL;ArvP#%7@o0B zoAfWp#63P;+2-X07w}l`=jBrRYys*zSON=9yv2J!fwPKlG0Us$Qy3ua9DjEiLFBZs z|5pCE%L4|)!mX?9YaM_uTkOw3>kjDj1er$6z5bVSJt6M(JO+so{E9aTMuK&!as0+2_@{PQLG+9?VmWwHhS?>ofDJ#v*+JZ=ViFWlH%9FnIvG!@c@z$#vCN zOTi?F@G{BJ=XD`dGG^Ce*$V+8XS9EJ__+wu?37!^FSBk7Ln;?VT6z1Ne^&hJeDUF> zKT6v&k2mym|e;sKy7&tP#H@*P2A;avhYJ zwpno#^V@EOr_&5D>t481g@?NAsYTtgug*dQ(p^J(^j(6!*c$}0CML{3hfMJF84Hwv zPWBjn=X3cSA4t3RhR2qb$L7+ol-1lOf=^|Z$A~Bd#z^GGt>ie>=OWlOE%zURL?|k9 z>#6(6tk5?C^K(51a8rFR=6R7;jVsy1;YbyEq5MbsF@D#-7N|WEKy=pNS<>S$YEqnjBAsiF!9f zx$!H-Rsi?cy7(6xg)gs(*+q?}qyV`MrZ1SU(^{@2A5ywG?R<5+MK_HvufB(*z4#if zbqKJ|;O1z=M-EflY(+z>$W$-gedDK3g|Nt#szMd-Gw=P!+d#yD1WJIzBb-;vu{p?c zT^W3dGp6MD;*zzbKw!d?7P(@=pSx@=#EZRFPa&Dyl9x-RkbKPM;8j^xu1t)V&9Pn! znTYeT!vSPE-%xNhP#0^fUB=@Z4zw^PuLxLEDognA!2Run;tc^Z*H=iZz zMlK$sB=$f~j2VAij@znSMb?c%`&pCJ4g+ltwxN%1jZca0R&L9r3PAf>W@$nuo62Ui z;NSNG+#fl}L?18x;YhO9^oKp)l4ap845Kn_Cp-a18K)R6O7BYe`RQT{;OnDTB!A+4 zCfBi>SLW!m($*GOrX`<4+FMwvS@}(L^?^3Oqn~JI!g9j!R_q}dWCB&UOE5Yo3MTMP zYkV5u9UDS7v?Qy10I{e0a~^xFq|1|Z zo0|;WG$FzpA>SH=o;UqrjQI_olid}t3(E{mz)v{%e!p8Rmch*coN)oggqTymQ=gnz zR=*E6>v8F zay{G{-Me=^Jz#F(@XgnRH1wWEzDlz`GV6|mR9sXIf@gMFbG1dwidxO$f}HzXRg%5z zVaAOm6gER~wd9OK(TdHdJ-A2Kr7p$l^Pc)sKCBvkoY(zyH^#+(XiKxqzBA+gB$J9( z@B+59alDm{^12sp`K96KKHw2emx|ufCG|QQG{9Vx2l@XFH;? zjS4K=mfxIv9=W-s4`qv7kkzck9}I8>T!LAMP~{Ck^k_1%2+O z+)=-*72N^AO6G);-SbQ9*7a1v7un{3X??qR%+T#!Msh^Yre$TN4dkBZ@E1O#Qhkc- zO~gG&F)h&^Xbz>P)qny>M3G$|?dh&n&c(Mm>n{4i&1SL1*}JwMCrK#QMCrl%Ad_9%?Fsqt;4l? zbQX^f4{3ni54Dup~0{$=p+YiCfgaa&QrkPA>vB6bqU9O|Gn|w_d!Lz z&wJIUgxp`{-`Y~M5%KB#Tu@JvRW3_6sHwMg>4?6`i)e?VlaEijpM6PB7m#@MNaB3T z@vzWZbF8@Vb*~Je0UNW!Z$OdFG*s#-z0X(_9&nr~S}MX*McCpYzi1yrg@Abg_QA;K zV4+u%NbW&qkntHKE1|l`oleN>-=61cd@mXQ#c^g|h)jUxWwv7PT4VbUp{)_?J-KPb zUuR(F{?eRpZvO9@)18oOUc?{fHY6P{5{>H{B^qzoP#C>@xfnk@a*`acJyK%9nT9zq zl*{j#GHMrC(?U;lLWI#1xu6|~8*tGiZREnF)G3AzW; zfBurbIC#pmGB}7+^u?>T@*v71cu(Ygw&zmq6T)AAiakA+$FtP4Rj{%i<@Saw9v0Jv z@sRO_w3#XYKb{a#zi-d1r5I9;tx7LRrp;>ly2qs%BUD+g=YXeMvhhXByL$1V=Fb9h zZ_vecdH4BcqYZ2p;)Ap1+i1OYYqetNPjphhni%cw3ljZhqijGT8WZLXK~1t)HP*+R z=lkvq$#Akb5`&tM#RnL#Wl(e;VKcY*x&n0a^FuF^P_xNYpRq(kj#6Xxm`s4+e)nc! z%%3r=*L^RaJuyQ;1|VEWfZAp);S=qfte7Sru8^hBo09s%ftixokbx;J+ShvdK3100 zty-HsL#t159t+Mh0BP7#)Ngz!f_m!)c0VWhIItlDjaMB7TqSaIZQ-#hVAME z*nl7orR@ud5&_9Kq?eJ_FioFt1jlj;8%?9aUE6P2=PuB2J{u&JFnTWEXpqUkgk8|W zpHEHZT01wfID?2#g>aCLB;52sjJGygKTjrH6VNR>Vx@f^LlO%2At?}0f+QHB5T!|6 ze%8V*P4yC(x>iA^%Kc4K%=AZdbKf_~#|veeUu1Rn21mFvIxfUFvLJ@TtWT!2Hh;7N9*KMBPzFQhh^Ub4w^w zbIQzGQq9X}o3qrB9!`J`x<;9jxkLA#qa?pph z`WaPx_uwf$E2U4`XwhRFf5aNU2eV+sFPS{uF`QL8Jx&rLIF0S`Hl|W?-!P=Ik82bN zrJ>aDF_2RTwcv)E)CMa!gU?Gx|973r4;JgQ-86T95a>NUzM;?gMmFZ9wHGN<360Wx z9^r!@!=ms5RE+(YYU5JfWgNbg-UlW1iMJcx6jr2wCcpi^t1xUxc{3Wmo&+PPp96=Q5FtF%0zap8x72v>}GpRTjU7NuXp4D|S75B*B2FpXudLo#v zkjS?s;j3}M;}|_6H}f0seHHM4iuk|!(9Njf^UZz&k~u(-0wdGn`9-peJ@`?!=u>1V zUL9%NjxC*HQa+LlM&#vqZKB}~L{EPqwAll_M6-L`vGQqp;y%&+p2LN@*kk_iifgjB zc*KdWHUh3XR{ooy!ATo7wD1VEWyN7irJ}g3Had zWUe`6s9Eo%t#6p*=tiLO<9b0tNYlC&d&7P*FiS0Ij!P4^O!NpG)qPB0V89g#&W2)} zdWJ*AmK-B1v2Z~N=mk8TLwQ&Hd6+yFhq(7etSgc|o`<6`1`gUk5ei0BfI&{snl(8@ zoBq43-T_0}0UOr!#`IcV4q3Fo^VE=R8t96F2D1`)o2XV75(eozbmZe6{`+s~6judPG8COWi(d2{mu9#{p9A%GUSLen zAoPm;r1^|kmz)9m#hIFtsd+r&YGfqXX=YR+^24%+t2H3z1SKU+JIFwHuqAE)s#A;# zP#ALz-6^R^v~R5zkgzlmS2h+ja}{S1STt3<%Y$lYc7V8NdsJ$qdh@8+bFsFJ0oc7lD+5GcaCctd{(%adLWH||AHz12+yp%LFZ z$lLD+WMGE=%--Q@=LP&msL>q$qdk=P+uNT?_F;6a!0a<6d8GjQ<8EZR9H@n5EaxjG zGVAC9&XwD>nSJuQ+60UDLovA5ut|VVC55Nv6mg}@n;)<7ADsmH#=K(AM}pShDsN(# z7LcJn3KOQEyYc!QLP0-y>3!J!Ff7%o*RFFFOjjP`rNgE%r07R`EbUQLKt^zpJfbKZ z>yYD+__AKsEEfZEN!px?uaD2HtitB%O8_x3Q1zjVlDoXpte(zy08|Nnif2w41yjrN zxS4KLSCwZ%#c0L1E#Sok?;$0rE!&V;u_xWx&{0=uq@;DcVR?bb z>A8UR<+ixd1OK;97`h`;sl3sSYmWx~w0RP79FP>MqAyQzlhD*PzIF^xDp|A~7>@k` zI4L;|BA64xH=)Qz$YmIld zV%K7!{EaGG5%JR6>_hu)hg{RaDVD&??u zqpuG-Tbm|1R2InD4`UcBUXb+wFH-sOiw(n;UUwMZzi?RCr#qIavNW!V=jADOJcywH zE%3B5Sf4T_z#qB@FbbSR81q(o(=m$i`Kv)BGOf zQR48!w1VpNXdR6z=qu4*&xA&SF7^F;rAvktqK~I!8S}jmLlBP?#bXjzSn#D=Q8?Aq z)T!|VA7K4Pwqe)co!WUFG`xAgVMFlP zQ-14Sw(z{Ntt$!LGmO*fyE+_JBysof-+OOvSYM{b*h|0HiJM(|$dPo?6g4M6VjePuxEl_n z$DezF_0ZshNE*n+XMBliz9VfS4b9EQ2e+;di03MLoN$D!8vB~-QXI-<1N|-k6ft77 z1b(@*tMR|n8Nc~hS=M!0EnZ!E)9T=G^?k>I8Zm#;0h{aEx@>W&-@8acQ)CMnH~P5U zK>F2TRP|kYdj;YvS2Xj>aXBWYG`6I$7x`~kR_vS%Rc<@bh!NxrGfLZ$ zh^j(QhBJkuUZ3g>c9NM65ubweVWc-qhBt>6(2IBDPOOIY@QS_}6Sg!@?GWg)1CZxs zBXWT+Uo9Kdv(>SH#2R@CW2Do)jv%a4m$X7&p~V`?SXl}bnk>k%KpHZATOj6j6y?V% zJY*gEkm>gru;C_VNKyaf{E)V*8K%h#+v=-MfApMAFUUUp>Z{jsmIb%SC{WwpK|jiH za)y)n9NwHpo^cLCpIqCXVtQU}9Zly&+Cy-JB=?b;O>j&PwSmsC!N~h6Gqzj@TrTQ4 zIN1{Mjb=@BJa7Qz!TcvCWt-%|&}jB$B2J6Rp=|IjZlKXEarWbpnHrVQopsW zuZ`lZJFrjyZ~r!*1=|p$ zl1yIxjXN&dE7J?(jI#LZZuOYk1kPERE?*eIE`gj0{0`53?n#&`Xd z%3Fgt7upI-%;;?F)P5kiOAZJMbD-qhbfBSV(DDalx$gZFiA*AHY!Fnr&_dTug}}cy zSmC-EWo)ol-jTZj0)izH4jKVP7i^M8*bk_Z`>2AGhg}*hA;;G53}U(ev0|c1ZX$_~ zHa2Vf5x=ZT+O^u_Box-en$qmIuc#Fien zUeOO{O_=No$@@HpYEVtqLX!XZ-Qy6PAS@UU(&7OnU2wo0vnz#BuhJd7V>e8!> z)poUCyg5_v^0SF=yiJW(mPg(w#JQOYi`eg*#^7v;nEl%CCgOtZf{jh9{&!=4=kb@S z4FZ=*DwFa17~-W3MaC5wL~bQ7qm0toXrYcAcT%nfv9BM1o82A}=XOBWykM*ah0!F# zpS|Gs{=0Dkg%ph5k|=>B6ZeQ&S+8KeU^*r3Gw6o`b)XL`x4x;zBx!s}W-!O+8a{ux zfMSt`wBS6S%|n>C1ud|2a1yKqsWCq%d|Km0Z1rG313MynC~o;xdk~=96&59K3UyB{ z6hHc``A29Bt!1C>re^?hVQ0(^xXI=C= zAO?3!iL+r*F7_b^Zy`AT-eohM- zzV(RU!5^v!MmX^N$v;)()qYU?Yxi?(geWy_@+7W!ri(gSNVw{46~h@aZ~o^cf-Co_ z2)YSIk>0>Q;RV97vE7U|nF#AM3e9U$8IhF}ZKf3i6HQ=ayBZ*x#e7jDesbpi%sa1b z@?@^G$oSs=OvXlDGG)Sy6idvs3BR1?&bI6E0b`mY z$H2h~IJ|=*t7ye=%zh$ZZm_BNplhG}!GS6Le_nPKH9^BxNO9oZ-}VJ;OGNbWq>wsN z<}CM3p5qtx;3R1I6AgmXPl`iUW5f_ zYcw)X$eo7S2}yQUF&=bDC0fwk?AYvTDC}BNfkSRHYJ-dwZ}zGj#A*|XkxRG`z=_)9 zlSTiBNFy<-XlKQVe$JiE2AZ7RtL|yBh?M_&NJoc6tTD?=m31IG@x&zfsr^i=5(~;i zYunRC3V|-ID@!g2wg~j!fY*Eo>;B>NV5V&`XNi&(nbdhPK>w54 zVASB$U$vzYyY9O)e;$H*0CbWiCkqu!+;N&dqi>3o@dy@Vi%W}PADsZ&`#h)K5N$xC zX?cB&r|(E)Vl{JsC+9+08)zeUy~NKEKJqRa=v_N3fB03(shztT)HJ6gwZd?qp5PuH zCYz0me3XsO0L}xNb?E`%dqkd-JbGqrZsh9%9@?LQnvmPoz{8r_SWjK$useaqc3w4l zB!Vzasjr6>}{^iY@)sffz@pc*rjG)u5;jj>!HZK`jkM|Ytbonr->6N(4K~0k~ zY9pG7fhy9ovJr9MNDf3HUA*g(kGw)>hyze|5}a<{vR+>CCu9%3SxXlhiR3nP-#wj1 z@3xD^YHh8(gIFr94dAmH)p`e^( zo{WM*L^XP}S-!%1%eL?=&?B$^+8R$QU9-!lT-+V%GoeNDnirsO33hjcfbD1{I zyc4+OTSz1t;ZTCdA3a67FK_eAk0$&sF%D{QNNP%D3;s(LgF(eOm-i*)Z9nkie0Xzg z$t>i-Wfb5?AKm|NHz1?k9`%LlT1Alx9yu9ARfa0B%gc~w-hnivNYnJAy<2VQXBNS_9p$5Ja9QJ|p%ln{%G_5rm$_ycNBf;sTmeCA4E z$viBtjX4;wgGq_c-Rz$(sf=)a<*a`gJmo7oR?y~ zvY}HV=xmVI>;jOOSrky@#OWPve?Xh$v^#JH9^Hf2xA}`&6*1Ea_65KriyzJnX8W&l zaIJwFWm0X8@1&hB|GV?`I_d44FU!`O&i_IC&!5ESGKRR9RM-=>R(TwH^!(M~DGX@^ zY`K6uTA*Gzm*vuBy$7FwsAAA(;h`?D72KAA`N4g&RMhWx}uR$4;^ndYzP7qRwk8j13^f@U@ScKw4o3cCg?G9tM!^ z0nSMfy!CS_M`GL`;ShOVKhVc3pm=m#18fJA=m50$A9J%t=}KV7k-`ytFN4?0pL|8m zv{vc6fPu<^G|_4NYm6$6(;(EITPhBkBQapD@78#wp)i@TgnJmuMU6f7X{K^6v8%oD zu57F?z6~Tga$uK$R*i|Z^`W2#i$I{arH-UT4mfe(@v*aLeWr;~ZuYOl54!w6b=`hq z6y5M9N-2DiPI5ODPTK(2aC;ieTc^x2@$c*yU=!4soL8qMqYqotBqe(7weKp1u)Z3qB9{OLQ+pcnB8 z*wlCtA2mpFvit}nlSuy+!dObUrBdNl9(34^VmGd@uW<&cs^A>6iNSKu?MmS0v`(YR zw83ZpY6H%OQcdx)b0>r%L+r1-phI3Fk-@RU%LDN+0?)T5cp394j|u`YB_rKf*u#=J zO*3bV1rY4ZWA2;vA{Q!m5>y&piwF0t`afm&p0|Rh;fve(nkY^4MS0@32LaZGxn~Um zUCuZ3qOI@QSBITLEqf!{K_f>wz@w+7?mAI{ZQIkhMVb$2&Ba4$JF-zF8$X2;xQecK zFp>zMV*_}G)Je2NV?0bK-B&N!Cr0qd8iqFA%^sca=;HrO;B?CDvI7B0i`}4t+XooP z4RV;@R4!AuEnxR7aJDr;+XNJ`4r`JhmP|c0t2B+lh4F|Sij{7BtW_`UDE!_;4t!hc z5{cTNe#P3CT+fxEL>uvHR~UO`MR>MQdgwO{Y`N1jAYpA(kmD;>FOo;u(EHqwTw<)a z>#Y~?m0Q>piN>8BfI0sd@TVL1L{(MC=bbAnD-))q5Q3j6T7)TD;Oi|h_?4HprgmAW z`UUN3gZ4mLns)SM`>$WH$jD!cY31jhFXFCBMF;UEHieEiwS~$qGef2W;_&}l&C@&P=#V(K}X_O5Oz4&Y8u9 z{eo?Nd^a{deR`nkclbV>n)E6dPxQLG==NYlw7EHnI(V6ZNbdMM|H??bkGGqd7qCF* zb7w7ge-LxGxo6im#XGZm-h+%{Cvo9%Ic+B^)n$(k6e70Dd-B}B^=X5#*)VyJV4DIl zqmFp9fq1k)+~wRIg^|ZF`X55n8W-`uhUde0sW|J+Fh?HarX-un(E?B7bo`dBzt|#? zz3}$;OO=DrG;LrlfNf8_0dauR9ti|66xmy*8;qHE_}p6RXd*pYCSzB8MsPyzqmL=7 z&Z(VCPFY>w3AY%IUfj5(4j^sn)L%^B24NdktrcvQ(7cMGyZVe*MBza_8vp zXQjUA?jjOB|2;|Vx6mFg2KK}K>{uxPTS9Ku`KFkEu9=p7EhJl!_HfOt{Ya$Cg(`5V z$9GSk=d|7D&!Vi@J{~np%>AE)C6pIKOJHY0*zkU_m?=1-yIx9RK@Y#y@HN?dHv za3qxI8w*m~%_xh`^wY^Qf@O^tx^%3B(HR=mk8pH{XY-##m8gc6v~>TVa@{m>o_};2 zL~g$BgO{xchh(O9zgq_VCqiQ^WO(iz5a3`Sz_@|nPiVO8RZ(MmBBH@W4(pT!5H#%h zo%wF8HI*1cvW`@I_5=7GlnY=gl;Nwl@tyN-%gtZi?f`SsVC_zi+uSr<){2vL##F<+yyZBPTT2;(#Qjt=zE zFI7c&z29B5{4UgV=)5PRiALWsmo|4@mnh0Vku1)~ttHoUGy9Cjb&eWcD-R@rP~@dv zY4)u)0oOvm6CL}?Q+hJ_v7!tsNZ|7vgjU$^Y7B%Xb6MQRA$M8Hn*%pRov!p?_xyc1 ztvxf=TQYRPyrcY#$H4Qv;x6!;3|{8YDhiW#2!G8G5}&k9AqjAdq@K0puTUNb%PEmJ zvvIT?xleBp^1w^{SfzRs33aR0 zDt4e<@82hUYV^?MCgnhsgVvA%WK9@TPi0sI-$uMjVI~{nfo=40lvq?vYR)Te=pd~p z?Zp*S8jQXW;p8c20Vl)SVlk^I?kPamRw~mos6sYvtf&XeDpPUl=vcw0mF^k$6R{;> z`Tl*OB?jVcR5UJCU!WXzcoK309mRNzoPR}QGWd9y)u=5#_A-E0w6&l6lF!R+q>lDB z)FO_hyYTgZ^zPupn|JsDa69Fq=v8;OXHKzKeD!5^!m+%$_p^>b*g0YBRu%50_cLVO zxkQl5KJs_^fISHP;h@D(Ae)mj$;T+$9Lv*ki-VMNIL1?wEGiT9m@Gc%O~Fmub?5u{ zDnw0i6(W^_@I?&SjKvdwa+6zEq$%?i09?g&lpZV@X7$JCn z1t#+_SVMu9KCF6SVE7_8OpuN;Mmg%UQ!qb3Jxk%68dT-4@h^TG{yY*%V-QlY7J_O% zGk&!)@Nu!uvwjDNZ&hgaptnmB z7LfFeB2j{$L2_|e@+JG?&^r4tAk&ew%C`ZXAvT=-pKAL#Aoo2|F=;!zMDZ)#ur++b zx^d2w7u`85aDbR+(qmo=5KEuoC58) zbE*CQEC$|9FH1z+Pd{4fzdvDoRFARokd}!M^mirMqI0wI!E&{Ia(Crs2>~@k*KufD zJliK55`3f4Y?ejJHyLKGz5PZ_!YT>nF9?(HROfoyR}4Nmp}l2Y?@(r|FG54(qVB2) z!jO8%6r0ir zKk_j1a+|3$&Cfpj98Psx#O^=lG5ev{`ye(>arz5I@Lg4Q?+V^)vwr6gO%`B&ekMlJ z<7iJRX;6KCg=w|%AtQ`*;O&dAp&ph3W>m|w-?A1XD#WIk9UAF=*P#MxHtt}!lj($rWNio(fMXxVc%Gh=Po!_M_V4AtYMmNz+bN@ zU3Nn_CvxK8^=C0$yg|*)sHtJ$@XAC3h!`@SoH{#^~xvj?BJ15vBDse>PV zGj(!!)5pr8irf+2rliqRmC+trd!?ao#2~_+%V>#Gb$t#0$M}5W zS(4wP^3;pBzm@{o^KdQS11$Y)tE)l{1CZIO4TMto;$LP{gS1dKw7~~E`Jq1~WTbVa z!a>aTz&aa>b<1)BvC{n(u-Z64LTtYGEa%94A7qZ`n%`s?FIB4zJ{mllWVz(y;jQyK zFQE3NX>P%}&xxbha@`BXhbtC1!P|q~YH-Qd{ZQAMlFkBu3X8GXxNVax71{YI^C1>{ zlFH7BGuz#R5x7M>wP8=Gl4ml)bTw5*W3;P|*um8oJo-wb-zHow0&-~M@j%#h{S(As z#joJ;W_Tp=f^)$;=N`KTV;M*r4;0YYK9ZAPY&3mPc3yz%$Mxf5QfD*m-iU zJjbFVt2rP?TsZjnXSNZUGnQQCl1715831wRQ{g^20a=`cqoosK$w>YV!P($=*HNw< zqyUq|Pi?>F`kVzqg5}OcUTm985E5}P5Vz&gL94fQyb~N755o9#Z(oEYXG-6U-BD<> zY`cL{x9eQ=N>l6YiPPNeq%f8Du|omS1fM_Q;{GaCOs)Wbdo8W6#rx3VSQ#+eXOYWn z55OjsS!KR_L|fKygUHjbe%s|C8MZfKc_0{29%hFT4HihFrI2%yzVn()tG_I)~*hyWEYyIUI_pO*N`BwHhL9#&{Bx)dT*s*li`YfbL zuc@?R@g7)w-0h2nuZk$c>mR`!OESOOvRRm!iaUrNJ3Nn0!)1?Y!Kv!;mi(+HD=T}I z{6Xn(K~$|L5;KNqUrDeP#vS5N6HNw)qJZ{QI?wg4g`C7|hM-|f_QUwqZl0MuAm z$~wg6*I=F3TY=br6BA+XEvF0h0Vgje+;@$mSNHPhAfw8kHw-|XMm?cAT`Tntb09RI zG}4kJjJ^=2_v_59PZB95)ZWLR!>KP80CU#85I5`z($5{G{XhKAz7Mi)j;z)f{jbu(D41|PjdCQ7lHPU8zO;OP}Crs+>> zh2H0O1K%si)`b+|N7x&FJMAv!CB-l||0dt5!_p{HC>;(e&KlQl|Ge=lrZJq?Bg(!j zmTt&&VZzZpS0jT!!ozr1ri^&DB+$*H4-hLavQp0~y@{tVh=1F!>!oJd{36X4zN~df z7OS&Q>(mquuh(j3lLe_%&(yu8`kwm$e7wXwjP+9Was2WowqwaK#zqJmA{Fz{5dkdM`x=mnCfJ z1j|ibdsEp6CFH=~g8E4O0D=l)+(WKUpwB;fPv>#Rkq9kx`9bem_MlbiKTJ>y-9ii9 zRKma-S8Wgnbsv9aIO-1u&K_j?UGQW*?sF}EX(?)$wOx)M=Rpc?4r^- zbQjLGCQzoh(G=ps?e&ycZ$S8p!*P!KO~y$Y;9j5V^G+aGzATLoA9XQ*oxEb{3G3v^ zA!p!cwG{M2^%D~EaNiZT8a462Wy*R_c3|1;4nK>&^2IO?|iiO zHLK2%m%r{gjJZqYnWYPM0misf0KerO{%i`huw=f1s*{tyBz($k9hX|r6##Q`ekb$~ z@5jf-bLUzX)gl=0Z($wUkn{71%*@RNT%G1DGpc+s{JtAXoMt~$?Y%eW4-zruMos6J zCtG!nv%6bcd1lP%L#Q94q*8Wsb34JMDs_&AEw0e~%F0UE=C72}_b)#cRF#&O&vQh( z#KPh)`OXQXNl8fT?QNS}mOB^eWPknorJ5~pu~|y&G}k!x=z+VtyLBU{kVwu%TCCi& z>9N@(@T?-$yr~-Bv&#IX{;ay>b!KzO4x-o`3H7``=XgZKMxB6WqhNU6c%u zqw4yb{b)W=Q5ihqF~kd}%gM<(IXPJ$G=47b{Hd^Z_c()lqI|yI?M#JZQb0gpMMG%! ziVURK)7Eb2zkY<~yzyq(Nh9$Qow20)s~Gt9qUNx^F2>ronEcT}Ql@8*xrv0TScTvQ~28Uh5Mw8kaLKJ)sSy2fs z-&|N(zm`sXxmk=0xGwW-U1xP_wi>#@o4IQXMus}b1k-PL9QYj^PwaRf4NuJd4h?Uv z?$50(mH)B--d!7i%SAs9IiFFBpZE6nBLng0AKkUOkJj0*Z}9@XmU_wqcaMzE+rVPm z!>MBNPMXhH8`tNqcAK4s=3CG10#@g5Zx{z}-4Umh7=>ib^7#!BzN z3k3R^_Ur}R{cs8-M%?aq5gYrt^ju(-$GSCkD!yhCc3D~(3_OTp4_uuW1N#NiVFlny zYq7haJ$?5(uua={EqnfX=PO0G7sf5;&3ktyTeUl$TU*3!1lBWN+9M}ugoNVfi*aIi zp@9K+7-Hw(y=Q&rpWYpV??(fRoez8ta!@UvEk}mN*AsWzng-XyitIpxKw{{b3aiUa zXN*7nRp3RbvHwP|@x^49_(7~^%huc#5r`0<-WBhHZwAS`9qP+{S&*p9yO>^9y}l-H z6?u0(xu5>p?($@W0ng?a0bEzc;N0_N=TA=q&wu|P zmaYOSs_*O4pfrMX2?z)R(jhfSOG^tPCEYc2BOqOZbVzr@&>%=R(%sz+-{trJSS;4k z1#f2FJ@=fw_u1#ZpyrFK7s7x+I~^|AU+<_6Ugr@u6*W0vU}CDOPd!}|yuZtw2+zIM z2ivD50-+M=J~{uiSl|i@_p7;HcdKc8(Cr-UT5Gp$q-F!p)oXM@U6Y9e>i{i*cPLF=mBxJ(js?-eFjv(Lm%*t_Q((K za)&$~v=<*PlB##*(}WCWFJNAg!9YS9HNL}SsiFE68~Zfm*KzNO1)SRdIVAq(G1B}V zw=ivJ&yKeJ`(AU25FO&GWRNVQOV5M1099}!7m`=C{;-Mngbhs<&}<}8p4uHTzdlRk zG(e;h?8Y)5y4?ZfG(b0y5*#8WB4d90_8#QkvkYvnwf%^uRXJ|+#@0$dMw^P3@tWogTL&{+qYi4@)9~* zj+o@Bnhx)F(Qh6b8>=kJ19<`Soc{gMl9+YV=E74Fc))hIIp!Ej z7Id4eC|*PSHAZ?zK4ocb{iWLMoDf9&!sP?@l~~i(11g2f5#Yt1hI{bBU>{$C&?vr~ zy9I&XbgFas0B)#NU;NvSjL77!U?nXzr^U?M`wY)hZM@lE3wQA?*RwpH_xZWqLj0-V z2^<&}GgTng-R|ZOuWxypuHS+!@(5mn%(4IB=q9SctDo|EtGoGr{?KZ%Ijgdg<2sIm zGOb2vDyQ^I%fmh8-BD%Q?c7uT`n7m6DNWIQ<>vxk@KC!7D6KH#N20l)uXrFdw6|p7!WmU>kqA zJ4x8oh0;AZ{5*!H_JISg#m^c%&v(pOK@y}FKHml*J#X!Ls(qm2@R)f^Np#88Ny#K! zaXE|o{&r76A&oC<+tq1M`LU?+Xs56Rd=jBsg*3NrfyMJlw}W%a>AzogU(P>zKQg#q z(NNwWT(-1$b_BZUK>53upbHAA9v5Es=Z_S(Nqg2{akc586X%Pp3l|sNf9CIqZvK@U ztm-o9G`pVbcs(vW?aOkoC^QidSM{5YLE%9CJ=+W%FKxbBi3Xbi{m^r0vE@9~?S9X5Zi?6|`M%o~WbnItx5vX( zh4n89h(#f(L=Zc`GS-9Cm-@*tG{&fn~W)sQ63cHsO;_LDXk-CL-}2MWfeHh~1G;czlUGx6@FMMQ{2u##-Bw%B z9s57VvC%cSKGsx^t0>8q;{ofG_t0La`&C)7(L8p$B8FRY^^vvd6K%bwJ@Cg@xC$ZZf_H*es-4716iN_W@p z3S)Cw8l9P&{R3PNZj)5dBfVAZ$8mJI2h; zEQz+MAZ*HRg`Y%Zc)khiR*5968}BN27XxFQ67^YskLrfjaB_jSpR2B{B?2AK9A0eK{Cp+o_TWCc#wglG zZ5F1MGx?@W$H>n=FhC*s{q=gGx{Gr*ON3wP+#Ku$y~1*t{v6$W!LNLpT?D_tPI{Qj zb?=Aob6okm$1taqu~6{y%PvO8XP862_9faW*18qCSye;&QslqXri*>y$b^JLWxY~K z-H_7${vyV|jK2lBYu{KLIFb~zuvc`0B4E}um}tH|Hb!1;KyIz0r?|963g1}6s0XjaMq7=!4^uWo2iz)PKzt(G?YiW~lW+ zLY~`ZBDvN#N>j<{ELuFCj| zx^_JQWOmdjrfWf;aS#+=BK6qeb-^*=G9c28aIzUG(KKLo%98FdsOh}%E4AMo!Y1O) z3owr=leZ?bNs9mNb+VSPL4&`QDQd%ziLe>AhkJgyxtNsRwHG_iiR}`UrCmINj2y(Q zT?4DC>i4yTW+@$kc4L#?a^{g*v8tKeJkyVNwwK>~FiCmh)jw%;BGfGrb%&FyFTpwj zv3XdJhSG#zy#9!RiC!DJFo%Hi0AIkO)3`5eV4 zM`~8(6O;Q9dbNdXr-tgUcr%{gyb9B4a60{Q`oLoai(1|Hw4F>w4kzIe$>F!XDVkb^ zGKTC>;F{L%-j|B^IqveneaGi5y*7VELt{TU2W_LyaH5M4B(xyb^a82zX+@2pku5_WtTp7=kB2(50xg04b zl*}W3O5)E{)~+B=MmDTgPL`B=OBqN|# zM^V=g&ISiHnGE~WjkPM9EDJNZ<#_8Riy5m)T;^{L6+UmXvqR84?yhXdx87a(Hxn}b z9@!Z;lS{Cgk7xbzHIKb+f}uxe9;L6wMzyw0uA70iRHMp8+C-x+t);h7OwwCszQFNU zS7^f8#>R}e3k5bgHl@(cL}P>m>DK(8E^rd1&h0p76Jzs&5;@7+%^cpg1Hh!9OL;K` z<0SXv#JUMqfIrG>xG*&~HLC7%9}2tU&>CLS4{RnY#ycO(kmHVY2#c(ri@s)KF#LD4 zY`p*zH6)SP$a(CKemQL+qIJYh{FhyyNNNO695FD!7Y;sBr$26<_9Z$ygn+vO#)(ZD zfq(dgrZY`bdN7lGW$7l?HXYeKEY$9KPuTC-=+G_hNHLbq>}>yr)NiPYzfJUt2DhG@ zpx7kSeusl-N_1v-b|;ld<3d_I?FZ05D=ihWbQ;Q@lfBa*`G-haBeOr z=#5jvCtQW%LN-}HW1w5FCo%`xr67LVkxyxS?|O&Cbzl{W!%l<|O33<5F~14@OHo~% zOpdg?d zjfyJOZ7R6^L`h8>vXZZot6gilJEk-vEW+jR@2J1XVojsAEjPJVEWs+5MHd{~ZszDC z-4TfH>oNE%@fT$p?>Gzb6f#Qn?r?c_2p;UY>-qM!Q(=L!`OVp`y0X^btc@fS{B!l!;F(tA?&J1Uxi#D;81oWXa8_sh5;A$m;( zOclcf!=F%uFCr=pzr!s6u2M%L`jEhPldkN$JKh5p0da-Zk$0`2htvD!pzy> zkMf-~{=5|IMYP{>;HG1Heb4Y$a^$pX;i(;#SGo>xql6$iYMpGaYc^NA6=HA0nHn&) zbo6eq$TtU5ro383tW%QIy{#Hr(~D(5U_G?Cd1M$#PDJ134-c6m6uo zd;`$KBncN!hq z>B{2+ktP2qE5UlML|`)jXW8_tlaoJ5hVv)=1%^FRET=*eM7qI`5*C>epu z@}8Q{4+#+5f7$E0w=nt)|ye%^p-7UpC#7YS0D=?5i# zkWmXKEq5$CRr0IB?wGQkTY5XD)Nqg!r>eU8N8#vZ*<<~WOBVg z6?0dAV&zd`7)UhGZQOS}o6nxAw!!P-`_{5?aN^jU@);T$C*lCu~zEt9o z9P5ip`>FS6&mpNumWL3XW9tisfCmCeUVinX%r6NHwE78O$8i#rZm+FTOe zBYyIHfCt}i@9(s4u4~WGkFXW%9bx3cS10RCMDdQbAa5mVYPy{3qN+4{{2`;H_)=%` zPJFCKWgbO^@4SQDCa`HJttI`>xFs$mKwSJD6~n>#OIz%oZt=*9lS3`;{T(9MH=3$O zHikG#_=K#QJ1idD&;+e4CG#qh;#+dftX*6J)!8W0CM!h9)>Uu}b;eh#5t~A*EuW04 zhE^mfU(hkQz6Hc{HNy>7j=Jt3scmG}J?;a>qK>=QL z;7mmM#E$C)>Dk@tWkb>G#{*QVWIpqYN3E)=TZeb$f^q17{|@X<7uIU~{a|5}QsL;y z8zsbH!fIEgdg$~e1R`=bv4BnCS`Ipq4r|vRlNufU%#`%l2074<)(pyS@ z_JV$UESKeTok?$OEFcNsr;EMK?-k{e(3=1-dVi9s42 zb}7hb&Ho)KjT!eRMJKbHo&DVU`E$7JD18ZMZdzxrXTDL=*wFCRc%CEak>lfo-=yVC z1HwpI2B($|Nag@QWg56*kqX&O?(s3^n?8n-6TX<`V1~tM2acLJrZhT0A65d~%7rUn zrens0)T{?j1p-_i1YuWa=W9%IZi9`YYxI{ZJ}k7H_)Nleqr|Fa14pLkXwKa~3 z+Ka@>yv1Hw!SA$}J%TbL*jHgZ&+o4&r>wyACzL2Kh0QiIG-|^o8}m7q>HKfYPoK_O zef*+Tl)nw6a#&n_Z?hHScRawu#|v354P{k~)2ehG(DL82sKc8_VQ0NhNT|9RDkEX0 z7YRwgO#a-}8&~xCZ;ymL%0%}i>7l-;Z{D~GZol@nfu?Sbp}FFNY+KL;TB!=iGTmKl zjXug%s#@sh2yh_3FT+06`T(}mfQhMu%Fq{$1ce{QU{j9vLEuC``onaroH={My2}lF zJjyViIw+yS?iX;q*b#*G#{S~59^sVZz!*BkgY#v0=G$6kq2_dPPRf%jmnNjQM5Ut_ z$plV*$$2M}dyK(ClT6r(M>7q{Pg^SnqK=IBv?(;IKbA zI<%NC3Q~mCe52RZ)kxPd8TBV6rNrL~&H*$A7WiY8Q=QT=L#YDl%F69*7~RLwNFStE zpgvzUXvCY`E#MMl}5Z!C>+&{m3# zXV%&2l{VYE+n;eJ!b>ar+VSVk7n1Z3{+@woIf<J2nCNNjKfg5T8h#S~*sy017Vt8sr(`Byr8)3g{EoNXwK-~aA zqgig%=R5IBtz_2aXm~j}ne2hca2`6+oYzf+&hfXXP3z!gSW(+x>|Q~av~W)@m9O} zRn4~{Zjf^;RJ|QNS#+9zJp45!N=%5RE8caC#Enj8mKyHq`+?SEgtPeerNve@HUa5} zE;e123a)@z#?7u;NC@}eZ&e8~MO@)b#Q&9J$3M`w!o1GN-zax7{3TQqHBv+N_7^cF4J)wYa$%I+u?;h_jH}(b4`G1?>^hZ1G{hO|} z7S8RFC?5HP89X#ND8a%RLKRZ^ZOFFS6&vH^6nkqHm?+T+LqbCLgWNQA$%Yoaj`U>g zLYQy^fFARzqC25WptK|yVEP1!TY+r04_P9NFZU{&p+3^*F{0S%Zx;)UakJCtkmmncBeb(|~pcFJL zV{+xO$@%-^P}R+=KnyJ-w?#?MZ@}Uy!Q+s^wJXcY*i5$+L3r!vEyb=eULMRR&_0_A zBBUA+Y17SQf%^&=@n4l(eYXp{bp}6~VrhBl9J8~ExS((lKDAb3lX2er6_a$52NMeFD=+Z&FFpWJztK|8S6~0UINt^yPBM(bV9L_LM|8PZ>r2b6|4Up} zYKGauB4&Z!@4s82jt#BUVktHYCo*C~x*m=`J{Qd;=JOeS-PT?^bxDYDACulsTg6ligWr&Ffh&v_3sHtm0uR#~lcqnnT_Zl0hFM{kV zw-J<&OTGd9vcb|G>Ikt$($P?OnO1#cW#Lfd*)wwqEN+*I>IQpVm5`d=8@UnVwW0}9 z7bPnZN*eX74cG^0P^<{X$~<2B4%RxI zlUGQ=3jz+C)g4Zl5KGl3f)ao|Vcu6!agT~sWj6mOfNC-wNaNJ3+o$@b?EomKfBK{` zKAk8nH?_-Sol>x+zu!l|q^2LAtB2!1JY~I@JR_Pj>F*z4{jZKuSa?xi-#htx*eidA z5Ps(acYqB_mbTCGRZNpa4|Y#yxE%EqZ6Nw90P|~B+L%f@vFV75i_0dkI=+HHU8x5Cj5}Zk=^Y7 z1U{2iyG!34p!n^I^?#-P>m+K$x|WNSY+h^E$e}N*O|~~>+N(g0Q~RXlKL=q@aX9~_ z6rFB)D25gnA8$2R$H+_jDQBw{ut^h*e||v`iZtV!;%L+kKxqLY8U7q;w}5lR_xJW2 zMI$C|;w&NOnqIw{Z_wsUo3ZeP(I?cJ{9*@7N{_Xgy<`$c* zsOypio4l)w4z%Afu&oIcIUMwODBkJg3mGrBX+NXxteE>Am4(lHSd2P^y!6*jI`|X? z<${>~2Vn{WE3;1h%t+ab^wDHq#}XDUxxLCKrGF07@tm zc8gh9jcVcKY>nkm!L+`Ecx1y3m*`ld)8Y1bedw5ydd?FZ3}1!%_uPa&g<6w}FRf?@ ziiAw2N$^*?a6}jyd~EU0(ukMn>+#!Dy^Q&(&q|eI7uD-NxCk!6FrzbzlPf;vKGZXP0;6_zclJQt;cX;x`=edrosAD zeTbs|>94*0$+})OV9MoTEfjy0m$wQEPl-*4g@5B1k+)TAy_gt8R~wh0VsTYG0>$)sH7>1~;MuI(5OU`hfx<#7bgV9S zRzCk_t!^iz{JjYGn1d2NkM(o`5ZXY>Wz#601XXYP^~TUj2f*j;?H$$p$WFw2l<5>a zp6(J7fp24cfiR^gE-RrGO}o{@o=H0ob1aliD0x%;nt}HNe6PY!-e6-Qf06`1q8K=s z3f(?rBlvWE+o6|FIy>D|hzP<`!ndA-5#UaXO&0IQ*W?B7X?F(6oj*v+>L<2e*w^=O5}t2w+%;SkcAMgj0UGkqsSU)IYDON$Gnr*K^j)o+sDVr}jh|^;^OR)+nMV z1}X-!BPa&qh<-mZ4mF)Zh9FTPTv>no5{sL+FcvB2{S&}hI^GquOj;FAJwB@MA_(lU zDGAaaWgJK!aAR0>VH$i}AG0RplHSuXF*SxeilE)!oV#6pj~Y}fD?miWo@vIJUx9&4 z0Hkf;Krq#%jF2;9BiiUs%(B7JCL}6C$M{@tR$XKgiB8DMs17Lc#lhI-X##8B;6PGb zil7xN2Cfyrw0oW-CNB22YDj*;H34CEMfSuN}#dBVcZ5u)@*xmyjvQqzggu zMcXw|_8$gK4BJTobR%1p3zS+F0VPC*WZBx98$A^)Hk(f;{(rzn9 zrkGgJwSTe2Ygfp@{qBtMovDVb@MBb##IILS!AdcM4cOIFzedXB=X?y^{Hs@9cYjY@ z$h*O4xAn)CjRh_{XnkEQuu~wwmY1QQV;%)m=yH`!g*2fl z4+KA)-oFFncxmaam4NY%4rgRC@bjQS;Ck_Ch#B>=X~PqCN^IIs+sl?a2!`uf*m{P( zR2%Qlm?2|#JGCyqSFQT+4lc>x&rm@58LKXg*X;my{;O}JY+;pNp}k$3u___WOTPAWKMge?niHiG`z{YqUG8uKuc$-H;xGx5*_v$ z*cGM4f*3K_L6LBCF_M|u^w}fQ3Sn?D}a#sJWo7pVt=|4b^0z6v{T>28Q=UMPR@ZC&1-K0 z7ATmR83!HsE%%GuvP>9y^2sL|NMArH11R@0KH-(W=fhoGWMm%MXyM4t4K`70MG@+M zg13prRX`|VaXUot0w6E|%4VxfH+il288~4#gefHctKbowKdO-6J~$rKBqnM;mqD&; z>7=KPjgRNAM(mK8$iz&xSHhkBn=!G9?#pI3Zi0-Tr)-XbLH0>md1YR+JI;KnUAtP% zgt?f-W~yYqX273Bs#X-I%XI8F(;3<$+ypqxNkzY^0ecUp{YmQHnd{0|JPZu`wO1o< zD=kggWf2LGkL*;*^faHYS6c>u%hKoI&8GV$D5Bkh4n3=5$PdRed19WgzSqOcla2>> zP|0aYF0J_pO5uzjAAb1<0nPXmks-k0fG5{G-iE9Hro8Iy>m%het2)u1_>x2Mp0{K! zu|di{DKHAks5v^RO&<9po%uA=LT~*!O1x6~KPm!ZQR2710?|sDU%n~!gXa8+u^7lr zCS0`kNX{(wjW5#AA?=j?JAuz@JtiClkK3+PTVpsGN2=v%lX3_7zD{mv!dl@?W@j2g z*TWv|%`9cN54Ty#ADN}mnf>@3^o;=T*&olZq=CzrK(4VGyO=)R)Gb1cH4^p5N5mo* zDj}PmX;fG|33GHsrZggjBc|X9Zc0+l0Y$^3v>so_z%L&;Ko3tlT$ka z`Xo`P-RMN_UB)t?#W5Qr?0&~!FJj zk6|#lovj>R{VI>3@bI1AlO~{^KkVN+mqr-8A3B_?Mn@;-4G|<0a3ZsoN%?lcgqb-T z8I?#pP18Hllcj79M4k>RHX z;hZaW-YyqW;%uw8gXGxcprPqH)vbaes(x+uoOekTI`aM}ad7I=7B zQjIlCu&IDvq5ZW}EuRa(<|2dLpCtfC^(PAO)O@qfy;iDjNC!RcMX$Rn=l@j-ts%Pc zyGCZwL;`9WNEV#Wr2{F_l82G*x}iDcn;jV!(0vLLAI{#tP47WR_B_@M;nt4R#q9xT z#YR`)m_+XK1InMGvYJ^cH+~E*+mq=2V0L;DHSZr(W3Z3M>;rumtd*Hh|Mv=>3ilQB zpyJypJqaIj_%AU_h-}!0bU~k!q@Lxy#`}yANl4WpBcYXP8nme$+ye&$;@6I~4F1D_ z^pM%U>^F&yQNcNZkSh-4+av`@JSWoBP;1*7%e_TK;)NIk?Yr@D3EobnR+Nwk|K-BY z!u@RzD$o&*VQi)+_`+UsG%Uk8=Cy~yp05n=yYB7~0yOl()TU~`Jo@?~tZlbxxW~oD zQ}DaH3@_C=?F%5~jRWl~n4I}bIRZ7fC16{n@H^)VQ5_1h0&xQW<@w%3AMTISQ*0tG zGfwjyVZGBa40PKSxsWJ0Z^uIij1Gn#t1SdSK;l_-8~h{f1-`>6R~cq^zR`+?E6M_S zYA{)_5GU?%ld{ZV+HTkQB$`{w$Ve5UA58;#+Mvuey5Bw^av?kwkom^Tss@op-LUh} zax6O?d~6%C`x{Ks+lyVwmkTqX3&8jR9pm}rmc#yxHoHZv}M*Kro9m>YqdY z@qV%CL7orH9nyu1P|MR@hM{FlqrVLD511`Zl_{>bTQ7+DI=x_Wx4Jn56!&Ql)hB0x zO72iuW)pHcGpG}i)c@Q8)|0Tuq`Qnu!hxu&syZLc$&v6g({lC;i{vl|TQ%!cInFvI z8wPyGh=ek}%a4#@Ye`3?)5sJ#?IqGcf37Jn9rk8AY5s%RVj-3JA45~=htJ!{kH8ssC&l}F$@*8;1D0IB zSduvTcTti~S?bsX)-M^Y#WOYLkK~9+{8R9d#7&>_1{y>fI$MMW$J^$te;PV^WnLn! zD|E7kn%s}nxyMi7R)17+jRUN|PQ4u$GxHqo8=xW8Io*>~ly_uxM-YTh0Dw}tIY=Gx z9_b4*GV<*O<<^v!H!ug_{#9;8eHI*y;)h$GHH(w3Y&};st?xA>3mhRba$^GgpGzlA zvN8>T_)XxcRV3YFoDN41SL!euL$81w0sZaG9U+Q*P<1%kNkgJZL;dR)Tk+Mz?wd9z`itlI^#ojDbr=fa)0f*)aip_ z8(%!TXI1(2T}&?P;;i^=scs9%$;DYE_(b^b^P>7V{*ajEk2cs3! z_Ga-YyjwK z9-BF689;7*LhVP*Z)aZXw5PSWY=@8=`V+if_ zAGZFV?;aT))`&U29djX(aYYKThC5kLHT%(s<&P(U5raA-oH11`WmjN7K7R4q>0mBL zTvk{ePke@)|IZyyO|Kr?<2H~dnH|M*51zem{vUu$;%a3AFLp9jWJdUkDx>ie*ibesghuj`y_Ws$4YLL8l; zFEcT7Q2y>hFs~hDYm7@WwW)a%F3&XCASUGl5Ifc?ti%A{tUujQ?+~zdV}#^o zX0iiFgRsDFcb4Y?YRiXbYPnysyr~c(a@hJ6zN+90>aR&jzN-XK)Vk#XB@36Y8WFH2 zi6kx}Q@^N}bm>Jx%OQV8eEfpQy7G1q{IqIKZ+9=P1qRksQ*s2|F5mRHOLljvb^ql~ zerjUx&pL;{$>(&S%E_v(heGKUQbNLmyQ2C^q&WW-R|14Lm$M75MGM!jZfn0eU_V|* zQe0w?JGfZP`Of{?)mL%DrKcM=P z2%jTvP8IZ8_+6Y*_L=#&`&FmuNGgS`s_I1DvlnET>^`DxL0FWcEH$Ou$&z1}$8v{$ z)8>NkDONUrf2!avPsc#(aOeLF_?jdhdpLhQiG07bp83LIJcSaVLY-(KjQO1mamwk* zC`R#Zz@~HLt;Y{3F-pGcCG9ykVr1SZLLVwz!){{Wy?QTP8eNN?kOqCmA|NxeQ4&`` zgs!4K`d@*YJ#!#kOZsSz(~I*8w+928DetDM@#5h5b2eXQcw#L(UHc_;Bc#972@=pA zaRfVpx5PxPWs!tz3vs{Zf?e!Rz7u6ffps(iez)ftmWZgB+`{d9w&XYvyjWuSOyZv7 zYP{M1CVsNY(~bNhgVMb9~rQ3QjD zb;~T3~!&K35=gVwW9Eq~XMd3`c=@5~Lu+$2rL7)7Ue@Lk8%{k=~+V4WH z8PlB|MB@7hUNKllcOW8^5CkDhJ6XZ^<=L)iW9Kk7{2L^4id z$z^V(I3H+F$ilnB3jgLj`>)Cm{Pi;zp=Osyr(~pg^toPkrAtWn<6IN_VPUk!|Vk=nbM-v8`44IlijBuA)9t z7k(Lpu87Jl;8aHOVJ*ziTtQZk!r(=@Y-sM{%eQqW-`duN(ODifZPtgjYsGV7O|*k7 zv^+oW1(>-P`Z{jHiuB?RvEUM)==ZFH1L?=FusY{*gsPcFn`0I(nf2IDqOx%qdD)@_ zh#1Ul6|JqlZ%{ssrbojQRDA*s9|?s|a(|}{69H}eHi~5 zdW*a0bA2x^h1tlc^-k6H>u|M8{-xSL9n%r&<7eRo%bS!oD{IoH30dr$mLsEwcLAY2 z-2lp+bq<+ixH<>~l*-zq*>2@3rY#NbUo-ekVEiPlHp5AVXbPbtcmGwbQxclzqEKtviySwH8mPU8$;k%==2z- zr+v4Sw4BOTPf!HeJ1-5&Fat0t=ZDhGXT}<)c6qd%g)(LNuL>I4K3x87NO!DCjM~Rh zHEwyMc=lPaG$7ZO+na}p${`YkD&|#yshQrK0cX0=w{J9VEgG7d#FS~^d1C5-h2WFf z9W7D&?;Il2OAkvSBE~Of_#mxG0QVHj<~lEn$BaXxlnx=$IB;(Xdp$P%Q+dP06azdv zmR!YZJam>xK7LNSNBi9op!3}5p$UF5#~eJUEQ%wJHhlHr;l9!2cm>=iU{?|p+RRWk z2NVTZj{a4CJ4`73ay){0#wyp*1B+!g{bfRKNGvU4EG}hR=Ifh-&rpN0@s`7tVMdQ< zE)H)!!cn9tBIN69qqnGE*IMI-azaZVieJNwFEb0hSiIi6vuTb0^Y9K5k>hhn*v1<7 zl5g?-1`HvxkGY(H=06&^@H=A`4!5184yP9byYKVsG9!unXn2X2!|x4|6P+uEjzo-+ z6E`xVkmE3HHl5*VdTL~_t~mVJIr~nA5IZV>x6#4h1z|i1 zwEur9bOApN(F&E4DyV*IvEwtEjZH7W+GqlYAhCdzyQ0l^t*qj{=~+O9vn0amZBJjv zBRX;JDo#E%OGe(61M6xJ@aRYG@kT{4(kNDEmLCd`L$*K@H@y9gqmL+1+w?Uip+-2- zMzm=ep z6zFuoc(I2?J|TIVad&;X34H60+cTKXVndK^V0i^-A3y?Lpce92FRV0iHrgI*;Aegt zS_mJ7f~Nn&NDMvN#O|(iq@E?eoEF~xb6!rs6rK54AzR~#92r=67GUTAT(f~4yeE(A zn`*GdoKk?nso7>fHLCK9&s6D`TFa>gCFHYh6}jB6dldK#tW3ht9R~qid?OxQbF>b*2Zyv4gnUd<^IfkQK@I#m1Tb>wN-ZE;#`DWq&&VH1t3- zm@CP;E13Iio$|sYlc%E2D%A*q1@_@&qR@2-(D1j~wS2xcB*j)>>JoDh3SgZ5SsXA# zx42ynnr*QS`~{djDmfZ&p}fy=2j8#DnOz%5-FI)^uq@PgbbI^w-64LWI7C>P z`T)Ag)#g)z(35c!PJVYu90uu)oX%`HlX7pxe53cQ^u0i3;H&y<6f9{^oN)HyfUvDJ zF0vdWmB8n2&w8TZS7NXK)SWJr<8*rQ&1?v@k?xhrl`X4p>(tj{4@W-U@>&Qz>4ANVu`&^UoX~^^CHsM=)HKIU>@!ruW1PGN| zf5%&M2{!hLir=Hyx|NJo2yVxJC$)O1tc1V%0&mZb6F?uiStsCf{m=|r0$Ur!+Tm!R z)shmO{3-;`PBcwDYvReBD;wsUaR|JYNJh}&SDQ_?tG} zgo}ay^>6+|%_f&^U<1M*{Yv*5vv{IawFuEW(nvGVNHg^^BmoSv0B_g4QpDDit&vhV z^6&`~0l54ym6=2H;;m)_23M63fa!>29ytIsrws&RxyQvNQ1ZC~%Om6#D@E((+U;d) zp|bhi9U`cT9Ka!F-wtblDbtM zoAQNINPWkkgDNjOCMn(x5C8?!_0=^h0NXFfUo@JX@4#U0_5++xuxQlFQhN68B|3tL zT2dlK$4e%=lN`JSR^P<}<~1xNsz-JP@o~>QZ;6qHyvzDO=gyU%>0uj}H;tNy_F*-8 zxsb@kc+mh8eWoTft%BbjEtqBD$?9+ws+`$y--TG0VPU+fguUNiB+QLl6KoeTpG#cIac{q=md!+=*G7Y6Q8Hg z!cjf7I}tVo-42qOj$yp&V4K~V(Nuf3xmr*A64%+xd6A znw(gbxx2}MzXAm{;A=N6lPgI^V);?0x%1f;U_@`Qy356Q1Qujsgnwfx%x zTy&qoiQ>>o7c?fUq(ltrH1O}>f*MAgn0Ss88-&B}vGD_8GeyY2*suFEoJ4TuKpg;T z!w3fE*8hgk$OW7o4@L?4vRx)IxwLdb<2{>PFGq3}nw$@t$EaMjV>};^E6r=sB$I1_ z3lM%%KL2v+MSLswXf*;Bo_DyEq)ITzd^$}|^GYODaB(+#_4e#`CO9!Bel$KhVG?d9 zcU(&@j3xb0Ijw#)>cFp{`OZhj2YNiqvwm#$cZvW}C9>I$f_lgoZ(o5$*OvR#z??xM zMCWAHHba90XB)oY7_e#mSiFYYYw5f1iT`evV#7tkW#G^f+aCO@rmFU5+!u}KGQ37( zAnn9eiDPiR?V(Lguvw7kg^H7URW~pZx1yE7AD8S8pp_}V6ZlMrDei4iS=BakXR($8 zAo6Qz_JQvxC`3OdTxvr~)?xVcYV`c{iqXIxGuc4q$7g@M?Jdy-MOI1{ux^G_7xNy1!xDh>OJ=*!bbCSLe{zaGY5i{)v^L^B zA5v4ACUy{xlZ4;!yFU8(0omqVK9g&D$JkOb4+j%dJAB_5G76~8&EQmqcQ(2}*ay3I zhGYKx-|=yv9B>AOgQ17&!=vSn?mw;21QzXurQ|84cK&`S2RnxmaSFc&zg!vx0r?mx zXW#HJ>qtR+%;V-l!1m;mr)RT0Y_~O=I8hT!=!841l0=@)Jm)1MqJlS3H>%6G(bbfY z2(cUg^~p>Q7({?rIo&t-Z3RZkV_C6l01Osyes5m(zk24{{uG~}%2N3+G`Y2yO@LUH zG^yerLU3{PnGpC6#Q0xaZWo~M`MIkRNhTWT!KN=hGi$(;g#_tt!k&|$mC7zRL5^TZ zFUu#t46$rp2oIDBEOWJ73Jwgt*|adVrl1ji>jO;VjqE1HT%y|MaxMX<%I~WXjQmgW z24}Y%NDci>u;Pil4YZ!~Dp`H#4^||Fw@fL=75z>n&+~2C9!$p+>eEq?G6J*6 zpCoUrka(h(74LEA(5OLcfj$B#!KDc@aI~*69q}8Vu=-k$(rtH>5t27X|ET)p@rOI$ z8Al}RDFdUVq}*2Qj|Rx|D9lWEAmh6ZTP`7g1%xP^w-jijU401~-z-3zc#Q#D8`w#K zob@Ln4RjlL!nlW(5=%Z{)mTn_ZEf`dCwQU zS;|C1T->N>n;Ql!B1#n8zzxIy8f7!9^f3bwLPSoUHBPetJFW(@id1xK#d_cU9eL&v z*t}eIRvlH_9AsTufdRELa&o)EdU`fedBC?z^VMV>3{HZkS9nSTMzF$r+Y@)suk~D_ z_T6GQ5Y1`6ckjw&p#La@t>ETSrj=WL;(x>%rqc$-Bvn}8r5fBwTr zC_n>+KsrE|)Zt>U{>~Rc6sMmu=;ISF+2ZDG>4F63@LKE0>oD2tO7ac#x`Zlzfm_$l zvbl52aDG;L?Qy62HA=Lspcu`l&_rLdeihaZ)np3RrJ-uT^grb;anZ%4D#Q=la3(<9 zQSqq_-)T|}H*o7?l#aAuuZ$W{*re;hU;@vX8S(x~%_^egE3Yd|dlie6hUdqb^xmS< zc*ynx4iIK*$Y(7LhT&rQD4zO%K2*Kz1?KNdnfnUWN|pFFU;<7D(E}TT&yQhO_&eJi z-*%`|6O4aSi{X*I%L2fVgQK#aUYEyu9t+H@nHX6;hdX2DWug+90MmY)O%Efh-5Py$ z+@57vP%hHzF=L8qJLIh$5YAl$mmtF@OBXZ_dF}N>Ew~lUl~H-SmuV4Zs$nC z#n6(w`lF1x=%~F7!^{uYeyblWLE=V;EdKC8Jh<~|i}Uibe)x`Sh#VLA8{$%IQffel z+KM(TQ%)#C+{+GS><#x&jy1&Xf$J$bV8LUMPN#h*m9-4(i!ZhLAPB&Y@nABt-ag-F zIKy~Ue9RxQCfUGg>_U;wZ?CHqi-Ji}q!eozQ~i;J772!=`}_N} zb=i{pb1sma6F%R%9e%4PsJhSi`5GLsHT9eysOG!?XkmJ}!}avEiby6-now}_0oFGL z>#(pxLHTK~`>a>fV?=)R_eK~+t>gd5a5*JeHEdx%S{<7-20u7dH{}wPIUy# zPe^F#Ya~18mN@3+@nQS|sPFkMoF@cPUAp}gqT834ZVOAX{1X#FGZy7-& znTr48>AS8ZnYUGH(8uXRRd_7>TiY~ijfpU+)J9A=*lc5#@bA)*rp*P^g1iXyxcmWdoSJnGnS>Q)kD0wEVDL6c)XxvWG)8)nMobsA z^cysh|5fvnKV4cMhxXlR_g9%|*ZAACJZXg{Xw!0)Q;tr);f4Jy>T9}B*ZN6=_X&`+FRLEhIKD{Q#bOe!LszEgr%S$vz$kiX>gMgRze8% z{gg8+Te(hvC$ESM;g=OGUMC|JHk|vSU+?%cCYGD~ZYOUDl^d%@MuV9$_|Ub=IC zlE{T`%<_$yT1_Mtp*a6s&Z`dHUN@7^6ILD?x#zc%(u@T@eAqPzS#kgKCnHO`oSRLn z0MBh_k=>8)i_c{~o*!PJEJU7j5G(Ry%5`BJV1H9i4pzw6$l1J=U{jiRZOv(xq*CnWV#aN9t<0Io^RTB+^u z%g0>6V7>+OS6*#x^H1lB@^V=FTJ0MYs6ie#vv_M-0y>?7g;@gGA&V>ci8nR4%3cZ{ESH8;Um4{3fyeLG{3n3cO1%I#f zqumLd55&6rOBO82Y1g9BLvi`vKT*jpT<}gE%|7wQ_3YzadBUr21^SZ6mw37w-(9&a zezlAAF8lu2hqBKovWyTGxn(Tzd!+4Gc2rp^z~<-~f#%_SU^8I&xJRvMP$}tNw``yc zjT&qvQg)dIMZcOp&{aJp+hC)l!~Xcx5*;PttjSO&%mUp4RQR12eVQbllN2LeX;xMVHtCLSv#AjWr{6nNwYLmej z1W1Qasj1&MIXsnoxL~5*5!O4bzm=BuPf;>9S5?BmmgiB8ij0%G+7)(`ZdB9T z)u%D=dXETK(Cshot5(09PFtiOac?R81BbV~yL+3%HK@#?S1Pe4l~yej^?ik7z>usP zsI}?DM;aDNh<5MJmG9e5aR`ql4h9 z^Lb3ESP&I@%L9=uFx$V6H9!3ZajeT^d8R8C^g)dE^{G8_OqDk)`SQP7)UX{#OM<(M zvQzh)*GuS0tREjvP~8|a6J*37i6MF2^z4T4Oa_`8HN~uvBB;`76#9LJ|>j7TC z7r}O`Qh%D~c_ChbDw-b4gkw<)(DK2uvd&I+$E}&zR|6Tta+F>?-!MeRjkE%Y?{INJ zt9%09e$Vs67k6ngSdXiw*vdJHfL6J*01}jXROV%pY3wcd>=7PoYLCtN%f45R`XpxN zefU1}w*CuPT7Q(KUBlu6NUc_`ef z&YS}9>EUsy9sRb36{=BS{Hz{5%lB2^y+K6t4&B(v&slr2GKW5qtf0~*>FB@zNn@sG zmttNYAS-8?STl|OuXoPikFnyK{4&vpm@=_v{e`)l3&!d)$j0FQTy(2$SOtdoK$4CwGE!Z{|`i|q@ zJbw|(1OXe{+9t%3l-x*FK~|72%Y;)~WDCkgG3~wt$`3osb|h~w%xJxG^2>gTuoysq zacCJfJLD6l$02m;CUhdxS$-K%!5%XVnWAP?~>%K4+ zajO&!%IpVBLS`Q{Y@xiCd=KZG3=65-SQ$BZuQe9W)>4zv?SNWys>*_ae%St3>2o|v zZg8e`L(a+lvzHyq&kaQ9P^r$c)tW-q)Ad|_Hmw1XVXC34mwiEW0ItJa-e7d^fH$!) zREeHmU6H!bQNhykE)OB&c-HHjuhX~QrM$Adv===W&{DL01em`8ZBpE2~HSIt)y24!dGCEGGeJ zhYN7V{V0rHz@yp6f2!JA%yILiT{-R3C;WhmUZ*l6zB2o%-Z_S`v4lfN)IfSNrNuJx zM8#;)D<7sfjyJ_{H|pe`yawW>VLvB^;#Dx8-Q2=^(r5}BUmN75j+{8^46on1L`;-} zmZfO#g$)=oo6DjUmGp4&o51bPrF~wy5V}%Q8!yG}h~N-59Uhf0Ealo@k)RnU?ATU` zG1kN(v%8s^OndW|r3`4|+|ReOE)9#aTVj64aXz=K;0MKO682}bL zUH3S9bx)(+mA1+1k*t}MoVm37TVcO}&lM|VDH>C`%Cq1Ob#c78vipZm@>h2}0zjBI z#vH%`eR5dWEI~5IzoBKJbO4P$#@A7cu{&%`(13zYp2$K@x61nAI{zGkCR7a|jbd4W zN`O|*y}Wb#lezA2m(OArS0NDM@1hwc0ks7kPVFP}N@1{t0^I&Y3>a@>xH49Xr{BI0 z(=0J?{Pq2*#96K4RJEYc2TB8F`GL~FU;Hct^j1-|wg+9k-N73Z-A`q$!RTgpt-JT! zV`FmftwrXTnd{!>GkTkiNo9n7^^ZZ?iIY`WV=jA}_P_rI0$^BmZ#gy0uU6S%{RR+u zPcSF?#nPpN<6tXrqSV`!QZBZ$mRiVJ%7q(~G@5^#R4SnGi;^!yP$244xBqDRGmcWI z%Lld_P`Y3{hd15f%xTr(wROhTueSRiD@XfhsE(#Z_-9gK|*`HUi`v@0{UXSSz zgl)>Z(h#b1Mm%Ylwu>F|Bm7)S_vNN78M7_j92T40C>{d@J0%}6t^7PwM11>WyIeQ{ z5ee6R-GM!-4CKT%udw8=w$LQtTCY8IfY1QQ9qmAdm^zwnqny}hK3Yx{r&Y@aHcj@V(g1Ql6-*$;PHt3 zr2InAjI1z481&Zlqx?lH*GZ#Qo()^#UM1-6L;RH1vIbkdnw}nMT15JQ4+sNd7L9+n z&6Gp2wG{WN^lf-s_@Q;7(iAG zpn!gQ&#_!|nYtIRht0%Mw96so&!$sM($lWQ_&@jhYtNM8HVpX5R*KTOK15-__YPbs zYFA_m5=T<1AVdwk%n^P(uYHozNWJKYSmdz9|5xzGd>A2{+XqMyRMTt`&%j9mU?mZQ zn9I_hAMsIA;%&Nk-Zvj4 z1x6rNYJdHlmKM0<2aS#Ae@W=C7rf4EgriTLny%R=JWbSL^M`akA@oX9R0n3(5z6#KTXlFuZC|LG8GIl9Ok4yaD-PF6U=g zj8}=eDE%Pqm+P8u2z1_%4`te)HbqHlD|Qx~nGa(0J46<+c})9L4y<|vfpyqMwPuTQ zdB+=XEzm=%joX$-a=dz50_8Dxdu`v10=}m4nLd~J7tH|`UA5EUXu4DPN47|g!q#A( zz!lcynpAAO$<$jV-lvXCh(>}!`Vj?N6(1f99zPzh#T;2&8g}mwl?flnm@3V-Nlkq6 z$IPyizK0XPca_A>UwCf)Tel`e0kEYh>=CJ?h}u&yJz%ZvbGEH&Y0-tOVE+~8MfPlQ zxIoTc{HVR!Wj+895d8l!@tSNcwLOJ}uqHTuuKxP)9dtJn#q-XW5=TbOu`vRSvquWS z$l1xBuT!MdtOsh3UPz+3c~-eud7E%g;UW3yI=m~H@(W;V#rwUnAOFnM1&4T<2&0cZ(U;Ju9&==P^uWLw2 zW$XN8`EW3~xBk{q8-VVceqnSEK8n19(2h_#z9UHg8>;+KMLrI-1xS<9MZN$`3i*Ca z?Gn#PF#!71q~dq*ZoX6Xav@u;YU)Mm<_VKup8*QKAT1~xp>fpvY&WX&Wu9RUB`)L7 zO1>S~GP2L#$*VIx=a)UJefT#VddP)58n~)>RbzCMDVcVU57MA^zQZfvp$KtFnq;hM z0@n<*wfQ_wFqZ_%fhOd4!^H3sm-|PsOS0N%B*$BYfc+wOhAeKlY7!5Hxpm5E@G8H- zYb$5`{^lv$N{$Yhu2OLBjNqUfY(NFwyR2b0$gj@pj|r2>OZ@b^H}{B=EPoAWvMMO%w@i1{-Rk}Ynja9xKWzh-m7%N|752@pk6z^{ zkZfSd2T+cJSqG8yCn&_&PwsjiAsvoAk)I@(QmmRdZD1(>x9WMNOg*b5aQ z(gh40`PBTO8f$&c|a$Ujymd(UXGMUN*qEbWPm=IUvYp zo(=DkDL&}R(KvVh{=}faw_8E>iCq^GP@u@jge9w^DxC(bry_2PvLF|+3x1-K`Su^x^`ShW!+nG}DtYUF;R(H0G zsw}QdqipE#;2Yj6yL`}*t^7D%kk{Zjy~O+#{y0w0KDDJNL(n=FczTX579!etlqiFh zlN|RwpEe9;nVlw2xOzn&h7+w-snLuItQfIMTX8=4;&H-v=<#y- zN4{A|4X-N6hP^#iKb1I^gr!UE3UJbVw90-OAmOG$?c6`(9#)Cl+x%G8?0ZmbK~QjT zk%3m&HfG}v-Ze^2Ju*7dPfu=ammPp=n7RFTKUZJycngjGoacEcB&I)+Hp$tU8hb*n z+1J~hbl6l{7XkAg3+W z^Ofx7xWhq2FEsQ?-J;&`+b0Rg(b?=E3{6JAd*>g|E~9*0JY`2G0LF8ZYgu^sJD^V6 z|LuHwq!{Oq|DH-IF4=Y_(RXSGB0S2dDnG+vmk5qv5S2+2=7qAz0Y7jCL4{o#n+)l% z#v5C}N*pTFg+j2|AcyzBlee2c%o`-JQ2UsTJ%X2QCDwvp^1=uRz40r>*ZoN7L<)Fm z1@tDadJ%&qdmdLW_ua)mv+(n_!*#ZLlhK9t@?A z!w(T)zWBijjX%`#5?1+FGp)h?eGbms^5)M2`n+N!08)r|0?b2}*uuH=H!a;3bX5bl01* z@9!2+8m6t(;1l}l>`r%rkW@3mAYdCeG_KXOo}qtWYu8!6bhMjaJR2O({lIPadrP~r zLKg?E{1@-|SAH%g6OOle(nBy}q_38Xq*H;4s)EM-q3RLQ^i zyLQQ0S=*s{HB7vmsLV`KJ}IbjPEQUilxG_+-3fgbb%TaN)Na?4=tg5lA6FUPn;t}* z3GfQ{KynMAPRV~~G=j1r@oJV1SCG*U_6{~7&2Ra~V_4YG5`$`y8S;Wkg;!}7oTMru zG7GM>S=?8o#)tY^r^-dKexJVZS4GxNjn$L}1dK&nUE#hYSqs;siB>oPoWd7o?2*-B zNG%(%V=}2PgqTHeY1|O=kW8xH(4)SfR3MAzcNcW=Mp|znA!WD?PB<{egK-UtK&IQb zAHQi6){Z+pJw9l3KL*AO9Q)<;@psoi;Zlx6!%mPlb@#PXiXaHol&x%y)hd|-XP{UB zsnLaUB@DYWwZVmwjKcYgbD2Sd`$2JR#ZSb42r(&5was9rL6avfd)BbTEoSByEp3Vr zrjue-zmOZCEX&EwEg@y>^*_nB#!+$`gpO=C>`Cs078t;#cWlAo<}uNCW6YB3J#MyH*T{0q_G+J6QNDuP># zkgw@}vKY8Nuk=^^;Oq)cGS5ev$%2g^RZ}6__WelI&SCe#iOr+Ti4_JqwZZ|p#NdS^V?Nz8!B>e%yT?~cxNz2-r ztr=-S!}Mx;uqpkX&fNkqa}(qd0?cS@8LOv(62y^ga=g8ZODmp7yNBPmuY-0jqu@q6L<=xCrGFXmVa>^b zRqp~dZT@gBc>O~fzLGz}${PVU^!zjr<@+#$rgO+}`tq$!J%9A+;2@YyKD+EqLd6O| zcEKn7@0=nCiBCkVr-e$`njyF=pU&4I zG}Gu9Zni?7bjUzZi3_KHFt2vdvYTiI7VVhDn5@U)4Ib!^rFnVf<<~I0Aj32SUcSe{ z*(qpV1S}_i_R|Rt-~?l&EdOH0&b&NQfqF&Q46L5HeTH2CM`2!!UncK z>1?F^3dNo`Q^&u2#r8&d@>Gl$>KZ&oS-2u}%XYdC()L1J3aBs`eTXF(evjDFQS4OI z65ywUHvpskdqj}}shj*02naBG8ilE?lu2cn&5HCYH=?MzFeL-NAygA3q}<&7&1#z2 z2nrsCyEc%vw0$)Y6fkf%j^-<94l~rM>Oj^lcqaj-J5EaBZbu7$~2Oa#a=Kz85wpUu6)vmQO_n|AHG6wZ=5E_byYZj5ci?nj$lBuj7* zfz9CU`i((oTOs=r;^{=JWZh;xPJx&JaZ?p|l$M?yF0V90aW{`^&+KRQ0~Oft_1hbN zs%jaj{eZyLiIVd#*%>WAe_jXXgN&Ybs_~iWIYw;oF^-_P0|eSE)mrhqO5R3&6gFO3 z++CY)&lk=AoB^8aX=c~f)_uCWHUk6mEkED29;{90S{wvGj25gp?tQb@d9B$QuqHct zGk$_ngsIq>zFG#*rBInE2mnB5ynrlEC@P?cZhjHW5elr*g&AmloM9!U_;V||i^l~f zOn{!Ft%|>hub#UUj?1c{l}&qOwBAngXZsYH=|qcfP@GOyT2g{B3@j}04DSeOXFR`n z!8Zh{5HT6u&`|&Ex3G}&-vFIft&Yq7VgH9C<&!4HiIz;e4#tWh?iY}3bU$gyX z$SwPYzIGv?LZ%T=6dIJ_TSO?|ijN@Fo@+c@R9tcffNPWr9oNFM_ zBYsZKHSaf0c7;lV6qD^z0%{01hUFG3Yppt23<*M7jLYd#}87 zelC0+A}h`tGlP=IOCI(ZoEkb=4)-#9rHC)QMY{=)_>{+mN}%kM_eync?F`O*8B=LGYp;+|ag zAf2Y?*T)WQ9&t^UH_i1exLo}Qu#JMG1H&r}t|qf{?<>V@Ip5LTq4Ji4k@{O?u&_FA zJOvu?t$!Imc3*JxBboO7Hx>h>Q$AJ>Ef}$N5HSaD+|Dr=cl-!qLZOt}GmNRG5!PeK zv6VuDG*mn8I9CwSQVxE`lvgRbO@ozn5Qg!}a*1XoHZnyMikAuSiopHKyNSP3TT~Y8 zGMDyu3*?qBG7c5eS^oE#1UoMus|_iJqq%{VSX)s&vDXxfchQr5WIH22>4Ubrd7+d& zdRZFr+Splvfb{ku-Oi1N9$#}oYk^0>)z{ItH~7p3LQQ;g3!)iOF?gzw400v?` z`#Ct7S}FnkiEk3waGWgaeoKgN)Zy}iZ3^>ESGU6>f~Jax76yJQa&oJ%=JZ7f4Gwf6 zI0zCmc^&=GV-0Yv2!??n(XRGBwIZV05Rj)d5%(Z}qu2^>dLcWgkz!46-oEhz8gPj3 zw0MU9B5MW3cl>-Ot;sX`9ict_-kAF?m7v+5nyuM~x6E)eC=tlF;Q@sVCBti%K~V`2 z-z7RmUki>GhznRpDqpzE|Pj@SMoF_H@b~5Y=1_Fwu%BnLAE^z}KbgGbJ#tlY9 zBZOM4J|Mu+@v6=k_<$apoKRpEEbQEsK$`zYG5+9^k1>AduQgJyGno|WbO~@%&iVa~ z2LOKmO^gF=1}p+>0-E2luSdB0Xwy}1v)l^Ij7dp}PL5h*b_(KSsB;K*%KB2FXJwF# zX%5(uM00avb#;^c^uwDwLrWa{6TI`N8?jy`!H^5~dt@S)D}c!4vDE$-#?kyIcN&ZJ zn+D;QH(%yPyjjE;9mr^bxlbf^o!O!9(Hf>dj*bPG?sZDDZr4#=v#=5@OnvaE9fAX7 zLa4~o_cypBb+QQH{OuYoC}&>NeB3wnY47yCGSlnqZ2&wkQscG;28&Lk21;%4!VGZw zg4Yf2(!iw*{QjE72t3S14w&n{-YE+_Pd`;&jU{*rbSeE3>0g&FC zOxelfQ@(_=_}jN|*LyjmsN?lRvz;;8#cu~82^D8Am;U~;{q))oX3@?ueR+PrQ%SV; zOto?!$J!M)|H{1pqIGe6RRr=H(}L60T$}7qISs6F(HIdH-HsVNe~%zO4iZYsZsdgf zyaOSOsQW8ETDxXOC84c|znIB%?9BJ=f7f2+{*+SZFXH3-=(b|&&i2pS!{w;38$Kl| z^#^kznvIYAKumdj_Vaz90h??7dh+;V{WkJGU1W8fd$0@WJK~2h$8%~2 zVG+1tK7mmc;M|0&I766-{`(dW4-bsL_zO&&ds(|z{u@vf-w<)is}y8~Kx6k-jf#9W-4UW-9b3S&#k#w|hr{;uZLMt$S&6^6TlRvl3CMCM?O zhzVb0z<@<!#-5QXTQ|N% zY70D%am%U9oLRVeOxhUA&%-0Q(8ilmmWK@m6@!}7>dK(N} zDMf3JDjaC}$HXq){b_W<26LZ9?C0`UM)d&{G%R182bLe8NHrUXIt>OCrpf4cZ^x`+H`HpwytXd;zS|4Gmef^(@-Sl>>5?V>I8 zvudUReH_~*CQK%`!yWZkiH*SaT{zal%15xU!BKu;bgH&!0x$>iJuQl!INrcv!em6b z9$2|aN&*@<-O>j7M&RQhuO9l8kmiWfupiliCFX%K(b4tJ-DBX@EcnqWyUJEM45XQU z{l3LmF$XxM$wmB$CA5o=2cD|xK&Zt&IOPO;6Wgy;$rMf|#`llxUd`Q`$pD_!1o`}q&_Bx!M4W&cHA1>nD8gI&(`ZAF&$E=@GAX1yOE$+4ub|4eck72&bW<13i21)^b*f=IJ=<>aV!dr-_);n zNaJios2{bp3!@lK~`723I7>ib~8 zwu;@EskkRqoZ;Ob#=yWUSeyegWcdw=$8D$JCQBA!J^Y!gd~4j!k**-i>Ox&tFVrEq zoM7d7*R{Zmcc-fEvD&VWe=xGi<3-q4MKJ7wxZC<)q_%Gj*n*FHym+>h;`*P;+}f|sP*rSBT;3Zk&%hVgOVzH6w7Go(n;E%uP_EN8*D$IN(ZGcz0&9iTI`mB%b=Y?LKw2sK5woe_MZ7{?RKib9bxRBvQrOOI19_Zp>_PVF5{kqY3}Ug5Mp)# ztH5$3K)>ak{sXk8c9mC%c^CxtT;}KLdVltxG@l39k_fxi1%HIn5;hKtWpE-Ms3$|6DjI5#5m(~?w#wy^b4quFxt;t^K(Bi zvTG>R)WL-f`fUT0+viW2K*vaF6k%`in>6>6Vgc}&NXy4s2r;Z`Fe2i<8Gqpye zve^Vt6!sJ1yzLJ*yVMJg_ZSRaY@R*RJ-j`Z+V;@-%NGe4$LMmrpK?_$`hWC)6X_?a zVCHFFBDgIC;Mk`t2=e~dty#Zy&?zNcE>a*`!FRqE5zpmjzIQO|aaQcvS8vgeG_Xfb zWxpjuT&M^C^R^T!zS21==R96ouL1Pv_AP>qsS-~x9K&e|^u@KS1QyeEmKUV3LwLZ( zM1ghFC5ZbL0h{RCw}gtr6yM8k2$j4pOMVB_UH~s_bXwinr++YR{ap|;UjZ6amQ&IO z`z~Nn{b@~q*7nvjGmTJ34w?=lx}ioCTb$3xPGMjH)Z|Z+MBO2H3AS9@?r(_Zgy{^$ z&{#{gw_X4ce*+-&zhCI>Nh_Qf_}I*a6JsTKcQ5#domh^QUbtzRC6ip6fv0fqbv93& z@SK|iQ;sFaUDHhz{4j{rtY>=cjU2|};$ljZjqT62UWGXBBw>e1a5Mt6AfnLaWYIjf8Kal5?0CWUiM#jn4+7S+#d=l3+*Yz_ji;_s(ooS}%rSyH z3LsL*ogaEw{un@g03X2lmL}pL%zQui=`YI7q+Lj;1lQd|x5ZzPS?z_Jpg0)f{VDs- z=jUJ0_R|Z!S_y`1iqCHjuldc86yIZV^=)=Sj}`d`Qvi@;HJ9FedPEcu7PxVPdg8Of zc;2rM0F}b{ESsJW=VQhCo|`BBfGdWrZ2T_QI^)GC_r9d{G-b)_;5}jD*`Mv<&4;ez zMN@bG`yP7?cS|83*8P}(O4O(oE3Xmkuc=l_XS(4qv&LS2vb-_%=zaKi zemI66L!8)cxhOpCuEGXFm|*Y~a>)sA2*0jbgxH@k2O*6X7}$gT?_zrY`!wz_JoSO6 z1Q{#VDAw&vf*Tt$;%vjbrw7(;sZbUl?Y3rT13UwOwLtk}H5k0Gyc1P#t6@cny77* zD>^x{*L{w7hoXT3vu%wdR;KPuXbUJRSPNK;nmk`rC+RR$rs)kx>))#H~%3@H3 zs#zgZ*)FlRqqhZL);S^b3VBXW_SRud9BhgS+U|_N`%D#e--q7h2TCNFbI`fTrioAq z;ot5k8o58i+p|W>+9~@KEL&-fZqC~~OVIz~UAyKiQ96v15@>F7`7Uce8S5{7L{*Vc zw;jN-8q5{y{_ca%^r&7#B)HOa`lbc4!U-9Uq~l)aS1WLJ{hh;)#lxwqs&fR{0-(ig zI{$MIftbzS)-OQ_Ud+O2Yh@(R!Qoi-s`E;(vzbB3d$dgd1~P|s^W}>A&R)NBks%4k ze*thMmaBJB4tEi^Mu>9a?40VXNmVj<_KQFrhDv1e9dHaEpgO26f zfiWy#t31KGwfDzCV{01~I+)F~fF)bub-iaU%wkY?Kk)YU(8p&!`a08Iw~EeBz9-~Xby3O%;HQ7a|a#rX|#rCJsMry7<(v^CC^(RMD%Y;2}vPNpG6Lu zT|VH#eX?FvY(?Iqs~&HNeBrI%(M=93t9rTrH=E?^sj>>_R-emhKfDm;sgE%=kj9w6 zaf%rV*SO@9wJg#^q7`XbVvLJ`;!LWm9~A6K5f@ITAr@4F}J&H^1G zeB0+}9#zfMfKN0n+OTlM1%Y(XWaFBX8AZtG;Up(<+#E9Lo6@57|9MIM(OW8wow@JK z+p4NKMiDNbe8V}en6&O-WFZqTVRW7AWYzXM>*wL`v}I~m9|t?!4Om$hE!Sdv!A`9p zm*uqEEdS8!)1%B=nu1&1s#a5u0Jv)$M_cvHP}y#iqe+k4|{)}xMQxr;H*DL{T|$34%3W;(s`Xm z-oMaMWid|q)*qi&=7i*SOLbWG9cNQ5-y3^gVcq-nB?DRWmU=|&r*jJ-u2g4D)LhVk z;8v`d=?r=NaAyAHN*2%R!o|n;f8eKcN(co6sNlAXFjg?H+ zK139y!eBEa?*M$_XwvAT*L{py^1E?k5}D&9EACpDp0w$Q45d+zs4vnc!pru<@jm@! zM&PaWIftV-+42@Fux@&tWL*<2)%3=Z{*!BB>D(>0e{F@Uifn~k-2J~d@$L?VOPqcr zhl^#Kvw>PLKbc6y)n)hQ<%eZyaa;#y2k|Q(m6AMGyZ92XvoY%?*L`YTO{snr?6Gfq zidsMNcipp3{mA8!QoS4H(M)psBlJkSW-oa27iDa%N?%~5^E&_QLV-Z!lwOcJJ`2eF zpK`*EAnq3xXR{Ycr#6hTFjh>Ccapt6Zs~=)eVMnDPm5vT)^yy6H*c4i+Za_BPs9Lez&{C)4;``;r_Pz)Z$-xe|XB3*+WR zOms!t#h&?*e!1d z`BH~n6q_VZ>bRo`F{u>LRagA^>P=v|B%|v-PR(tvjpx=8+zNO?fd@XPkepTpcVU78 zV@^YVZ(lGKYFFwpX`LuAafor)Ue@Z}GG#6G;=9t0wYz*gQEWfcdr;9tHn1EZ6d#vH zR{zwSGN-gvwX()9x@hFK$lVz43jEsa=cll45}T}i)v>F292d}^-GbTlXS5gxq;J?D zy}5Z}4{hgf<+|->d91RYUZxv5X0#kE-W7T_oa>>i>!B)kj`BE5sg#Cwqc@K_oIM8; zg?jxmv8syV8cX8zU6fSi)7(5DA7B%9<3*%1HKwvmc8s0?errO~ zV_`TwP+-#QKx?;Eaj1M4#Ly)h-|eb)wi31{reTuQ<<_(p@k~@VqS~&;qYsXdf+PR- zJ+wy-*LhU+Z`;X*mZQ(dd-e?3Ty>ueepN=GMq+(f@WjvlE=?6q*h4HBsE_h+K7*(2 z`JZdh+}zZbjV29{&||+Op0LCc6nR(o-Vm6=kdP=Z{bZ63_#BL`Q60J`mJ57C+eM-Q zq}gVW1}U~yF{-Pxq+Z6+`4V@2N;MQE*dc#i4v#fq3BYaQknWt&pq@t= z_lW~nDlZ=q$;r&9%dqzntHc&bsCC;I{o6y6u;5juuk%&WGyTsCFqmLP-+Ht%F?)rL(vx)dX{x<(p|=}$e7$FFx=&OA54ItgrR$0g*?7xn*pUZN%hC!{Sm}%0#1Bl}Y>+!Dr!TQRHtnPB9 zpY^b2k_Rt`falp)X$Ydy2Zfr?;or+h#sz&9i(ZXuh>pVmBZ$&3DaWJb$D>?IZc4Iw$wH%Jb57+p`0|alV zn-*jhWVwJll4AiMcA69WJzQ#qq;1|F`MQjtOURIw-WQ9xtVr>OgWx&J`&9-y7&VP? z(?>e*&Jkx%@V@9hJ$U3#>2ZK$azb7X*4k=CYiNJ8`jq{=!5Ma!vk0PB_inpg*TdFM zv`h`-)_YUR;oVi7gRRn#KkkgUA^AN%Tb}y!C~EU=fmPFovbvQLV(YaYGumK-KN6za zLyjSAa{P$8YZAm1o|+$)lXJjdKPIGGWc~GQL{~}M2B{O#xqSQThnrB0vBg5#IZ2Dg zv)ES|*s@P1@f{#g07J?L_x$r+%kdydT-(d7nXF`7S8v9UPz%#=r^d&zwfUfaqcMO%6EQc1XsIAbniY{DDN5FciPuj2A{d);QD@EB{`@|ue9G3Pb2Ks(* zSXe1R;N|KLIXQL^$GJLzvpvI~mze~YBd|!8bBo_#jlc<04JUGtM{`Q0|KFMXH2X(Q zr7V_!@SRtl$2ce#Es4DpZDB-dr)u8g{Se*l+0F~7uRZmlMZjixh<~>P7aB(zI^P&Vlh!VaiYB z@rP9G-;w%aF=sj}8_kh9v3c=ubk2T4`5G{gH{;7wSbF&2>>zx{y><{+)aJ&cjw9li zxdK!INk($tM-(Ki^K0!rSF%gf2@=u$)01O3^Y}K5e^pb{K@tQAT~Urd>HS+_)~Q5s02Y+OJhW+W|D`IN)U&Xv0)7Xh5Fxk!dr@+qj z?PQFCrQc;9`1Y$hYl(85;Xw`0c1-Vk;~tZA%?Qq0&KbJ9z#_+9@#ovX(cfHCk-7XwNmx2H z>-)*=;`A95igSHS-Ubp7K@Jx>?{TvG8DlZz_YX))gn(<0^SyS*yzx6#nHa`XGP~*8 zCX3maH6ng7bMnBfz)ark&d*+aIBYh* z^9GWL#8T2f4{3#W#bZ{%mwp;Js z`u4OztHs-hg>FV$TE-`PkxeCcSy8vf8zu)XhR%LhZhb@zC(UM1PD6qJGZFXCBjHw8E~W>Hx2YOM zyi0sH@ou-=hmtCQXQRk9sJhM`ncF$GChLU7Sm9G;>HM_#BHg%R)DnZ|&b=}1hB_WDes%C5ohkM_kONti7{B8x;q}Cv#wiP{YG!N+s~%e#Gf@b9UZI> z!$O1q%H@3zpQ&&*84fPMqrF!)SbLN?j*9_Th*ImtH5(uY+hbd`o>e^IIjgVsQPnL= zVk9PZ&^;CWUK`>rMYWpdI5er)ZThCcL^YX!>lk5c4!rMbwQ%YqRsMHd+%vzQ^e$HS z{qE%wL*l`B_Q|!c&iWAI?9y^sV=!)sEYI`5$0252B)3H#yOMpgrpui1$$dS;Y~uXB zd`r^~nYz20a=fOtfmnXHEcD13MxG(F$Zy|?UTR;SxL|8mV#QI-B_~E}se)4zj z^JGnRmxpqL8iebi=p(j?M2;?0GTV3)oLUoW{5Em(3l5|!RRkJEJvOXdNm)sqpC6k} z^G*A2DKDW!)Xq-J55+W2YIl~}-hC1i=sl0@t4l)f49vE>_MCtFU|aB~WwmDor@%vB z;FLMqeSG0D`o`5SeWg_v{WI_ZM%M+_B{Jj5jsJU~(48$RsmtYzk{BinIq*B;(<^aY z$#_x$qt@H6uyrd=G7>{Z?|s!L-6iL|ZPa6<9y46+3bvByrrR~hzICgW_-(IPx zUeY{me7T2c3z<@Hvc4;H@cqZJUgzT}oKD0YNS8|Ca}A4}NA)>}7Mk4QCyaW;y(lHZ zo-sj-*(Dog92af#$t5oOZY6*sz=r*Nz#$Rmg>M)w5Wske`5P5mTL20Bt55U{;w%9w zsy)PteKgTwvz&@S5mhRPi$h-iBG2OFj(n-3>Nn*!{VGe0<_;+~?r- z{nX7~HxI^x-lyy7`rS!=DBY7Kqm8CTk9|0+nad% zW;T`hXtKDemRy{P(Gd2aWdJRyH7^Zpr`5lEdY9W3WP{^2n0oo3Z`3X-cnsJ&-?Zon(1Q z{+aNS#k|5yMEkN>@mZ5}iO~JeNMW?qU@qQ%(+B&Kg_T%%l%3fdxjfeQgbqY!OIw`r zX487y>cW9p-bTxBCNY0Y>wijJ^P56zd)?*G5%1&c18ut@ZBV7>nIE6>8@ z%kZ4=yM_+ECb-Eg;e(G?mdv`0!sobZu(0!31l9h zQSZZUtZW>ILt6pb7pI1ncp5I32VNIz+v175nMU{(lZ2H^q3SfRzB*|W$`XSwwPR4{ z7@=a2NOqG27my#f`-PZt?dO^eWK1lVC$cA0QyN1)#3b|WzrE^%yY2PpzLA3(;$D7@ z!Uf}vX+#Wp7REH#BzG$CSGo2QTzuCv8(8;MD}@$NO3_7!l6lQ~Wf>!+J8`4Qi?=QU zpj@KSK^TYJ_6up64Dza)OF6|(O>XYZc-?b97KnU|X;+A9QSSvmjQ<@EYm*#Xw|6A6 z7O6MyJo|S4peL=`^sMrV!poFt)NWrhxphC+vAb#P>e*ZOZ!Imsh%GJK*Q0JH@vh6t z52{_xsvZ`k8GP6NvmK=&*0h}1o=CGm}@qz}8Ze^gUzyigcjFbjuwB{n@Wj!kC)6WYt~e&O=a7JOfO z{(i~p5xJAmkZ_z~Txh5ba%daQYB^}JLarB8nKURwhts9W z=eRLrI@W*Y;-K9&O@2Vg`Mt@k?yJFOg4o9Ih|Gs8yV}Jy;0WCxChAp;sNd26;1Of2uK4lvUVi6) zYY^K=)o$!NB`dDc-rS39RtcZh>_#>T_=5lY<}Ybp8WzRkd~&-rvL0tvg8S-OWrF?8 zV{R7R>+S~Ucao&uVpH(f!nNz%hTe&z<(U~BI*V!i+Ul&Js%i2|vyMeWfjsH9amztk zZtgx;Vn&G7#pm_h4ymAB7CgN_?C#v&6;)D2{k?Wb`LfN;d+5!UT)1MrAH8?~)Yco! zGjYOl&n(+-c~=mlgOf<`h8Eqxty`x8s2G7xzPqHo7#PMzstYe#vsti!@^)c@Xe)DC^PhIt zzR1kM8I_tme&P0R&{XNSzn)oKd!!G>dzx0|X?|R+;tZxUpA-XR8-&hKCB-Dl`;t_QKVC(OF%%nTR=cSTACqM5R~o?>1OC0 zK@tcf7?!E(&`8tsq+UfiGq>B;qan92)hpWI&Css!%=jsx~6$5H6W z5B5d78$RZg0*W0iz3nXh9UvzCHgC78zsvX}8YFz^UvqsSR3pFNEv*I4W6gaXhBsLR zmI2=DcZ|uMUuBoy-UWG*{{X&kweVSRa!%^qHk1Axz5VQ@LEdvG`ryI44Z8aNyGJIv zaOsu*8BBc58cZ7L0Jo^r)^~s_qZU?SMn)~p_(%H&!k5$KpcE;czYfxbm*R$7(Y;e& zU#hVS_mcsS%ra%??r@J2oGg&^)vzLh{{Lblhv=2}`Wum8t1;k%viFm}s!2d}!v!h{yo`FHkHwD;reTsyF+y+7Jm*EE#8Spo9E8^Z+h9h@oSthbnBwgT4 zFXB}vBWhbqSwSl>0Lt36-%oXgk))WThD}~CkHc{Tl}5YH5D~Nh5UzlBW1G%5aBJMt zc~33KICXLlRZC;2++kj}4*NgPGWh(7-$M@D6~hPLSc4uih`tP!fW?I5tQ9-ldVc%e zd+v#CLIS)D1*P^z4f4T{K7l3DO~6Ek#RK`7N~X+DooNbZNFwa*pELa!%csLM|6GIi-&9GiB=f;4jJpiKbX5nmqQIRVCK4 zt!B4V|FP|7aWOetW1ymFNyyt!3+y7N`xNwlLvpPQUJs4QFiibFi4PBp#v~kt^RaFw zYI(0;wBz&q-X;5OEVUH$?G_i)*7dAyY?mr?|OX&1NmnAx(NLbF( z8;)71hmJhtgZQ>bP0U_py%=p-&p=c~N}awKBE|SJ z^yu&JiX+3&9S$jkkZ1P{o&|+WHaOp=xlq!S=NF@R8s6h?z%Jq+`<=If8nlWOR`Hp3 zT@cxF*y_1_sk-~g!L)qYw{m`30i-XaZYA9WRsVNy+yI(ThTpZ)qC2`m{IV?2 zV@HH7IrfXai2Pv^gJI>w8XM1z`@GWE%W&LwshA%czXBnATcn(B<*CjJz3PZ}v#$>} z<3N5i>xZ>%z-yaY7Q`CdGUim9@@k9MU*|vd=lBPp8)TPZJrHt=!RxaHD?5R0WWD(? zU=fD*luec3PyZY1M;t)OAXq68`~cJ}(Ef3m?#6Z46Lp<_crIne585F8IoNEM+sKc1 zXF60fdAO2;JCD-3k>CC))I*-)=?U-CHMZ*Su-AA0%7=~vyZI~tUCF)4L5r{ZMeiuc zH(pC)X8n5W&9ml{s|}u7Gmj;`at6Zfq*~dVpdTeC zLA$kZ(9NpfC|>JmJ*rcO+S@aS{cZcwZ;MeguYU@52f0Qpl>0fFQ9cXnAG@s6BA?6B zaka3ikO_U+xJ72@^*|>4)}MYy5GP9Aii?ghkoq^I$S_jOygU3NS4^_Bvm*gZJyV%o zA#29cQ6l)ZNIqdgX2{S2)Eg|K2+VnJ?fUnA3i;l5B(PZ9D42Uw|VdV1x2yy z@MRd}XNRi*GS!oq()*{$^p4DFeV9o&Yx*VX@IGqOfc{cxA{_P1NLkevnvC=8fKp7I zl{#dtO$6h-E{dk*0LS=YW#?YXxEJ-!qSuL0;sZ zc)i}rgL++ZMs16h>da>w@_WC5%ya*elXzf^oS2#Y9}Z*%ziicWfC;ZkxT3 zoEdozr}AUWca!B&{&)C;@n&#Nv&&i|!J1XyyFTJSopujrRT&?@SC{e2q)V<=tuA`U z?WT55;fBh_oyc|ffG4+Q-;fX6?YtwOxZ>jYMdE8?{c!B{hsS;Qd5j7Ye>1txC8bA0 z#7zX!*6$cb*fpF`i?5IDt*1>f)@dS*YQ(r?2nivch%@4jVVTzh4IXTT#8S z;@*BAOo5_UC?)#`*6pR0gP)k2dZ$mv@YEOIUI@fQmQWRY#D%1UfMVz*XE=%XK%tAm zf>zCxKFIG(|8)4l=m7isRk$no@i#46DlKXgQI&43o&WGeI=nvB=I0IIp=hG|74$Ay zcn7yUvNZV2LS-MR72aZh(0fmhH}VTt%3KT=Ap!Q3IGPN|2Ywds9{D8JD!gltNKsCX`{_cEFBighh&*jhuFj^2RfwvdQ!WVD4>FCxoA7gu z=9^A-cH&t%1ijyZXh63T;qLIU>;aOmpf+Ma`Fh9QY+3Bh8|5jVTO0X9;z|EZtibA% zz#+NYt7m(GgZsi>c3l~jZs{;_c4E_juT!!-FaL47(X?DQb-OeJm(@koru)ojaX|B(5z8nc;`BM! zgZ^mk^kR7I8wt(3RzoBBLd2(y0> zP`DxPD!C0m^FsZFzmLVbt(dbbc)G5k#mp~S^{Nko`&?=2%T|YH{1~85W z^V?4sdeX1tmZpE|3lXI*IBf3zi;j0XdJuW*O!{6qB@VrMCep>uuG7Tg0!J6%^RX>@ zeH|*7Cr)qSU@m$a2u^MbSU2=VJ1n)wUKF`)BcNj(({)~`?;BgPI zzM=kTQY7o5^QYO&fh~MqR)ZEdpgY?}hAx65PLms^Ry={0rOWZL<8NqYt_)GDF`|3Od<#{i_7CAmoL9-W6OOeA8bi ztmP}_->IL)Q@xvu`ot+dC(9HPn-hWd|C{E``N3C+3RG}JsO=qD^bt4e{34m9mNKd4 zOQjDM-LZ4FFW|a0lMKD+xU2N{8?=V#=>WB;x6A)-lJ0r7mA9w<;l{i#+I;8xm=IB# zh!oS z`a`$!V(JsM@KodCa0zVR=UxMgm;bh)l&CWu+GiJohPT(t`6%aJ0Pzjxu>A>K1YXh>CCUpn(vC= zi;dBw6!xCz9485_Ky3a*wp6N|D6b*;oxxJ##vA&`!UmP#b>UR$FURMrr4gY4S_aClpKk%3|0P!GY-9=e&A`aK?`Y5ck~*%nXJeAUU@PC*fGC)#Q{3+CC! zg5*t#P4>+;36)BtpAXSk2K*@}uyA}UQG2d)t)oGH3>@~gos}l4zp$}|_B7;%dd*ee!VlK-8>&e7>0v?AW!Ng|k zvAICaIO=W7gYI9y$3FlG!sXim6ZYR%DlU~5?Pfh4v4yDxPE*SIFw2XLTZmFP?t)Lh zW?qVgwd618DA&b->0vIbzSVah{MRB_@{_mnh71~q^qTL1eV|O=$+BgkE#E?VLtKAZ zK-$dAivo+S*JDbw{4~sOYiR^t7sTl+r;zqeN-)FtyqbzfKZUu)XAkk`reCt#S{iTn z2K`XWGeSs3B*&f{UPO0kv(F2ZBhhdkHzIp?XUCncWITK^BUgN+-h!sD9md1)Xr`X( zEX=N<+;^|UFPZuyKjvt^M9io~gFJ*?l&UQlFx5N3B%an^mcHA(UXm~j0xjgh2A?rXCHBW zaSX3xDwnk+wHJNQdvJ_yLa0hcdA2M54pSEJTu&=l8?WDKBuXITp%bwB;22J;?m>_^ z`pPcoB5?l}L+P~FL)zn&1->f_19Z4ig)vPS4LHead2H(CD*dWhLb)?O!>{fNB0j6_ zVe5SCze=|-e&j+I6iuLre8iViBNta4L@8Xq*u7=sW1g9mzTv*yow#FqEbmE>_!!(# zkoGk_?Q8Hixb^4x7~^P?T_M-VOmdXbZ56opxkNm6l?~*Z7+&60rWQ8efN2V~TwPfc zX;BONl5)9UU(#L2l*h3k6-G>T>z=la=tF`3{Z>57!sjxzpdVD`{&%ZT1Uih996WtZ&M;Lc;&Z*}U|{z7 zaL0XiVjgBekgMcWKBuj?gm#VH@3~@O?Y=3^yI0kh-BBY~gZ-(sRu(OhW3TX(J9B@@ zegG5lJ0yADQwQ`G?aYIU&L%zeJ^NRA1`PY`d2W}O1=_BCsmEJJLBGM+$lUJxR%4Ho zwhU3)^_>4&lj_KM=K6i)q;aT$ILUwDaddU)Kaj(;Q(sARAs_~~WML~^)T#EF*7X)90T-H?<3TkAq!U^7ioqq+UMZn!PHnNdhk zFZ12-)Mo$wxCD>G^L36?r=sgD z8Y82~QIe6UHQ)?jklMlA=yy@mt5td#f~0Yae8ZMcBJlsj?=5(ozu^_FmYI(Mqe)US z*M=YUqIbiBh%rDht&tZD99WJ@N!6X7vdui{F{eUK!<*#O&pdVNP3G6Y6?ZXw)~83d zXX(w=54dIS4d^y!IpG}S>^sGyH;ShNtX42!7DTRX(f?@?Z7I0T=J^_zr921R{g>~$ zh4f%VxzkHLTKE*3)e zw!SOk`k`_L^^FWI%eK!or9FC!Cm#9HyHIiZ^zK&2J`Dx?S%KX0HtU4+TYf9`8LMsB zbE2vn@`SF`H9zj&;Jx{OVeq#%%(Vn17I*B|jEge&v)Q~-YR+wEN9V_%y)GyMvNlH6 zz(-FE*MpJSw+$aQbGg~5v>$br_Jvi093*5|v`S8sKGwd_w{yJ-a)p57N?R`VF0IWf z5W1M$Xp_r*wjj0w*!r1~&j~qKwYHibGy`oYi%w`Ce}b^DAB2#W&QV22%v$G*($kt9 zOwaI}Oljcx4-bGDB%C;tliLwt#avb6<+{y`|4hydpgVhB*oB)o4GU8?Y}(_L=>AX% z0L?UdG;>wGb36W7d`vP&h?J^aa*L=SZO)X6w}OP#Xgefv=Av6I?CbLE0@r<}^52$O zV6180ZR!Bx}Hk`dfGdZJ;u=+ zzUQZXRrx;0N0JIAR?zIK>GrDZ->9$IWd zJh+CJBltA6WNtfMc7li$v*EU~5$ygG!7&bML6?%Q2&M;YWIUgH`*ZX;s|rOCEIn^u ztvH`j5?eo`_ycpt7^+(WZ_~9IAFHXMoBFG3**x03G>GhN0hk5w)#=OXtJq{7_x^s- zwmg%^w2f_K1nRsfw$2SXQqE*Pp&-|=JA6wP$!N@~4hE%KM8NC4exdRzFD%(9K@sByhyn2K%A&+>csUUeuK!Dhx4GgqQ5I2M^#{wzHoOy>3V zrgKg9k4f;4*$xxdSOk`m+gWY$SPej}`_j0k|L}4p-?d=?Tj5c_osKDgc72YS2t>B! zv4(^sQzpld7@&5W0&~Cvu0r1vCcgP}90F{whbOPhA>z|YHUvy(6L^JHa6a^mRrBj_ z0?3BcF3vn^UWmAoIG4mAXg04RZD$P4o|OTff=fhiD8pk+OuCDK__@d}CqtXj?Jnhf zEPH3zIZm1&P1tO5dmH-&6>Q{dMufJH>j?mppls0KxBJ`jBkZv3tju}$V&sr1H*(;3 z93o}rfE(D4jUnNogN!tYOv8iuhjObCdClGU!g57em>;Z_a5CYG@s7C( zLJI*CVF-qcm+P5W^$axolLC2i!lY?;jL)mQ)Fuy_^y$AcG*R?}U7`D5@^|^XwgH45 z`U!iY1b7S33}CcD)byqBeyOCm?1k@EU*;1vlPBs3=#jNi7bR5gc1%ox>&xw=k-OqpvxO_oT^2G#anJ(?{ zyTBtacwRm3!`~2G!q-9q$54E1uJ9qT#e<=+Mt?>JbJYEhWOey37xyKBayS^-UF=$i z(0RD8*#=Q+)eB&a^jt3RLaOc`J#XYEk-@UX5d8nqvn>%;Fzh@g2cPHJA2~!b4CzHD z8+m_Nzf5P1c9ZJLvzd0G+_~yDXP_9}CQw@H*q&(*N zhp1?*P>-x^*4x3}ZbvpmjxLZ%>4Xl#-3wS>-B=D-U?{xMGhy!ZvPAKcS(4PNkUI?q zlO8;=DDLH84RQ92(C95iq~HYT&iOtO!iixnum^fjJy`1E5xDWbb8&eB{P5T*NkNK)+ZS+IX{5MIT z(DCVsk_-cF!d$>yH?uD&T&cvIF81q-&fF;Zxg9zSt-eMl%(}H}IMoF_Y&bi%O<&%c z)++y9u$s%Z2t$s~u$+aZHr6}#{flG@2Cfo-Mwf!Y>7MpoY$ny9HPh3}s{xBA%&otC z|8A0}H{*CT6V@+SYSTeL;DGDtyHqxW`>r_lrnr<(P+HB-QpuEA?}EtqL{Dk zfa!~2H^N3ZLc^3h$Iag#W%A60r_?(lTdM=-h*MMfy>oh4G15xDS4VyZgTWYAOzG+m z#>Bd396HwxSWWy>h>h-L1TnuV#eIJge~2R@7b-$r51$oCvo;c^L$S&X>@*^tuUhK* z+aab;##XupW?Yy0|3zyPrNJsz|IXy>oV`{|3707Zfd)_|-flTho#K<*&U(IK7A3EJ zfn6+DkEgJlv}!L~f=QkL#0NO!ezXlv4hCKD2ADo1@N)ppi~P4M;IX{5ql|36YPdWf z$WYg|V4WHD)Dd*`oC!kF=ddl5A(whsfDyvIcUx!o0vQHAQt3;YN7D~+Ff!FfCqeMsc=hPX`E&2ZWcg6CF805(|CaCV+^A{735NS9RqmPKGlDu(+N z1ugy{MRE+Uai?6P&g)rf|^|+p3l3xfK?dET4t${f~vHcakR|f!XNTM*H7S-Cs|9D8cHwheqZ!ddRjB~ zczN~udW8D9eUhd{-hlI zSW{iKaW7AD&^ibVrhF1VF@Kuh67FDQ)h*=y%hlXnVP~Zu)fs;p!_$zeemo9$;%w)` zxt_3}%ujgo+-zkca}gM2YBqW@L;<3q^JAX%sl$>$r~*MbvJ7m8p$1*e(a;-z^}`K` zD7h;G`g2oS4B4zy`ykPy=#T_73wIZ6diQE&9J0fe1RNZucaPzot`i*0yXdRjmC8=7 zl`_&&v0_3`1vv_n6&O+bXQY^?_LJV!NzVjqe{7>L$N0t%zXR-8ZSK7;5NfN(@9T7d zWpP3shdt2__)${$%-wnndQ<$Hxx|yB<|pw7Oslfo+RBMdx!NXrU^yS9RR4I9C`2*f zh??3B0+LB|grL_^>wK$P5lt@(W2a!$`Bp9m+`nyXrE{PYU9zF=VA*jdrc1A`LLlUQ zXuc~CShu=)$;Bbx+!eB~mxZ)+AynX#f<*7;_-lI1djEElzlOpxf^9KL`xrNKxr3|; z+xMiz^)*|2PhQ5-JEY`#%gIs-={z9&{D511jMsK{)*;`rO@WXboTK(y*V%Y~7=z`E zVy!aMuejqmsXNr5%p5L#nI_~0c7R`cg%+KcsL3z#Sg^WqkIRv>=lk!ngQm&q?{ zdKuW6)2r(8vn$U294%_wt2#K{r%4jS!82Zp;Q8=v^#t=BDys_*7123&4PiASVN$PS zC%Ane$Ga|TG=dB888N6@=>#;}>hr{|n^LVU!x989Mw67-!Di7-_#-Q;v9LY!n6?*w z*Gasx-edO1WLxIOA6lTPNc;kteAm_e)kw`s%_UrXR;QQ`R#5uC%ZbMDSIp)GWLJ0k zru=E(3wX+N4k$yqp`yCJj8${S2hD_OXX8J2(!IEqQj>OtzrHlTYLML*_1GZZEZKe- zgkUS$H`=~ujqeW|5%PABObEw%_I>{#POKg579*KTra3i)mP)057OSz3M#iKHr_~zC zPBgb!ylUy#!DqFfE#CJ;eqZ0=MQS^_Bp}$>UHXlhYxXR}0uY*ccl>0O>pd z))5PC#^Xgcyw69!S~o{1CRSOyaQ%&}niPLpt@|%i$k;{#5;MGucDww?Arq=yi>zF( z?iwkqC?M$&eHmp1oPoPWCD#z^_{-D|@RVP+Gz0w#~CG|HVj zJg8^$YqRE5v^o53=n0);&NmXcvv?I|+#Oeys zwsSW|llaPbR3?w%BcIo4MK1hS*Ryy*>2M>m$%i)jwHdwzSzGA~F|wUc7O8sO2ab(` z0vUO0=oKEw1Vqi$c%P52bI6RJag^*E>4`M>d^b-}Z6Gw8NDt4)-#G}d?~NSO)*#SJ z7k_3P_963obb^wkwznVRkTIzi6gqxDqN``eKRkWMjw|o5 znGk{yaXcDjFbda<&VI}i-Y!6&{VD(<;&fr&PgV-|$rsKxl3nkAO&E#U<#(4;+{$rjgoe)pn?6ve?+q4TK$% zlwy1~5u+p{%F(uSMSS~PM!Em>vj7zG`#H$=5@M*i!ZDK^`9{=kv=wVM(IHtVEnqI@ zc~ZK^#BNwCe*bs~=MpM+^P;$TV{s2p>iz4#2aC_!gILj|eW-xeOc{;A1{|G^7jXlj zPP~bHa+kiIi9?GyVVNB7Lq+1-ge?&-m|d3E~3 z*zvnZkI3eYnw5Hv0`}re_j8lBo>=c#TkT+Nz9>|)$Z_Y-4IfoK5wo30s-EDfu0@J` zn2K2rB7v5ZMSc7;_bvIqcOIkiIkqjh&F9Mr1|PRK0ifERki;TNe|R*LY5F2Z`dr=2 zB88C_ZB{tGOi{8Y8d_QBKTcgJdJFNw)6m-kf#w$Sm6hvR*MD+mW{%)9nJcs7t_E_R zBgmZ}g+I+EruKy&&}WKzVovf8J95GR(i)X}?35iPTHTOq0H#hnu>UBwGAK~vgqpwf z5J_dlu~2F!iBpqVMKAczJ}NIMxwO!HU~@nm9jowpAjGV}u13o^s^rm+kl?LgoZ8V- z9EECLui>G;u>I|FN6fxtH3Yks>>#gQtPCvEpNbiTKh%TK&(yH9RRZ*pHL-|LCjw39 zqR;&r)qBtsn8sMhIa& z9iD~A?eNJ@&6_ULm8T$IUB0Q_>7!d;aQ4^Xfqz3{3pKwhcBE1}=-aQ)hT{kXrlBD} zTh6=APN>-t8kG5C2mKT|Xc_9$Jp8-=ZKG;L8KJ0HX_?B4#5BZ})1or>`DO(I&o0;Vly=B-?^N>jKdw(-2L95}L*ZqYN1>hr8CB@X!|pX<`*yOl7N0!x3;>f)Hdu*q zI&E~Z>T%3bVCSuv=5({5(1n-#LgZMy>7Zk#I~>FC3K=G7dfDunHi}HESR&3beb|Fi zGP;T%TmPNXBqpdY%3J#|I6&xk2!arQ_L!w0<*n~eX7$7bM5w!~2?YL2fNn;LV5re! z%&;%BLDt#toM#mfBHxk)Y{x;vO|YJG!ftg9$~+#EQ8Ku&(NTf8{6>V* zaO_o<6NC|3Zk5^jtw5eM+j;ryUCu(bU%!EQZ3GXCYa}2rCTr(lqY_VJCOm{DX+gAw z-cKrGt<`AiX<*eBV0b4>zwyJ*!tW%^fuxOO(5OU&6swJCxjTV3<(;m)3-kpPcqL z1`E$h!5Zz__raY}gz$9)eYC(f?H5SV+~1sq-Efb!(U&2Zwapop2`6RkA-E>Dspde; zR`sgsTS~PlkuS+bC!+J@?yevzK8cqRA$I-3K~&p;@-T8<$x}=eEXl1Iq!=E1y+rkD zt2J`%zsQ@%H{N+X1sr3_23{l)hvmyO%yAboNUJDU*UTZ!(PrEmUxD-$25R@)T)Ca$ zr0*8Mq0OmZk6KRvmIO?CiNf|Tlj_CB2g9rEsVez)`5Chbd`Fhm-*Jyc(HVNoXjp8^6YLQ(4LU!AnJ{7y>dqCm`VapRBLAPyk9YbZNHN zK@rYw=2>2O%7+vp^f70r3*gi2V3%ke$F8e zYm6(t4YD%7l>Hn&CD!1Rkx6aNq0i)3d-CfgOUs2%W?}eK`k&B6$lJ|JSt)VyncikU zX1Okfq7;}jz}T>~=G{Z|tI7_0F?ZgBKv_%x|J|4gVC>A#KXSPr#{eHkg2A5sdqSEd znGr9S;dojR%dA%Cd|U-OM@l!y(G5`y6LwXZ73O1zT~G#W%_LA?XUu;mwd>JwFwEu~ zg4Ulgu0r9q74C*}HK4(dJ|Kn6w`+~30NcrlLHQaKQBOaLmydNt?h64G+Z@tiM)0bw#%%%S(R%j}6GpzsGTX~N88;AHC4b&- z6}u#0)^?=yz8mLzZF;j1^$qAWDEY~ zJDMY9-GVl^T9VIA7p@ZSUkP?K6l zzHy5_5)EtXwa`%3*Wy{vD`XPWRM5+;VnxRbiqhzzhH7q+aMXj5I9Q)=>fo&+px zAInoc@DZ@`Qf2IIMlJ=>X60!q={C4`H25*FyL)~AaFOLNj0|lgo*;)aEQZWQz-|{s zMBx|YR)g;s_3O33jlYG!?U{9&k$-v<<)0Ip+rXIfwoKaS-(}z$ks#cZVmWq=coLLir|es5R^J`3nxCYN=R18bLdB z-xP9p+#Qb1nP_7%hk0EZueUU|{+A1WXm&?orxS~8w|EIk$W^q)EL0%r-&Ie2jl!_D z6LBBXruGiKcM`Hbq<~oIzlMK5^V6{EfXB2%73TP2P3KONLOnIRCw}$nLg74fHBD>b zCx!Hv#MP)&JNwqpbM6awJ4AiCDnti6i|lImL`amh7MhWDwhV;3g3c?MnIA9XHK8+g zU14Lkbs#L3Wo@Iox$wocno_`}-nsv+RHGMH1@@|1h)dYMg;o;*ohRq^@i~krZ1!Uz z!8Qaq89%h19PI?yfhH={xfmKu#rr|0(G#w|FMR;xk{xK2prKIFYLbooE&H-QEVaJS zeGgc5=ZO&Tv?^?uQ0cJncB^-~ikMv^MU(2z7};cba&;>kgfD}b_P(l?H|?>hQPTyd z&3p*B41TLm8(S%V?-BWT_lpfoP>+1jUF}nH9Yf*l!n*MhXttVWAkBJ$_u8?U)Q|26 zW>C$Ohh=EHXjP%y_7H8dejMyczN-%{2VSH)O|CE{qF1%*F}FS5SDBS+qNr>@WsD%s;jn`4{6#1rfk$WsA6(6B@Z^*zLSYI$w#sfj4Tmj z(S^sje>w$Uot~HL%e1r2nZ5wow+jc>0b_gh&Z}^@3Dnb($(C`4gY!GNHfQ;{Fwl0c2D7%FEH0*`C2YfJ*m#8KB&=$J z+UeKQsu3GwPI2g1jY3__?s_tpFf?la_svtBHfRhN>+ z)cF2<6QAS??B>e@wcA6%*I`>6Ld12WFo^KVMu+pAERd~?d{LNeu=D^L18dJO+|O=B zfriAG^*Q49%wX-SlG9KyKQ7$9K%w)I`bD=2X(2Pz7PWK$OAnB2EhR%e0f;5|!IXh@ zwgK_w^8nsljW2q~s6)mJv*15QYA*~q+z5_b)#MznXK{Oa`H+r1aMA{c^fyibvH+8# z@nKNQ9 zJEV}K)`lYC`=jzg60JcJ_*}JFt6Ak`t zDVc4pD`QNquPQf^HEU7pDmx;VyTJ#f!{Ly_%J?&mf?aL33&}m#OBEntj5;&Df7?iJ!9wMtb#bzqq zdxvvdOOT%t(Fmx@A?%uDl+KtjtUz2OJup>{a-3$Osf(y=w2p!w)|<+ZZ^0 z@>qbfj(NSjou1(3b?ylfJ#-hEPS}3Ww`&OaG{o@MP06Cz&ci=QhCTkTjt83sw|cFB zP;%nZT4O)&4KrU&L+kbd{$@A=HD>bTS|x4vp(rK?0Z!l~VDH@KS69ECd?~~(r)Cpd zusVD=Ai{}b;-U&=oqVShU;2$c34yeE|tMx zUxuYr+g|=HM;Z6GVC`Cy20XjMjHc~>y;2vp*F9nE+Lc9VDpoY6R!LT)s|zInjzp!2!8$lwlK9 z5CY?|yRjhiDq5yZ4AC2UnNC==rL8vOxm5RcdH6%xS*@nN&0MqdDwc0iSq*o7aWKn6 zaW*+{PA<$bnKM1QF%&mhQ~ywOL1TT2Kw^$6L^elgm}IW#wv=}+r{&p5BYmu>diyUc z`d>nmb(TF>)1#T|C3b!hH63R3bRM|#q6~wy+T0pD(8(KgxgsE=V;Z`|ngkp}esAn< zhNCa0)`7z0wlCHn!_N`_!SQ?d4UZcyMD7(x&1BcN6f7(Om!NaLGrO3~%V9rz>^ZiP z<9nqpXkI8+h5?RUrk24aO}pHbCY9}^G7c}xL!JuA|G$?ZX3kVKfQ>f$T#js=@-L*B z$LGyFg8|1DLR2Q`xgPd_bQ>`Lp%%BRM$Dhbjg;#NCFFD|>PCQQoc%qLYJm!QYy<`6 zV1RHi!mYi_OB*|iMNY4CNFKr@yA+{GX!Q_*T(-;MU9Hc(;1M+(bfQVG(iAxRYW6@% zgt2u8xMU0Vg^*EOGQBM3Hz!#0kI3(<07{7E6#&h41<_QYP5iG_NIJ~DjX%BOARO>5 zASyl=a!{Q~C<$ptSEi$&^$Cf9ud2*~I|n-LH6-IG%cp!JMa#U{NgAQq0nG<)=|U9kM{I$M&{ z++dgHnXa*o9zLTn(6$rRsdPYwyP(7fxdx3wihYk)LaCY>UXyrF?Kb$F9imI{nxW}5 z%#>^AfH8Q6r_0Y7mYWwfFafOtUmHm`X6ugHU;T@u2b^M`J3rIBv*MfGHhlpAOQ61k zwG2$Y6~h31jMgdoXrA0aDDKMfUQRF17oDoxaC3s zm<5&x9+rFMmD*3Xc~#8CJkX*sX9gHkjF-#pM{Ov*5O6Hm?(W3*MMZ+R+mu?|AZ!J2 zw2(XZ=g$sz8SIR2)x(!tiHeR<24gaQ4&1heELwcTqSu_=a+jO4yO>R{nRho(jL(jh zoLf;uF2^*t+5Hj@i1IxY?Bg%7DLaw@r zf9oZh$*$2=aRt2pDg+K&0^ZCmFE?^>zyoGa9X*6sM zVf(dX06xG@oN@mc5-i7jMlE1HSMxB_vTgs9uw&wCpX!N`w~%3~V~!D^gt@*2rt1L< zhQ5DS@vGc#vBAF;bzE*<>}&;7NGvx@1S%O;WL+rMcJbM*tN^bACJ4wLxXQhEt@TwP zm?l{b+Y)0Tknd9P206r!R5fV86uMyKVs*mJ-`F!79}EVPU=BuH_6D;6TKItULA@ei z$w2Om_gs0FXXC%2yU1L7td1#>jKK7V&U~hXoV%rvs*<+77}}^# z$IE8d%H@0!WU%%Gym(#G&MuPAGOmWT0S0goJz@tTU5sXYSfcbj+pI$O1Y2j%E5I(8 zG6H~l(hN;3D)lw0)Vy2N-hDEM+Yu>)Ek+cA7_TUoP18ukdEPmEXi-`iYIZ-k<_Lz7 zrvln8i3BHm-NTeXc7J9mJL>>}1|J_>#WqM082R$4#(GDO)V}+DHzq7Gw=ULro%;vO z_U+JR%OmmczlH*;wb+a%4~SP^RZm!0D!Sl^#SC8By35V*i0(lLoiqFFK zArxfvOzBncRfU1Qh)dx*;_d1%OBcfqW19IkTM3plAK4CFrh(GL`2OL`&O3-7`2YNE z+5~<^;QQ(qZFZ=re6{BPI&2HlejFv#nmlu>`0w95=en~Fj-o*S2V|T_bRE4vV!*M* z4x%6L`M^1>$2qpS^RK28`+^>;{a(WaXejER=S87Ie_PkEqQUb2N4GEjENG$3*0ZCK zZ94$u3R$hE-?ggtKT-~=vR!x)dG?ZasEES6BfI0D1p|Aj@XAbaO3fyeGZZeBcGkVs zxBN!Vr84f4M?`wLy~eifGodeXmyeFDuw{F3VcY(HbjW_e>Fw2SpzcYxJG?t?!yO(G z*G>9rr{%eTsPH!c8q4U2<-lWXG^tS_(-zs^K0Ssuuq;?`3uX-A2u&q^pg9F?6XI;W zgrQV>p;jxi-Ur9pul%BwC#rG|g`p<>u{Jx}i%N_XLQNjCLm*k_6lnEhrUrxF3lv{e zCJ+bAuFUE6*qCr;c`{E`swN(ji_f9=a$IVl%Ujbhz%)J2l|)%cy&$xjD{gaUg-Hy z(JVF#F)pbMLR=x#)K{*adueW7I-mHAhn3ePpRTIfh1*NXy?Q_ z<12O>qycF}ykDmwnv$LaIhl9$Dn2)q>+I9(%SdnQ3O0a*(W<{2%Wc zKFX-gk@}&f=Z^wj%gRI#*1u&fc(lx2Cxc)YlRxy-f2)+x-||$mN*DnV8Np-n;T93j zW!9afO&0JR3{XrSGN^M#F0a+{pw?fOf} zEpq`{z{W6W(7aIieONb*Pnt8*;c%*9PkgVnV*9JaJ}8oERp<)!RBk5IT@+K`BrIW~ zR;ykM_noa{YJYrFBo0AnwMAbqRAXzu=$2{p;rDqmk|C|>ss8J&**%%-MV^!k1g{hQ z)47bN=VhWG(`D_3aXacvm6<{c3xeeDR^67I!XJ~P%<#du8VC?Uac~%v|LOTf%OjU~ z`+03#Gh&#$x{LaFHAep|oqmNC@tQr59RL}0uLyT$7rNs%PLWzmgfUN=8%;_hR;Zx0-*gr@?5EGuiAn^V zx1*SkY8()>QmP$QxG*D)kumUnltNA&HMZd#DqNPogH+g=3sTDK{%r-JNu-YM7R|*A z_I4_Go}d3jE4$H%a!?2&JYWwBz{WC7p6kNTlXM!N>g+p&; zgwi?acHgg$(=WX3F988rjI=3@0Z)>u9K*04n6t9T|bpG{l^GqY~~1w=TCu3PTAh zJS{k+HrM>;8i`9)GkQM(2PgHv`h{Lf>)PE$uT^*s#Tok|%onvE4V)bX?cM@s$pvE8 zcALHiqkmnez>a+?;%zp)Z04C0*x#~uv+pwGL_rO@Y^ywTZT{~Dk0N6d2%c+t_R&7uxBbCI2RD__=ut^_2!1?CNbN z)*nRE=W>YoUTjZY=gyx}14YH@os7v+E3mJNm89W>+X9I}3aO`W{xOGw(1hXV4mTIS zQ_6-nKHptVfb3yMzu0)y|NS&lLdm;+$n3yG--J$ORw|1p|d3~_e4_+hnrJv8m zYO^RF`sQ7d?76*UUwXyUHIGMYye2nkK9U(bvBI2dhAVbEKokKo;90Tf-WsB0e(;l` zPE7`wX)q>@zU)`V*Y%Dn&2fD+OEpNPLSn~?hV^b1fS5tG?3ms<{@%F9PaUFtc=I&{ zKluiG>f0Zo+STP=T$=+JPOlbzDu8Q`b3EIHK~%(UNeH~n84$TV#7bUz+;oA%*V^oG zl9K(-6np@$NN=w6cB;D%?$98q-Ga>Pzxhi?7e2_E&o2rHvW>RO`vun+|E8R(+076M zU$eUWnk$X&pLuERg`bA)=6gDdjH6~O{2tbqFXnOmv9u=01K1HDC*<33dS){4$LF%O zA_bgD^1f`XCfX4QTJbzs|2-0(WKheKH-9j!;1)4Gx$08iILHpiFa8GfGBpK_0%dhD zGUjuo4ZH4eXll)gQ8jxOpB&Xloo${&)j!w@AfLlc-w&kP{&z4Hn@P_=b*1s`p8``~ z&4UU!uNzmeK8A0RcgmrL-%a1HP#8QCKedUEy+F4dpuuZ(q5UPBTb+i>gWc|BVz-O2 zqB0^-u3>)uK`rK0_wwbg zP;I77s@ipsAa%0eFFhq<<&%%L_dHRuX2!bo5>-7bhX|Us_{2`l+pxk8Hn?T|zab7` zU*@@oevq6HwRHrA#n<;BsR~oG&1ZA@af@&3+HPy(t@qbNcI*_iu13r9UKsBb|Xf%^>&fp-S@jndd;3lHjvb^!t_AQL1m1a%s_?FS%ukFZM-f=Wsv}U zUe}mFS4;3r?V1uavixt?VmI~@f3zO#a$_FbQcuvNmAWGnJ0A%Qylt_E5gb?7`}R0y z*EhrPw2h(%Fm@1E+9iGacmG=cd`assE-k&0s-MLI z*^M|@9B%wh@X(pwSN>2JXiF_{OMaI$$+M)Y`HTXSs#{*0SXCb@2O8Q%O;>vf%D%}o zHM{|`^9U%MZd9Up6$L8%DeW$kKQs=ZSb+Mr{nXC+WmB()D+>yzXd35!DF-k-P$Gk&&9yr%ZI0`Uj-bm z>K)@BWh99w9h?nFH{TYf2In>7z0Xr2hA&g+Xagq)J+lkwD|;g6j<0+G%@VzHpBiKt z+k$bq4Tc=05g@t4uWeTHOt|DC+2_rWkHD|$=d*Uynm_YeOrj{h=mtI3;Yn4iTLq)~ zW||X%A@Sw_R0~<$L)C6c<qOM^RKaaK`qEuBW&TXZsmo{%dBNtw z)WRO^-|s+yOaTrv`1>~1H%upnQPXo-r7{U%7ol?t8=0kl>f~8aVvjpJ9 zT+XHHK_u%s=TfcS(b|_0Sg5z?+zgk^)lgl(O}qkoSW%r#1b%7im-;u>B>g2wz|A z2AXmrliVjrg_j#Pd8uXkW5+3OdsP}??KPS-XhO^+k zp3#QVGLXh`SrFtCtuVFOL7RtsLJr93^l_rF0n0mRs%@G*r-d^ea|*8ceH;P_AyL%#NF4!%yMPohKh{16zD8lq z{=AGkd`tFbTPQCRC@wLhDj*I;O;5Rbh|V~CTLDtzz)84O?ymOfZr?B8-s%UcSTWcv zd4Ndf?YtNO9KyF+&=>m&lOV5M4gLVE{Nd1Porde4&m{Ms`~4mwZQlVB$Rm(CXfElx zDzl})#YAV43~`W10_lj&q<%d}$&Q+`24AgYZ*+Bo^~KB|&8gBAAi;y!1*m=E%MaSy z%v8$RhO(sWdK4rKcu3f@>HVwqowDnerxC2-TK@*8sjpbZVpO ztuF}s+-ajAM0{hq(4NcLzJuC#-d{tl`snN+@9&eBi*`_8uk?Y~i2WM;XEizBe07Qr zJMdAi&JSKSXHEcnlKT|#o>g7w2my@neXw*2guHf#0#!ZW>D!%$@TJHd!K{M)^l$(_ zW@Q#m;A;q=fO4|tUjfUJH-WF({W@yL4a6K^ahystg%m}vMfKGO$HZ>2&Fkp~!Cs6! z$-|CyV>oIDd`q|9urd51@@gCGQ8!A0V#j4P8Bdxx$azgpTU87)dDY(~V=cz$QZJV8 zxc5fK(~D8VI9vd~SCzkJA=72IVcG55k_8zekf|0ew^XR;Zx7an8D4|*1Us1T&Yr{Y z+UT^Gs$VOBz6dtYlMByW(~N00<*#QY3I%R4*Pjhb=UW7_t`$YqKH8084r z!r}#Qf}*HroZ1aSrdMsNXNUL>!1#s$9tM}nZ7&NoNOe2d>;)UPmk+<`T$>oZhpr2e z-IAYx^TIJ$YyZWEyw3mrw3%ltE68DcUv>^Ae%|lcnpJoo#1nu|2!b)u#d?V`2t28m z1>ot&iO!8d9UTCG21wGTNU8Rt5tY!_mft8;n#Bb_$@Q!{l$m$d1ACX9O8LF2a(>^^ zuCRS3NPUC2uRl-s$DatpDTL&wX2E^6NT+?fu0i!N{rT#cqp=e&v55hdmXPaG;I3h< z6o5F-V*M$fw|<4oZ5Zg}labCBV^PM!C3N<0qV>*tr`PTfUYV_L#B`eRMO>laE-;iq z`4wD1SeM+^171q8vgU6BW5i7V{Id^}CN-u-N=I^2ZHBo$K&D^s^*u2wxj$(^CG4RA z8Vyi-ZRD13Pk(QoHy1zXLh3eUH)R6h*6Tr9SZ{F*t;`_+#b6}w&K=MW3zb{Crb+w; zzh)fLNTnP00$g^4UN1YR1AJ9qTl~C#`F26RtS#KnkSTeE^rpJl++NzAqcKG_En#H& z<*RXYlfU4$8Vnz?eDDWo#*${LK!LEE_tFltd$sXPPV3C9q@=qN)p~R}9LR!8zRr&^ z&YgCvOI}aCk#l&z!cq*>;Fi+uGzx*rAXQ2#Q7?Yu!ZS2@KJLi>Sra9zD2i=JdUC`JLk~z5mm!xZu)v~* zq(aY8&{As#xz!h@*tSO9E5wMtbDnMri)VE@rmsWXbvFf^pI2(t7)N%v)ME|G#OG!W zZG%su<}0ffJ<@ZX9{7}N-u|#jkcqSY<$i9VtZ!ZQRSiXypRU!}+8k$p3CG3x+`!Y* z9TJ%0QRv`j>3vGv=ocHQ&I2mdWu9GSIezSIb66YKCg*k*zjn#!FN@x+qto=F%W!b> zHoctWV<+bdQd?vH_@JjNG;Q-6%ITIieVd^G>8Q}~mA~pt2aYV?eNKo9tBx=>r%lDP zM=$v6eI?Gbo{CKkin(yV9i%A-es&4m_snQBe*Q1znk1vPAn1VeGuRPb^6J7s7qk<5 zX#`if>(ooa4tqx+BBUm#>v??q`@q(Ii+Tqj1GcnEhNLL+X8XP2LbQ5|H@J*cVqR5- zM`J)H24L#>PVQITX4^NnmWwp;q`$}jg*@-*G-70{cV0`islm^;nNKKQDoXw91b%ys zkxkjbCSSad%nwjKyFvkweBYekt^+xv&yE8iyR%Z>eADQ9Nt?}P>Mq$sd8v4%UX$*< zx(Y}^KHp3awfmoeN$`x%)~Bs!iaN-O7d*LK+cJ;BBEW-sKcp0-RH;yiZChhxXGyEA z^_@E6Vp;fGvaBua{r4z(Qmb1YauaSx=>$$_)Pf+AnyrY^iavLLH#h-wtKKZWI1A2m zW`R$4ny(g1za6V}aJ~*GBO)1AzfzOUTh+MAlN$$~Cte>uFi?F?iZ!s#!Rc2&H>%`I zWI-QGL~~)15D38nG$A&{seXJ}k2}4u+||ZMPPz&d4GOm>-y5w>K-OSsdVoTg+X^NtK6(j4{+Bw)Gp&&;Co5>J4?K1U9GIibJstQub9I>J#AyaqRXjJobB z)EMZd-NU*t~!#loKX~jU+~rYt^hb0>NAFzR!D8A{$(I_{Y&rlG$$EAcVMJJ{V)z( z+knw8Cb3)p>2o~r6&U*86t#tIS2JgRej($zZmj@i^HovvNNVv)=k`Zj7^5pWTikg) z2v37YyD776wUeL6i`Ro4>MwLifHmT>BWWc2ht5P~yu z@{Rw3*hF>^_^p$MXz-Y-q7H|fhq#a4QLWKR_5r((g4bYlCM?2NukopF%}V1quaQH0 zA~tTfym}?f!AN~P$7V4EXdzz|<%I7_YU8H-VwhhGC`S2)l|+9_P1oRnrF>P?)&?Ob`>M-H=q5{l=`IpJKA-f9RafQLl+iz>lV;f{$Gt0yysWoSOZ9}%%iw21WBuq z-kgsvX6Doa{la?2!5kck>g$yS09mNg@NQlF+#wyfbvgM>aXR6h=jnU6(Vpeu7nxFO z4rZ^p2>xX4pxQ>IYfsqoFECa>B(A;jzd~Y@{&?7!vQI6oo1o0#F+C-xqs7a=L0vN;XQ!Yr-8EB} z{DQ^zsLrT0Gg*d764-NEF1RAp+T3fWXH~r_IlzyD`yDgrFqGJaC6Y7sG^`vDg{D2! z8_br^n}F<%2KA>6{gi!Qs7fDjbQOlEl6=Rz?T4qL%!m%-``wy#tPqPmb-x#bXh~~; zjL`SzpXDu6NdCil13DA`#Pa?8g)c#!tMiRQzyg!*X`N6CPyeTLRnmw;Ao3kiRi2FMn-0_!EA{vi!i9VChQ}kWC_GT zMXzeOPcx&^Olw}aFuWG6>J~Ueel=IEw*{Ka3b?RMH*KmbGPdtkY^gv(Hw7@0ihv5$ zwlqEK8k$?8FraBuBak!VKJw=;27UZ=ytVX9r7pN2VRcd{x0^`?8N(s}XY@3{VV-N( zp97*&{ZXooI}1LSR2febf1t~d$TycVBlL2JVumz zTEzZggdpIrp)WKnm`>K+@hwj9y1;RW)F#iu2eN;LUYdnR;B_DkF)_snhUfRlYAac4 zuq&|R8Nb#)b&<7vW%=r{YO-9is^&sYn<-tWYy^EOsjwa5N3YeZ*l4OBxe-&^u;W}; z88~_sQHkns)a~gBzluthZQA=`#UI2?`-y5QTBlBf>mZbpY;>d3eWhi_`R2jRQdCNT zmF4tp18r0*j7lV2`SdXwr!p8PI5h?Sa{{K{WKww)|Xo=uDW9iP-@$TF=@*dDpmysG=Q zzw-r3iP8s3l>5S*0=Ts-%O0&r)2|={BVbVWwN);eN)!3BFuT~-n}Wek$7Zo;+atn? zh}b4YNz1Ru)0TB&w{hEJ$1>+7)9q@5=jnAgo{jg>XCpXlF09~I%rfV-a^o;1F2{=v zO1%b+sH>stP>`63&y{oWy56Gm7_7yyW}w?9kl_gazTOsGL^PUtBKL8WBr4@w=F|8cB?#F^UKZ!7p+Y7H5hUq-zYqM$ld9wN7njHifX}oTTTikaHFY%*hTO zk55*_Ur!%aorGGMR`ny{#US+KT5y?LrQK80&B=H*VAUPK&Og4BdAXz{LO+1ibsX^8 zQFou?-fw~ZrWUQwkxzT4qvEyKmhFszd|lyQjAD10)1jB;`(*m&CtL!5t3w~h7@|WF zX{>#LxA!M#ySPjE&Z{VNN^8Bw0PaO0urWkl+Ks9+eevceq_vxN63mWw>ka|$J?P2V zDUV8XFlJ0T*5rP@2P{%55w9N&NRMK#e1d9Qtf#Janwg8O&Y?!@okkQS_DZUp2<0|e zq{Rgq&4DsoyS<7d4nbwWh)s;EHGj1!HLu3p+2HTy5-4;{;a8F0Z}n0xV*Qi>-~1%! z#=#c&n@ObLgq#&PZp(iet;Sz=d-Bz&buXD*#j2YLLN2afLD8hX(aZi2$981YgCHW+a|UM&mC{Sb74LTIDF@71{lqpXDcN=btTpzR~Q$Cj2|mZH(LQ{0};6U{);RHsFcC zMghyZ*rE992}i(hIaCWzuhP5;c~i|NF{`a_@KNqtVTj`_VjRH8r)>zvrl1&7oP#+#UDlHm4vFUNmZ2#t|e1(K~jB10 zk?+2mJmFn}-6oFe>qbGrMCr#x#EexM&+`@b4|`(>=E?oUWQ;`G2qw=IarZrq(~b!b z29evBf*4(3>QH}JVIa`_TV!Lcz6<%!^n4l~A!GP&W)8-*=h$XySw?Kc`!yCZTpkjQ z?a1gsOFDlyhDKZMXx2@OSu%owwicQZAgZo6-EK-ws<34Go}a2iz54m|xhYHPX_Haw zO|nLGS|gM*cOwjY1J52jpeA@g0irU4MedE!@h6QbhCwB{gYVAehrrOQvMms!jJ0xO z(Yi>Phm1I9q)4{Nu4MP{cgah<7KRb)hNqx$4*nPnh!HUP?(i`MZ4skVI|?CBHdYwx zT&@5<0S2Pd$W&nVqaby1kfEg9ho9H(!*B{o#*9#nY38a&joNU%55m{egD>jSnZE85 zUlP@SqQ}M^D7&-R;=uUK1aQX$*hxkp@=OK=q=M*&F!Q=@8xU2cEWveSel4Gh( zj|9kcf4(7ylW~U%%;;v%q|Bz!F_?@o1gJ|wu{qI)Q@X%MLu<(q$Z~PCrkglJl;^ae z?5f&unkTy9co?0)wbF^mL4qiWd0aYVJHvpvc$R*bbUdzjx?2$Y91Y2VK97w_p}p!hmyT2=C;M*SzXD#du|wCw*YSSU~m!n z2XVoB^%)clwcpz1fqkNh-;H$5U`TrtF-Z>ff~^3pQBY2AguWG4aDU-!?xOyaUlO;~ z--hTRxmRzx(Cu)Dnb^O-O_rPK#ZqZzDUVr+dYQ>3y}D|RIwYM;`&&{|l`N<4=!38w z*C>T(2w}a&R%_>c9eN?7z%uk?oUl_}r;|cl+l}XwHhtX4sh0nm& zg{F*x21VLb=qK`}lcNq|Z8Dlj&iM0{2;iEd=g!k)4F)a#S>yf~YGD?OhGC&TJE5X# zmsO-$@qvktNKWHPcXyI_oNR`12hrnavkzBgl6t|1als@;br}~wGB`F0+X!|VDhnp& zAjN0oUMB@5NY>D@8xf2#wnBC9>@KWFasH8KkSGbLMPjR&hTwffxj0PqZHj|IVh2~? zR+L8?7nCi7ysh$nDluDo%tL(6-~==RcMG^R3EN|3>k&wx(gHC6)xTl3f%Ts_DK{oP z7(Zq4A~+_Z(?+lz|DHarViKHAo&P{&R@I<3t?)fYQ-41w48ft@NAL!GvG+S6u%w}{ zVHPrGnfmH!txf?eQG98!;%;qQMqk`ca=2(AnE^LJaaJP`3AWbYe=i_nR2moyOXm28 zSe}p{CQ$}TXPep&5+u{IG2-;evi#1Gfy8rlAw><8u<|KdnPe?=*JN6GAmoR4g@N)h zVdKK|BM+#E^ps@N#~4wnOKtxOygXAAhH+RYskyc0B<*Cd7|B$b)}(OV z;;fcXS#?uWBbTn7_%H!~jz-z5I;}NAuq(vIX2f@N^ zye3D}`}8(mJF8OWJ97o$OK3xni(pEudPsoE6glT_;k?ECHg^|kko$5zPzF+&0fgky zN1ERL_E=bOO!%aVQOwweB&!c(kRVdJ(|w~R;jM)et(+tzo**I|4NA5yY5BTzLf0Lw zJ3hdKjAwOR0E0pohqF@~N4(yvLSK^(L@K(_>SdS{{@Y)e7BNn^+v5($GRc3(QHgmp zUFSZ+EHI+12`VZ7x|_w>~C#1!QXQxAe8k&+_Y%gGL} z`Td|R;A~TqlT-3}MQO@HzOK7LPx*-wCgn6wkami^y$7rj34D|6VGIe9J)d&rUit{T zp?e6?PVXE$bP4^*{{AdLd^3kZ)e-fsUnTQ0v$JNdKhEU$$e54G=Z2=Jw{g8NQSOmE zQl8KGLe9tyG35S$g&l~!=5d&%PaYC^Rv9S)?X8WB{1OTP5I6Xrw^2jiGSC!Do)lw6 zvO1@AB?laHW><8kn5Y{5G)aB1Nlr@UbD80>w!t3Hs3^l&N3h|67>c}BoIb5Qf*GU; zn{4N>&%*^9>ObNlJ9>{UoMYiB0oI@X4D_T6OLP=!88O5&l+6Ezx$GU}Q(7tPsypp0 ztdO{w{`k(dHAVR98Skh8lsw^!49Bw3hz-;U|E-1`yE4DdW{9yi4n>Ts5xykJ<1B6H zB29t0OdCVDHvlo9Tfl7-&3r5!Uqv@J8?LnQvW2DHNJEvTKX|xz6na)*YTtCU+iOzTjESm>(H8Qi?sn z{{8qq*!+`|xVbp^e%$AyPfuzk5Z)A^nI`k6p>L`%;*ujb_laOvsW zM}&;2Vzn-o-O0=$f^A?XkXNnjZLctXdaglj>@HTPR*XI&b{+A@GUL>RbIPe{f)h;h zFrSg3N#Vsi(3-S%A~PRowF+0aRp*s5^Gx#0-@|*0e`x;!ho%!u2dahOFY-1Fz;GkJ zA%si7zTIc)#}@TlP?`$*Ij8?B=M$5MJnNzI0Fo+;J-aALShtTxDjE2MO)qQwRCq!J z$A)&7j&F7g2P{syB2=^Tr0_8Cb|B*6R7YEgptxVbrdWnm+oAplbir6Nf9QO*dFfQ< z!%R<9ix5wmZzGUmsxl}lrg%6eHQ4Xi+EG~U1oSMX=fX{l6nSs~8QmN$&_zAOFlcSs z{?v{c52TZ0k)3*$q>08PPA-nQTO#IyZnrMB?unKN64}}*ZAIeiBYHl)c`dA5ww#T= zo~=B|J_-_)$*t_H#s=;zq{@N;&5!Hx(2r(VkGMg%7^;G9sT+5gnL>gvsy4K!`9MEe z#25fTfvvq%!{7Gas>isSc{)?3XM;uyEiQYkwp7e|=ZYEpl*U>}^w)cO3(?yV`J?5F z^EGZ|SPI2w8{6k~K9dy<(`*r-C$k?cZzmZ!PzyC>AGV$#>t)9Ft{y*h_&A`wEKH8* z1@%t?$r`IBkI%^TD~c`pgph`4>UJR=XBmvipGqYVlDjpCjF~3~3+X3TAV` z_=w?TBY~NC!E4z$Px++Cf}Cg%vxs|)KnxRL7P4NiaQ`8fz~Fpc zcR=mA5>|8cEBpu1?pS_KcM=){DrgJF1qZ4m$-S#}>{EY??v4<$#c)F{8miPWq0{us z_-A%MgyLdWL>drFr<_#09J(U)@pAE}S2t1AOECS&W_Nq!`d|J->ROk*Ph!i8Yik67 zQW0IP=>}UN*%Y>K;a>S)1Wa0gSuPT26Ms*@87=q_&6I6VrIjsH6sexcuY?8BH0>fN z@XzJ4dy_}1i<3&~1Q>t-?hKnh0&E&)o>(#WH5(PE$A4Xw4CH9g6<>X!^8l<1Cl^y> z?;%uHLvlPb+E(X9Srtp_cabui$#Eey7L%bRmc3%|qTke5^`mhvgyVPb{)7n3YkkDmfl(TMq3ailLi+9*v6q+G(fkEt)^y zPZ1?X7nQ_s=9l*9fTUt(ZKD21Qag~YM)_$bhzGAi# z*-EbCJNWfMXGqO(+IKioQF83>P_R*b4!SoyCHK}UVa2A3J?gaNJ7dm@m4l8@6VpfY z{Zv1=s9)T-H|>uoSN0&J#!^`fpEn&|MW@6y>srR;<-K-iF&x36%kHh#s3l0_7>GgA zD--I5yXyj0-N^&FV@k^&PKk&|V~lbFmxKqY#VEYyP24byD3kIw%d8+77%{Fnq`D}n ztQA&2$seYbfIJ%2!LFO@f8*-@otiyDxZYvqZ0ai|jfa#g=)I))cHBc^Fke^OrI7o2 z4$cYlzyGY>%hW1MG~YhBw{ZWPt$O`R&U%UMy|UVH%PcvtO^39hzIr=f{wF=o{~>D+ z1_s{Uqyk1<;RAWt{|K0fqY_()*!#UB6yk+B|Y%jagT=7pct* z^bpZR=;(}}2qh?V?65wWU$8eFzNi_d=H}29t8??5u2CI0`{w@$9jK*2P51N*|#qA1gfv-FTzzgESVuj=Cxe zK)*ETH2!>-CponQ-#X`*({Z2~^Zwr`h3zouOi58c_;G1_$az!1pSp*+2(FKBI@|S7LDG$obA45 z1PO*fjVUF&vV%ffWKpqDTIG8$xC#1s5GN}&R@Fc=4Dv`QBwo-BwU!jX0*8wehOwo;cOO12GE#vRPa zjR*5q>ZQ3r>Fc_BKr2T#P39q`v)`JjEFD!9O9O#6 z&@M*v0VxWFg+>}5g+VGtGZNETMevgh)|%wpKko1eA%8w1 z&MRHsqWkE|+|(gVAifKOp)2UnGN)z5j5eB%}RqDfQ}9Jo{)rcz|?Y`EO78K&al zfD3!sd!8`Vz-o++rTT1`EST9_hKK%qV6JL@B7CSiReV`EF{N5{ z1B-g{5&6Z^AoIzzpo9Q~G?@NwPa3)UD;sW*2u6}GY>po22EI*ejeoC+YZcjrNTu)1 zM)4Y9Ctqt}sZT<#UB=I=b*kjm3{g#?iHa;Y`|Ls0+8jBl7Uov3M!r&gw$nI2xOgG? zsr%%xFZPGS$?S)^WU;Ip^-f_WjIW?-;Yv)NF|Jm?X~J40h`cvOcO(+Pu$PN2U`2dhNiTWE>l}Mb_4#{F7w-PhC%&t{6t87vE8EW^Ri!C7s23k`CNAHceN(yOERb>k5lDK6@*=+E=!iFQz9-za48g`rL2?xGiDa z9XFWeNy7ee=Jz;mSPZRXC|Gn)?<5`2^9S3wm001i}fAEump@ z5KjmmMi+{BOS;KCnfvn<6tEv~Cy;E*zYE99IH8!9??Z=yVLyNYQsst^Ve_V!HWhh7 z0Wut=3|lmXvbFz?9SORJFW9PQOJpa}_o9ou@`Xoka4e#Js~7Ad$VW{(o%|`ZRgmop zpfP|@F4Ad&8IgfI?J4*rsnRz_p;Rr2`X23Z|B7Q9NoJxP3!|;Wz=nENV+IE8ePW>x z=EosXHhdRf`QcYrU^Ep9D2r6835k4zwb+Ln4n)w-?Opn_GP_z)yZUL=S24Z9L%0O>?P4no^%W zZp$L%ls+a{0&<~UC5gm#CLXu&e*TZ0+8ENC`7vqMzkQ=R)OupkHG;!bS;5w4L)|^ z{ge31FbmgY#3cJeBF1QKBS2?F0edmTHpKp_7oz%$>d8GoLIT6_LReO^0rDqhqz#ez zB#kR#Fw*s(s8L}Hk;wj`^k_W2UgS=huB(i(#W7O;F=7?Mg*7~FNHt>fkC#*&XMJ`Q z63=>r`0?pr7j|Cv27yX<7t8iEZ^mRa?DPGd>ZGW8ZuFM5S>(}ZDR5k(kB5h99HJ$2`;@ z%xuhAl{bQCKsXfK5g$-Td^dw_)!2B-!hOu~{=~XCP~2S1E|aSYd}x^l$}sL?NUEIU z3izBK0XA~3U^P-uh2!9qiR+fqvz@1PWo#nni!2Af!?@fmXZwE4Up()wH z!O%+OOmAp^>Fi)`R#1`J7<+gp`r9U6A{zN2*sfVgY~L2&qsxMX38)AE$u^L{2VE35 zj0xR|g=e+G4iXezT3>H!&zO1t$uj6e1KH;y7>o?0gemCOB;evmcla;S{I#*1HpT%) zxn#NRZxihK8p`y_HCeq`GEWTz9tjXVzv_6Q_0sEL`<-yf)I$e2^An2}5od$1O z7z6I-p-u~;itT7)D^Q5^vkCTap|tF=Cm!uXmN29-VA+n>2x#x~8s_ZCM?6`QJ@(&e z)^?eK49P;_7+A$$xpgU(?3*ymWsErO`j z|B-z_VgUeV?{< z)X!12X1NI-du#GbsZ*9D++FBtuTlzWm+#GOO{YyIWpeSa9P!ep3rDz|R|F$Os_Ry^ zeiX7MCg94jh*Tibeyw`w+%WrUV;B4{X%|^v9geM*Pf~pqW>EcsN=le>)#GrPsc?ey z3oe&&IhnHfoQ((ptFsDO5C{d}i{8Pk{~!2(z1G!t!gdkgq=om(*rP}vST`LkZQ$P8 zh*p^S)I;IUhcI?cxhH&61b& zz;SnnKYQcqNUK8)54zon8oza*6@z&{CNI0Zy20y0H;LpPs&xmC2F5VfN3`DIBTrXt z`WJ`0uLm#t`kF}xDc0;Ja@7l7$zySdEbg=`|DJXaeo0z(8e%fjT{j*aevgi%jleK6 z;s{RIV5RvIY)PIJ5FvT0+=;Y&9VE(`N-Rg|K&m~1ft~u9j1eK(CbgW6a^I*$US^*x z=*#XnVZ|EIsY37bJM2?}P3sZz5OA}N^;ts`+(itaZr?|7f~mG>lx?C6Qr zyJO|>VyRJqv0|QM*lVSkUAyPm8@F?jJ;05# z6A≪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 z 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