95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, '__esModule', { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.setMatchers = exports.getMatchers = exports.setState = exports.getState = exports.INTERNAL_MATCHER_FLAG = void 0; | ||
|  | 
 | ||
|  | var _asymmetricMatchers = require('./asymmetricMatchers'); | ||
|  | 
 | ||
|  | var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; | ||
|  | // Global matchers object holds the list of available matchers and
 | ||
|  | // the state, that can hold matcher specific values that change over time.
 | ||
|  | const JEST_MATCHERS_OBJECT = Symbol.for('$$jest-matchers-object'); // Notes a built-in/internal Jest matcher.
 | ||
|  | // Jest may override the stack trace of Errors thrown by internal matchers.
 | ||
|  | 
 | ||
|  | const INTERNAL_MATCHER_FLAG = Symbol.for('$$jest-internal-matcher'); | ||
|  | exports.INTERNAL_MATCHER_FLAG = INTERNAL_MATCHER_FLAG; | ||
|  | 
 | ||
|  | if (!global[JEST_MATCHERS_OBJECT]) { | ||
|  |   Object.defineProperty(global, JEST_MATCHERS_OBJECT, { | ||
|  |     value: { | ||
|  |       matchers: Object.create(null), | ||
|  |       state: { | ||
|  |         assertionCalls: 0, | ||
|  |         expectedAssertionsNumber: null, | ||
|  |         isExpectingAssertions: false, | ||
|  |         suppressedErrors: [] // errors that are not thrown immediately.
 | ||
|  |       } | ||
|  |     } | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | const getState = () => global[JEST_MATCHERS_OBJECT].state; | ||
|  | 
 | ||
|  | exports.getState = getState; | ||
|  | 
 | ||
|  | const setState = state => { | ||
|  |   Object.assign(global[JEST_MATCHERS_OBJECT].state, state); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.setState = setState; | ||
|  | 
 | ||
|  | const getMatchers = () => global[JEST_MATCHERS_OBJECT].matchers; | ||
|  | 
 | ||
|  | exports.getMatchers = getMatchers; | ||
|  | 
 | ||
|  | const setMatchers = (matchers, isInternal, expect) => { | ||
|  |   Object.keys(matchers).forEach(key => { | ||
|  |     const matcher = matchers[key]; | ||
|  |     Object.defineProperty(matcher, INTERNAL_MATCHER_FLAG, { | ||
|  |       value: isInternal | ||
|  |     }); | ||
|  | 
 | ||
|  |     if (!isInternal) { | ||
|  |       // expect is defined
 | ||
|  |       class CustomMatcher extends _asymmetricMatchers.AsymmetricMatcher { | ||
|  |         constructor(inverse = false, ...sample) { | ||
|  |           super(sample); | ||
|  |           this.inverse = inverse; | ||
|  |         } | ||
|  | 
 | ||
|  |         asymmetricMatch(other) { | ||
|  |           const _ref = matcher(other, ...this.sample), | ||
|  |             pass = _ref.pass; | ||
|  | 
 | ||
|  |           return this.inverse ? !pass : pass; | ||
|  |         } | ||
|  | 
 | ||
|  |         toString() { | ||
|  |           return `${this.inverse ? 'not.' : ''}${key}`; | ||
|  |         } | ||
|  | 
 | ||
|  |         getExpectedType() { | ||
|  |           return 'any'; | ||
|  |         } | ||
|  | 
 | ||
|  |         toAsymmetricMatcher() { | ||
|  |           return `${this.toString()}<${this.sample.join(', ')}>`; | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       expect[key] = (...sample) => new CustomMatcher(false, ...sample); | ||
|  | 
 | ||
|  |       if (!expect.not) { | ||
|  |         expect.not = {}; | ||
|  |       } | ||
|  | 
 | ||
|  |       expect.not[key] = (...sample) => new CustomMatcher(true, ...sample); | ||
|  |     } | ||
|  |   }); | ||
|  |   Object.assign(global[JEST_MATCHERS_OBJECT].matchers, matchers); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.setMatchers = setMatchers; |