// load traceur runtime as our tests are written in es6 require('traceur/bin/traceur-runtime.js'); var argv = require('yargs') .usage('Angular e2e/perf test options.') .options({ 'sample-size': { describe: 'sample size', default: 20, type: 'boolean' }, 'force-gc': { describe: 'force gc', default: false, type: 'boolean' }, 'benchmark': { describe: 'whether to run the benchmarks', default: false }, 'browsers': { describe: 'preconfigured browsers that should be used', default: 'ChromeDesktop' } }) .help('ng-help') .wrap(40) .argv var browsers = argv['browsers'].split(','); var BROWSER_CAPS = { Dartium: { name: 'Dartium', browserName: 'chrome', chromeOptions: { 'binary': process.env.DARTIUM, 'args': ['--js-flags=--expose-gc'] }, loggingPrefs: { performance: 'ALL', browser: 'ALL' } }, ChromeDesktop: { browserName: 'chrome', chromeOptions: { 'args': ['--js-flags=--expose-gc'] }, loggingPrefs: { performance: 'ALL', browser: 'ALL' } }, ChromeAndroid: { browserName: 'chrome', chromeOptions: { androidPackage: 'com.android.chrome', 'args': ['--js-flags=--expose-gc'] }, loggingPrefs: { performance: 'ALL', browser: 'ALL' } } }; var config = exports.config = { // Disable waiting for Angular as we don't have an integration layer yet... // TODO(tbosch): Implement a proper debugging API for Ng2.0, remove this here // and the sleeps in all tests. onPrepare: function() { browser.ignoreSynchronization = true; var _get = browser.get; var sleepInterval = process.env.TRAVIS || process.env.JENKINS_URL ? 7000 : 3000; browser.get = function() { var result = _get.apply(this, arguments); browser.sleep(sleepInterval); return result; } }, specs: argv['benchmark'] ? [ 'dist/js/cjs/**/e2e_test/**/*_perf.js' ] : [ 'dist/js/cjs/**/e2e_test/**/*_spec.js', 'dist/js/cjs/**/e2e_test/**/*_perf.js' ], exclude: [ 'dist/js/cjs/**/node_modules/**', ], multiCapabilities: browsers.map(function(browserName) { var caps = BROWSER_CAPS[browserName]; console.log('Testing against', browserName); if (!caps) { throw new Error('Not configured browser name: '+browserName); } return caps; }), framework: 'jasmine2', jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: argv.benchpress ? 80000 : 30000 }, params: { benchmark: { scaling: [{ userAgent: /Android/, value: 0.125 }] } } }; exports.createBenchpressRunner = function(options) { var nodeUuid = require('node-uuid'); var benchpress = require('./dist/js/cjs/benchpress/benchpress'); var SeleniumWebDriverAdapter = require('./dist/js/cjs/benchpress/src/webdriver/selenium_webdriver_adapter').SeleniumWebDriverAdapter; // TODO(tbosch): add cloud reporter again (only when !options.test) // var cloudReporterConfig; // if (process.env.CLOUD_SECRET_PATH) { // console.log('using cloud reporter!'); // cloudReporterConfig = { // auth: require(process.env.CLOUD_SECRET_PATH), // projectId: 'angular-perf', // datasetId: 'benchmarks', // tableId: 'ng2perf' // }; // } var runId = nodeUuid.v1(); if (process.env.GIT_SHA) { runId = process.env.GIT_SHA + ' ' + runId; } var bindings = [ benchpress.bind(benchpress.WebDriverAdapter).toFactory( function() { return new SeleniumWebDriverAdapter(global.browser); }, [] ), benchpress.bind(benchpress.Options.FORCE_GC).toValue(argv['force-gc']), benchpress.bind(benchpress.Options.DEFAULT_DESCRIPTION).toValue({ 'lang': options.lang, 'runId': runId }) ]; if (argv['benchmark']) { bindings.push(benchpress.RegressionSlopeValidator.BINDINGS); bindings.push(benchpress.bind(benchpress.RegressionSlopeValidator.SAMPLE_SIZE).toValue(argv['sample-size'])); } else { bindings.push(benchpress.SizeValidator.BINDINGS); bindings.push(benchpress.bind(benchpress.SizeValidator.SAMPLE_SIZE).toValue(1)); } global.benchpressRunner = new benchpress.Runner(bindings); }