Gruntfile.js
/*jshint node:true */
'use strict';
module.exports = function (grunt) {
function encodingMiddleware(request, response, next) {
var url = require('url').parse(request.url, true, true);
var query = url.query;
var pathname = url.pathname;
if (pathname !== '/encoding') {
next();
return;
}
var cookieName = query.name;
var cookieValue = query.value;
response.setHeader('content-type', 'application/json');
response.end(JSON.stringify({
name: cookieName,
value: cookieValue
}));
}
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
qunit: {
all: {
options: {
urls: [
'http://127.0.0.1:9998/',
'http://127.0.0.1:9998/amd.html',
'http://127.0.0.1:9998/encoding.html?integration_baseurl=http://127.0.0.1:9998/'
]
}
},
},
nodeunit: {
all: 'test/commonjs.js'
},
jshint: {
options: {
jshintrc: true
},
grunt: 'Gruntfile.js',
source: 'src/**/*.js',
tests: ['test/**/*.js', '!test/polyfill.js']
},
jscs: {
options: {
requireCommaBeforeLineBreak: true,
requireLineFeedAtFileEnd: true,
requireSemicolons: true,
requireSpaceBeforeKeywords: ['else', 'while', 'catch'],
requireSpaceAfterKeywords: true,
requireSpaceAfterLineComment: true,
requireSpaceBeforeBlockStatements: true,
requireSpaceBeforeObjectValues: true,
validateIndentation: '\t',
validateLineBreaks: 'LF',
validateQuoteMarks: true,
disallowSpacesInsideArrayBrackets: 'all',
disallowSpacesInsideParentheses: true,
disallowTrailingWhitespace: true
},
grunt: 'Gruntfile.js',
source: 'src/**/*.js',
tests: ['test/**/*.js', '!test/polyfill.js']
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> v<%= pkg.version %> | <%= pkg.license %> */\n'
},
build: {
files: {
'build/js.cookie-<%= pkg.version %>.min.js': 'vendor/js-cookie/src/js.cookie.js',
'build/js.cookie.calibre-<%= pkg.version %>.min.js': 'src/js.cookie.calibre.js'
}
}
},
watch: {
options: {
livereload: true
},
files: '{src,test}/**/*.js',
tasks: 'default'
},
compare_size: {
files: [
'build/js.cookie-<%= pkg.version %>.min.js',
'vendor/js-cookie/src/js.cookie.js',
'build/js.cookie.calibre-<%= pkg.version %>.min.js',
'src/js.cookie.calibre.js'
],
options: {
compress: {
gz: function (fileContents) {
return require('gzip-js').zip(fileContents, {}).length;
}
}
}
},
connect: {
'build-qunit': {
options: {
port: 9998,
base: ['.', 'test'],
middleware: function (connect, options, middlewares) {
middlewares.unshift(encodingMiddleware);
return middlewares;
}
}
},
'build-sauce': {
options: {
port: 9999,
base: ['.', 'test']
}
},
tests: {
options: {
port: 10000,
base: ['.', 'test'],
open: 'http://127.0.0.1:10000',
keepalive: true,
livereload: true,
middleware: function (connect, options, middlewares) {
middlewares.unshift(encodingMiddleware);
return middlewares;
}
}
}
},
'saucelabs-qunit': {
all: {
options: {
urls: ['http://127.0.0.1:9999'],
testname: 'Sauce Test for js-cookie-calibre',
build: process.env.TRAVIS_JOB_ID,
pollInterval: 10000,
statusCheckAttempts: 90,
throttled: 3,
browsers: (function () {
var browsers = {
'iOS': [{
browserName: 'iphone',
platform: 'OS X 10.10',
version: '8.2',
deviceName: 'iPhone Simulator'
}, {
browserName: 'iphone',
platform: 'OS X 10.10',
version: '8.2',
deviceName: 'iPad Simulator'
}],
'android': [{
browserName: 'android',
platform: 'Linux',
version: '5.1',
deviceName: 'Android Emulator'
}],
'mac': [{
browserName: 'safari',
platform: 'OS X 10.10',
version: '8.0'
}, {
browserName: 'firefox',
platform: 'OS X 10.10',
version: '36.0'
}, {
browserName: 'chrome',
platform: 'OS X 10.10',
versiono: '41.0'
}],
'windows7': [{
browserName: 'internet explorer',
platform: 'Windows 7',
version: '11.0'
}, {
browserName: 'internet explorer',
platform: 'Windows 7',
version: '10.0'
}, {
browserName: 'internet explorer',
platform: 'Windows 7',
version: '9.0'
}, {
browserName: 'opera',
platform: 'Windows 7',
version: '12.12'
}],
'windowsXP': [{
browserName: 'internet explorer',
platform: 'Windows XP',
version: '8.0'
}, {
browserName: 'internet explorer',
platform: 'Windows XP',
version: '7.0'
}, {
browserName: 'internet explorer',
platform: 'Windows XP',
version: '6.0'
}],
'linux': [{
browserName: 'opera',
platform: 'Linux',
version: '12.15'
}, {
browserName: 'firefox',
platform: 'Linux',
version: '37.0'
}, {
browserName: 'chrome',
platform: 'Linux',
version: '41.0'
}]
};
var matrix = [];
for (var os in browsers) {
matrix = matrix.concat(browsers[os]);
}
return matrix;
}())
}
}
}
});
// Loading dependencies
for (var key in grunt.file.readJSON('package.json').devDependencies) {
if (key !== 'grunt' && key.indexOf('grunt') === 0) {
grunt.loadNpmTasks(key);
}
}
grunt.registerTask('saucelabs', ['connect:build-sauce', 'saucelabs-qunit']);
grunt.registerTask('test', ['jshint', 'jscs', 'connect:build-qunit', 'qunit', 'nodeunit']);
grunt.registerTask('dev', ['test', 'uglify', 'compare_size']);
grunt.registerTask('ci', ['test', 'saucelabs']);
grunt.registerTask('default', 'dev');
};