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.
		
		
		
		
			
				
					118 lines
				
				3.5 KiB
			
		
		
			
		
	
	
					118 lines
				
				3.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, '__esModule', {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.buildSnapshotResolver = exports.isSnapshotPath = exports.DOT_EXTENSION = exports.EXTENSION = void 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _path = _interopRequireDefault(require('path'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _chalk = _interopRequireDefault(require('chalk'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopRequireDefault(obj) {
							 | 
						||
| 
								 | 
							
								  return obj && obj.__esModule ? obj : {default: obj};
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 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 EXTENSION = 'snap';
							 | 
						||
| 
								 | 
							
								exports.EXTENSION = EXTENSION;
							 | 
						||
| 
								 | 
							
								const DOT_EXTENSION = '.' + EXTENSION;
							 | 
						||
| 
								 | 
							
								exports.DOT_EXTENSION = DOT_EXTENSION;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const isSnapshotPath = path => path.endsWith(DOT_EXTENSION);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.isSnapshotPath = isSnapshotPath;
							 | 
						||
| 
								 | 
							
								const cache = new Map();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const buildSnapshotResolver = config => {
							 | 
						||
| 
								 | 
							
								  const key = config.rootDir;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (!cache.has(key)) {
							 | 
						||
| 
								 | 
							
								    cache.set(key, createSnapshotResolver(config.snapshotResolver));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return cache.get(key);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.buildSnapshotResolver = buildSnapshotResolver;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function createSnapshotResolver(snapshotResolverPath) {
							 | 
						||
| 
								 | 
							
								  return typeof snapshotResolverPath === 'string'
							 | 
						||
| 
								 | 
							
								    ? createCustomSnapshotResolver(snapshotResolverPath)
							 | 
						||
| 
								 | 
							
								    : createDefaultSnapshotResolver();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function createDefaultSnapshotResolver() {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    resolveSnapshotPath: testPath =>
							 | 
						||
| 
								 | 
							
								      _path.default.join(
							 | 
						||
| 
								 | 
							
								        _path.default.join(_path.default.dirname(testPath), '__snapshots__'),
							 | 
						||
| 
								 | 
							
								        _path.default.basename(testPath) + DOT_EXTENSION
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    resolveTestPath: snapshotPath =>
							 | 
						||
| 
								 | 
							
								      _path.default.resolve(
							 | 
						||
| 
								 | 
							
								        _path.default.dirname(snapshotPath),
							 | 
						||
| 
								 | 
							
								        '..',
							 | 
						||
| 
								 | 
							
								        _path.default.basename(snapshotPath, DOT_EXTENSION)
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    testPathForConsistencyCheck: _path.default.posix.join(
							 | 
						||
| 
								 | 
							
								      'consistency_check',
							 | 
						||
| 
								 | 
							
								      '__tests__',
							 | 
						||
| 
								 | 
							
								      'example.test.js'
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function createCustomSnapshotResolver(snapshotResolverPath) {
							 | 
						||
| 
								 | 
							
								  const custom = require(snapshotResolverPath);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const keys = [
							 | 
						||
| 
								 | 
							
								    ['resolveSnapshotPath', 'function'],
							 | 
						||
| 
								 | 
							
								    ['resolveTestPath', 'function'],
							 | 
						||
| 
								 | 
							
								    ['testPathForConsistencyCheck', 'string']
							 | 
						||
| 
								 | 
							
								  ];
							 | 
						||
| 
								 | 
							
								  keys.forEach(([propName, requiredType]) => {
							 | 
						||
| 
								 | 
							
								    if (typeof custom[propName] !== requiredType) {
							 | 
						||
| 
								 | 
							
								      throw new TypeError(mustImplement(propName, requiredType));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  const customResolver = {
							 | 
						||
| 
								 | 
							
								    resolveSnapshotPath: testPath =>
							 | 
						||
| 
								 | 
							
								      custom.resolveSnapshotPath(testPath, DOT_EXTENSION),
							 | 
						||
| 
								 | 
							
								    resolveTestPath: snapshotPath =>
							 | 
						||
| 
								 | 
							
								      custom.resolveTestPath(snapshotPath, DOT_EXTENSION),
							 | 
						||
| 
								 | 
							
								    testPathForConsistencyCheck: custom.testPathForConsistencyCheck
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  verifyConsistentTransformations(customResolver);
							 | 
						||
| 
								 | 
							
								  return customResolver;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function mustImplement(propName, requiredType) {
							 | 
						||
| 
								 | 
							
								  return (
							 | 
						||
| 
								 | 
							
								    _chalk.default.bold(
							 | 
						||
| 
								 | 
							
								      `Custom snapshot resolver must implement a \`${propName}\` as a ${requiredType}.`
							 | 
						||
| 
								 | 
							
								    ) +
							 | 
						||
| 
								 | 
							
								    '\nDocumentation: https://facebook.github.io/jest/docs/en/configuration.html#snapshotResolver'
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function verifyConsistentTransformations(custom) {
							 | 
						||
| 
								 | 
							
								  const resolvedSnapshotPath = custom.resolveSnapshotPath(
							 | 
						||
| 
								 | 
							
								    custom.testPathForConsistencyCheck
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								  const resolvedTestPath = custom.resolveTestPath(resolvedSnapshotPath);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (resolvedTestPath !== custom.testPathForConsistencyCheck) {
							 | 
						||
| 
								 | 
							
								    throw new Error(
							 | 
						||
| 
								 | 
							
								      _chalk.default.bold(
							 | 
						||
| 
								 | 
							
								        `Custom snapshot resolver functions must transform paths consistently, i.e. expects resolveTestPath(resolveSnapshotPath('${custom.testPathForConsistencyCheck}')) === ${resolvedTestPath}`
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |