mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 10:07:48 +00:00
First round of sauce support cleanup.
This commit is contained in:
@@ -6,11 +6,8 @@ node_js:
|
|||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- BIN="node" BUILD=false MAKE=false OPTION="" SAUCELABS=false
|
- BIN="node" BUILD=false MAKE=false OPTION="" SAUCELABS=false
|
||||||
|
- SAUCE_USERNAME="jdalton"
|
||||||
# SauceLabs credentials:
|
- secure: "woILQltl1pI3DgadZ5NrcqntdPvnRmQBwIVNZL91Ht5d9snIhgyAixI6xNAS8F8BzD9RzqzVPHay5sHfn+GhNaojcaiHs1nXAbdyclevMyfP+3MQ1HGfMSU0bv1GdT35LJ+C0u4Y3SuuZSbBlNEeLXRPMngPZahf4xL8RsZz/is="
|
||||||
- SAUCE_USERNAME="pimterry"
|
|
||||||
- secure: "KBETrs7sRrU3V8itVgLzBUVkzP9XXpAEZVjbd8icoNL9eVW3h4Kk5g/bOa06IAml0ThnMZztIwMKkplCIam6W/Cv+eIOiQT2kkG32lHFwbVXEkbq+rKj8XmpRmXBf/Th63V+u5GMVmQlYrIfdXju6cFfSEZ2uG8SHVg9hFyyf8c="
|
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
- BUILD="compat"
|
- BUILD="compat"
|
||||||
- BUILD="modern"
|
- BUILD="modern"
|
||||||
@@ -54,7 +51,7 @@ before_install:
|
|||||||
- "[ $BIN == 'rhino' ] && echo -e '#!/bin/sh\\njava -jar /opt/rhino-1.7R5/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino || true"
|
- "[ $BIN == 'rhino' ] && echo -e '#!/bin/sh\\njava -jar /opt/rhino-1.7R5/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino || true"
|
||||||
- "[ $BIN == 'ringo' ] && wget http://ringojs.org/downloads/ringojs-0.9.zip && sudo unzip ringojs-0.9 -d /opt && rm ringojs-0.9.zip || true"
|
- "[ $BIN == 'ringo' ] && wget http://ringojs.org/downloads/ringojs-0.9.zip && sudo unzip ringojs-0.9 -d /opt && rm ringojs-0.9.zip || true"
|
||||||
- "[ $BIN == 'ringo' ] && sudo ln -s /opt/ringojs-0.9/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo || true"
|
- "[ $BIN == 'ringo' ] && sudo ln -s /opt/ringojs-0.9/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo || true"
|
||||||
- "[ $SAUCELABS != false ] && npm install connect request sauce-tunnel || true"
|
- "[ $SAUCELABS != false ] && npm i connect request sauce-tunnel || true"
|
||||||
script:
|
script:
|
||||||
- "[ $BIN == 'istanbul' ] && $BIN cover ./test/test.js || true"
|
- "[ $BIN == 'istanbul' ] && $BIN cover ./test/test.js || true"
|
||||||
- "[ $BUILD != false ] && [ $BUILD != 'compat' ] && MAKE=true || true"
|
- "[ $BUILD != false ] && [ $BUILD != 'compat' ] && MAKE=true || true"
|
||||||
|
|||||||
@@ -16,13 +16,6 @@
|
|||||||
<script src="./asset/test-ui.js"></script>
|
<script src="./asset/test-ui.js"></script>
|
||||||
<div id="qunit"></div>
|
<div id="qunit"></div>
|
||||||
<div id="exports"></div>
|
<div id="exports"></div>
|
||||||
<script>
|
|
||||||
// Report test results in a global, for saucelabs
|
|
||||||
window.global_test_results = null;
|
|
||||||
QUnit.done(function (results) {
|
|
||||||
window.global_test_results = results;
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<script>
|
<script>
|
||||||
// set bad shims
|
// set bad shims
|
||||||
Array._isArray = Array.isArray;
|
Array._isArray = Array.isArray;
|
||||||
@@ -79,6 +72,12 @@
|
|||||||
delete Object._defineProperty;
|
delete Object._defineProperty;
|
||||||
delete Object._keys;
|
delete Object._keys;
|
||||||
|
|
||||||
|
// report test results in a global for Sauce Labs
|
||||||
|
var global_test_results;
|
||||||
|
QUnit.done(function(results) {
|
||||||
|
global_test_results = results;
|
||||||
|
});
|
||||||
|
|
||||||
// load Lo-Dash again to overwrite the existing `_` value
|
// load Lo-Dash again to overwrite the existing `_` value
|
||||||
document.write('<script src="' + (ui.isModularize ? '../lodash.js' : ui.buildPath) + '"><\/script>');
|
document.write('<script src="' + (ui.isModularize ? '../lodash.js' : ui.buildPath) + '"><\/script>');
|
||||||
|
|
||||||
|
|||||||
@@ -1,108 +1,113 @@
|
|||||||
var connect = require('connect');
|
var connect = require('connect'),
|
||||||
var path = require('path');
|
path = require('path'),
|
||||||
var SauceTunnel = require('sauce-tunnel');
|
request = require('request'),
|
||||||
var request = require('request');
|
SauceTunnel = require('sauce-tunnel');
|
||||||
|
|
||||||
|
var port = 8081,
|
||||||
|
username = process.env.SAUCE_USERNAME,
|
||||||
|
accessKey = process.env.SAUCE_ACCESS_KEY;
|
||||||
|
|
||||||
var port = 8081;
|
|
||||||
var username = process.env['SAUCE_USERNAME'];
|
|
||||||
var accessKey = process.env['SAUCE_ACCESS_KEY'];
|
|
||||||
var platforms = [
|
var platforms = [
|
||||||
["Windows 7", "chrome", ""],
|
['Windows 7', 'chrome', ''],
|
||||||
["Windows 7", "firefox", "24"],
|
['Windows 7', 'firefox', '24'],
|
||||||
["Windows 7", "internet explorer", "9"]
|
['Windows 7', 'internet explorer', '9']
|
||||||
];
|
];
|
||||||
|
|
||||||
// Create a web server for the local dir
|
// create a web server for the local dir
|
||||||
var server = connect.createServer(
|
var server = connect.createServer(
|
||||||
connect.static(path.resolve(__dirname, '..'))
|
connect.static(path.resolve(__dirname, '..'))
|
||||||
).listen(port);
|
).listen(port);
|
||||||
|
|
||||||
// Set up sauce connect so we can use this server from saucelabs
|
// set up sauce connect so we can use this server from saucelabs
|
||||||
var tunnelTimeout = 10000;
|
var tunnelTimeout = 10000,
|
||||||
var tunnel = new SauceTunnel(username, accessKey, null, true, tunnelTimeout);
|
tunnel = new SauceTunnel(username, accessKey, null, true, tunnelTimeout);
|
||||||
|
|
||||||
console.log("Opening sauce connect tunnel...");
|
console.log('Opening sauce connect tunnel...');
|
||||||
tunnel.start(function (success) {
|
|
||||||
if (success) {
|
tunnel.start(function(success) {
|
||||||
console.log("Sauce connect tunnel opened");
|
if (success) {
|
||||||
runTests();
|
console.log('Sauce connect tunnel opened');
|
||||||
} else {
|
runTests();
|
||||||
console.error("Failed to open sauce connect tunnel")
|
} else {
|
||||||
process.exit(2);
|
console.error('Failed to open sauce connect tunnel')
|
||||||
}
|
process.exit(2);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function runTests() {
|
function runTests() {
|
||||||
var testDefinition = {
|
var testDefinition = {
|
||||||
platforms: platforms,
|
'framework': 'qunit',
|
||||||
url: "http://localhost:" + port + "/test/index.html",
|
'platforms': platforms,
|
||||||
framework: "qunit"
|
'url': 'http://localhost:' + port + '/test/index.html'
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log("Starting saucelabs tests: " + JSON.stringify(testDefinition));
|
console.log('Starting saucelabs tests: ' + JSON.stringify(testDefinition));
|
||||||
|
|
||||||
request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests', {
|
request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests', {
|
||||||
auth: { user: username, pass: accessKey },
|
'auth': { 'user': username, 'pass': accessKey },
|
||||||
json: testDefinition
|
'json': testDefinition
|
||||||
}, function (error, response, body) {
|
}, function(error, response, body) {
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
var testIdentifier = body;
|
var testIdentifier = body;
|
||||||
waitForTestCompletion(testIdentifier);
|
waitForTestCompletion(testIdentifier);
|
||||||
} else {
|
} else {
|
||||||
console.error("Failed to submit test to SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body));
|
console.error('Failed to submit test to SauceLabs, status ' + response.statusCode + ', body:\n' + JSON.stringify(body));
|
||||||
process.exit(3);
|
process.exit(3);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function waitForTestCompletion(testIdentifier) {
|
function waitForTestCompletion(testIdentifier) {
|
||||||
request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests/status', {
|
request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests/status', {
|
||||||
auth: { user: username, pass: accessKey },
|
'auth': { 'user': username, 'pass': accessKey },
|
||||||
json: testIdentifier
|
'json': testIdentifier
|
||||||
}, function (error, response, body) {
|
}, function(error, response, body) {
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
if (body["completed"] == true) {
|
if (body.completed) {
|
||||||
handleTestResults(body["js tests"]);
|
handleTestResults(body['js tests']);
|
||||||
} else {
|
|
||||||
waitForTestCompletion(testIdentifier);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
console.error("Failed to check test status on SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body));
|
waitForTestCompletion(testIdentifier);
|
||||||
process.exit(4);
|
|
||||||
}
|
}
|
||||||
});
|
} else {
|
||||||
|
console.error('Failed to check test status on SauceLabs, status ' + response.statusCode + ', body:\n' + JSON.stringify(body));
|
||||||
|
process.exit(4);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleTestResults(results) {
|
function handleTestResults(results) {
|
||||||
var allTestsSuccessful = results.reduce(function (passedSoFar, test) {
|
var allTestsSuccessful = results.reduce(function(passedSoFar, test) {
|
||||||
return passedSoFar && test.result.failed === 0;
|
return passedSoFar && test.result.failed === 0;
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
if (allTestsSuccessful) {
|
if (allTestsSuccessful) {
|
||||||
console.log("Tests passed");
|
console.log('Tests passed');
|
||||||
} else {
|
}
|
||||||
var failingTests = results.filter(function (test) {
|
else {
|
||||||
return test.result.failed !== 0;
|
var failingTests = results.filter(function(test) {
|
||||||
});
|
return test.result.failed !== 0;
|
||||||
var failingPlatforms = failingTests.map(function (test) {
|
});
|
||||||
return test.platform;
|
|
||||||
});
|
|
||||||
|
|
||||||
console.error("Tests failed on platforms: " + JSON.stringify(failingPlatforms));
|
var failingPlatforms = failingTests.map(function(test) {
|
||||||
|
return test.platform;
|
||||||
|
});
|
||||||
|
|
||||||
failingTests.forEach(function (test) {
|
console.error('Tests failed on platforms: ' + JSON.stringify(failingPlatforms));
|
||||||
var platform = JSON.stringify(test.platform);
|
|
||||||
|
|
||||||
if (test.result.failed) {
|
failingTests.forEach(function(test) {
|
||||||
console.error(test.result.failed + " failures on " + platform + ". See " + test.url + " for details.");
|
var platform = JSON.stringify(test.platform);
|
||||||
} else {
|
|
||||||
console.error("Testing on " + platform + " failed; no results available. See " + test.url + " for details.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("Shutting down sauce connect tunnel...");
|
if (test.result.failed) {
|
||||||
tunnel.stop(function () {
|
console.error(test.result.failed + ' failures on ' + platform + '. See ' + test.url + ' for details.');
|
||||||
process.exit(allTestsSuccessful ? 0 : 1);
|
} else {
|
||||||
})
|
console.error('Testing on ' + platform + ' failed; no results available. See ' + test.url + ' for details.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Shutting down sauce connect tunnel...');
|
||||||
|
|
||||||
|
tunnel.stop(function() {
|
||||||
|
process.exit(allTestsSuccessful ? 0 : 1);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user