Skip to content

Commit

Permalink
chore(ci): re-enable tests on Windows (#5637)
Browse files Browse the repository at this point in the history
* chore: Add Windows to Travis

This commit runs the unit tests on Windows.

There are two tests failing on Windows that we skip.

I spoke to Mathias B and we agreed to
defer debugging this for now in favour of getting tests running on
Windows. But we didn't want to ignore it forever, hence giving the test
a date at which it will start to fail.
  • Loading branch information
jackfranklin committed Apr 17, 2020
1 parent 49ca00f commit c4fe4e4
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 34 deletions.
11 changes: 11 additions & 0 deletions .travis.yml
Expand Up @@ -13,6 +13,17 @@ cache:
- node_modules
jobs:
include:
- os: "windows"
node_js: "10.19.0"
env:
- CHROMIUM=true
before_install:
# populate .local-firefox for launcher tests
- PUPPETEER_PRODUCT=firefox npm install
script:
- ls .local-chromium .local-firefox
- npm run tsc
- npm run unit
- node_js: "10.19.0"
dist: trusty
env:
Expand Down
25 changes: 24 additions & 1 deletion mocha-config/puppeteer-unit-tests.js
@@ -1,8 +1,31 @@
/**
* Copyright 2020 Google Inc. All rights reserved.
*
* 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 os = require('os');
const base = require('./base');

const longerTimeoutRequired = process.env.PUPPETEER_PRODUCT === 'firefox' || os.platform() === 'win32';

const timeout = longerTimeoutRequired ? 25 * 1000 : 10 * 1000;

console.log('Mocha config: Timeout set to', timeout / 1000, 'seconds');

module.exports = {
...base,
file: ['./test/mocha-utils.js'],
spec: 'test/*.spec.js',
timeout: process.env.PUPPETEER_PRODUCT === 'firefox' ? 15 * 1000 : 10 * 1000,
timeout,
};
47 changes: 27 additions & 20 deletions test/headful.spec.js
Expand Up @@ -85,26 +85,33 @@ describeChromeOnly('headful tests', function() {
expect(pages).toEqual(['about:blank']);
await browser.close();
});
it('headless should be able to read cookies written by headful', async() => {
const { server, puppeteer } = getTestState();

const userDataDir = await mkdtempAsync(TMP_FOLDER);
// Write a cookie in headful chrome
const headfulBrowser = await puppeteer.launch(Object.assign({userDataDir}, headfulOptions));
const headfulPage = await headfulBrowser.newPage();
await headfulPage.goto(server.EMPTY_PAGE);
await headfulPage.evaluate(() => document.cookie = 'foo=true; expires=Fri, 31 Dec 9999 23:59:59 GMT');
await headfulBrowser.close();
// Read the cookie from headless chrome
const headlessBrowser = await puppeteer.launch(Object.assign({userDataDir}, headlessOptions));
const headlessPage = await headlessBrowser.newPage();
await headlessPage.goto(server.EMPTY_PAGE);
const cookie = await headlessPage.evaluate(() => document.cookie);
await headlessBrowser.close();
// This might throw. See https://github.com/puppeteer/puppeteer/issues/2778
await rmAsync(userDataDir).catch(e => {});
expect(cookie).toBe('foo=true');
});
itFailsWindowsUntilDate(
/* We have deferred fixing this test on Windows in favour of
* getting all other Windows tests running on CI. Putting this
* date in to force us to come back and debug properly in the
* future.
*/
new Date('2020-06-01'),
'headless should be able to read cookies written by headful', async() => {
const { server, puppeteer } = getTestState();

const userDataDir = await mkdtempAsync(TMP_FOLDER);
// Write a cookie in headful chrome
const headfulBrowser = await puppeteer.launch(Object.assign({userDataDir}, headfulOptions));
const headfulPage = await headfulBrowser.newPage();
await headfulPage.goto(server.EMPTY_PAGE);
await headfulPage.evaluate(() => document.cookie = 'foo=true; expires=Fri, 31 Dec 9999 23:59:59 GMT');
await headfulBrowser.close();
// Read the cookie from headless chrome
const headlessBrowser = await puppeteer.launch(Object.assign({userDataDir}, headlessOptions));
const headlessPage = await headlessBrowser.newPage();
await headlessPage.goto(server.EMPTY_PAGE);
const cookie = await headlessPage.evaluate(() => document.cookie);
await headlessBrowser.close();
// This might throw. See https://github.com/puppeteer/puppeteer/issues/2778
await rmAsync(userDataDir).catch(e => {});
expect(cookie).toBe('foo=true');
});
// TODO: Support OOOPIF. @see https://github.com/puppeteer/puppeteer/issues/2548
xit('OOPIF: should report google.com frame', async() => {
const { server } = getTestState();
Expand Down
30 changes: 19 additions & 11 deletions test/launcher.spec.js
Expand Up @@ -353,6 +353,7 @@ describe('Launcher specs', function() {
await browser.close();
});
});

describe('Puppeteer.launch', function() {
let productName;

Expand All @@ -367,21 +368,28 @@ describe('Launcher specs', function() {
puppeteer._productName = productName;
});

it('should be able to launch different products', async() => {
it('should be able to launch Chrome', async() => {
const {puppeteer} = getTestState();
const browser = await puppeteer.launch({product: 'chrome'});
const userAgent = await browser.userAgent();
await browser.close();
expect(userAgent).toContain('Chrome');
});

const products = ['firefox', 'chrome'];
for (const product of products) {
const browser = await puppeteer.launch({product});
const userAgent = await browser.userAgent();
await browser.close();
if (product === 'chrome')
expect(userAgent).toContain('Chrome');
else
expect(userAgent).toContain('Firefox');
}
/* We think there's a bug in the FF Windows launcher, or some
* combo of that plus it running on CI, but we're deferring fixing
* this so we can get Windows CI stable and then dig into this
* properly with help from the Mozilla folks.
*/
itFailsWindowsUntilDate(new Date('2020-06-01'), 'should be able to launch Firefox', async() => {
const {puppeteer} = getTestState();
const browser = await puppeteer.launch({product: 'firefox'});
const userAgent = await browser.userAgent();
await browser.close();
expect(userAgent).toContain('Firefox');
});
});

describe('Puppeteer.connect', function() {
it('should be able to connect multiple times to the same browser', async() => {
const { puppeteer, defaultBrowserOptions} = getTestState();
Expand Down
10 changes: 10 additions & 0 deletions test/mocha-utils.js
Expand Up @@ -17,6 +17,7 @@
const {TestServer} = require('../utils/testserver/index');
const path = require('path');
const fs = require('fs');
const os = require('os');
const puppeteer = require('../');
const utils = require('./utils');
const assertCoverage = require('./coverage-utils');
Expand Down Expand Up @@ -92,6 +93,15 @@ global.itFailsFirefox = (...args) => {
return it(...args);
};

global.itFailsWindowsUntilDate = (date, ...args) => {
if (os.platform() === 'win32' && Date.now() < date) {
// we are within the deferred time so skip the test
return xit(...args);
}

return it(...args);
};

global.describeFailsFirefox = (...args) => {
if (isFirefox)
return xdescribe(...args);
Expand Down
6 changes: 4 additions & 2 deletions test/network.spec.js
Expand Up @@ -189,15 +189,17 @@ describe('network', function() {
const { page, server } = getTestState();

const response = await page.goto(server.PREFIX + '/simple.json');
expect(await response.text()).toBe('{"foo": "bar"}\n');
const responseText = (await response.text()).trimEnd();
expect(responseText).toBe('{"foo": "bar"}');
});
it('should return uncompressed text', async() => {
const { page, server } = getTestState();

server.enableGzip('/simple.json');
const response = await page.goto(server.PREFIX + '/simple.json');
expect(response.headers()['content-encoding']).toBe('gzip');
expect(await response.text()).toBe('{"foo": "bar"}\n');
const responseText = (await response.text()).trimEnd();
expect(responseText).toBe('{"foo": "bar"}');
});
it('should throw when requesting body of redirected response', async() => {
const { page, server } = getTestState();
Expand Down

0 comments on commit c4fe4e4

Please sign in to comment.