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.
		
		
		
		
			
				
					95 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					95 lines
				
				2.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'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.hasOwnProperty(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;
							 |