236 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			236 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true
 | |
| });
 | |
| exports.default = void 0;
 | |
| 
 | |
| var _jestUtil = require('jest-util');
 | |
| 
 | |
| var _ExpectationFailed = _interopRequireDefault(
 | |
|   require('../ExpectationFailed')
 | |
| );
 | |
| 
 | |
| var _expectationResultFactory = _interopRequireDefault(
 | |
|   require('../expectationResultFactory')
 | |
| );
 | |
| 
 | |
| function _interopRequireDefault(obj) {
 | |
|   return obj && obj.__esModule ? obj : {default: obj};
 | |
| }
 | |
| 
 | |
| function _defineProperty(obj, key, value) {
 | |
|   if (key in obj) {
 | |
|     Object.defineProperty(obj, key, {
 | |
|       value: value,
 | |
|       enumerable: true,
 | |
|       configurable: true,
 | |
|       writable: true
 | |
|     });
 | |
|   } else {
 | |
|     obj[key] = value;
 | |
|   }
 | |
|   return obj;
 | |
| }
 | |
| 
 | |
| class Suite {
 | |
|   constructor(attrs) {
 | |
|     _defineProperty(this, 'id', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'parentSuite', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'description', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'throwOnExpectationFailure', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'beforeFns', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'afterFns', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'beforeAllFns', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'afterAllFns', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'disabled', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'children', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'result', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'sharedContext', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'markedPending', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'markedTodo', void 0);
 | |
| 
 | |
|     _defineProperty(this, 'isFocused', void 0);
 | |
| 
 | |
|     this.markedPending = false;
 | |
|     this.markedTodo = false;
 | |
|     this.isFocused = false;
 | |
|     this.id = attrs.id;
 | |
|     this.parentSuite = attrs.parentSuite;
 | |
|     this.description = (0, _jestUtil.convertDescriptorToString)(
 | |
|       attrs.description
 | |
|     );
 | |
|     this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure;
 | |
|     this.beforeFns = [];
 | |
|     this.afterFns = [];
 | |
|     this.beforeAllFns = [];
 | |
|     this.afterAllFns = [];
 | |
|     this.disabled = false;
 | |
|     this.children = [];
 | |
|     this.result = {
 | |
|       id: this.id,
 | |
|       description: this.description,
 | |
|       fullName: this.getFullName(),
 | |
|       failedExpectations: [],
 | |
|       testPath: attrs.getTestPath()
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   getFullName() {
 | |
|     const fullName = [];
 | |
| 
 | |
|     for (
 | |
|       let parentSuite = this;
 | |
|       parentSuite;
 | |
|       parentSuite = parentSuite.parentSuite
 | |
|     ) {
 | |
|       if (parentSuite.parentSuite) {
 | |
|         fullName.unshift(parentSuite.description);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return fullName.join(' ');
 | |
|   }
 | |
| 
 | |
|   disable() {
 | |
|     this.disabled = true;
 | |
|   }
 | |
| 
 | |
|   pend(_message) {
 | |
|     this.markedPending = true;
 | |
|   }
 | |
| 
 | |
|   beforeEach(fn) {
 | |
|     this.beforeFns.unshift(fn);
 | |
|   }
 | |
| 
 | |
|   beforeAll(fn) {
 | |
|     this.beforeAllFns.push(fn);
 | |
|   }
 | |
| 
 | |
|   afterEach(fn) {
 | |
|     this.afterFns.unshift(fn);
 | |
|   }
 | |
| 
 | |
|   afterAll(fn) {
 | |
|     this.afterAllFns.unshift(fn);
 | |
|   }
 | |
| 
 | |
|   addChild(child) {
 | |
|     this.children.push(child);
 | |
|   }
 | |
| 
 | |
|   status() {
 | |
|     if (this.disabled) {
 | |
|       return 'disabled';
 | |
|     }
 | |
| 
 | |
|     if (this.markedPending) {
 | |
|       return 'pending';
 | |
|     }
 | |
| 
 | |
|     if (this.result.failedExpectations.length > 0) {
 | |
|       return 'failed';
 | |
|     } else {
 | |
|       return 'finished';
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   isExecutable() {
 | |
|     return !this.disabled;
 | |
|   }
 | |
| 
 | |
|   canBeReentered() {
 | |
|     return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0;
 | |
|   }
 | |
| 
 | |
|   getResult() {
 | |
|     this.result.status = this.status();
 | |
|     return this.result;
 | |
|   }
 | |
| 
 | |
|   sharedUserContext() {
 | |
|     if (!this.sharedContext) {
 | |
|       this.sharedContext = {};
 | |
|     }
 | |
| 
 | |
|     return this.sharedContext;
 | |
|   }
 | |
| 
 | |
|   clonedSharedUserContext() {
 | |
|     return this.sharedUserContext();
 | |
|   }
 | |
| 
 | |
|   onException(...args) {
 | |
|     if (args[0] instanceof _ExpectationFailed.default) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     if (isAfterAll(this.children)) {
 | |
|       const data = {
 | |
|         matcherName: '',
 | |
|         passed: false,
 | |
|         expected: '',
 | |
|         actual: '',
 | |
|         error: arguments[0]
 | |
|       };
 | |
|       this.result.failedExpectations.push(
 | |
|         (0, _expectationResultFactory.default)(data)
 | |
|       );
 | |
|     } else {
 | |
|       for (let i = 0; i < this.children.length; i++) {
 | |
|         const child = this.children[i];
 | |
|         child.onException.apply(child, args);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   addExpectationResult(...args) {
 | |
|     if (isAfterAll(this.children) && isFailure(args)) {
 | |
|       const data = args[1];
 | |
|       this.result.failedExpectations.push(
 | |
|         (0, _expectationResultFactory.default)(data)
 | |
|       );
 | |
| 
 | |
|       if (this.throwOnExpectationFailure) {
 | |
|         throw new _ExpectationFailed.default();
 | |
|       }
 | |
|     } else {
 | |
|       for (let i = 0; i < this.children.length; i++) {
 | |
|         const child = this.children[i];
 | |
| 
 | |
|         try {
 | |
|           child.addExpectationResult.apply(child, args);
 | |
|         } catch (e) {
 | |
|           // keep going
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   execute(..._args) {}
 | |
| }
 | |
| 
 | |
| exports.default = Suite;
 | |
| 
 | |
| function isAfterAll(children) {
 | |
|   return children && children[0] && children[0].result.status;
 | |
| }
 | |
| 
 | |
| function isFailure(args) {
 | |
|   return !args[0];
 | |
| }
 |