diff --git a/Rakefile b/Rakefile index 887548b8d59d..3bd3d1b0890b 100644 --- a/Rakefile +++ b/Rakefile @@ -170,24 +170,60 @@ task :package => [:clean, :minify, :version, :docs] do end -namespace :server do +desc 'Run all AngularJS tests' +task :test, :browsers, :misc_options do |t, args| - desc 'Run JsTestDriver Server' - task :start do - sh %x(java -jar lib/jstestdriver/JsTestDriver.jar --browser open --port 9876) + puts args + + [ 'test:jqlite', + 'test:jquery', + 'test:modules', + 'test:e2e' + ].each do |task| + Rake::Task[task].invoke(args[:browsers], args[:misc_options]) + end +end + + +namespace :test do + + desc 'Run jqLite-based unit test suite (single run)' + task :jqlite, :browsers, :misc_options do |t, args| + start_testacular('testacular-jqlite.conf.js', true, args[:browsers], args[:misc_options]) end - desc 'Run JavaScript tests against the server' - task :test do - sh %(java -jar lib/jstestdriver/JsTestDriver.jar --tests all) + + desc 'Run jQuery-based unit test suite (single run)' + task :jquery, :browsers do |t, args| + start_testacular('testacular-jquery.conf.js', true, args[:browsers], args[:misc_options]) + end + + + desc 'Run bundled modules unit test suite (single run)' + task :modules, :browsers, :misc_options do |t, args| + start_testacular('testacular-modules.conf.js', true, args[:browsers], args[:misc_options]) end + + desc 'Run e2e test suite (single run)' + task :e2e, :browsers, :misc_options do |t, args| + start_testacular('testacular-e2e.conf.js', true, args[:browsers], args[:misc_options]) + end end -desc 'Run JavaScript tests' -task :test do - sh %(java -jar lib/jstestdriver/JsTestDriver.jar --tests all --browser open --port 9876) +namespace :autotest do + + desc 'Run jqLite-based unit test suite (autowatch)' + task :jqlite, :browsers, :misc_options do |t, args| + start_testacular('testacular-jqlite.conf.js', false, args[:browsers], args[:misc_options]) + end + + + desc 'Run jQuery-based unit test suite (autowatch)' + task :jquery, :browsers, :misc_options do |t, args| + start_testacular('testacular-jquery.conf.js', false, args[:browsers], args[:misc_options]) + end end @@ -302,3 +338,12 @@ def rewrite_file(filename) f.write content end end + + +def start_testacular(config, singleRun, browsers, misc_options) + sh "testacular start " + + "#{config} " + + "#{'--single-run=true' if singleRun} " + + "#{'--browsers=' + browsers.gsub('+', ',') if browsers} " + + "#{misc_options}" +end diff --git a/angularFiles.js b/angularFiles.js index 70502b044712..02bdf3a1d062 100644 --- a/angularFiles.js +++ b/angularFiles.js @@ -196,36 +196,30 @@ angularFiles = { ] }; -// Execute only in slim-jim -if (typeof JASMINE_ADAPTER !== 'undefined') { - // Testacular config - var mergedFiles = []; - angularFiles.jstd.forEach(function(file) { - // replace @ref - var match = file.match(/^\@(.*)/); - if (match) { - var deps = angularFiles[match[1]]; - if (!deps) { - console.log('No dependency:' + file) +if (exports) { + exports.files = angularFiles + exports.mergeFiles = function mergeFiles() { + var files = []; + + [].splice.call(arguments, 0).forEach(function(file) { + if (file.match(/testacular/)) { + files.push(file); + } else { + angularFiles[file].forEach(function(f) { + // replace @ref + var match = f.match(/^\@(.*)/); + if (match) { + var deps = angularFiles[match[1]]; + files = files.concat(deps); + } else { + if (!/jstd|jasmine/.test(f)) { //TODO(i): remove once we don't have jstd/jasmine in repo + files.push(f); + } + } + }); } - mergedFiles = mergedFiles.concat(deps); - } else { - mergedFiles.push(file); - } - }); + }); - files = [JASMINE, JASMINE_ADAPTER]; - - mergedFiles.forEach(function(file){ - if (/jstd|jasmine/.test(file)) return; - files.push(file); - }); - - - exclude = angularFiles.jstdExclude; - - autoWatch = true; - autoWatchInterval = 1; - logLevel = LOG_INFO; - logColors = true; + return files; + } } diff --git a/testacular-e2e.conf.js b/testacular-e2e.conf.js new file mode 100644 index 000000000000..149ee9705d91 --- /dev/null +++ b/testacular-e2e.conf.js @@ -0,0 +1,13 @@ +var angularFiles = require(__dirname + '/angularFiles.js'); + +files = [ANGULAR_SCENARIO, ANGULAR_SCENARIO_ADAPTER, 'build/docs/docs-scenario.js']; + +autoWatch = false; +singleRun = true; +logLevel = LOG_INFO; +logColors = true; +browsers = ['Chrome'] + +proxies = { + '/': 'http://localhost:8000/build/docs/' +}; diff --git a/testacular-jqlite.conf.js b/testacular-jqlite.conf.js new file mode 100644 index 000000000000..6cf548159b4a --- /dev/null +++ b/testacular-jqlite.conf.js @@ -0,0 +1,9 @@ +var angularFiles = require(__dirname + '/angularFiles.js'); + +files = angularFiles.mergeFiles(JASMINE, JASMINE_ADAPTER, 'jstd'); +exclude = ['**/*jasmine*/**', '**/*jstd*/**'].concat(angularFiles.files.jstdExclude); + +autoWatch = true; +logLevel = LOG_INFO; +logColors = true; +browsers = ['Chrome'] diff --git a/testacular-jquery.conf.js b/testacular-jquery.conf.js new file mode 100644 index 000000000000..68de8356a3a5 --- /dev/null +++ b/testacular-jquery.conf.js @@ -0,0 +1,9 @@ +var angularFiles = require(__dirname + '/angularFiles.js'); + +files = angularFiles.mergeFiles(JASMINE, JASMINE_ADAPTER, 'jstdJquery'); +exclude = ['**/*jasmine*/**', '**/*jstd*/**'].concat(angularFiles.files.jstdJqueryExclude); + +autoWatch = true; +logLevel = LOG_INFO; +logColors = true; +browsers = ['Chrome'] diff --git a/testacular-modules.conf.js b/testacular-modules.conf.js new file mode 100644 index 000000000000..ac03d07629ba --- /dev/null +++ b/testacular-modules.conf.js @@ -0,0 +1,9 @@ +var angularFiles = require(__dirname + '/angularFiles.js'); + +files = angularFiles.mergeFiles(JASMINE, JASMINE_ADAPTER, 'jstdModules', 'angularSrcModules'); +exclude = ['**/*jasmine*/**', '**/*jstd*/**']; + +autoWatch = true; +logLevel = LOG_INFO; +logColors = true; +browsers = ['Chrome']