mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			220 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * Copyright 2017 Google Inc. All rights reserved.
 | 
						|
 * Modifications copyright (c) Microsoft Corporation.
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
const Location = require('./Location');
 | 
						|
 | 
						|
const TestExpectation = {
 | 
						|
  Ok: 'ok',
 | 
						|
  Fail: 'fail',
 | 
						|
};
 | 
						|
 | 
						|
function createHook(callback, name) {
 | 
						|
  const location = Location.getCallerLocation();
 | 
						|
  return { name, body: callback, location };
 | 
						|
}
 | 
						|
 | 
						|
class Environment {
 | 
						|
  constructor(name, parentEnvironment = null) {
 | 
						|
    this._parentEnvironment = parentEnvironment;
 | 
						|
    this._name = name;
 | 
						|
    this._hooks = [];
 | 
						|
  }
 | 
						|
 | 
						|
  parentEnvironment() {
 | 
						|
    return this._parentEnvironment;
 | 
						|
  }
 | 
						|
 | 
						|
  name() {
 | 
						|
    return this._name;
 | 
						|
  }
 | 
						|
 | 
						|
  beforeEach(callback) {
 | 
						|
    this._hooks.push(createHook(callback, 'beforeEach'));
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  afterEach(callback) {
 | 
						|
    this._hooks.push(createHook(callback, 'afterEach'));
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  beforeAll(callback) {
 | 
						|
    this._hooks.push(createHook(callback, 'beforeAll'));
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  afterAll(callback) {
 | 
						|
    this._hooks.push(createHook(callback, 'afterAll'));
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  hooks(name) {
 | 
						|
    return this._hooks.filter(hook => !name || hook.name === name);
 | 
						|
  }
 | 
						|
 | 
						|
  isEmpty() {
 | 
						|
    return !this._hooks.length;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class Test {
 | 
						|
  constructor(suite, name, callback, location) {
 | 
						|
    this._suite = suite;
 | 
						|
    this._name = name;
 | 
						|
    this._fullName = (suite.fullName() + ' ' + name).trim();
 | 
						|
    this._skipped = false;
 | 
						|
    this._expectation = TestExpectation.Ok;
 | 
						|
    this._body = callback;
 | 
						|
    this._location = location;
 | 
						|
    this._timeout = 100000000;
 | 
						|
    this._defaultEnvironment = new Environment(this._fullName);
 | 
						|
    this._environments = [this._defaultEnvironment];
 | 
						|
    this.Expectations = { ...TestExpectation };
 | 
						|
  }
 | 
						|
 | 
						|
  suite() {
 | 
						|
    return this._suite;
 | 
						|
  }
 | 
						|
 | 
						|
  name() {
 | 
						|
    return this._name;
 | 
						|
  }
 | 
						|
 | 
						|
  fullName() {
 | 
						|
    return this._fullName;
 | 
						|
  }
 | 
						|
 | 
						|
  location() {
 | 
						|
    return this._location;
 | 
						|
  }
 | 
						|
 | 
						|
  body() {
 | 
						|
    return this._body;
 | 
						|
  }
 | 
						|
 | 
						|
  skipped() {
 | 
						|
    return this._skipped;
 | 
						|
  }
 | 
						|
 | 
						|
  setSkipped(skipped) {
 | 
						|
    this._skipped = skipped;
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  timeout() {
 | 
						|
    return this._timeout;
 | 
						|
  }
 | 
						|
 | 
						|
  setTimeout(timeout) {
 | 
						|
    this._timeout = timeout;
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  expectation() {
 | 
						|
    return this._expectation;
 | 
						|
  }
 | 
						|
 | 
						|
  setExpectation(expectation) {
 | 
						|
    this._expectation = expectation;
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  environment() {
 | 
						|
    return this._defaultEnvironment;
 | 
						|
  }
 | 
						|
 | 
						|
  addEnvironment(environment) {
 | 
						|
    this._environments.push(environment);
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  removeEnvironment(environment) {
 | 
						|
    const index = this._environments.indexOf(environment);
 | 
						|
    if (index === -1)
 | 
						|
      throw new Error(`Environment "${environment.name()}" cannot be removed because it was not added to the suite "${this.fullName()}"`);
 | 
						|
    this._environments.splice(index, 1);
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class Suite {
 | 
						|
  constructor(parentSuite, name, location) {
 | 
						|
    this._parentSuite = parentSuite;
 | 
						|
    this._name = name;
 | 
						|
    this._fullName = (parentSuite ? parentSuite.fullName() + ' ' + name : name).trim();
 | 
						|
    this._location = location;
 | 
						|
    this._skipped = false;
 | 
						|
    this._expectation = TestExpectation.Ok;
 | 
						|
    this._defaultEnvironment = new Environment(this._fullName);
 | 
						|
    this._environments = [this._defaultEnvironment];
 | 
						|
    this.Expectations = { ...TestExpectation };
 | 
						|
  }
 | 
						|
 | 
						|
  parentSuite() {
 | 
						|
    return this._parentSuite;
 | 
						|
  }
 | 
						|
 | 
						|
  name() {
 | 
						|
    return this._name;
 | 
						|
  }
 | 
						|
 | 
						|
  fullName() {
 | 
						|
    return this._fullName;
 | 
						|
  }
 | 
						|
 | 
						|
  skipped() {
 | 
						|
    return this._skipped;
 | 
						|
  }
 | 
						|
 | 
						|
  setSkipped(skipped) {
 | 
						|
    this._skipped = skipped;
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  location() {
 | 
						|
    return this._location;
 | 
						|
  }
 | 
						|
 | 
						|
  expectation() {
 | 
						|
    return this._expectation;
 | 
						|
  }
 | 
						|
 | 
						|
  setExpectation(expectation) {
 | 
						|
    this._expectation = expectation;
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  environment() {
 | 
						|
    return this._defaultEnvironment;
 | 
						|
  }
 | 
						|
 | 
						|
  addEnvironment(environment) {
 | 
						|
    this._environments.push(environment);
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  removeEnvironment(environment) {
 | 
						|
    const index = this._environments.indexOf(environment);
 | 
						|
    if (index === -1)
 | 
						|
      throw new Error(`Environment "${environment.name()}" cannot be removed because it was not added to the suite "${this.fullName()}"`);
 | 
						|
    this._environments.splice(index, 1);
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = { TestExpectation, Environment, Test, Suite };
 |