Skip to content

Commit

Permalink
Allow different builds to be tested more easily with a dropdown menu.
Browse files Browse the repository at this point in the history
  • Loading branch information
jdalton committed Jul 9, 2012
1 parent 87d7394 commit e75e6ed
Show file tree
Hide file tree
Showing 6 changed files with 139 additions and 40 deletions.
1 change: 1 addition & 0 deletions build.js
Expand Up @@ -810,6 +810,7 @@
// remove IE `shift` and `splice` fix
source = source.replace(/(?:\s*\/\/.*)*\n( +)if *\(value.length *=== *0[\s\S]+?\n\1}/, '');

source = removeVar(source, 'extendIteratorOptions');
source = removeVar(source, 'hasDontEnumBug');
source = removeVar(source, 'iteratorTemplate');
source = removeIsArgumentsFallback(source);
Expand Down
5 changes: 4 additions & 1 deletion test/backbone.html
Expand Up @@ -25,7 +25,10 @@ <h1>Test</h1>
<script src="../vendor/backbone/test/vendor/jquery-1.7.1.js"></script>
<script src="../vendor/backbone/test/vendor/qunit.js"></script>
<script src="../vendor/backbone/test/vendor/jslitmus.js"></script>
<script src="../lodash.js"></script>
<script src="ui.js"></script>
<script>
document.write('<script src="../' + QUnit.config.lodashFilename + '.js"><\/script>');
</script>
<script src="../vendor/backbone/backbone.js"></script>
<script src="../vendor/backbone/test/noconflict.js"></script>
<script src="../vendor/backbone/test/events.js"></script>
Expand Down
77 changes: 44 additions & 33 deletions test/index.html
Expand Up @@ -8,46 +8,57 @@
<body>
<div id="qunit"></div>
<script src="../vendor/qunit/qunit/qunit.js"></script>
<script src="ui.js"></script>
<script>
var _2,
_3 = Object.keys;

// set a bad shim
Object._keys = Object.keys;
Object.keys = function() { return []; };

// load Lo-Dash and expose it to the bad `Object.keys` shim
document.write('<script src="../' + QUnit.config.lodashFilename + '.js"><\/script>');
</script>
<script src="../lodash.js"></script>
<script>
var lodashBadKeys = _,
_ = 1;
// store Lo-Dash to test for bad shim detection
var lodashBadShim = _;

// restore nativeKeys
Object.keys = Object._keys;
delete Object._keys;

// set to test `_.noConflict`
_ = 1;

Object.keys = _3;
_3 = void 0;
// load Lo-Dash again to overwrite the existing `_` value
document.write('<script src="../' + QUnit.config.lodashFilename + '.js"><\/script>');

// load test.js if not using require.js
document.write(QUnit.urlParams.norequire
? '<script src="test.js"><\/script>'
: '<script src="../vendor/requirejs/require.js"><\/script>'
);
</script>
<script src="../lodash.js"></script>
<script src="../vendor/requirejs/require.js"></script>
<script>
if (/[?&]norequire=true(?:&|$)/.test(location.search)) {
require = define = null;
document.write('<script src="test.js"><\/script>');
}
else {
require({
'baseUrl': '../vendor/requirejs/',
'urlArgs': 't=' + (+new Date),
'paths': {
'lodash': '../../lodash',
'underscore': './../../lodash'
}
},
['lodash', 'underscore'], function(lodash, lodashAsUnderscore) {
_2 = lodash.noConflict();
_2.moduleName = 'lodash';

_3 = lodashAsUnderscore.noConflict();
_3.moduleName = 'underscore';

require(['test.js']);
});
}
// load Lo-Dash as a module
var lodashModule,
underscoreModule;

window.require && require({
'baseUrl': '../vendor/requirejs/',
'urlArgs': 't=' + (+new Date),
'paths': {
'lodash': '../../' + QUnit.config.lodashFilename,
'underscore': './../../' + QUnit.config.lodashFilename
}
},
['lodash', 'underscore'], function(lodash, underscore) {
lodashModule = lodash.noConflict();
lodashModule.moduleName = 'lodash';

underscoreModule = underscore.noConflict();
underscoreModule.moduleName = 'underscore';

require(['test.js']);
});
</script>
</body>
</html>
11 changes: 6 additions & 5 deletions test/test.js
@@ -1,4 +1,5 @@
(function(window, undefined) {
;(function(window, undefined) {
'use strict';

/** Use a single load function */
var load = typeof require == 'function' ? require : window.load;
Expand Down Expand Up @@ -71,23 +72,23 @@
(function() {
test('supports loading lodash.js as the "lodash" module', function() {
if (window.document && window.require) {
equal((_2 || {}).moduleName, 'lodash');
equal((lodashModule || {}).moduleName, 'lodash');
} else {
skipTest(1)
}
});

test('supports loading lodash.js as the "underscore" module', function() {
if (window.document && window.require) {
equal((_3 || {}).moduleName, 'underscore');
equal((underscoreModule || {}).moduleName, 'underscore');
} else {
skipTest(1)
}
});

test('avoids overwritten native methods', function() {
if (window.lodashBadKeys) {
notDeepEqual(lodashBadKeys.keys({ 'a': 1 }), []);
if (window.document) {
notDeepEqual(lodashBadShim.keys({ 'a': 1 }), []);
} else {
skipTest(1);
}
Expand Down
80 changes: 80 additions & 0 deletions test/ui.js
@@ -0,0 +1,80 @@
;(function(window) {
'use strict';

/** `QUnit.addEvent` shortcut */
var addEvent = QUnit.addEvent;

/** The Lo-Dash build to load */
var build = (/build=([^&]+)/.exec(location.search) || [])[1];

/** A flag to determine if RequireJS should be loaded */
var norequire = /[?&]norequire=true(?:&|$)/.test(location.search);

/*--------------------------------------------------------------------------*/

// assign `QUnit.config` properties
QUnit.config.lodashFilename = build == 'prod'
? 'lodash.min'
: (build == 'custom' ? 'lodash.custom.min' : 'lodash');

// assign `QUnit.urlParams` properties
QUnit.extend(QUnit.urlParams, {
'build': build,
'norequire': norequire
});

// initialize the build dropdown
addEvent(window, 'load', function() {
function eventHandler(event) {
var search = location.search.replace(/^\?|&?(?:build|norequire)=[^&]*&?/g, '');
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
location.href =
location.href.split('?')[0] + '?' +
(search ? search + '&' : '') + 'build=' +
dropdown[dropdown.selectedIndex].value +
(checkbox.checked ? '&norequire=true' : '');
}

function init() {
var header = document.getElementById('qunit-header');
if (header) {
header.appendChild(label1);
header.appendChild(label2);

if (build == 'prod') {
dropdown.selectedIndex = 1;
} else if (build == 'custom') {
dropdown.selectedIndex = 2;
}
checkbox.checked = norequire;
addEvent(checkbox, 'click', eventHandler);
addEvent(dropdown, 'change', eventHandler);
}
else {
setTimeout(init, 15);
}
}

var label1 = document.createElement('label');
label1.innerHTML =
'<input name="norequire" type="checkbox">norequire</label>';

var label2 = document.createElement('label');
label2.innerHTML =
'<select name="build">' +
'<option value="dev">developement</option>' +
'<option value="prod">production</option>' +
'<option value="custom">custom</option>' +
'</select>build';

var checkbox = label1.firstChild,
dropdown = label2.firstChild;

init();
});

}(this));
5 changes: 4 additions & 1 deletion test/underscore.html
Expand Up @@ -22,7 +22,10 @@
<script src="../vendor/underscore/test/vendor/jquery.js"></script>
<script src="../vendor/underscore/test/vendor/qunit.js"></script>
<script src="../vendor/underscore/test/vendor/jslitmus.js"></script>
<script src="../lodash.js"></script>
<script src="ui.js"></script>
<script>
document.write('<script src="../' + QUnit.config.lodashFilename + '.js"><\/script>');
</script>
<script src="../vendor/underscore/test/collections.js"></script>
<script src="../vendor/underscore/test/arrays.js"></script>
<script src="../vendor/underscore/test/functions.js"></script>
Expand Down

0 comments on commit e75e6ed

Please sign in to comment.