Skip to content

Commit

Permalink
Re-organize karma config files. (ampproject#6831)
Browse files Browse the repository at this point in the history
* Reorganize karma config files.

* Remove unused code.

* Simplify logic.

* Some more improvements.

* Avoid using a karma config file. Put everything into a config object instead. This completely solves the hard-to-explain config overridden problem.

* Document hardcoded log level constants.
  • Loading branch information
lannka authored Jan 5, 2017
1 parent 88bcf44 commit 6c06b65
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 221 deletions.
47 changes: 0 additions & 47 deletions build-system/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@
* limitations under the License.
*/

var path = require('path');

var karmaConf = path.resolve('karma.conf.js');

var commonTestPaths = [
'test/_init_tests.js',
'test/fixtures/*.html',
Expand Down Expand Up @@ -64,50 +60,11 @@ var integrationTestPaths = commonTestPaths.concat([
'extensions/**/test/integration/**/*.js',
]);

var karmaDefault = {
configFile: karmaConf,
singleRun: true,
client: {
mocha: {
// Longer timeout on Travis; fail quickly at local.
timeout: process.env.TRAVIS ? 10000 : 2000
},
captureConsole: false,
},
browserDisconnectTimeout: 10000,
browserDisconnectTolerance: 2,
browserNoActivityTimeout: 4 * 60 * 1000,
captureTimeout: 4 * 60 * 1000,
};

var karma = {
default: karmaDefault,
firefox: extend(karmaDefault, {browsers: ['Firefox']}),
safari: extend(karmaDefault, {browsers: ['Safari']}),
saucelabs: extend(karmaDefault, {
reporters: ['dots', 'saucelabs'],
browsers: [
'SL_Chrome_android',
'SL_Chrome_latest',
'SL_Chrome_45',
'SL_Firefox_latest',
'SL_Safari_8',
'SL_Safari_9',
'SL_Edge_latest',
'SL_iOS_8_4',
'SL_iOS_9_1',
'SL_iOS_10_0',
//'SL_IE_11',
],
})
};

/** @const */
module.exports = {
commonTestPaths: commonTestPaths,
testPaths: testPaths,
integrationTestPaths: integrationTestPaths,
karma: karma,
lintGlobs: [
'**/*.js',
'!**/*.extern.js',
Expand Down Expand Up @@ -147,7 +104,3 @@ module.exports = {
],
changelogIgnoreFileTypes: /\.md|\.json|\.yaml|LICENSE|CONTRIBUTORS$/
};

function extend(orig, add) {
return Object.assign({}, orig, add);
}
163 changes: 163 additions & 0 deletions build-system/tasks/karma.conf.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
/**
* Copyright 2015 The AMP HTML Authors. 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.
*/

/**
* @param {!Object} config
*/
module.exports = {
frameworks: [
'fixture',
'browserify',
'mocha',
'chai-as-promised',
'sinon-chai',
'chai',
],

preprocessors: {
'test/fixtures/*.html': ['html2js'],
'src/**/*.js': ['browserify'],
'test/**/*.js': ['browserify'],
'ads/**/test/test-*.js': ['browserify'],
'extensions/**/test/**/*.js': ['browserify'],
'testing/**/*.js': ['browserify'],
},

browserify: {
watch: true,
debug: true,
transform: ['babelify'],
bundleDelay: 900,
},

reporters: [process.env.TRAVIS ? 'dots' : 'progress'],

port: 9876,

colors: true,

proxies: {
'/ads/': '/base/ads/',
'/dist/': '/base/dist/',
'/dist.3p/': '/base/dist.3p/',
'/examples/': '/base/examples/',
'/extensions/': '/base/extensions/',
'/src/': '/base/src/',
'/test/': '/base/test/',
},

// Can't import Karma constants config.LOG_ERROR & config.LOG_WARN,
// so we hard code the strings here. Hopefully they'll never change.
logLevel: process.env.TRAVIS ? 'ERROR' : 'WARN',

autoWatch: true,

browsers: [
process.env.TRAVIS ? 'Chrome_travis_ci' : 'Chrome_no_extensions',
],

customLaunchers: {
/*eslint "google-camelcase/google-camelcase": 0*/
Chrome_travis_ci: {
base: 'Chrome',
flags: ['--no-sandbox', '--disable-extensions'],
},
Chrome_no_extensions: {
base: 'Chrome',
// Dramatically speeds up iframe creation time.
flags: ['--disable-extensions'],
},
// SauceLabs configurations.
// New configurations can be created here:
// https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/
SL_Chrome_android: {
base: 'SauceLabs',
browserName: 'android',
},
SL_Chrome_latest: {
base: 'SauceLabs',
browserName: 'chrome',
},
SL_Chrome_45: {
base: 'SauceLabs',
browserName: 'chrome',
version: '45',
},
SL_iOS_8_4: {
base: 'SauceLabs',
browserName: 'iphone',
version: '8.4',
},
SL_iOS_9_1: {
base: 'SauceLabs',
browserName: 'iphone',
version: '9.1',
},
SL_iOS_10_0: {
base: 'SauceLabs',
browserName: 'iphone',
version: '10.0',
},
SL_Firefox_latest: {
base: 'SauceLabs',
browserName: 'firefox',
},
SL_IE_11: {
base: 'SauceLabs',
browserName: 'internet explorer',
version: 11,
},
SL_Edge_latest: {
base: 'SauceLabs',
browserName: 'microsoftedge',
},
SL_Safari_9: {
base: 'SauceLabs',
browserName: 'safari',
version: 9,
},
SL_Safari_8: {
base: 'SauceLabs',
browserName: 'safari',
version: 8,
},
},

sauceLabs: {
testName: 'AMP HTML on Sauce',
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER,
startConnect: false,
connectOptions: {
port: 5757,
logfile: 'sauce_connect.log',
},
},

client: {
mocha: {
reporter: 'html',
// Longer timeout on Travis; fail quickly at local.
timeout: process.env.TRAVIS ? 10000 : 2000,
},
captureConsole: false,
},

singleRun: true,
browserDisconnectTimeout: 10000,
browserDisconnectTolerance: 2,
browserNoActivityTimeout: 4 * 60 * 1000,
captureTimeout: 4 * 60 * 1000,
};
36 changes: 23 additions & 13 deletions build-system/tasks/runtime-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,24 @@ var argv = require('minimist')(process.argv.slice(2));
var gulp = require('gulp-help')(require('gulp'));
var Karma = require('karma').Server;
var config = require('../config');
var karmaConfig = config.karma;
var extend = require('util')._extend;
var fs = require('fs');
var path = require('path');
var util = require('gulp-util');
var webserver = require('gulp-webserver');
var app = require('../test-server').app;

var karmaDefault = require('./karma.conf');

/**
* Read in and process the configuration settings for karma
* @return {!Object} Karma configuration
*/
function getConfig() {
var obj = Object.create(null);
if (argv.safari) {
return extend(obj, karmaConfig.safari);
return Object.assign({}, karmaDefault, {browsers: ['Safari']});
}

if (argv.firefox) {
return extend(obj, karmaConfig.firefox);
return Object.assign({}, karmaDefault, {browsers: ['Firefox']});
}

if (argv.saucelabs) {
Expand All @@ -48,13 +45,26 @@ function getConfig() {
if (!process.env.SAUCE_ACCESS_KEY) {
throw new Error('Missing SAUCE_ACCESS_KEY Env variable');
}
const c = extend(obj, karmaConfig.saucelabs);
if (argv.oldchrome) {
c.browsers = ['SL_Chrome_45'];
}
return Object.assign({}, karmaDefault, {
reporters: ['dots', 'saucelabs'],
browsers: argv.oldchrome
? ['SL_Chrome_45']
: [
'SL_Chrome_android',
'SL_Chrome_latest',
'SL_Chrome_45',
'SL_Firefox_latest',
'SL_Safari_8',
'SL_Safari_9',
'SL_Edge_latest',
'SL_iOS_8_4',
'SL_iOS_9_1',
'SL_iOS_10_0',
//'SL_IE_11',
],
});
}

return extend(obj, karmaConfig.default);
return karmaDefault;
}

function getAdTypes() {
Expand Down Expand Up @@ -107,7 +117,6 @@ gulp.task('test', 'Runs tests', argv.nobuild ? [] : ['build'], function(done) {
}

var c = getConfig();
var browsers = [];

if (argv.watch || argv.w) {
c.singleRun = false;
Expand All @@ -125,6 +134,7 @@ gulp.task('test', 'Runs tests', argv.nobuild ? [] : ['build'], function(done) {
c.files = config.testPaths;
}

// c.client is available in test browser via window.parent.karma.config
c.client.amp = {
useCompiledJs: !!argv.compiled,
saucelabs: !!argv.saucelabs,
Expand Down
Loading

0 comments on commit 6c06b65

Please sign in to comment.