You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							174 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
	
	
							174 lines
						
					
					
						
							4.7 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
Object.defineProperty(exports, '__esModule', { | 
						|
  value: true | 
						|
}); | 
						|
exports.printDiffOrStringified = void 0; | 
						|
 | 
						|
var _jestDiff = _interopRequireWildcard(require('jest-diff')); | 
						|
 | 
						|
var _jestGetType = _interopRequireWildcard(require('jest-get-type')); | 
						|
 | 
						|
var _jestMatcherUtils = require('jest-matcher-utils'); | 
						|
 | 
						|
var _prettyFormat = _interopRequireDefault(require('pretty-format')); | 
						|
 | 
						|
var _utils = require('./utils'); | 
						|
 | 
						|
function _interopRequireDefault(obj) { | 
						|
  return obj && obj.__esModule ? obj : {default: obj}; | 
						|
} | 
						|
 | 
						|
function _interopRequireWildcard(obj) { | 
						|
  if (obj && obj.__esModule) { | 
						|
    return obj; | 
						|
  } else { | 
						|
    var newObj = {}; | 
						|
    if (obj != null) { | 
						|
      for (var key in obj) { | 
						|
        if (Object.prototype.hasOwnProperty.call(obj, key)) { | 
						|
          var desc = | 
						|
            Object.defineProperty && Object.getOwnPropertyDescriptor | 
						|
              ? Object.getOwnPropertyDescriptor(obj, key) | 
						|
              : {}; | 
						|
          if (desc.get || desc.set) { | 
						|
            Object.defineProperty(newObj, key, desc); | 
						|
          } else { | 
						|
            newObj[key] = obj[key]; | 
						|
          } | 
						|
        } | 
						|
      } | 
						|
    } | 
						|
    newObj.default = obj; | 
						|
    return newObj; | 
						|
  } | 
						|
} | 
						|
 | 
						|
/** | 
						|
 * 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 isLineDiffable = received => { | 
						|
  const receivedType = (0, _jestGetType.default)(received); | 
						|
 | 
						|
  if ((0, _jestGetType.isPrimitive)(received)) { | 
						|
    return typeof received === 'string' && received.includes('\n'); | 
						|
  } | 
						|
 | 
						|
  if ( | 
						|
    receivedType === 'date' || | 
						|
    receivedType === 'function' || | 
						|
    receivedType === 'regexp' | 
						|
  ) { | 
						|
    return false; | 
						|
  } | 
						|
 | 
						|
  if (received instanceof Error) { | 
						|
    return false; | 
						|
  } | 
						|
 | 
						|
  if ( | 
						|
    receivedType === 'object' && | 
						|
    typeof received.asymmetricMatch === 'function' | 
						|
  ) { | 
						|
    return false; | 
						|
  } | 
						|
 | 
						|
  return true; | 
						|
}; | 
						|
 | 
						|
const printDiffOrStringified = ( | 
						|
  expectedSerializedTrimmed, | 
						|
  receivedSerializedTrimmed, | 
						|
  received, | 
						|
  expectedLabel, | 
						|
  receivedLabel, | 
						|
  expand | 
						|
) => { | 
						|
  if (typeof received === 'string') { | 
						|
    if ( | 
						|
      expectedSerializedTrimmed.length >= 2 && | 
						|
      expectedSerializedTrimmed.startsWith('"') && | 
						|
      expectedSerializedTrimmed.endsWith('"') && | 
						|
      receivedSerializedTrimmed === | 
						|
        (0, _utils.unescape)((0, _prettyFormat.default)(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 (0, _jestMatcherUtils.printDiffOrStringify)( | 
						|
        expectedSerializedTrimmed.slice(1, -1).replace(/\\\\/g, '\\'), | 
						|
        received, | 
						|
        expectedLabel, | 
						|
        receivedLabel, | 
						|
        expand | 
						|
      ); | 
						|
    } // Display substring highlight even when strings have custom serialization. | 
						|
 | 
						|
    const result = (0, _jestDiff.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 = (0, _jestMatcherUtils.getLabelPrinter)( | 
						|
        expectedLabel, | 
						|
        receivedLabel | 
						|
      ); | 
						|
      return ( | 
						|
        printLabel(expectedLabel) + | 
						|
        (0, _jestMatcherUtils.EXPECTED_COLOR)(result.a) + | 
						|
        '\n' + | 
						|
        printLabel(receivedLabel) + | 
						|
        (0, _jestMatcherUtils.RECEIVED_COLOR)(result.b) | 
						|
      ); | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  if ( | 
						|
    (expectedSerializedTrimmed.includes('\n') || | 
						|
      receivedSerializedTrimmed.includes('\n')) && | 
						|
    isLineDiffable(received) | 
						|
  ) { | 
						|
    return (0, _jestDiff.default)( | 
						|
      expectedSerializedTrimmed, | 
						|
      receivedSerializedTrimmed, | 
						|
      { | 
						|
        aAnnotation: expectedLabel, | 
						|
        bAnnotation: receivedLabel, | 
						|
        expand | 
						|
      } | 
						|
    ); | 
						|
  } | 
						|
 | 
						|
  const printLabel = (0, _jestMatcherUtils.getLabelPrinter)( | 
						|
    expectedLabel, | 
						|
    receivedLabel | 
						|
  ); | 
						|
  return ( | 
						|
    printLabel(expectedLabel) + | 
						|
    (0, _jestMatcherUtils.EXPECTED_COLOR)(expectedSerializedTrimmed) + | 
						|
    '\n' + | 
						|
    printLabel(receivedLabel) + | 
						|
    (0, _jestMatcherUtils.RECEIVED_COLOR)(receivedSerializedTrimmed) | 
						|
  ); | 
						|
}; | 
						|
 | 
						|
exports.printDiffOrStringified = printDiffOrStringified;
 | 
						|
 |