From d445007d53c0dd36e51998f31600dfbb929c59be Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Mon, 30 Jan 2017 21:11:02 +0100 Subject: [PATCH] build: simplify karma configuration (#2823) --- test/browser-providers.js | 65 +++++++ test/browser-providers.ts | 357 -------------------------------------- test/karma.conf.js | 131 +++++++++++--- test/karma.config.ts | 118 ------------- test/remote_browsers.json | 248 ++++++++++++++++++++++++++ 5 files changed, 419 insertions(+), 500 deletions(-) create mode 100644 test/browser-providers.js delete mode 100644 test/browser-providers.ts delete mode 100644 test/karma.config.ts create mode 100644 test/remote_browsers.json diff --git a/test/browser-providers.js b/test/browser-providers.js new file mode 100644 index 00000000000..f8e447fc682 --- /dev/null +++ b/test/browser-providers.js @@ -0,0 +1,65 @@ +'use strict'; + +/* + * Browser Configuration for the different jobs in the CI. + * Target can be either: BS (Browserstack) | SL (Saucelabs) | null (To not run at all) + */ +const browserConfig = { + 'Chrome': { unitTest: {target: 'SL', required: true }}, + 'Firefox': { unitTest: {target: 'SL', required: true }}, + 'ChromeBeta': { unitTest: {target: 'SL', required: false }}, + 'FirefoxBeta': { unitTest: {target: null, required: false }}, + 'ChromeDev': { unitTest: {target: null, required: true }}, + 'FirefoxDev': { unitTest: {target: null, required: true }}, + 'IE9': { unitTest: {target: null, required: false }}, + 'IE10': { unitTest: {target: null, required: true }}, + 'IE11': { unitTest: {target: 'SL', required: true }}, + 'Edge': { unitTest: {target: 'SL', required: true }}, + 'Android4.1': { unitTest: {target: null, required: false }}, + 'Android4.2': { unitTest: {target: null, required: false }}, + 'Android4.3': { unitTest: {target: null, required: false }}, + 'Android4.4': { unitTest: {target: 'SL', required: false }}, + 'Android5': { unitTest: {target: 'SL', required: false }}, + 'Safari7': { unitTest: {target: null, required: false }}, + 'Safari8': { unitTest: {target: 'BS', required: false }}, + 'Safari9': { unitTest: {target: 'BS', required: false }}, + 'iOS7': { unitTest: {target: null, required: false }}, + 'iOS8': { unitTest: {target: null, required: false }}, + 'iOS9': { unitTest: {target: 'BS', required: true }}, + 'WindowsPhone': { unitTest: {target: 'BS', required: false }} +}; + +/** Exports all available remote browsers. */ +exports.customLaunchers = require('./remote_browsers.json'); + +/** Exports a map of configured browsers, which should run on the CI. */ +exports.platformMap = { + 'saucelabs': { + required: buildConfiguration('unitTest', 'SL', true), + optional: buildConfiguration('unitTest', 'SL', false) + }, + 'browserstack': { + required: buildConfiguration('unitTest', 'BS', true), + optional: buildConfiguration('unitTest', 'BS', false) + }, +}; + +/** Build a list of configuration (custom launcher names). */ +function buildConfiguration(type, target, required) { + return Object.keys(browserConfig) + .map(item => [item, browserConfig[item][type]]) + .filter(([, conf]) => conf.required === required && conf.target === target) + .map(([item]) => `${target}_${item.toUpperCase()}`); +} + +/** Decode the token for Travis to use. */ +function decodeToken(token) { + return (token || '').split('').reverse().join(''); +} + + +/** Ensures that the Travis access keys work properly. */ +if (process.env.TRAVIS) { + process.env.SAUCE_ACCESS_KEY = decodeToken(process.env.SAUCE_ACCESS_KEY); + process.env.BROWSER_STACK_ACCESS_KEY = decodeToken(process.env.BROWSER_STACK_ACCESS_KEY); +} \ No newline at end of file diff --git a/test/browser-providers.ts b/test/browser-providers.ts deleted file mode 100644 index 04820f7f652..00000000000 --- a/test/browser-providers.ts +++ /dev/null @@ -1,357 +0,0 @@ -type ContextConfigurationInfo = { target: string, required: boolean }; -export interface ConfigurationInfo { - unitTest: ContextConfigurationInfo; - e2e: ContextConfigurationInfo; -}; - -export interface BrowserLauncherInfo { - base: string; - flags?: string[]; - version?: string; - platform?: string; - device?: string; - browser?: string; - browser_version?: string; - os?: string; - os_version?: string; -}; - -export type AliasMap = { [name: string]: string[] }; - - -// Unique place to configure the browsers which are used in the different CI jobs in Sauce Labs (SL) -// and BrowserStack (BS). -// If the target is set to null, then the browser is not run anywhere during CI. -// If a category becomes empty (e.g. BS and required), then the corresponding job must be commented -// out in Travis configuration. -const configuration: { [name: string]: ConfigurationInfo } = { - 'Chrome': { unitTest: {target: 'SL', required: true}, e2e: {target: null, required: true}}, - 'Firefox': { unitTest: {target: 'SL', required: true}, e2e: {target: null, required: true}}, - 'ChromeBeta': { unitTest: {target: 'SL', required: false}, e2e: {target: null, required: true}}, - 'FirefoxBeta': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'ChromeDev': { unitTest: {target: null, required: true}, e2e: {target: null, required: true}}, - 'FirefoxDev': { unitTest: {target: null, required: true}, e2e: {target: null, required: true}}, - 'IE9': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'IE10': { unitTest: {target: null, required: true}, e2e: {target: null, required: true}}, - 'IE11': { unitTest: {target: 'SL', required: true}, e2e: {target: null, required: true}}, - 'Edge': { unitTest: {target: 'SL', required: true}, e2e: {target: null, required: true}}, - 'Android4.1': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'Android4.2': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'Android4.3': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'Android4.4': { unitTest: {target: 'SL', required: false}, e2e: {target: null, required: true}}, - 'Android5': { unitTest: {target: 'SL', required: false}, e2e: {target: null, required: true}}, - 'Safari7': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'Safari8': { unitTest: {target: 'BS', required: false}, e2e: {target: null, required: true}}, - 'Safari9': { unitTest: {target: 'BS', required: false}, e2e: {target: null, required: true}}, - 'iOS7': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'iOS8': { unitTest: {target: null, required: false}, e2e: {target: null, required: true}}, - 'iOS9': { unitTest: {target: 'BS', required: true}, e2e: {target: null, required: true}}, - 'WindowsPhone': { unitTest: {target: 'BS', required: false}, e2e: {target: null, required: true}} -}; - -export const customLaunchers: { [name: string]: BrowserLauncherInfo } = { - 'ChromeNoSandbox': { - base: 'Chrome', - flags: ['--no-sandbox'] - }, - // Chrome set to 1024x768 resolution for *local testing only*. - // On CI, both SauceLabs and Browserstack already default all browser window sizes to 1024x768. - 'Chrome_1024x768': { - base : 'Chrome', - flags: ['--window-size=1024,768'] - }, - 'SL_CHROME': { - base: 'SauceLabs', - browserName: 'chrome', - version: 'latest' - }, - 'SL_CHROMEBETA': { - base: 'SauceLabs', - browserName: 'chrome', - version: 'beta' - }, - 'SL_CHROMEDEV': { - base: 'SauceLabs', - browserName: 'chrome', - version: 'dev' - }, - 'SL_FIREFOX': { - base: 'SauceLabs', - browserName: 'firefox', - version: 'latest' - }, - 'SL_FIREFOXBETA': { - base: 'SauceLabs', - browserName: 'firefox', - version: 'beta' - }, - 'SL_FIREFOXDEV': { - base: 'SauceLabs', - browserName: 'firefox', - version: 'dev' - }, - 'SL_SAFARI7': { - base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.9', - version: '7' - }, - 'SL_SAFARI8': { - base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.10', - version: '8' - }, - 'SL_SAFARI9': { - base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.11', - version: '9.0' - }, - 'SL_IOS7': { - base: 'SauceLabs', - browserName: 'iphone', - platform: 'OS X 10.10', - version: '7.1' - }, - 'SL_IOS8': { - base: 'SauceLabs', - browserName: 'iphone', - platform: 'OS X 10.10', - version: '8.4' - }, - 'SL_IOS9': { - base: 'SauceLabs', - browserName: 'iphone', - platform: 'OS X 10.10', - version: '9.1' - }, - 'SL_IE9': { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 2008', - version: '9' - }, - 'SL_IE10': { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 2012', - version: '10' - }, - 'SL_IE11': { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 8.1', - version: '11' - }, - 'SL_EDGE': { - base: 'SauceLabs', - browserName: 'microsoftedge', - platform: 'Windows 10', - version: '14' - }, - 'SL_ANDROID4.1': { - base: 'SauceLabs', - browserName: 'android', - platform: 'Linux', - version: '4.1' - }, - 'SL_ANDROID4.2': { - base: 'SauceLabs', - browserName: 'android', - platform: 'Linux', - version: '4.2' - }, - 'SL_ANDROID4.3': { - base: 'SauceLabs', - browserName: 'android', - platform: 'Linux', - version: '4.3' - }, - 'SL_ANDROID4.4': { - base: 'SauceLabs', - browserName: 'android', - platform: 'Linux', - version: '4.4' - }, - 'SL_ANDROID5': { - base: 'SauceLabs', - browserName: 'android', - platform: 'Linux', - version: '5.1' - }, - - 'BS_CHROME': { - base: 'BrowserStack', - browser: 'chrome', - os: 'OS X', - os_version: 'Yosemite' - }, - 'BS_FIREFOX': { - base: 'BrowserStack', - browser: 'firefox', - os: 'Windows', - os_version: '10' - }, - 'BS_SAFARI7': { - base: 'BrowserStack', - browser: 'safari', - os: 'OS X', - os_version: 'Mavericks' - }, - 'BS_SAFARI8': { - base: 'BrowserStack', - browser: 'safari', - os: 'OS X', - os_version: 'Yosemite' - }, - 'BS_SAFARI9': { - base: 'BrowserStack', - browser: 'safari', - os: 'OS X', - os_version: 'El Capitan' - }, - 'BS_IOS7': { - base: 'BrowserStack', - device: 'iPhone 5S', - os: 'ios', - os_version: '7.0', - resolution: '1024x768' - }, - 'BS_IOS8': { - base: 'BrowserStack', - device: 'iPhone 6', - os: 'ios', - os_version: '8.3', - resolution: '1024x768' - }, - 'BS_IOS9': { - base: 'BrowserStack', - device: 'iPhone 6S', - os: 'ios', - os_version: '9.0', - resolution: '1024x768' - }, - 'BS_IE9': { - base: 'BrowserStack', - browser: 'ie', - browser_version: '9.0', - os: 'Windows', - os_version: '7' - }, - 'BS_IE10': { - base: 'BrowserStack', - browser: 'ie', - browser_version: '10.0', - os: 'Windows', - os_version: '8' - }, - 'BS_IE11': { - base: 'BrowserStack', - browser: 'ie', - browser_version: '11.0', - os: 'Windows', - os_version: '10' - }, - 'BS_EDGE': { - base: 'BrowserStack', - browser: 'edge', - os: 'Windows', - os_version: '10' - }, - 'BS_WINDOWSPHONE' : { - base: 'BrowserStack', - device: 'Nokia Lumia 930', - os: 'winphone', - os_version: '8.1' - }, - 'BS_ANDROID5': { - base: 'BrowserStack', - device: 'Google Nexus 5', - os: 'android', - os_version: '5.0' - }, - 'BS_ANDROID4.4': { - base: 'BrowserStack', - device: 'HTC One M8', - os: 'android', - os_version: '4.4' - }, - 'BS_ANDROID4.3': { - base: 'BrowserStack', - device: 'Samsung Galaxy S4', - os: 'android', - os_version: '4.3' - }, - 'BS_ANDROID4.2': { - base: 'BrowserStack', - device: 'Google Nexus 4', - os: 'android', - os_version: '4.2' - }, - 'BS_ANDROID4.1': { - base: 'BrowserStack', - device: 'Google Nexus 7', - os: 'android', - os_version: '4.1' - } -}; - -const sauceAliases: AliasMap = { - 'ALL': Object.keys(customLaunchers).filter(function(item) { - return customLaunchers[item].base == 'SauceLabs'; - }), - 'DESKTOP': ['SL_CHROME', 'SL_FIREFOX', 'SL_IE9', 'SL_IE10', 'SL_IE11', 'SL_EDGE', 'SL_SAFARI7', - 'SL_SAFARI8', 'SL_SAFARI9'], - 'MOBILE': ['SL_ANDROID4.1', 'SL_ANDROID4.2', 'SL_ANDROID4.3', 'SL_ANDROID4.4', 'SL_ANDROID5', - 'SL_IOS7', 'SL_IOS8', 'SL_IOS9'], - 'ANDROID': ['SL_ANDROID4.1', 'SL_ANDROID4.2', 'SL_ANDROID4.3', 'SL_ANDROID4.4', 'SL_ANDROID5'], - 'IE': ['SL_IE9', 'SL_IE10', 'SL_IE11'], - 'IOS': ['SL_IOS7', 'SL_IOS8', 'SL_IOS9'], - 'SAFARI': ['SL_SAFARI7', 'SL_SAFARI8', 'SL_SAFARI9'], - 'BETA': ['SL_CHROMEBETA', 'SL_FIREFOXBETA'], - 'DEV': ['SL_CHROMEDEV', 'SL_FIREFOXDEV'], - 'REQUIRED': buildConfiguration('unitTest', 'SL', true), - 'OPTIONAL': buildConfiguration('unitTest', 'SL', false) -}; - -const browserstackAliases: AliasMap = { - 'ALL': Object.keys(customLaunchers).filter(function(item) { - return customLaunchers[item].base == 'BrowserStack'; - }), - 'DESKTOP': ['BS_CHROME', 'BS_FIREFOX', 'BS_IE9', 'BS_IE10', 'BS_IE11', 'BS_EDGE', 'BS_SAFARI7', - 'BS_SAFARI8', 'BS_SAFARI9'], - 'MOBILE': ['BS_ANDROID4.3', 'BS_ANDROID4.4', 'BS_IOS7', 'BS_IOS8', 'BS_IOS9', 'BS_WINDOWSPHONE'], - 'ANDROID': ['BS_ANDROID4.3', 'BS_ANDROID4.4'], - 'IE': ['BS_IE9', 'BS_IE10', 'BS_IE11'], - 'IOS': ['BS_IOS7', 'BS_IOS8', 'BS_IOS9'], - 'SAFARI': ['BS_SAFARI7', 'BS_SAFARI8', 'BS_SAFARI9'], - 'REQUIRED': buildConfiguration('unitTest', 'BS', true), - 'OPTIONAL': buildConfiguration('unitTest', 'BS', false) -}; - -export const platformMap: { [name: string]: AliasMap } = { - 'saucelabs': sauceAliases, - 'browserstack': browserstackAliases, -}; - - -/** Decode the token for Travis to use. */ -function decode(str: string): string { - return (str || '').split('').reverse().join(''); -} - - -/** Setup the access keys */ -if (process.env.TRAVIS) { - process.env.SAUCE_ACCESS_KEY = decode(process.env.SAUCE_ACCESS_KEY); - process.env.BROWSER_STACK_ACCESS_KEY = decode(process.env.BROWSER_STACK_ACCESS_KEY); -} - -/** Build a list of configuration (custom launcher names). */ -function buildConfiguration(type: string, target: string, required: boolean): string[] { - return Object.keys(configuration) - .map(item => [item, configuration[item][type]]) - .filter(([item, conf]) => conf.required == required && conf.target == target) - .map(([item, conf]) => `${target}_${item.toUpperCase()}`); -} diff --git a/test/karma.conf.js b/test/karma.conf.js index ee2a38dd856..362ffeae2e7 100644 --- a/test/karma.conf.js +++ b/test/karma.conf.js @@ -1,32 +1,113 @@ -// This file only hook up on require calls to transpile the TypeScript. -// If you're looking at this file to see Karma configuration, you should look at -// karma.config.ts instead. +const path = require('path'); +const {customLaunchers, platformMap} = require('./browser-providers'); -const fs = require('fs'); -const ts = require('typescript'); +module.exports = (config) => { -const old = require.extensions['.ts']; + config.set({ + basePath: path.join(__dirname, '..'), + frameworks: ['jasmine'], + plugins: [ + require('karma-jasmine'), + require('karma-browserstack-launcher'), + require('karma-sauce-launcher'), + require('karma-chrome-launcher'), + require('karma-firefox-launcher'), + require('karma-sourcemap-loader') + ], + files: [ + {pattern: 'dist/vendor/core-js/client/core.js', included: true, watched: false}, + {pattern: 'dist/vendor/systemjs/dist/system-polyfills.js', included: true, watched: false}, + {pattern: 'dist/vendor/systemjs/dist/system.src.js', included: true, watched: false}, + {pattern: 'dist/vendor/zone.js/dist/zone.js', included: true, watched: false}, + {pattern: 'dist/vendor/zone.js/dist/proxy.js', included: true, watched: false}, + {pattern: 'dist/vendor/zone.js/dist/sync-test.js', included: true, watched: false}, + {pattern: 'dist/vendor/zone.js/dist/jasmine-patch.js', included: true, watched: false}, + {pattern: 'dist/vendor/zone.js/dist/async-test.js', included: true, watched: false}, + {pattern: 'dist/vendor/zone.js/dist/fake-async-test.js', included: true, watched: false}, + {pattern: 'dist/vendor/hammerjs/hammer.min.js', included: true, watched: false}, + {pattern: 'test/karma-test-shim.js', included: true, watched: false}, -require.extensions['.ts'] = function(m, filename) { - // If we're in node module, either call the old hook or simply compile the - // file without transpilation. We do not touch node_modules/**. - if (filename.match(/node_modules/)) { - if (old) { - return old(m, filename); - } - return m._compile(fs.readFileSync(filename), filename); - } + // paths loaded via module imports + {pattern: 'dist/**/*.js', included: false, watched: true}, - // Node requires all require hooks to be sync. - const source = fs.readFileSync(filename).toString(); - const result = ts.transpile(source, { - target: ts.ScriptTarget.ES5, - module: ts.ModuleKind.CommonJs, + // include one of the themes + {pattern: 'dist/**/prebuilt/indigo-pink.css', included: true, watched: true}, + + // paths loaded via Angular's component compiler + // (these paths need to be rewritten, see proxies section) + {pattern: 'dist/**/*.html', included: false, watched: true}, + {pattern: 'dist/**/*.css', included: false, watched: true}, + + // paths to support debugging with source maps in dev tools + {pattern: 'dist/**/*.ts', included: false, watched: false}, + {pattern: 'dist/**/*.js.map', included: false, watched: false} + ], + proxies: { + // required for component assets fetched by Angular's compiler + '/components/': '/base/dist/components/', + '/core/': '/base/dist/core/', + }, + + customLaunchers: customLaunchers, + + exclude: [], + preprocessors: { + '**/*.js': ['sourcemap'] + }, + reporters: ['dots'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: false, + + sauceLabs: { + testName: 'material2', + startConnect: false, + recordVideo: false, + recordScreenshots: false, + options: { + 'selenium-version': '2.48.2', + 'command-timeout': 600, + 'idle-timeout': 600, + 'max-duration': 5400 + } + }, + + browserStack: { + project: 'material2', + startTunnel: false, + retryLimit: 1, + timeout: 600, + pollingTimeout: 20000 + }, + + browserDisconnectTimeout: 20000, + browserNoActivityTimeout: 240000, + captureTimeout: 120000, + browsers: ['Chrome_1024x768'], + + singleRun: false }); - // Send it to node to execute. - return m._compile(result, filename); -}; + if (process.env['TRAVIS']) { + let buildId = `TRAVIS #${process.env.TRAVIS_BUILD_NUMBER} (${process.env.TRAVIS_BUILD_ID})`; -// Import the TS once we know it's safe to require. -module.exports = require('./karma.config.ts').config; + // The MODE variable is the indicator of what row in the test matrix we're running. + // It will look like _, where platform is one of 'saucelabs' or 'browserstack', + // and alias is one of the keys in the CI configuration variable declared in + // browser-providers.ts. + let [platform, alias] = process.env.MODE.split('_'); + + if (platform === 'saucelabs') { + config.sauceLabs.build = buildId; + config.sauceLabs.tunnelIdentifier = process.env.TRAVIS_JOB_ID; + } else if (platform === 'browserstack') { + config.browserStack.build = buildId; + config.browserStack.tunnelIdentifier = process.env.TRAVIS_JOB_ID; + } else { + throw new Error(`Platform "${platform}" unknown, but Travis specified. Exiting.`); + } + + config.browsers = platformMap[platform][alias.toLowerCase()]; + } +}; diff --git a/test/karma.config.ts b/test/karma.config.ts deleted file mode 100644 index e88fc9471d5..00000000000 --- a/test/karma.config.ts +++ /dev/null @@ -1,118 +0,0 @@ -// This file is named differently than its JS bootstrapper to avoid the ts compiler to overwrite it. - -import path = require('path'); -import { - customLaunchers, - platformMap, -} from './browser-providers'; - - -export function config(config) { - config.set({ - basePath: path.join(__dirname, '..'), - frameworks: ['jasmine'], - plugins: [ - require('karma-jasmine'), - require('karma-browserstack-launcher'), - require('karma-sauce-launcher'), - require('karma-chrome-launcher'), - require('karma-firefox-launcher'), - require('karma-sourcemap-loader') - ], - files: [ - {pattern: 'dist/vendor/core-js/client/core.js', included: true, watched: false}, - {pattern: 'dist/vendor/systemjs/dist/system-polyfills.js', included: true, watched: false}, - {pattern: 'dist/vendor/systemjs/dist/system.src.js', included: true, watched: false}, - {pattern: 'dist/vendor/zone.js/dist/zone.js', included: true, watched: false}, - {pattern: 'dist/vendor/zone.js/dist/proxy.js', included: true, watched: false}, - {pattern: 'dist/vendor/zone.js/dist/sync-test.js', included: true, watched: false}, - {pattern: 'dist/vendor/zone.js/dist/jasmine-patch.js', included: true, watched: false}, - {pattern: 'dist/vendor/zone.js/dist/async-test.js', included: true, watched: false}, - {pattern: 'dist/vendor/zone.js/dist/fake-async-test.js', included: true, watched: false}, - {pattern: 'dist/vendor/hammerjs/hammer.min.js', included: true, watched: false}, - {pattern: 'test/karma-test-shim.js', included: true, watched: false}, - - // paths loaded via module imports - {pattern: 'dist/**/*.js', included: false, watched: true}, - - // include one of the themes - {pattern: 'dist/**/prebuilt/indigo-pink.css', included: true, watched: true}, - - // paths loaded via Angular's component compiler - // (these paths need to be rewritten, see proxies section) - {pattern: 'dist/**/*.html', included: false, watched: true}, - {pattern: 'dist/**/*.css', included: false, watched: true}, - - // paths to support debugging with source maps in dev tools - {pattern: 'dist/**/*.ts', included: false, watched: false}, - {pattern: 'dist/**/*.js.map', included: false, watched: false} - ], - proxies: { - // required for component assets fetched by Angular's compiler - '/components/': '/base/dist/components/', - '/core/': '/base/dist/core/', - }, - - customLaunchers: customLaunchers, - - exclude: [], - preprocessors: { - '**/*.js': ['sourcemap'] - }, - reporters: ['dots'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: false, - - sauceLabs: { - testName: 'material2', - startConnect: false, - recordVideo: false, - recordScreenshots: false, - options: { - 'selenium-version': '2.48.2', - 'command-timeout': 600, - 'idle-timeout': 600, - 'max-duration': 5400 - } - }, - - browserStack: { - project: 'material2', - startTunnel: false, - retryLimit: 1, - timeout: 600, - pollingTimeout: 20000 - }, - - browserDisconnectTimeout: 20000, - browserNoActivityTimeout: 240000, - captureTimeout: 120000, - browsers: ['Chrome_1024x768'], - - singleRun: false - }); - - if (process.env['TRAVIS']) { - let buildId = `TRAVIS #${process.env.TRAVIS_BUILD_NUMBER} (${process.env.TRAVIS_BUILD_ID})`; - - // The MODE variable is the indicator of what row in the test matrix we're running. - // It will look like _, where platform is one of 'saucelabs' or 'browserstack', - // and alias is one of the keys in the CIconfiguration variable declared in - // browser-providers.ts. - let [platform, alias] = process.env.MODE.split('_'); - - if (platform === 'saucelabs') { - config.sauceLabs.build = buildId; - config.sauceLabs.tunnelIdentifier = process.env.TRAVIS_JOB_ID; - } else if (platform === 'browserstack') { - config.browserStack.build = buildId; - config.browserStack.tunnelIdentifier = process.env.TRAVIS_JOB_ID; - } else { - throw new Error(`Platform "${platform}" unknown, but Travis specified. Exiting.`); - } - - config.browsers = platformMap[platform][alias.toUpperCase()]; - } -}; diff --git a/test/remote_browsers.json b/test/remote_browsers.json new file mode 100644 index 00000000000..5ef55e94659 --- /dev/null +++ b/test/remote_browsers.json @@ -0,0 +1,248 @@ +{ + "ChromeNoSandbox": { + "base": "Chrome", + "flags": [ + "--no-sandbox" + ] + }, + "Chrome_1024x768": { + "base": "Chrome", + "flags": [ + "--window-size=1024,768" + ] + }, + "SL_CHROME": { + "base": "SauceLabs", + "browserName": "chrome", + "version": "latest" + }, + "SL_CHROMEBETA": { + "base": "SauceLabs", + "browserName": "chrome", + "version": "beta" + }, + "SL_CHROMEDEV": { + "base": "SauceLabs", + "browserName": "chrome", + "version": "dev" + }, + "SL_FIREFOX": { + "base": "SauceLabs", + "browserName": "firefox", + "version": "latest" + }, + "SL_FIREFOXBETA": { + "base": "SauceLabs", + "browserName": "firefox", + "version": "beta" + }, + "SL_FIREFOXDEV": { + "base": "SauceLabs", + "browserName": "firefox", + "version": "dev" + }, + "SL_SAFARI7": { + "base": "SauceLabs", + "browserName": "safari", + "platform": "OS X 10.9", + "version": "7" + }, + "SL_SAFARI8": { + "base": "SauceLabs", + "browserName": "safari", + "platform": "OS X 10.10", + "version": "8" + }, + "SL_SAFARI9": { + "base": "SauceLabs", + "browserName": "safari", + "platform": "OS X 10.11", + "version": "9.0" + }, + "SL_IOS7": { + "base": "SauceLabs", + "browserName": "iphone", + "platform": "OS X 10.10", + "version": "7.1" + }, + "SL_IOS8": { + "base": "SauceLabs", + "browserName": "iphone", + "platform": "OS X 10.10", + "version": "8.4" + }, + "SL_IOS9": { + "base": "SauceLabs", + "browserName": "iphone", + "platform": "OS X 10.10", + "version": "9.1" + }, + "SL_IE9": { + "base": "SauceLabs", + "browserName": "internet explorer", + "platform": "Windows 2008", + "version": "9" + }, + "SL_IE10": { + "base": "SauceLabs", + "browserName": "internet explorer", + "platform": "Windows 2012", + "version": "10" + }, + "SL_IE11": { + "base": "SauceLabs", + "browserName": "internet explorer", + "platform": "Windows 8.1", + "version": "11" + }, + "SL_EDGE": { + "base": "SauceLabs", + "browserName": "microsoftedge", + "platform": "Windows 10", + "version": "14" + }, + "SL_ANDROID4.1": { + "base": "SauceLabs", + "browserName": "android", + "platform": "Linux", + "version": "4.1" + }, + "SL_ANDROID4.2": { + "base": "SauceLabs", + "browserName": "android", + "platform": "Linux", + "version": "4.2" + }, + "SL_ANDROID4.3": { + "base": "SauceLabs", + "browserName": "android", + "platform": "Linux", + "version": "4.3" + }, + "SL_ANDROID4.4": { + "base": "SauceLabs", + "browserName": "android", + "platform": "Linux", + "version": "4.4" + }, + "SL_ANDROID5": { + "base": "SauceLabs", + "browserName": "android", + "platform": "Linux", + "version": "5.1" + }, + "BS_CHROME": { + "base": "BrowserStack", + "browser": "chrome", + "os": "OS X", + "os_version": "Yosemite" + }, + "BS_FIREFOX": { + "base": "BrowserStack", + "browser": "firefox", + "os": "Windows", + "os_version": "10" + }, + "BS_SAFARI7": { + "base": "BrowserStack", + "browser": "safari", + "os": "OS X", + "os_version": "Mavericks" + }, + "BS_SAFARI8": { + "base": "BrowserStack", + "browser": "safari", + "os": "OS X", + "os_version": "Yosemite" + }, + "BS_SAFARI9": { + "base": "BrowserStack", + "browser": "safari", + "os": "OS X", + "os_version": "El Capitan" + }, + "BS_IOS7": { + "base": "BrowserStack", + "device": "iPhone 5S", + "os": "ios", + "os_version": "7.0", + "resolution": "1024x768" + }, + "BS_IOS8": { + "base": "BrowserStack", + "device": "iPhone 6", + "os": "ios", + "os_version": "8.3", + "resolution": "1024x768" + }, + "BS_IOS9": { + "base": "BrowserStack", + "device": "iPhone 6S", + "os": "ios", + "os_version": "9.0", + "resolution": "1024x768" + }, + "BS_IE9": { + "base": "BrowserStack", + "browser": "ie", + "browser_version": "9.0", + "os": "Windows", + "os_version": "7" + }, + "BS_IE10": { + "base": "BrowserStack", + "browser": "ie", + "browser_version": "10.0", + "os": "Windows", + "os_version": "8" + }, + "BS_IE11": { + "base": "BrowserStack", + "browser": "ie", + "browser_version": "11.0", + "os": "Windows", + "os_version": "10" + }, + "BS_EDGE": { + "base": "BrowserStack", + "browser": "edge", + "os": "Windows", + "os_version": "10" + }, + "BS_WINDOWSPHONE": { + "base": "BrowserStack", + "device": "Nokia Lumia 930", + "os": "winphone", + "os_version": "8.1" + }, + "BS_ANDROID5": { + "base": "BrowserStack", + "device": "Google Nexus 5", + "os": "android", + "os_version": "5.0" + }, + "BS_ANDROID4.4": { + "base": "BrowserStack", + "device": "HTC One M8", + "os": "android", + "os_version": "4.4" + }, + "BS_ANDROID4.3": { + "base": "BrowserStack", + "device": "Samsung Galaxy S4", + "os": "android", + "os_version": "4.3" + }, + "BS_ANDROID4.2": { + "base": "BrowserStack", + "device": "Google Nexus 4", + "os": "android", + "os_version": "4.2" + }, + "BS_ANDROID4.1": { + "base": "BrowserStack", + "device": "Google Nexus 7", + "os": "android", + "os_version": "4.1" + } +} \ No newline at end of file