Created
August 21, 2017 08:20
-
-
Save jakubzitny/eed6ed0b6105f2ef32e4c9541a5095e4 to your computer and use it in GitHub Desktop.
built index of jest-diff v20.0.3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict';var _require$plugins = | |
require('pretty-format').plugins;const ReactElement = _require$plugins.ReactElement,ReactTestComponent = _require$plugins.ReactTestComponent,AsymmetricMatcher = _require$plugins.AsymmetricMatcher,HTMLElement = _require$plugins.HTMLElement,Immutable = _require$plugins.Immutable; /** | |
* Copyright (c) 2014, 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. | |
* | |
* | |
*/const chalk = require('chalk');var _require = require('jest-matcher-utils');const getType = _require.getType;const prettyFormat = require('pretty-format');const diffStrings = require('./diffStrings');var _require2 = require('./constants');const NO_DIFF_MESSAGE = _require2.NO_DIFF_MESSAGE,SIMILAR_MESSAGE = _require2.SIMILAR_MESSAGE; | |
const PLUGINS = [ | |
ReactTestComponent, | |
ReactElement, | |
AsymmetricMatcher, | |
HTMLElement]. | |
concat(Immutable); | |
const FORMAT_OPTIONS = { | |
plugins: PLUGINS }; | |
const FALLBACK_FORMAT_OPTIONS = { | |
callToJSON: false, | |
maxDepth: 10, | |
plugins: PLUGINS }; | |
// 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, b, options) { | |
if (a === b) { | |
return NO_DIFF_MESSAGE; | |
} | |
const aType = getType(a); | |
let expectedType = aType; | |
let omitDifference = false; | |
if (aType === 'object' && typeof a.asymmetricMatch === 'function') { | |
if (a.$$typeof !== Symbol.for('jest.asymmetricMatcher')) { | |
// Do not know expected type of user-defined asymmetric matcher. | |
return null; | |
} | |
if (typeof a.getExpectedType !== 'function') { | |
// For example, expect.anything() matches either null or undefined | |
return null; | |
} | |
expectedType = a.getExpectedType(); | |
// Primitive types boolean and number omit difference below. | |
// For example, omit difference for expect.stringMatching(regexp) | |
omitDifference = expectedType === 'string'; | |
} | |
if (expectedType !== getType(b)) { | |
return ( | |
' Comparing two different types of values.' + | |
` Expected ${chalk.green(expectedType)} but ` + | |
`received ${chalk.red(getType(b))}.`); | |
} | |
if (omitDifference) { | |
return null; | |
} | |
switch (aType) { | |
case 'string': | |
const multiline = a.match(/[\r\n]/) !== -1 && b.indexOf('\n') !== -1; | |
if (multiline) { | |
return diffStrings(String(a), String(b), options); | |
} | |
return null; | |
case 'number': | |
case 'boolean': | |
return null; | |
case 'map': | |
return compareObjects(sortMap(a), sortMap(b), options); | |
case 'set': | |
return compareObjects(sortSet(a), sortSet(b), options); | |
default: | |
return compareObjects(a, b, options);} | |
} | |
function sortMap(map) { | |
return new Map(Array.from(map.entries()).sort()); | |
} | |
function sortSet(set) { | |
return new Set(Array.from(set.values()).sort()); | |
} | |
function compareObjects(a, b, options) { | |
let diffMessage; | |
let hasThrown = false; | |
try { | |
diffMessage = diffStrings( | |
prettyFormat(a, FORMAT_OPTIONS), | |
prettyFormat(b, FORMAT_OPTIONS), | |
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 = diffStrings( | |
prettyFormat(a, FALLBACK_FORMAT_OPTIONS), | |
prettyFormat(b, FALLBACK_FORMAT_OPTIONS), | |
options); | |
if (diffMessage !== NO_DIFF_MESSAGE && !hasThrown) { | |
diffMessage = SIMILAR_MESSAGE + '\n\n' + diffMessage; | |
} | |
} | |
return diffMessage; | |
} | |
module.exports = diff; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment