299 lines
7.4 KiB
JavaScript
299 lines
7.4 KiB
JavaScript
module.exports = function (grunt) {
|
|
function runNpmScript (command, cb) {
|
|
var opts = {
|
|
cmd: 'npm',
|
|
args: ['run', command],
|
|
opts: {
|
|
stdio: 'inherit'
|
|
}
|
|
}
|
|
|
|
grunt.util.spawn(opts, function (error, result, code) {
|
|
if (error) {
|
|
grunt.fail.warn(command + ' failed.')
|
|
}
|
|
cb()
|
|
})
|
|
}
|
|
|
|
var autoStartBrowsers = ['Chrome', 'Firefox', 'Safari']
|
|
|
|
var STREAM_SOURCE_PORT_HTTP = 4567
|
|
|
|
var FILES_TRIGGERING_KARMA = [
|
|
'src/**/*.js',
|
|
'test/specs/*.spec.js',
|
|
'test/libs/*.js',
|
|
'test/*.js'
|
|
]
|
|
|
|
grunt.initConfig({
|
|
|
|
pkg: grunt.file.readJSON('package.json'),
|
|
|
|
clean: ['dist/*.js', 'build/*.js'],
|
|
|
|
karma: {
|
|
options: {
|
|
singleRun: true,
|
|
proxies: {
|
|
'/testServer': 'http://localhost:' + STREAM_SOURCE_PORT_HTTP
|
|
},
|
|
// test results reporter to use
|
|
// possible values: 'dots', 'progress', 'junit'
|
|
reporters: ['progress'],
|
|
|
|
// enable / disable colors in the output (reporters and logs)
|
|
colors: true
|
|
},
|
|
|
|
'coverage': {
|
|
reporters: ['coverage'],
|
|
preprocessors: {
|
|
// source files to generate coverage for
|
|
// (these files will be instrumented by Istanbul)
|
|
'src/**/*.js': ['coverage']
|
|
},
|
|
'browsers': ['PhantomJS'],
|
|
configFile: 'test/unit.conf.js'
|
|
},
|
|
|
|
'precaptured-dev': {
|
|
// for doing a single test run with already captured browsers during development.
|
|
// this is good for running tests in browsers karma can't easily start such as
|
|
// IE running inside a Windows VM on a unix dev environment
|
|
browsers: [],
|
|
configFile: 'test/unit.conf.js',
|
|
singleRun: 'true'
|
|
},
|
|
|
|
'single-dev': {
|
|
browsers: autoStartBrowsers,
|
|
configFile: 'test/unit.conf.js'
|
|
},
|
|
|
|
'single-concat': {
|
|
browsers: autoStartBrowsers,
|
|
configFile: 'test/concat.conf.js'
|
|
},
|
|
|
|
'single-minified': {
|
|
browsers: autoStartBrowsers,
|
|
configFile: 'test/min.conf.js'
|
|
},
|
|
|
|
'single-amd': {
|
|
browsers: autoStartBrowsers,
|
|
configFile: 'test/amd.conf.js'
|
|
},
|
|
|
|
'single-browser-http': {
|
|
browsers: autoStartBrowsers,
|
|
configFile: 'test/http.conf.js'
|
|
},
|
|
|
|
'persist': {
|
|
// for setting up a persistent karma server.
|
|
// To start the server, the task is:
|
|
// karma:persist
|
|
// To run these, the task is:
|
|
// karma:persist:run
|
|
configFile: 'test/unit.conf.js',
|
|
browsers: [],
|
|
singleRun: false,
|
|
background: true
|
|
},
|
|
|
|
'single-heap': {
|
|
configFile: 'test/heap.conf.js'
|
|
}
|
|
},
|
|
|
|
exec: {
|
|
// these might not go too well on Windows :-) - get Cygwin.
|
|
reportMinifiedSize: {
|
|
command: 'echo minified size is `wc -c < dist/oboe-browser.min.js` bytes'
|
|
},
|
|
reportMinifiedAndGzippedSize: {
|
|
command: 'echo Size after gzip is `gzip --best --stdout dist/oboe-browser.min.js | wc -c` bytes - max 5120'
|
|
},
|
|
createGitVersionJs: {
|
|
command: 'echo "`git describe`" > build/version.txt'
|
|
},
|
|
webpackBrowser: {
|
|
command: 'npm run webpack'
|
|
},
|
|
webpackNode: {
|
|
command: 'npm run webpack -- --config webpack.config.node.js'
|
|
},
|
|
standard: {
|
|
command: 'npm run standard -- --fix --envs jasmine'
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
karma: {
|
|
files: FILES_TRIGGERING_KARMA,
|
|
tasks: ['karma:persist:run']
|
|
},
|
|
|
|
// like above but reports the file size. This is good for
|
|
// watching while developing to make sure it doesn't get
|
|
// too big. Doesn't run tests against minified.
|
|
karmaAndSize: {
|
|
files: FILES_TRIGGERING_KARMA,
|
|
tasks: [
|
|
'karma:persist:run',
|
|
'browser-build',
|
|
'dist-sizes']
|
|
},
|
|
|
|
// like above but reports the file size. This is good for
|
|
// watching while developing to make sure it doesn't get
|
|
// too big. Doesn't run tests against minified.
|
|
testNode: {
|
|
files: FILES_TRIGGERING_KARMA,
|
|
tasks: [
|
|
'node-build']
|
|
},
|
|
|
|
restartStreamSourceAndRunTests: {
|
|
// this fails at the moment because start-stream-source
|
|
// fails if run more than once - the port is taken.
|
|
files: ['test/streamsource.js'],
|
|
tasks: ['start-stream-source', 'karma:persist:run']
|
|
},
|
|
|
|
standard: {
|
|
files: FILES_TRIGGERING_KARMA,
|
|
tasks: ['exec:standard']
|
|
}
|
|
},
|
|
|
|
concurrent: {
|
|
watchDev: {
|
|
tasks: [ 'watch:karmaAndSize', 'watch:restartStreamSourceAndRunTests' ],
|
|
options: {
|
|
logConcurrentOutput: true
|
|
}
|
|
}
|
|
}
|
|
|
|
})
|
|
|
|
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks)
|
|
|
|
var streamSource
|
|
|
|
grunt.registerTask('start-stream-source', function () {
|
|
grunt.log.ok('do we have a streaming source already?', !!streamSource)
|
|
|
|
// if we previously loaded the streamsource, stop it to let the new one in:
|
|
if (streamSource) {
|
|
grunt.log.ok('there seems to be a streaming server already, let\'s stop it')
|
|
streamSource.stop()
|
|
}
|
|
|
|
streamSource = require('./test/streamsource.js')
|
|
streamSource.start(STREAM_SOURCE_PORT_HTTP, grunt)
|
|
})
|
|
|
|
grunt.registerTask('jasmine_node_oboe', 'Runs jasmine-node.', function () {
|
|
runNpmScript('test-node', this.async())
|
|
})
|
|
|
|
// change the auto-starting browsers so that future tests will use
|
|
// phantomjs instead of actual browsers. Can do:
|
|
// grunt headless-mode default
|
|
// to run without any actual browsers
|
|
grunt.registerTask('headless-mode', function () {
|
|
autoStartBrowsers.length = 0
|
|
autoStartBrowsers.push('PhantomJS')
|
|
})
|
|
|
|
grunt.registerTask('test-start-server', [
|
|
'karma:persist'
|
|
])
|
|
|
|
grunt.registerTask('test-run', [
|
|
'karma:persist:run'
|
|
])
|
|
|
|
grunt.registerTask('dist-sizes', [
|
|
'exec:reportMinifiedAndGzippedSize'
|
|
])
|
|
|
|
grunt.registerTask('node-build', [
|
|
'exec:createGitVersionJs',
|
|
'exec:webpackNode'
|
|
])
|
|
|
|
grunt.registerTask('node-build-test', [
|
|
'node-build',
|
|
'jasmine_node_oboe'
|
|
])
|
|
|
|
grunt.registerTask('node', [
|
|
'start-stream-source',
|
|
'node-build-test'
|
|
])
|
|
|
|
grunt.registerTask('browser-build', [
|
|
'exec:createGitVersionJs',
|
|
'exec:webpackBrowser'
|
|
])
|
|
|
|
grunt.registerTask('browser-build-test', [
|
|
'karma:single-dev',
|
|
'karma:single-browser-http',
|
|
'browser-build',
|
|
'karma:single-concat',
|
|
'karma:single-minified',
|
|
'karma:single-amd'
|
|
])
|
|
|
|
grunt.registerTask('build', [
|
|
'exec:webpackBrowser'
|
|
])
|
|
|
|
// build and run just the integration tests.
|
|
grunt.registerTask('build-integration-test', [
|
|
'build',
|
|
'start-stream-source',
|
|
'karma:single-concat',
|
|
'jasmine_node_oboe',
|
|
'dist-sizes'
|
|
])
|
|
|
|
grunt.registerTask('default', [
|
|
|
|
'clear',
|
|
'clean',
|
|
'start-stream-source',
|
|
|
|
'browser-build-test',
|
|
|
|
'node-build-test',
|
|
|
|
'dist-sizes'
|
|
])
|
|
|
|
// browser-test-auto-run or node-test-auto-run
|
|
//
|
|
// The most useful for developing. Start this task, capture some browsers
|
|
// (unless node) then edit the code. Tests will be run as the code is
|
|
// saved.
|
|
grunt.registerTask('browser-test-auto-run', [
|
|
'start-stream-source',
|
|
'karma:persist',
|
|
'concurrent:watchDev'
|
|
])
|
|
grunt.registerTask('node-test-auto-run', [
|
|
'start-stream-source',
|
|
'watch:testNode'
|
|
])
|
|
grunt.registerTask('coverage', [
|
|
'karma:coverage'
|
|
])
|
|
}
|