test: fix a race in the oopif test (#3211)

This commit is contained in:
Dmitry Gozman 2020-07-29 14:42:28 -07:00 committed by GitHub
parent 487bc589b0
commit 10225d1983
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View File

@ -303,12 +303,16 @@ describe.skip(!CHROMIUM)('OOPIF', function() {
iframe.style.marginLeft = '42px';
iframe.style.marginTop = '17px';
});
await page.frames()[1].goto(page.frames()[1].url());
expect(await countOOPIFs(browser)).toBe(1);
const handle1 = await page.frames()[1].$('.box:nth-of-type(13)');
expect(await handle1.boundingBox()).toEqual({ x: 100 + 42, y: 50 + 17, width: 50, height: 50 });
await page.evaluate(() => goLocal());
await Promise.all([
page.frames()[1].waitForNavigation(),
page.evaluate(() => goLocal()),
]);
expect(await countOOPIFs(browser)).toBe(0);
const handle2 = await page.frames()[1].$('.box:nth-of-type(13)');
expect(await handle2.boundingBox()).toEqual({ x: 100 + 42, y: 50 + 17, width: 50, height: 50 });
@ -323,6 +327,7 @@ describe.skip(!CHROMIUM)('OOPIF', function() {
iframe.style.marginLeft = '102px';
iframe.style.marginTop = '117px';
});
await page.frames()[1].goto(page.frames()[1].url());
expect(await countOOPIFs(browser)).toBe(1);
const handle1 = await page.frames()[1].$('.box:nth-of-type(13)');

View File

@ -19,6 +19,7 @@ const registerFixtures = require('./fixtures');
const os = require('os');
const path = require('path');
const fs = require('fs');
const debug = require('debug');
const platform = os.platform();
const GoldenUtils = require('../../utils/testrunner/GoldenUtils');
const {installCoverageHooks} = require('./coverage');
@ -158,10 +159,12 @@ class PlaywrightEnvironment extends NodeEnvironment {
if (event.name === 'test_start') {
const fn = event.test.fn;
event.test.fn = async () => {
debug('pw:test')(`start "${testOrSuiteName(event.test)}"`);
try {
return await this.fixturePool.resolveParametersAndRun(fn);
await this.fixturePool.resolveParametersAndRun(fn);
} finally {
await this.fixturePool.teardownScope('test');
debug('pw:test')(`finish "${testOrSuiteName(event.test)}"`);
}
};
}
@ -196,6 +199,7 @@ class Fixture {
let setupFenceReject;
const setupFence = new Promise((f, r) => { setupFenceFulfill = f; setupFenceReject = r; });
const teardownFence = new Promise(f => this._teardownFenceCallback = f);
debug('pw:test:hook')(`setup "${this.name}"`);
this._tearDownComplete = this.fn(params, async value => {
this.value = value;
setupFenceFulfill();
@ -215,8 +219,10 @@ class Fixture {
continue;
await fixture.teardown();
}
if (this._setup)
if (this._setup) {
debug('pw:test:hook')(`teardown "${this.name}"`);
this._teardownFenceCallback();
}
await this._tearDownComplete;
this.pool.instances.delete(this.name);
}
@ -281,3 +287,12 @@ function valueFromEnv(name, defaultValue) {
return defaultValue;
return JSON.parse(process.env[name]);
}
function testOrSuiteName(o) {
if (o.name === 'ROOT_DESCRIBE_BLOCK')
return '';
let name = o.parent ? testOrSuiteName(o.parent) : '';
if (name && o.name)
name += ' ';
return name + o.name;
}