aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/twbs/bootstrap/build/saucelabs-unit-test.js
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/twbs/bootstrap/build/saucelabs-unit-test.js')
-rw-r--r--vendor/twbs/bootstrap/build/saucelabs-unit-test.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/vendor/twbs/bootstrap/build/saucelabs-unit-test.js b/vendor/twbs/bootstrap/build/saucelabs-unit-test.js
new file mode 100644
index 000000000..b4d952536
--- /dev/null
+++ b/vendor/twbs/bootstrap/build/saucelabs-unit-test.js
@@ -0,0 +1,116 @@
+/*!
+ * Script to run our Sauce Labs tests.
+ * Copyright 2017-2018 The Bootstrap Authors
+ * Copyright 2017-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*
+Docs: https://wiki.saucelabs.com/display/DOCS/Platform+Configurator
+Mac Opera is not currently supported by Sauce Labs
+Win Opera 15+ is not currently supported by Sauce Labs
+iOS Chrome is not currently supported by Sauce Labs
+*/
+
+'use strict'
+
+const path = require('path')
+const JSUnitSaucelabs = require('jsunitsaucelabs')
+
+const jsUnitSaucelabs = new JSUnitSaucelabs({
+ username: process.env.SAUCE_USERNAME,
+ password: process.env.SAUCE_ACCESS_KEY,
+ build: process.env.TRAVIS_JOB_ID
+})
+
+const testURL = 'http://localhost:3000/js/tests/index.html?hidepassed'
+const browsersFile = require(path.resolve(__dirname, './sauce_browsers.json'))
+const errorMessages = [
+ 'Test exceeded maximum duration',
+ 'Test exceeded maximum duration after 180 seconds'
+]
+let jobsDone = 0
+let jobsSucceeded = 0
+
+const waitingCallback = (error, body, id) => {
+ if (error) {
+ console.error(error)
+ process.exit(1)
+ }
+
+ if (typeof body !== 'undefined') {
+ if (!body.completed) {
+ setTimeout(() => {
+ jsUnitSaucelabs.getStatus(id, (error, body) => {
+ waitingCallback(error, body, id)
+ })
+ }, 2000)
+ } else {
+ const test = body['js tests'][0]
+ const platform = test.platform.join(', ')
+ let passed = false
+ let errorStr = false
+
+ if (test.result !== null) {
+ if (typeof test.result === 'string' && errorMessages.includes(test.result)) {
+ errorStr = test.result
+ } else {
+ passed = test.result.total === test.result.passed
+ }
+ }
+
+ console.log(`Tested ${testURL}`)
+ console.log(`Platform: ${platform}`)
+ console.log(`Passed: ${passed}`)
+ console.log(`URL: ${test.url}\n`)
+
+ if (errorStr) {
+ console.error(`${platform}: ${errorStr}`)
+ }
+
+ if (passed) {
+ jobsSucceeded++
+ }
+ jobsDone++
+
+ // Exit
+ if (jobsDone === browsersFile.length - 1) {
+ jsUnitSaucelabs.stop()
+ if (jobsDone > jobsSucceeded) {
+ const failedTests = jobsDone - jobsSucceeded
+ throw new Error(`${failedTests} test${failedTests > 1 ? 's' : ''} failed.`)
+ }
+
+ console.log('All tests passed')
+ process.exit(0)
+ }
+ }
+ }
+}
+
+jsUnitSaucelabs.on('tunnelCreated', () => {
+ browsersFile.forEach((tmpBrowser) => {
+ const browsersPlatform = typeof tmpBrowser.platform === 'undefined' ? tmpBrowser.platformName : tmpBrowser.platform
+ const browsersArray = [browsersPlatform, tmpBrowser.browserName, tmpBrowser.version]
+
+ jsUnitSaucelabs.start([browsersArray], testURL, 'qunit', (error, success) => {
+ if (typeof success !== 'undefined') {
+ const taskIds = success['js tests']
+
+ if (!taskIds || taskIds.length === 0) {
+ throw new Error('Error starting tests through Sauce Labs API')
+ }
+
+ taskIds.forEach((id) => {
+ jsUnitSaucelabs.getStatus(id, (error, body) => {
+ waitingCallback(error, body, id)
+ })
+ })
+ } else {
+ console.error(error)
+ }
+ })
+ })
+})
+
+jsUnitSaucelabs.initTunnel()