diff options
| author | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:38:50 +0200 | 
|---|---|---|
| committer | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:40:43 +0200 | 
| commit | 7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch) | |
| tree | 6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/jest-snapshot | |
| parent | 963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff) | |
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/jest-snapshot')
| -rw-r--r-- | node_modules/jest-snapshot/.npmignore | 3 | ||||
| -rw-r--r-- | node_modules/jest-snapshot/build/State.js | 176 | ||||
| -rw-r--r-- | node_modules/jest-snapshot/build/index.js | 161 | ||||
| -rw-r--r-- | node_modules/jest-snapshot/build/plugins.js | 22 | ||||
| -rw-r--r-- | node_modules/jest-snapshot/build/utils.js | 188 | ||||
| -rw-r--r-- | node_modules/jest-snapshot/package.json | 19 | 
6 files changed, 569 insertions, 0 deletions
diff --git a/node_modules/jest-snapshot/.npmignore b/node_modules/jest-snapshot/.npmignore new file mode 100644 index 000000000..85e48fe7b --- /dev/null +++ b/node_modules/jest-snapshot/.npmignore @@ -0,0 +1,3 @@ +**/__mocks__/** +**/__tests__/** +src diff --git a/node_modules/jest-snapshot/build/State.js b/node_modules/jest-snapshot/build/State.js new file mode 100644 index 000000000..156bb283d --- /dev/null +++ b/node_modules/jest-snapshot/build/State.js @@ -0,0 +1,176 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + *  + */ + +'use strict';var _require = + + + + + + + + + + + +require('./utils');const saveSnapshotFile = _require.saveSnapshotFile,getSnapshotData = _require.getSnapshotData,getSnapshotPath = _require.getSnapshotPath,keyToTestName = _require.keyToTestName,serialize = _require.serialize,testNameToKey = _require.testNameToKey,unescape = _require.unescape; +const fileExists = require('jest-file-exists'); +const fs = require('fs'); + +class SnapshotState { + + + + + + + + + + + + + + + +  constructor( +  testPath, +  update, +  snapshotPath, +  expand) +  { +    this._snapshotPath = snapshotPath || getSnapshotPath(testPath);var _getSnapshotData = +    getSnapshotData(this._snapshotPath, update);const data = _getSnapshotData.data,dirty = _getSnapshotData.dirty; +    this._snapshotData = data; +    this._dirty = dirty; +    this._uncheckedKeys = new Set(Object.keys(this._snapshotData)); +    this._counters = new Map(); +    this._index = 0; +    this.expand = expand || false; +    this.added = 0; +    this.matched = 0; +    this.unmatched = 0; +    this.update = update; +    this.updated = 0; +    this.skippedTests = new Set(); +    this.failedTests = new Set(); +  } + +  markSnapshotsAsCheckedForTest(testName) { +    this._uncheckedKeys.forEach(uncheckedKey => { +      if (keyToTestName(uncheckedKey) === testName) { +        this._uncheckedKeys.delete(uncheckedKey); +      } +    }); +  } + +  _addSnapshot(key, receivedSerialized) { +    this._dirty = true; +    this._snapshotData[key] = receivedSerialized; +  } + +  save(update) { +    const status = { +      deleted: false, +      saved: false }; + + +    const isEmpty = Object.keys(this._snapshotData).length === 0; + +    if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) { +      saveSnapshotFile(this._snapshotData, this._snapshotPath); +      status.saved = true; +    } else if (isEmpty && fileExists(this._snapshotPath)) { +      if (update) { +        fs.unlinkSync(this._snapshotPath); +      } +      status.deleted = true; +    } + +    return status; +  } + +  getUncheckedCount() { +    return this._uncheckedKeys.size || 0; +  } + +  removeUncheckedKeys() { +    if (this._uncheckedKeys.size) { +      this._dirty = true; +      this._uncheckedKeys.forEach(key => delete this._snapshotData[key]); +      this._uncheckedKeys.clear(); +    } +  } + +  match(testName, received, key) { +    this._counters.set(testName, (this._counters.get(testName) || 0) + 1); +    const count = Number(this._counters.get(testName)); + +    if (!key) { +      key = testNameToKey(testName, count); +    } + +    this._uncheckedKeys.delete(key); + +    const receivedSerialized = serialize(received); +    const expected = this._snapshotData[key]; +    const pass = expected === receivedSerialized; +    const hasSnapshot = this._snapshotData[key] !== undefined; + +    if (pass) { +      // Executing a snapshot file as JavaScript and writing the strings back +      // when other snapshots have changed loses the proper escaping for some +      // characters. Since we check every snapshot in every test, use the newly +      // generated formatted string. +      // Note that this is only relevant when a snapshot is added and the dirty +      // flag is set. +      this._snapshotData[key] = receivedSerialized; +    } + +    if ( +    !fileExists(this._snapshotPath) || // there's no snapshot file +    hasSnapshot && this.update || // there is a file, but we're updating +    !hasSnapshot // there is a file, but it doesn't have this snaphsot +    ) { +        if (this.update) { +          if (!pass) { +            if (hasSnapshot) { +              this.updated++; +            } else { +              this.added++; +            } +            this._addSnapshot(key, receivedSerialized); +          } else { +            this.matched++; +          } +        } else { +          this._addSnapshot(key, receivedSerialized); +          this.added++; +        } + +        return { pass: true }; +      } else { +      if (!pass) { +        this.unmatched++; +        return { +          actual: unescape(receivedSerialized), +          count, +          expected: unescape(expected), +          pass: false }; + +      } else { +        this.matched++; +        return { pass: true }; +      } +    } +  }} + + +module.exports = SnapshotState;
\ No newline at end of file diff --git a/node_modules/jest-snapshot/build/index.js b/node_modules/jest-snapshot/build/index.js new file mode 100644 index 000000000..866f8b698 --- /dev/null +++ b/node_modules/jest-snapshot/build/index.js @@ -0,0 +1,161 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + *  + */ +'use strict'; + + + + +const diff = require('jest-diff'); +const fileExists = require('jest-file-exists'); +const fs = require('fs'); +const path = require('path'); +const SnapshotState = require('./State');var _require = +require('./plugins');const addSerializer = _require.addSerializer,getSerializers = _require.getSerializers;var _require2 = + + + + + + +require('jest-matcher-utils');const EXPECTED_COLOR = _require2.EXPECTED_COLOR,ensureNoExpected = _require2.ensureNoExpected,matcherHint = _require2.matcherHint,RECEIVED_COLOR = _require2.RECEIVED_COLOR;var _require3 = +require('./utils');const SNAPSHOT_EXTENSION = _require3.SNAPSHOT_EXTENSION; + +const cleanup = (hasteFS, update) => { +  const pattern = '\\.' + SNAPSHOT_EXTENSION + '$'; +  const files = hasteFS.matchFiles(pattern); +  const filesRemoved = files. +  filter(snapshotFile => !fileExists( +  path.resolve( +  path.dirname(snapshotFile), +  '..', +  path.basename(snapshotFile, '.' + SNAPSHOT_EXTENSION)), + +  hasteFS)). + +  map(snapshotFile => { +    if (update) { +      fs.unlinkSync(snapshotFile); +    } +  }). +  length; + +  return { +    filesRemoved }; + +}; + +const initializeSnapshotState = ( +testFile, +update, +testPath, +expand) => +new SnapshotState(testFile, update, testPath, expand); + +const toMatchSnapshot = function (received, testName) { +  this.dontThrow && this.dontThrow();const + +  currentTestName = this.currentTestName,isNot = this.isNot,snapshotState = this.snapshotState; + +  if (isNot) { +    throw new Error( +    'Jest: `.not` cannot be used with `.toMatchSnapshot()`.'); + +  } + +  if (!snapshotState) { +    throw new Error('Jest: snapshot state must be initialized.'); +  } + +  const result = snapshotState.match(testName || currentTestName, received);const +  pass = result.pass; + +  if (pass) { +    return { message: '', pass: true }; +  } else {const +    count = result.count,expected = result.expected,actual = result.actual; + +    const expectedString = expected.trim(); +    const actualString = actual.trim(); +    const diffMessage = diff( +    expectedString, +    actualString, +    { +      aAnnotation: 'Snapshot', +      bAnnotation: 'Received', +      expand: snapshotState.expand }); + + + +    const report = +    () => `${RECEIVED_COLOR('Received value')} does not match ` + +    `${EXPECTED_COLOR('stored snapshot ' + count)}.\n\n` + ( +    diffMessage || +    RECEIVED_COLOR('- ' + expectedString) + '\n' + +    EXPECTED_COLOR('+ ' + actualString)); + + +    const message = +    () => matcherHint('.toMatchSnapshot', 'value', '') + '\n\n' + +    report(); + +    // Passing the 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: actualString, +      expected: expectedString, +      message, +      name: 'toMatchSnapshot', +      pass: false, +      report }; + +  } +}; + +const toThrowErrorMatchingSnapshot = function (received, expected) { +  this.dontThrow && this.dontThrow();const +  isNot = this.isNot; + +  if (isNot) { +    throw new Error( +    'Jest: `.not` cannot be used with `.toThrowErrorMatchingSnapshot()`.'); + +  } + +  ensureNoExpected(expected, '.toThrowErrorMatchingSnapshot'); + +  let error; + +  try { +    received(); +  } catch (e) { +    error = e; +  } + +  if (error === undefined) { +    throw new Error( +    matcherHint('.toThrowErrorMatchingSnapshot', '() => {}', '') + '\n\n' + +    `Expected the function to throw an error.\n` + +    `But it didn't throw anything.`); + +  } + +  return toMatchSnapshot.call(this, error.message); +}; + +module.exports = { +  EXTENSION: SNAPSHOT_EXTENSION, +  SnapshotState, +  addSerializer, +  cleanup, +  getSerializers, +  initializeSnapshotState, +  toMatchSnapshot, +  toThrowErrorMatchingSnapshot };
\ No newline at end of file diff --git a/node_modules/jest-snapshot/build/plugins.js b/node_modules/jest-snapshot/build/plugins.js new file mode 100644 index 000000000..620ee099a --- /dev/null +++ b/node_modules/jest-snapshot/build/plugins.js @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + *  + */ +'use strict'; + +const ReactElementPlugin = require('pretty-format/build/plugins/ReactElement'); +const ReactTestComponentPlugin = require('pretty-format/build/plugins/ReactTestComponent'); + +let PLUGINS = [ReactElementPlugin, ReactTestComponentPlugin]; + +// Prepend to list so the last added is the first tested. +exports.addSerializer = plugin => { +  PLUGINS = [plugin].concat(PLUGINS); +}; + +exports.getSerializers = () => PLUGINS;
\ No newline at end of file diff --git a/node_modules/jest-snapshot/build/utils.js b/node_modules/jest-snapshot/build/utils.js new file mode 100644 index 000000000..9c86e4fb4 --- /dev/null +++ b/node_modules/jest-snapshot/build/utils.js @@ -0,0 +1,188 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + *  + */ + +'use strict'; + + + +const chalk = require('chalk'); +const createDirectory = require('jest-util').createDirectory; +const fileExists = require('jest-file-exists'); +const path = require('path'); +const prettyFormat = require('pretty-format'); +const fs = require('fs'); +const naturalCompare = require('natural-compare'); +const getSerializers = require('./plugins').getSerializers; + +const SNAPSHOT_EXTENSION = 'snap'; +const SNAPSHOT_VERSION = '1'; +const SNAPSHOT_VERSION_REGEXP = /^\/\/ Jest Snapshot v(.+),/; +const SNAPSHOT_GUIDE_LINK = 'https://goo.gl/fbAQLP'; +const SNAPSHOT_VERSION_WARNING = chalk.yellow( +`${chalk.bold('Warning')}: Before you upgrade snapshots, ` + +`we recommend that you revert any local changes to tests or other code, ` + +`to ensure that you do not store invalid state.`); + + +const writeSnapshotVersion = () => +`// Jest Snapshot v${SNAPSHOT_VERSION}, ${SNAPSHOT_GUIDE_LINK}`; + +const validateSnapshotVersion = snapshotContents => { +  const versionTest = SNAPSHOT_VERSION_REGEXP.exec(snapshotContents); +  const version = versionTest && versionTest[1]; + +  if (!version) { +    return new Error( +    chalk.red( +    `${chalk.bold('Outdated snapshot')}: No snapshot header found. ` + +    `Jest 19 introduced versioned snapshots to ensure all developers on ` + +    `a project are using the same version of Jest. ` + +    `Please update all snapshots during this upgrade of Jest.\n\n`) + + +    SNAPSHOT_VERSION_WARNING); + +  } + +  if (version < SNAPSHOT_VERSION) { +    return new Error( +    chalk.red( +    `${chalk.red.bold('Outdated snapshot')}: The version of the snapshot ` + +    `file associated with this test is outdated. The snapshot file ` + +    `version ensures that all developers on a project are using ` + +    `the same version of Jest. ` + +    `Please update all snapshots during this upgrade of Jest.\n\n`) + + +    `Expected: v${SNAPSHOT_VERSION}\n` + +    `Received: v${version}\n\n` + +    SNAPSHOT_VERSION_WARNING); + +  } + +  if (version > SNAPSHOT_VERSION) { +    return new Error( +    chalk.red( +    `${chalk.red.bold('Outdated Jest version')}: The version of this ` + +    `snapshot file indicates that this project is meant to be used ` + +    `with a newer version of Jest. ` + +    `The snapshot file version ensures that all developers on a project ` + +    `are using the same version of Jest. ` + +    `Please update your version of Jest and re-run the tests.\n\n`) + + +    `Expected: v${SNAPSHOT_VERSION}\n` + +    `Received: v${version}`); + +  } + +  return null; +}; + +const testNameToKey = (testName, count) => +testName + ' ' + count; + +const keyToTestName = key => { +  if (!/ \d+$/.test(key)) { +    throw new Error('Snapshot keys must end with a number.'); +  } + +  return key.replace(/ \d+$/, ''); +}; + +const getSnapshotPath = testPath => path.join( +path.join(path.dirname(testPath), '__snapshots__'), +path.basename(testPath) + '.' + SNAPSHOT_EXTENSION); + + +const getSnapshotData = (snapshotPath, update) => { +  const data = Object.create(null); +  let snapshotContents = ''; +  let dirty = false; + +  if (fileExists(snapshotPath)) { +    try { +      snapshotContents = fs.readFileSync(snapshotPath, 'utf8'); +      // eslint-disable-next-line no-new-func +      const populate = new Function('exports', snapshotContents); +      populate(data); +    } catch (e) {} +  } + +  const validationResult = validateSnapshotVersion(snapshotContents); +  const isInvalid = snapshotContents && validationResult; + +  if (!update && isInvalid) { +    throw validationResult; +  } + +  if (update && isInvalid) { +    dirty = true; +  } + +  return { data, dirty }; +}; + +// Extra line breaks at the beginning and at the end of the snapshot are useful +// to make the content of the snapshot easier to read +const addExtraLineBreaks = +string => string.includes('\n') ? `\n${string}\n` : string; + +const serialize = data => { +  return addExtraLineBreaks(prettyFormat(data, { +    escapeRegex: true, +    plugins: getSerializers(), +    printFunctionName: false })); + +}; + +const unescape = data => +data.replace(/\\(")/g, '$1'); // unescape double quotes + +const printBacktickString = str => { +  return '`' + str.replace(/`|\\|\${/g, '\\$&') + '`'; +}; + +const ensureDirectoryExists = filePath => { +  try { +    createDirectory(path.join(path.dirname(filePath))); +  } catch (e) {} +}; + +const normalizeNewlines = +string => string.replace(/\r\n|\r/g, '\n'); + +const saveSnapshotFile = ( +snapshotData, +snapshotPath) => +{ +  const snapshots = Object.keys(snapshotData).sort(naturalCompare). +  map(key => +  'exports[' + printBacktickString(key) + '] = ' + +  printBacktickString(normalizeNewlines(snapshotData[key])) + ';'); + + +  ensureDirectoryExists(snapshotPath); +  fs.writeFileSync( +  snapshotPath, +  writeSnapshotVersion() + '\n\n' + snapshots.join('\n\n') + '\n'); + +}; + +module.exports = { +  SNAPSHOT_EXTENSION, +  SNAPSHOT_GUIDE_LINK, +  SNAPSHOT_VERSION, +  SNAPSHOT_VERSION_WARNING, +  ensureDirectoryExists, +  getSnapshotData, +  getSnapshotPath, +  keyToTestName, +  saveSnapshotFile, +  serialize, +  testNameToKey, +  unescape };
\ No newline at end of file diff --git a/node_modules/jest-snapshot/package.json b/node_modules/jest-snapshot/package.json new file mode 100644 index 000000000..0c271a1d1 --- /dev/null +++ b/node_modules/jest-snapshot/package.json @@ -0,0 +1,19 @@ +{ +  "name": "jest-snapshot", +  "version": "19.0.2", +  "repository": { +    "type": "git", +    "url": "https://github.com/facebook/jest.git" +  }, +  "license": "BSD-3-Clause", +  "main": "build/index.js", +  "dependencies": { +    "chalk": "^1.1.3", +    "jest-diff": "^19.0.0", +    "jest-file-exists": "^19.0.0", +    "jest-matcher-utils": "^19.0.0", +    "jest-util": "^19.0.2", +    "natural-compare": "^1.4.0", +    "pretty-format": "^19.0.0" +  } +}  | 
