// Copyright (C) 2021 The Android Open Source Project // // 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 NodeEnvironment = require('jest-environment-node'); const puppeteer = require('puppeteer'); module.exports = class IntegrationtestEnvironment extends NodeEnvironment { constructor(config) { super(config); } async setup() { await super.setup(); const headless = process.env.PERFETTO_UI_TESTS_INTERACTIVE !== '1'; if (headless) { console.log('Starting Perfetto UI tests in headless mode.'); console.log( 'Pass --interactive to run-integrationtests or set ' + 'PERFETTO_UI_TESTS_INTERACTIVE=1 to inspect the behavior ' + 'in a visible Chrome window'); } this.global.__BROWSER__ = await puppeteer.launch({ args: [ '--window-size=1920,1080', '--disable-accelerated-2d-canvas', '--disable-gpu', '--no-sandbox', // Disable sandbox to run in Docker. '--disable-setuid-sandbox', '--font-render-hinting=none', '--enable-benchmarking', // Disable finch and other sources of non // determinism. ], // This is so screenshot in --interactive and headles mode match. The // scrollbars are never part of the screenshot, but without this cmdline // switch, in headless mode we don't get any blank space (as if it was // overflow:hidden) and that changes the layout of the page. ignoreDefaultArgs: ['--hide-scrollbars'], headless: headless, }); } async teardown() { if (this.global.__BROWSER__) { await this.global.__BROWSER__.close(); } await super.teardown(); } runScript(script) { return super.runScript(script); } }