diff --git a/.travis.yml b/.travis.yml index 5eccbe3a5e..2a7b83a62d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,9 +20,12 @@ env: - secure: "gqjqISbxBJK6byFbsmr1AyP1qoWH+rap06A2gI7v72+Tn2PU2nYkIMUkCvhZw6K889jv+LhQ/ybcBxDOXHpNCExCnSgB4dcnmYp+9oeNZb37jSP0rQ+Ib4OTLjzc3/FawE/fUq5kukZTC7porzc/k0qJNLAZRx3YLALmK1GIdUY=" - secure: "Gghh/e3Gsbj1+4RR9Lh2aR/xJl35HWiHqlPIeSUqE9D7uDCVTAwNce/dGL3Ew7uJPfJ6Pgr70wD3zgu3stw0Zmzayax0hiDtGwcQCxVIER08wqGANK9C2Q7PYJkNTNtiTo6ehKWbdV4Z+/U+TEYyQfpQTDbAFYk/vVpsdjp0Lmc=" - secure: "RTbRdx4G/2OTLfrZtP1VbRljxEmd6A1F3GqXboeQTldsnAlwpsES65es5CE3ub/rmixLApOY9ot7OPmNixFgC2Y8xOsV7lNCC62QVpmqQEDyGFFQKb3yO6/dmwQxdsCqGfzf9Np6Wh5V22QFvr50ZLKLd7Uhd9oXMDIk/z1MJ3o=" + - secure: "Besg41eyU+2mfxrywQ4ydOShMdc34ImaO0S0ENP+aCOBuyNBIgP59wy5tBMmyai2/8eInYeVps4Td96mWInMMxzTe3Bar7eTLG5tWVKRSr/wc4NBPZ/ppoPAmCEsz9Y+VptRH9/FO8n7hsL9EFZ+xBKbG+C0SccGoyBDpA5j7/w=" + - secure: "Ptiv7phCImFP3ALIz+sMQzrZg8k7C1gLZbFBhWxjnQr3g06wIfX3Ls5y9OHvxid+lOZZjISui3wzBVgpVHqwHUYf96+r0mo6/mJ+F4ffUmShZANVaIMD/JRTnXhUQJbvntGLvxn1EYWPdNM+2IHJrMipnjHxU9tkgAnlel4Zdew=" matrix: - TWBS_TEST=core - TWBS_TEST=validate-html - TWBS_TEST=sauce-js-unit + - TWBS_TEST=browserstack-js-unit matrix: fast_finish: true diff --git a/Gruntfile.js b/Gruntfile.js index 4d5671565c..9f365b376b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -351,6 +351,7 @@ module.exports = function (grunt) { // These plugins provide necessary tasks. require('load-grunt-tasks')(grunt, {scope: 'devDependencies'}); + grunt.loadNpmTasks('browserstack-runner'); // Docs HTML validation task grunt.registerTask('validate-html', ['jekyll', 'validation']); @@ -372,6 +373,12 @@ module.exports = function (grunt) { testSubtasks.push('connect'); testSubtasks.push('saucelabs-qunit'); } + // Only run BrowserStack tests if there's a BrowserStack access key + if (typeof process.env.BROWSERSTACK_KEY !== 'undefined' + // Skip BrowserStack if running a different subset of the test suite + && (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'browserstack-js-unit')) { + testSubtasks.push('browserstack_runner'); + } grunt.registerTask('test', testSubtasks); // JS distribution task. diff --git a/browserstack.json b/browserstack.json new file mode 100644 index 0000000000..53802465ee --- /dev/null +++ b/browserstack.json @@ -0,0 +1,43 @@ +{ + "username": "--secure--", + "key": "--secure--", + "test_path": "js/tests/index.html", + "browsers": [ + { + "browser": "firefox", + "browser_version": "latest", + "os": "OS X", + "os_version": "Mavericks" + }, + { + "browser": "safari", + "browser_version": "latest", + "os": "OS X", + "os_version": "Mavericks" + }, + { + "browser": "chrome", + "browser_version": "latest", + "os": "OS X", + "os_version": "Mavericks" + }, + { + "browser": "firefox", + "browser_version": "latest", + "os": "Windows", + "os_version": "8.1" + }, + { + "browser": "chrome", + "browser_version": "latest", + "os": "Windows", + "os_version": "8.1" + }, + { + "browser": "Mobile Safari", + "os": "ios", + "os_version": "7.0", + "device": "iPhone 5S" + } + ] +} diff --git a/package.json b/package.json index 14d42ab7ee..6d44ee937b 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ } ], "devDependencies": { + "browserstack-runner": "~0.0.13", "btoa": "~1.1.1", "grunt": "~0.4.2", "grunt-banner": "~0.2.0",