From 6c8871c1cf816c3c6d8ca9284a8fe4e20411cfdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sat, 23 Nov 2013 19:31:01 +0100 Subject: [PATCH 01/23] Add a karma task for Chrome --- Gruntfile.js | 20 +++++++++- package.json | 27 +++++++------ test/browser.js | 101 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 test/browser.js diff --git a/Gruntfile.js b/Gruntfile.js index 80f306c89f..59380fafb1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,6 +21,23 @@ module.exports = function (grunt) { dest: 'min/langs.js' } }, + + karma: { + options: { + frameworks: ['nodeunit'], + files: [ + 'min/moment-with-langs.js', + 'test/moment/**/*.js', + 'test/lang/**/*.js', + 'test/browser.js' + ] + }, + chrome: { + singleRun: true, + browsers: ['Chrome'], + } + }, + uglify : { target: { files: { @@ -43,7 +60,7 @@ module.exports = function (grunt) { } }, nodeunit : { - all : ["test/**/*.js"] + all : ["test/moment/**/*.js", "test/lang/**/*.js"] }, jshint: { all: ["Gruntfile.js", "moment.js", "lang/**/*.js", "test/**/*.js"], @@ -105,6 +122,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-karma'); // Default task. grunt.registerTask('default', ['jshint', 'nodeunit']); diff --git a/package.json b/package.json index 13083b79dd..b3e125d9a5 100644 --- a/package.json +++ b/package.json @@ -37,17 +37,22 @@ "type" : "MIT" } ], - "devDependencies" : { - "uglify-js" : "latest", - "grunt" : "latest", - "nodeunit" : "latest", - "grunt-contrib-jshint" : "latest", - "grunt-contrib-nodeunit" : "latest", - "grunt-contrib-concat" : "latest", - "grunt-contrib-uglify" : "latest", - "grunt-contrib-watch" : "latest", - "grunt-lib-legacyhelpers" : "latest" - }, + "devDependencies": { + "uglify-js": "latest", + "grunt": "latest", + "nodeunit": "latest", + "grunt-contrib-jshint": "latest", + "grunt-contrib-nodeunit": "latest", + "grunt-contrib-concat": "latest", + "grunt-contrib-uglify": "latest", + "grunt-contrib-watch": "latest", + "grunt-lib-legacyhelpers": "latest", + "karma-chrome-launcher": "~0.1.0", + "karma-firefox-launcher": "~0.1.0", + "karma": "~0.10.4", + "grunt-karma": "~0.6.2", + "karma-nodeunit": "~0.1.1" + }, "scripts": { "test": "grunt" }, diff --git a/test/browser.js b/test/browser.js new file mode 100644 index 0000000000..490c581ba2 --- /dev/null +++ b/test/browser.js @@ -0,0 +1,101 @@ +/* global nodeunit */ + +nodeunit.run({ + + // moment + 'add_subtract' : window.add, + 'create' : window.create, + 'days_in_month' : window.days_in_month, + 'diff' : window.diff, + 'duration' : window.duration, + 'format' : window.format, + 'getters_setters' : window.getters_setters, + 'invalid' : window.invalid, + 'is_after' : window.is_after, + 'is_before' : window.is_before, + 'is_moment' : window.is_moment, + 'is_same' : window.is_same, + 'is_valid' : window.is_valid, + 'lang' : window.lang, + 'leapyear' : window.leapyear, + 'listers' : window.listers, + 'min_max' : window.min_max, + 'mutable' : window.mutable, + 'normalizeUnits' : window.normalizeUnits, + 'parsing_flags' : window.parsing_flags, + 'preparse_postformat' : window.preparse_postformat, + 'sod_eod' : window.end_start_of, + 'string_prototype' : window.string_prototype, + 'utc' : window.utc, + 'week_year' : window.week_year, + 'weekday' : window.weekday, + 'weeks' : window.weeks, + 'zones' : window.zones, + + // lang + 'lang:ar-ma' : window['lang:ar-ma'], + 'lang:ar' : window['lang:ar'], + 'lang:bg' : window['lang:bg'], + 'lang:br' : window['lang:br'], + 'lang:bs' : window['lang:bs'], + 'lang:ca' : window['lang:ca'], + 'lang:cs' : window['lang:cs'], + 'lang:cv' : window['lang:cv'], + 'lang:cy' : window['lang:cy'], + 'lang:da' : window['lang:da'], + 'lang:de' : window['lang:de'], + 'lang:el' : window['lang:el'], + 'lang:en-au' : window['lang:en-au'], + 'lang:en-ca' : window['lang:en-ca'], + 'lang:en-gb' : window['lang:en-gb'], + 'lang:en' : window['lang:en'], + 'lang:eo' : window['lang:eo'], + 'lang:es' : window['lang:es'], + 'lang:et' : window['lang:et'], + 'lang:eu' : window['lang:eu'], + 'lang:fa' : window['lang:fa'], + 'lang:fi' : window['lang:fi'], + 'lang:fo' : window['lang:fo'], + 'lang:fr-ca' : window['lang:fr-ca'], + 'lang:fr' : window['lang:fr'], + 'lang:gl' : window['lang:gl'], + 'lang:he' : window['lang:he'], + 'lang:hi' : window['lang:hi'], + 'lang:hr' : window['lang:hr'], + 'lang:hu' : window['lang:hu'], + 'lang:id' : window['lang:id'], + 'lang:is' : window['lang:is'], + 'lang:it' : window['lang:it'], + 'lang:ja' : window['lang:ja'], + 'lang:ka' : window['lang:ka'], + 'lang:ko' : window['lang:ko'], + 'lang:lb' : window['lang:lb'], + 'lang:lt' : window['lang:lt'], + 'lang:lv' : window['lang:lv'], + 'lang:ml' : window['lang:ml'], + 'lang:mr' : window['lang:mr'], + 'lang:ms-my' : window['lang:ms-my'], + 'lang:nb' : window['lang:nb'], + 'lang:ne' : window['lang:ne'], + 'lang:nl' : window['lang:nl'], + 'lang:nn' : window['lang:nn'], + 'lang:pl' : window['lang:pl'], + 'lang:pt-br' : window['lang:pt-br'], + 'lang:pt' : window['lang:pt'], + 'lang:ro' : window['lang:ro'], + 'lang:ru' : window['lang:ru'], + 'lang:sk' : window['lang:sk'], + 'lang:sl' : window['lang:sl'], + 'lang:sq' : window['lang:sq'], + 'lang:sv' : window['lang:sv'], + 'lang:th' : window['lang:th'], + 'lang:tl-ph' : window['lang:tl-ph'], + 'lang:tr' : window['lang:tr'], + 'lang:tzm-la' : window['lang:tzm-la'], + 'lang:tzm' : window['lang:tzm'], + 'lang:uk' : window['lang:uk'], + 'lang:uz' : window['lang:uz'], + 'lang:vn' : window['lang:vn'], + 'lang:zh-cn' : window['lang:zh-cn'], + 'lang:zh-tw' : window['lang:zh-tw'] +}); From 8b21db0007e18f38da6ad7e0e4c8f8b05183de9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sat, 23 Nov 2013 19:33:15 +0100 Subject: [PATCH 02/23] Add browser tests to test task --- Gruntfile.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index 59380fafb1..6fbbd0511d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -126,7 +126,11 @@ module.exports = function (grunt) { // Default task. grunt.registerTask('default', ['jshint', 'nodeunit']); - grunt.registerTask('test', ['nodeunit']); + grunt.registerTask('test', ['test:node', 'test:browser']); + + //test tasks + grunt.registerTask('test:node', ['nodeunit']); + grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome']); // Task to be run when releasing a new version grunt.registerTask('release', ['jshint', 'nodeunit', 'concat', From 205a04f44e9557c70b11b185512ef84ee611d13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sun, 24 Nov 2013 16:45:55 +0100 Subject: [PATCH 03/23] Add karma tests run on saucelabs --- Gruntfile.js | 46 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 9 ++++----- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 6fbbd0511d..0356499bbc 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -30,11 +30,54 @@ module.exports = function (grunt) { 'test/moment/**/*.js', 'test/lang/**/*.js', 'test/browser.js' - ] + ], + sauceLabs: { + startConnect: true, + testName: 'MomentJS' + }, + customLaunchers: { + sl_chrome_win_xp: { + base: 'SauceLabs', + browserName: 'chrome', + platform: 'Windows XP' + }, + sl_ie9_win7: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows 7', + version: '9' + }, + sl_ie8_win7: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows 7', + version: '8' + }, + sl_ff_linux: { + base: 'SauceLabs', + browserName: 'firefox', + platform: 'Linux', + }, + sl_safari_osx: { + base: 'SauceLabs', + browserName: 'safari', + platform: 'OS X 10.8', + } + }, }, chrome: { singleRun: true, browsers: ['Chrome'], + }, + sauce: { + singleRun: true, + browsers: [ + 'sl_chrome_win_xp', + 'sl_ie9_win7', + 'sl_ie8_win7', + 'sl_ff_linux', + 'sl_safari_osx' + ] } }, @@ -131,6 +174,7 @@ module.exports = function (grunt) { //test tasks grunt.registerTask('test:node', ['nodeunit']); grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome']); + grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); // Task to be run when releasing a new version grunt.registerTask('release', ['jshint', 'nodeunit', 'concat', diff --git a/package.json b/package.json index b3e125d9a5..46cfe2d4da 100644 --- a/package.json +++ b/package.json @@ -47,11 +47,10 @@ "grunt-contrib-uglify": "latest", "grunt-contrib-watch": "latest", "grunt-lib-legacyhelpers": "latest", - "karma-chrome-launcher": "~0.1.0", - "karma-firefox-launcher": "~0.1.0", - "karma": "~0.10.4", - "grunt-karma": "~0.6.2", - "karma-nodeunit": "~0.1.1" + "grunt-karma": "https://github.com/karma-runner/grunt-karma/archive/a8472d47240a71673cb5601acba6a093fe7387c1.tar.gz", + "karma": "~0.11.0", + "karma-nodeunit": "~0.1.1", + "karma-sauce-launcher": "~0.1" }, "scripts": { "test": "grunt" From ac9cb4a3e91c873a4b08200200c7349ae36c28e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sun, 24 Nov 2013 17:47:27 +0100 Subject: [PATCH 04/23] Make travis run the tests on saucelabs (TODO: fill secure tokens) --- .travis.yml | 8 ++++++++ Gruntfile.js | 3 +++ 2 files changed, 11 insertions(+) diff --git a/.travis.yml b/.travis.yml index b30fcb75d9..97c14b9b03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,13 @@ language: node_js node_js: - 0.8 + +env: + global: + - secure: "Secure username token goes here!" + - secure: "Secure access key token goes here!" + before_script: - npm install -g grunt-cli + +script: grunt build:travis diff --git a/Gruntfile.js b/Gruntfile.js index 0356499bbc..bbfcac8d5b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -176,6 +176,9 @@ module.exports = function (grunt) { grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome']); grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); + // travis build task + grunt.registerTask('build:travis', ['jshint', 'test:node', 'test:sauce-browser']); + // Task to be run when releasing a new version grunt.registerTask('release', ['jshint', 'nodeunit', 'concat', 'embed_languages', 'component', 'uglify']); From c38e21478102258a54d0dbc19a8fe671a71ea968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sun, 24 Nov 2013 17:49:04 +0100 Subject: [PATCH 05/23] `npm test` leads to `grunt test:node` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46cfe2d4da..818550ac79 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "karma-sauce-launcher": "~0.1" }, "scripts": { - "test": "grunt" + "test": "grunt test:node" }, "ender": "./ender.js", "dojoBuild": "package.js", From cc1ba461976da097841fa661020e07567f535ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sun, 24 Nov 2013 17:49:21 +0100 Subject: [PATCH 06/23] Add `test` task to tests tasks --- Gruntfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index bbfcac8d5b..05e28cc178 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -169,9 +169,9 @@ module.exports = function (grunt) { // Default task. grunt.registerTask('default', ['jshint', 'nodeunit']); - grunt.registerTask('test', ['test:node', 'test:browser']); //test tasks + grunt.registerTask('test', ['test:node', 'test:browser']); grunt.registerTask('test:node', ['nodeunit']); grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome']); grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); From 24b141edcf27bbb65403e19e3fee1a5e7a8e2b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lache=CC=80ze=20Alexandre?= Date: Sat, 7 Dec 2013 17:13:54 +0100 Subject: [PATCH 07/23] grab grunt-karma@0.7.2 from npm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 818550ac79..80b82996ef 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "grunt-contrib-uglify": "latest", "grunt-contrib-watch": "latest", "grunt-lib-legacyhelpers": "latest", - "grunt-karma": "https://github.com/karma-runner/grunt-karma/archive/a8472d47240a71673cb5601acba6a093fe7387c1.tar.gz", + "grunt-karma": "~0.7.2", "karma": "~0.11.0", "karma-nodeunit": "~0.1.1", "karma-sauce-launcher": "~0.1" From 3513b1370011842aecece180a7d17c2bbdfb721a Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Mon, 9 Dec 2013 09:42:55 -0800 Subject: [PATCH 08/23] Add concat:tests for use in browsers --- Gruntfile.js | 14 ++++++++++++-- test/browser-prefix.js | 4 ++++ test/browser-suffix.js | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 test/browser-prefix.js create mode 100644 test/browser-suffix.js diff --git a/Gruntfile.js b/Gruntfile.js index 05e28cc178..d8ca9869fe 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -19,6 +19,15 @@ module.exports = function (grunt) { langs: { src: 'lang/*.js', dest: 'min/langs.js' + }, + tests: { + src: [ + 'test/browser-prefix.js', + 'test/moment/*.js', + 'test/lang/*.js', + 'test/browser-suffix.js' + ], + dest: 'min/tests.js' } }, @@ -27,8 +36,9 @@ module.exports = function (grunt) { frameworks: ['nodeunit'], files: [ 'min/moment-with-langs.js', - 'test/moment/**/*.js', - 'test/lang/**/*.js', + 'min/tests.js', + // 'test/moment/**/*.js', + // 'test/lang/**/*.js', 'test/browser.js' ], sauceLabs: { diff --git a/test/browser-prefix.js b/test/browser-prefix.js new file mode 100644 index 0000000000..771369028e --- /dev/null +++ b/test/browser-prefix.js @@ -0,0 +1,4 @@ +(function () { + var global = this; + var require = function() { return global.moment; }; + var exports = global.NPM_TESTS = {}; diff --git a/test/browser-suffix.js b/test/browser-suffix.js new file mode 100644 index 0000000000..b6bc0f694f --- /dev/null +++ b/test/browser-suffix.js @@ -0,0 +1 @@ +}(this)); From 8a57d61eda2af43b0dfb46d5554d301de1ba3142 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Wed, 11 Dec 2013 00:50:02 -0800 Subject: [PATCH 09/23] Use accumulated tests from global var in test/browser --- test/browser.js | 100 +----------------------------------------------- 1 file changed, 1 insertion(+), 99 deletions(-) diff --git a/test/browser.js b/test/browser.js index 490c581ba2..83e2195ecb 100644 --- a/test/browser.js +++ b/test/browser.js @@ -1,101 +1,3 @@ /* global nodeunit */ -nodeunit.run({ - - // moment - 'add_subtract' : window.add, - 'create' : window.create, - 'days_in_month' : window.days_in_month, - 'diff' : window.diff, - 'duration' : window.duration, - 'format' : window.format, - 'getters_setters' : window.getters_setters, - 'invalid' : window.invalid, - 'is_after' : window.is_after, - 'is_before' : window.is_before, - 'is_moment' : window.is_moment, - 'is_same' : window.is_same, - 'is_valid' : window.is_valid, - 'lang' : window.lang, - 'leapyear' : window.leapyear, - 'listers' : window.listers, - 'min_max' : window.min_max, - 'mutable' : window.mutable, - 'normalizeUnits' : window.normalizeUnits, - 'parsing_flags' : window.parsing_flags, - 'preparse_postformat' : window.preparse_postformat, - 'sod_eod' : window.end_start_of, - 'string_prototype' : window.string_prototype, - 'utc' : window.utc, - 'week_year' : window.week_year, - 'weekday' : window.weekday, - 'weeks' : window.weeks, - 'zones' : window.zones, - - // lang - 'lang:ar-ma' : window['lang:ar-ma'], - 'lang:ar' : window['lang:ar'], - 'lang:bg' : window['lang:bg'], - 'lang:br' : window['lang:br'], - 'lang:bs' : window['lang:bs'], - 'lang:ca' : window['lang:ca'], - 'lang:cs' : window['lang:cs'], - 'lang:cv' : window['lang:cv'], - 'lang:cy' : window['lang:cy'], - 'lang:da' : window['lang:da'], - 'lang:de' : window['lang:de'], - 'lang:el' : window['lang:el'], - 'lang:en-au' : window['lang:en-au'], - 'lang:en-ca' : window['lang:en-ca'], - 'lang:en-gb' : window['lang:en-gb'], - 'lang:en' : window['lang:en'], - 'lang:eo' : window['lang:eo'], - 'lang:es' : window['lang:es'], - 'lang:et' : window['lang:et'], - 'lang:eu' : window['lang:eu'], - 'lang:fa' : window['lang:fa'], - 'lang:fi' : window['lang:fi'], - 'lang:fo' : window['lang:fo'], - 'lang:fr-ca' : window['lang:fr-ca'], - 'lang:fr' : window['lang:fr'], - 'lang:gl' : window['lang:gl'], - 'lang:he' : window['lang:he'], - 'lang:hi' : window['lang:hi'], - 'lang:hr' : window['lang:hr'], - 'lang:hu' : window['lang:hu'], - 'lang:id' : window['lang:id'], - 'lang:is' : window['lang:is'], - 'lang:it' : window['lang:it'], - 'lang:ja' : window['lang:ja'], - 'lang:ka' : window['lang:ka'], - 'lang:ko' : window['lang:ko'], - 'lang:lb' : window['lang:lb'], - 'lang:lt' : window['lang:lt'], - 'lang:lv' : window['lang:lv'], - 'lang:ml' : window['lang:ml'], - 'lang:mr' : window['lang:mr'], - 'lang:ms-my' : window['lang:ms-my'], - 'lang:nb' : window['lang:nb'], - 'lang:ne' : window['lang:ne'], - 'lang:nl' : window['lang:nl'], - 'lang:nn' : window['lang:nn'], - 'lang:pl' : window['lang:pl'], - 'lang:pt-br' : window['lang:pt-br'], - 'lang:pt' : window['lang:pt'], - 'lang:ro' : window['lang:ro'], - 'lang:ru' : window['lang:ru'], - 'lang:sk' : window['lang:sk'], - 'lang:sl' : window['lang:sl'], - 'lang:sq' : window['lang:sq'], - 'lang:sv' : window['lang:sv'], - 'lang:th' : window['lang:th'], - 'lang:tl-ph' : window['lang:tl-ph'], - 'lang:tr' : window['lang:tr'], - 'lang:tzm-la' : window['lang:tzm-la'], - 'lang:tzm' : window['lang:tzm'], - 'lang:uk' : window['lang:uk'], - 'lang:uz' : window['lang:uz'], - 'lang:vn' : window['lang:vn'], - 'lang:zh-cn' : window['lang:zh-cn'], - 'lang:zh-tw' : window['lang:zh-tw'] -}); +nodeunit.run(NPM_TESTS); From 87238c4c0caf201fd30b70b2c3eba848e7e0efae Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Tue, 24 Dec 2013 17:45:59 +0100 Subject: [PATCH 10/23] Add environment variables for sauce-labs in Grunt task To use sauce testing from a dev machine please contact ichernev on github. --- Gruntfile.js | 23 +++++++++++++++-------- min/moment-with-langs.js | 29 +++++++++++++---------------- package.json | 1 + 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index d8ca9869fe..d2c47fd739 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -30,15 +30,16 @@ module.exports = function (grunt) { dest: 'min/tests.js' } }, - - karma: { + env : { + sauceLabs : (grunt.file.exists('.sauce-labs.creds') ? + grunt.file.readJSON('.sauce-labs.creds') : {}) + }, + karma : { options: { frameworks: ['nodeunit'], files: [ 'min/moment-with-langs.js', 'min/tests.js', - // 'test/moment/**/*.js', - // 'test/lang/**/*.js', 'test/browser.js' ], sauceLabs: { @@ -175,6 +176,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-env'); grunt.loadNpmTasks('grunt-karma'); // Default task. @@ -184,12 +186,17 @@ module.exports = function (grunt) { grunt.registerTask('test', ['test:node', 'test:browser']); grunt.registerTask('test:node', ['nodeunit']); grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome']); - grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); + grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'env:sauceLabs', 'karma:sauce']); + grunt.registerTask('test:travis-sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); // travis build task - grunt.registerTask('build:travis', ['jshint', 'test:node', 'test:sauce-browser']); + grunt.registerTask('build:travis', [ + 'jshint', 'test:node', 'test:travis-sauce-browser' + ]); // Task to be run when releasing a new version - grunt.registerTask('release', ['jshint', 'nodeunit', 'concat', - 'embed_languages', 'component', 'uglify']); + grunt.registerTask('release', [ + 'jshint', 'nodeunit', 'concat', 'embed_languages', + 'component', 'uglify' + ]); }; diff --git a/min/moment-with-langs.js b/min/moment-with-langs.js index 7af0f9401e..fa3fa03770 100644 --- a/min/moment-with-langs.js +++ b/min/moment-with-langs.js @@ -62,15 +62,16 @@ // iso 8601 regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', isoDates = [ - 'YYYY-MM-DD', - 'GGGG-[W]WW', - 'GGGG-[W]WW-E', - 'YYYY-DDD' + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] ], // iso time formats and regexes @@ -366,7 +367,7 @@ // left zero fill a number // see http://jsperf.com/left-zero-filling for performance comparison function leftZeroFill(number, targetLength, forceSign) { - var output = Math.abs(number) + '', + var output = '' + Math.abs(number), sign = number >= 0; while (output.length < targetLength) { @@ -1342,20 +1343,20 @@ // date from iso format function makeDateFromString(config) { - var i, + var i, l, string = config._i, match = isoRegex.exec(string); if (match) { config._pf.iso = true; - for (i = 4; i > 0; i--) { - if (match[i]) { + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { // match[5] should be "T" or undefined - config._f = isoDates[i - 1] + (match[6] || " "); + config._f = isoDates[i][0] + (match[6] || " "); break; } } - for (i = 0; i < 4; i++) { + for (i = 0, l = isoTimes.length; i < l; i++) { if (isoTimes[i][1].exec(string)) { config._f += isoTimes[i][0]; break; @@ -1496,11 +1497,7 @@ //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - // The only solid way to create an iso date from year is to use - // a string format (Date.UTC handles only years > 1900). Don't ask why - // it doesn't need Z at the end. - var d = new Date(leftZeroFill(year, 6, true) + '-01-01').getUTCDay(), - daysToAdd, dayOfYear; + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; weekday = weekday != null ? weekday : firstDayOfWeek; daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0); diff --git a/package.json b/package.json index 80b82996ef..1049644d0a 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "grunt-contrib-concat": "latest", "grunt-contrib-uglify": "latest", "grunt-contrib-watch": "latest", + "grunt-env": "latest", "grunt-lib-legacyhelpers": "latest", "grunt-karma": "~0.7.2", "karma": "~0.11.0", From 2f852e23aee6820efdfefb03f1c847b772e6f131 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Tue, 24 Dec 2013 17:46:48 +0100 Subject: [PATCH 11/23] Add encrypted sauce-labs user/pass in .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 97c14b9b03..a8e8c7c2f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,8 @@ node_js: env: global: - - secure: "Secure username token goes here!" - - secure: "Secure access key token goes here!" + - secure: "i2Dl7NUAflgYdJV5one365q4RAePpLcCoKUT72c9isv891GfReRiGblfLUKRmsSpo1zfx1kIgpqOCShbR2D8rIL2t9dQ7RH4e5i5TbP1QSD0nCwBxOf6TcIQnN57Y8FgId102nsvI99DxH8cV8Xo3k0JnOCr5ZSQf90qCxXvG6U=" + - secure: "bEE5axgvIkPKpEx+PcpVNQZWPFrbLAYrPh7YEn9c5GRM0z8tL78a/hg/WSZCkb0wfM0zlQyOx1wpFBSwGQTqL/+r0DBVr4MbEHSyHGXLBJqsjZDHaf6jC1jxKsYryd8Cuf/41HR3rJes2N08KQgzEjasKooo7wUqk461c6TeZdA=" before_script: - npm install -g grunt-cli From 77af2b050dd4b6a4f5ee85705fae51ccbb7110e9 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Wed, 25 Dec 2013 02:46:36 +0100 Subject: [PATCH 12/23] Add Firefox to karma browsers --- Gruntfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index d2c47fd739..ba62ae798f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -78,7 +78,7 @@ module.exports = function (grunt) { }, chrome: { singleRun: true, - browsers: ['Chrome'], + browsers: ['Chrome', 'Firefox'], }, sauce: { singleRun: true, From 1ad6a9e25791a3c93163f7f4b9169752e08700df Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Wed, 25 Dec 2013 02:52:27 +0100 Subject: [PATCH 13/23] Add missing karma launchers to package.json --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 1049644d0a..7f061f5df6 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "grunt-lib-legacyhelpers": "latest", "grunt-karma": "~0.7.2", "karma": "~0.11.0", + "karma-chrome-launcher": "latest", + "karma-firefox-launcher": "latest", "karma-nodeunit": "~0.1.1", "karma-sauce-launcher": "~0.1" }, From aa8699df5b0b76454f051c59b5a3646548d8d8fa Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Wed, 25 Dec 2013 21:42:33 +0100 Subject: [PATCH 14/23] Don't lint auxiliary test fragments --- Gruntfile.js | 5 ++++- test/browser-prefix.js | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index ba62ae798f..0d3fb617ff 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -117,7 +117,10 @@ module.exports = function (grunt) { all : ["test/moment/**/*.js", "test/lang/**/*.js"] }, jshint: { - all: ["Gruntfile.js", "moment.js", "lang/**/*.js", "test/**/*.js"], + all: [ + "Gruntfile.js", "moment.js", "lang/**/*.js", "test/**/*.js", + "!test/browser*.js" + ], options: { "node" : true, "browser" : true, diff --git a/test/browser-prefix.js b/test/browser-prefix.js index 771369028e..7123d7620c 100644 --- a/test/browser-prefix.js +++ b/test/browser-prefix.js @@ -1,4 +1,4 @@ (function () { - var global = this; - var require = function() { return global.moment; }; - var exports = global.NPM_TESTS = {}; + var global = this, + require = function() { return global.moment; }, + exports = global.NPM_TESTS = {}; From 980e5d886389626f7061f5f276fb3f70c02aa245 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 17:39:55 +0100 Subject: [PATCH 15/23] .gitignore min/tests.js and sauce_connect.log --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a7a0d0486f..e94c22b809 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ node_modules/ .DS_Store min/moment+customlangs.js min/moment+customlangs.min.js +min/tests.js +sauce_connect.log From 914ec1369e2db59c80d5cb1266b4e79722385d28 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 17:41:19 +0100 Subject: [PATCH 16/23] Make firefox a separate karma launcher --- Gruntfile.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 0d3fb617ff..718019858c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -78,7 +78,11 @@ module.exports = function (grunt) { }, chrome: { singleRun: true, - browsers: ['Chrome', 'Firefox'], + browsers: ['Chrome'], + }, + firefox: { + singleRun: true, + browsers: ['Firefox'], }, sauce: { singleRun: true, @@ -188,7 +192,7 @@ module.exports = function (grunt) { //test tasks grunt.registerTask('test', ['test:node', 'test:browser']); grunt.registerTask('test:node', ['nodeunit']); - grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome']); + grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome', 'karma:firefox']); grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'env:sauceLabs', 'karma:sauce']); grunt.registerTask('test:travis-sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); From 8bc02f72c9a756ae1e8ac11f6435db9a74141207 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 17:42:07 +0100 Subject: [PATCH 17/23] Use dots reporter for sauce --- Gruntfile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Gruntfile.js b/Gruntfile.js index 718019858c..74f559788b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -85,6 +85,7 @@ module.exports = function (grunt) { browsers: ['Firefox'], }, sauce: { + options: {reporters: ['dots']}, singleRun: true, browsers: [ 'sl_chrome_win_xp', From f44ce424a8b2fb0b53f0c4aaca3ad216b2bcb863 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 17:56:43 +0100 Subject: [PATCH 18/23] Workaround for safari bug --- test/moment/create.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/moment/create.js b/test/moment/create.js index 7c22208edb..6baf65f7bc 100644 --- a/test/moment/create.js +++ b/test/moment/create.js @@ -746,8 +746,12 @@ exports.create = { //can parse other stuff too test.equal(moment('1999-W37-4 3:30', 'GGGG-[W]WW-E HH:mm').format('YYYY MM DD HH:mm'), '1999 09 16 03:30', "parsing weeks and hours"); - // Years less than 100 - ver('0098-06', 'GGGG-WW', "0098 02 03", "small years work", true); + // In safari, all years before 1300 are shifted back with one day. + // http://stackoverflow.com/questions/20768975/safari-subtracts-1-day-from-dates-before-1300 + if (new Date("1300-01-01").getUTCFullYear() === 1300) { + // Years less than 100 + ver('0098-06', 'GGGG-WW', "0098 02 03", "small years work", true); + } test.done(); }, From 3359c912330d7db10171e7bf0194b0cf011b82fd Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 18:12:10 +0100 Subject: [PATCH 19/23] Get rid of console.log in tests --- test/moment/diff.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/moment/diff.js b/test/moment/diff.js index 19217bb39d..ea12d78203 100644 --- a/test/moment/diff.js +++ b/test/moment/diff.js @@ -121,7 +121,6 @@ exports.diff = { "diff across DST" : function (test) { var dst = dstForYear(2012), a, b, daysInMonth; if (!dst) { - console.log("No DST?"); test.done(); return; } From b737b15702e806256452245602e19fff9c59d283 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 20:11:50 +0100 Subject: [PATCH 20/23] Add test:server --- Gruntfile.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 74f559788b..3afd89d132 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -67,22 +67,25 @@ module.exports = function (grunt) { sl_ff_linux: { base: 'SauceLabs', browserName: 'firefox', - platform: 'Linux', + platform: 'Linux' }, sl_safari_osx: { base: 'SauceLabs', browserName: 'safari', - platform: 'OS X 10.8', + platform: 'OS X 10.8' } - }, + } + }, + server: { + browsers: [] }, chrome: { singleRun: true, - browsers: ['Chrome'], + browsers: ['Chrome'] }, firefox: { singleRun: true, - browsers: ['Firefox'], + browsers: ['Firefox'] }, sauce: { options: {reporters: ['dots']}, @@ -150,6 +153,7 @@ module.exports = function (grunt) { "sub" : true, "strict" : false, "white" : true, + "es3" : true, "globals": { "define": false } @@ -193,6 +197,7 @@ module.exports = function (grunt) { //test tasks grunt.registerTask('test', ['test:node', 'test:browser']); grunt.registerTask('test:node', ['nodeunit']); + grunt.registerTask('test:server', ['concat', 'embed_languages', 'karma:server']); grunt.registerTask('test:browser', ['concat', 'embed_languages', 'karma:chrome', 'karma:firefox']); grunt.registerTask('test:sauce-browser', ['concat', 'embed_languages', 'env:sauceLabs', 'karma:sauce']); grunt.registerTask('test:travis-sauce-browser', ['concat', 'embed_languages', 'karma:sauce']); From c027289e38dc2d5dfe69920ec91a09e7fc02471c Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Fri, 27 Dec 2013 20:12:16 +0100 Subject: [PATCH 21/23] Fix IE8 bug --- moment.js | 10 +++------- test/moment/is_valid.js | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/moment.js b/moment.js index f62ca4baac..5292c5ad42 100644 --- a/moment.js +++ b/moment.js @@ -71,7 +71,7 @@ ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-DDD', /\d{4}-\d{3}/] ], // iso time formats and regexes @@ -367,7 +367,7 @@ // left zero fill a number // see http://jsperf.com/left-zero-filling for performance comparison function leftZeroFill(number, targetLength, forceSign) { - var output = Math.abs(number) + '', + var output = '' + Math.abs(number), sign = number >= 0; while (output.length < targetLength) { @@ -1497,11 +1497,7 @@ //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - // The only solid way to create an iso date from year is to use - // a string format (Date.UTC handles only years > 1900). Don't ask why - // it doesn't need Z at the end. - var d = new Date(leftZeroFill(year, 6, true) + '-01-01').getUTCDay(), - daysToAdd, dayOfYear; + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; weekday = weekday != null ? weekday : firstDayOfWeek; daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0); diff --git a/test/moment/is_valid.js b/test/moment/is_valid.js index f805e59eb2..728a2b949c 100644 --- a/test/moment/is_valid.js +++ b/test/moment/is_valid.js @@ -259,5 +259,5 @@ exports.is_valid = { test.ok(moment("3:25", ["h:mma", "hh:mma", "H:mm", "HH:mm"]).isValid()); test.done(); - }, + } }; From 893ea4f92fd05768bac5fd15d7d65cb6c9ad8a42 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Sat, 28 Dec 2013 13:06:30 -0800 Subject: [PATCH 22/23] Make jshint happy --- Gruntfile.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 3afd89d132..607ce9048b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -204,12 +204,12 @@ module.exports = function (grunt) { // travis build task grunt.registerTask('build:travis', [ - 'jshint', 'test:node', 'test:travis-sauce-browser' + 'jshint', 'test:node', 'test:travis-sauce-browser' ]); // Task to be run when releasing a new version grunt.registerTask('release', [ - 'jshint', 'nodeunit', 'concat', 'embed_languages', - 'component', 'uglify' + 'jshint', 'nodeunit', 'concat', 'embed_languages', + 'component', 'uglify' ]); }; From af7619662c2e9e43559107fb3070b96087e41b29 Mon Sep 17 00:00:00 2001 From: Iskren Chernev Date: Sun, 29 Dec 2013 01:27:32 -0800 Subject: [PATCH 23/23] Update sauce access key --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a8e8c7c2f1..f1bd43c45d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,8 @@ node_js: env: global: - - secure: "i2Dl7NUAflgYdJV5one365q4RAePpLcCoKUT72c9isv891GfReRiGblfLUKRmsSpo1zfx1kIgpqOCShbR2D8rIL2t9dQ7RH4e5i5TbP1QSD0nCwBxOf6TcIQnN57Y8FgId102nsvI99DxH8cV8Xo3k0JnOCr5ZSQf90qCxXvG6U=" - - secure: "bEE5axgvIkPKpEx+PcpVNQZWPFrbLAYrPh7YEn9c5GRM0z8tL78a/hg/WSZCkb0wfM0zlQyOx1wpFBSwGQTqL/+r0DBVr4MbEHSyHGXLBJqsjZDHaf6jC1jxKsYryd8Cuf/41HR3rJes2N08KQgzEjasKooo7wUqk461c6TeZdA=" + - secure: "CIzz5komT5c6Y8EoOhYo4CvV8ryQ78gfmZQgSKe2cTeUJU0Hr/kxqqe2W0LYx8bkCqJbuzZQ4Awh6drD+03jCqrHN1r4YHoX61eVnqe2ijAhyRh6i45CzjiUlKROTztFU9mDNAOQpOhItE1Zjj3oL0F/b6AC8UKIRTcHuSOPD34=" + - secure: "EhJqzT4RueTZ85zbM3MhY6Ziut2t220UsABIwLSWDTgNyn3Kiqx+Z6Lc0YMm1XDe2Srxj3EY77ujzkMp8oYEc5RGW+ZpbJlCyZjNceb/ntb6RuPqXd7ZnE9Ir1cyudCHus8XIBiXWKKVTnPUw6J+ySXyigoi1rz2G5j4guzXXJ0=" before_script: - npm install -g grunt-cli