Permalink
Browse files

Remove jQuery dependency.

  • Loading branch information...
1 parent 8f5e091 commit 3eabdb8f368cb66a5e8059440db042a8e0c50426 @braddunbar braddunbar committed Jan 27, 2014
Showing with 38 additions and 10,207 deletions.
  1. +2 −2 test/arrays.js
  2. +2 −2 test/chaining.js
  3. +7 −8 test/collections.js
  4. +2 −2 test/functions.js
  5. +9 −27 test/index.html
  6. +7 −6 test/objects.js
  7. +0 −80 test/speed.js
  8. +9 −6 test/utility.js
  9. +0 −9,404 test/vendor/jquery.js
  10. +0 −670 test/vendor/jslitmus.js
View
4 test/arrays.js
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+(function() {
module("Arrays");
@@ -223,4 +223,4 @@ $(document).ready(function() {
equal(_.range(0, -10, -1).join(' '), '0 -1 -2 -3 -4 -5 -6 -7 -8 -9', 'final example in the Python docs');
});
-});
+})();
View
4 test/chaining.js
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+(function() {
module("Chaining");
@@ -62,4 +62,4 @@ $(document).ready(function() {
deepEqual(o.filter(function(i) { return i > 2; }).value(), [3, 4]);
});
-});
+})();
View
15 test/collections.js
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+(function() {
module("Collections");
@@ -51,11 +51,10 @@ $(document).ready(function() {
deepEqual(ids, ['id1', 'id2'], 'Can use collection methods on NodeLists.');
}
- var ids = _.map($('#map-test').children(), function(n){ return n.id; });
- deepEqual(ids, ['id1', 'id2'], 'Can use collection methods on jQuery Array-likes.');
-
- var ids = _.map(document.images, function(n){ return n.id; });
- ok(ids[0] == 'chart_image', 'can use collection methods on HTMLCollections');
+ var ids = _.map({length: 2, 0: {id: '1'}, 1: {id: '2'}}, function(n){
+ return n.id;
+ });
+ deepEqual(ids, ['1', '2'], 'Can use collection methods on Array-likes.');
var ifnull = _.map(null, function(){});
ok(_.isArray(ifnull) && ifnull.length === 0, 'handles a null properly');
@@ -502,7 +501,7 @@ $(document).ready(function() {
test('size', function() {
equal(_.size({one : 1, two : 2, three : 3}), 3, 'can compute the size of an object');
equal(_.size([1, 2, 3]), 3, 'can compute the size of an array');
- equal(_.size($('<div>').add('<span>').add('<span>')), 3, 'can compute the size of jQuery objects');
+ equal(_.size({length: 3, 0: 0, 1: 0, 2: 0}), 3, 'can compute the size of Array-likes');
var func = function() {
return _.size(arguments);
@@ -516,4 +515,4 @@ $(document).ready(function() {
equal(_.size(null), 0, 'handles nulls');
});
-});
+})();
View
4 test/functions.js
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+(function() {
module("Functions");
@@ -372,4 +372,4 @@ $(document).ready(function() {
equal(testAfter(0, 1), 1, "after(0) should fire when first invoked");
});
-});
+})();
View
36 test/index.html
@@ -4,7 +4,15 @@
<title>Underscore Test Suite</title>
<link rel="stylesheet" href="vendor/qunit.css" type="text/css" media="screen">
<link rel="icon" href="../favicon.ico">
- <script src="vendor/jquery.js"></script>
+</head>
+<body>
+ <div id="qunit"></div>
+ <div id="qunit-fixture">
+ <div id="map-test">
+ <div id="id1"></div>
+ <div id="id2"></div>
+ </div>
+ </div>
<script src="vendor/qunit.js"></script>
<script src="vendor/jslitmus.js"></script>
<script src="../underscore.js"></script>
@@ -15,31 +23,5 @@
<script src="objects.js"></script>
<script src="utility.js"></script>
<script src="chaining.js"></script>
- <script src="speed.js"></script>
-</head>
-<body>
- <div id="qunit"></div>
- <div id="qunit-fixture">
- <div id="map-test">
- <div id="id1"></div>
- <div id="id2"></div>
- </div>
- </div>
- <br>
- <h1 class="qunit-header">Underscore Speed Suite</h1>
- <p>
- A representative sample of the functions are benchmarked here, to provide
- a sense of how fast they might run in different browsers.
- Each iteration runs on an array of 1000 elements.<br /><br />
- For example, the 'intersection' test measures the number of times you can
- find the intersection of two thousand-element arrays in one second.
- </p>
- <br>
- <script type="text/html" id="template">
- <%
- // a comment
- if (data) { data += 12345; }; %>
- <li><%= data %></li>
- </script>
</body>
</html>
View
13 test/objects.js
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+(function() {
module("Objects");
@@ -392,8 +392,9 @@ $(document).ready(function() {
// Setup remote variables for iFrame tests.
var iframe = document.createElement('iframe');
- jQuery(iframe).appendTo(document.body);
- var iDoc = iframe.contentDocument || iframe.contentWindow.document;
+ iframe.frameBorder = iframe.height = iframe.width = 0
+ document.body.appendChild(iframe);
+ var iDoc = (iDoc = iframe.contentDocument || iframe.contentWindow).document || iDoc;
iDoc.write(
"<script>\
parent.iElement = document.createElement('div');\
@@ -415,7 +416,7 @@ $(document).ready(function() {
test("isElement", function() {
ok(!_.isElement('div'), 'strings are not dom elements');
- ok(_.isElement($('html')[0]), 'the html tag is a DOM element');
+ ok(_.isElement(document.body), 'the body tag is a DOM element');
ok(_.isElement(iElement), 'even from another frame');
});
@@ -432,7 +433,7 @@ $(document).ready(function() {
test("isObject", function() {
ok(_.isObject(arguments), 'the arguments object is object');
ok(_.isObject([1, 2, 3]), 'and arrays');
- ok(_.isObject($('html')[0]), 'and DOM element');
+ ok(_.isObject(document.body), 'and DOM element');
ok(_.isObject(iElement), 'even from another frame');
ok(_.isObject(function () {}), 'and functions');
ok(_.isObject(iFunction), 'even from another frame');
@@ -587,4 +588,4 @@ $(document).ready(function() {
child.prototype = obj;
ok (_.has(child, "foo") == false, "has() does not check the prototype chain for a property.")
});
-});
+})();
View
80 test/speed.js
@@ -1,80 +0,0 @@
-(function() {
-
- var numbers = [];
- for (var i=0; i<1000; i++) numbers.push(i);
- var objArray = _.map(numbers, function(n){ return {num : n}; });
- var bigObj = {};
- _.times(1000, function(n){ bigObj['key' + n] = n; });
- var randomized = _.sortBy(numbers, function(){ return Math.random(); });
- var deep = _.map(_.range(100), function() { return _.range(1000); });
-
- JSLitmus.test('_.each()', function() {
- var timesTwo = [];
- _.each(numbers, function(num){ timesTwo.push(num * 2); });
- return timesTwo;
- });
-
- JSLitmus.test('_(list).each()', function() {
- var timesTwo = [];
- _(numbers).each(function(num){ timesTwo.push(num * 2); });
- return timesTwo;
- });
-
- JSLitmus.test('jQuery.each()', function() {
- var timesTwo = [];
- jQuery.each(numbers, function(){ timesTwo.push(this * 2); });
- return timesTwo;
- });
-
- JSLitmus.test('_.map()', function() {
- return _.map(objArray, function(obj){ return obj.num; });
- });
-
- JSLitmus.test('jQuery.map()', function() {
- return jQuery.map(objArray, function(obj){ return obj.num; });
- });
-
- JSLitmus.test('_.pluck()', function() {
- return _.pluck(objArray, 'num');
- });
-
- JSLitmus.test('_.uniq()', function() {
- return _.uniq(randomized);
- });
-
- JSLitmus.test('_.uniq() (sorted)', function() {
- return _.uniq(numbers, true);
- });
-
- JSLitmus.test('_.sortBy()', function() {
- return _.sortBy(numbers, function(num){ return -num; });
- });
-
- JSLitmus.test('_.isEqual()', function() {
- return _.isEqual(numbers, randomized);
- });
-
- JSLitmus.test('_.keys()', function() {
- return _.keys(bigObj);
- });
-
- JSLitmus.test('_.values()', function() {
- return _.values(bigObj);
- });
-
- JSLitmus.test('_.intersection()', function() {
- return _.intersection(numbers, randomized);
- });
-
- JSLitmus.test('_.range()', function() {
- return _.range(1000);
- });
-
- JSLitmus.test('_.flatten()', function() {
- return _.flatten(deep);
- });
-
- JSLitmus.test('_.flatten() (shallow)', function() {
- return _.flatten(deep, true);
- });
-})();
View
15 test/utility.js
@@ -1,4 +1,4 @@
-$(document).ready(function() {
+(function() {
var templateSettings;
@@ -162,10 +162,13 @@ $(document).ready(function() {
};
equal(stooge.template(), "I'm Moe");
- if (!$.browser.msie) {
- var fromHTML = _.template($('#template').html());
- equal(fromHTML({data : 12345}).replace(/\s/g, ''), '<li>24690</li>');
- }
+ template = _.template('\n \
+ <%\n \
+ // a comment\n \
+ if (data) { data += 12345; }; %>\n \
+ <li><%= data %></li>\n \
+ ');
+ equal(template({data : 12345}).replace(/\s/g, ''), '<li>24690</li>');
_.templateSettings = {
evaluate : /\{\{([\s\S]+?)\}\}/g,
@@ -284,4 +287,4 @@ $(document).ready(function() {
strictEqual(template(), '<<\nx\n>>');
});
-});
+})();
View
9,404 test/vendor/jquery.js
0 additions, 9,404 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
670 test/vendor/jslitmus.js
@@ -1,670 +0,0 @@
-// JSLitmus.js
-//
-// History:
-// 2008-10-27: Initial release
-// 2008-11-09: Account for iteration loop overhead
-// 2008-11-13: Added OS detection
-// 2009-02-25: Create tinyURL automatically, shift-click runs tests in reverse
-//
-// Copyright (c) 2008-2009, Robert Kieffer
-// All Rights Reserved
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the
-// Software), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-(function() {
- // Private methods and state
-
- // Get platform info but don't go crazy trying to recognize everything
- // that's out there. This is just for the major platforms and OSes.
- var platform = 'unknown platform', ua = navigator.userAgent;
-
- // Detect OS
- var oses = ['Windows','iPhone OS','(Intel |PPC )?Mac OS X','Linux'].join('|');
- var pOS = new RegExp('((' + oses + ') [^ \);]*)').test(ua) ? RegExp.$1 : null;
- if (!pOS) pOS = new RegExp('((' + oses + ')[^ \);]*)').test(ua) ? RegExp.$1 : null;
-
- // Detect browser
- var pName = /(Chrome|MSIE|Safari|Opera|Firefox)/.test(ua) ? RegExp.$1 : null;
-
- // Detect version
- var vre = new RegExp('(Version|' + pName + ')[ \/]([^ ;]*)');
- var pVersion = (pName && vre.test(ua)) ? RegExp.$2 : null;
- var platform = (pOS && pName && pVersion) ? pName + ' ' + pVersion + ' on ' + pOS : 'unknown platform';
-
- /**
- * A smattering of methods that are needed to implement the JSLitmus testbed.
- */
- var jsl = {
- /**
- * Enhanced version of escape()
- */
- escape: function(s) {
- s = s.replace(/,/g, '\\,');
- s = escape(s);
- s = s.replace(/\+/g, '%2b');
- s = s.replace(/ /g, '+');
- return s;
- },
-
- /**
- * Get an element by ID.
- */
- $: function(id) {
- return document.getElementById(id);
- },
-
- /**
- * Null function
- */
- F: function() {},
-
- /**
- * Set the status shown in the UI
- */
- status: function(msg) {
- var el = jsl.$('jsl_status');
- if (el) el.innerHTML = msg || '';
- },
-
- /**
- * Convert a number to an abbreviated string like, "15K" or "10M"
- */
- toLabel: function(n) {
- if (n == Infinity) {
- return 'Infinity';
- } else if (n > 1e9) {
- n = Math.round(n/1e8);
- return n/10 + 'B';
- } else if (n > 1e6) {
- n = Math.round(n/1e5);
- return n/10 + 'M';
- } else if (n > 1e3) {
- n = Math.round(n/1e2);
- return n/10 + 'K';
- }
- return n;
- },
-
- /**
- * Copy properties from src to dst
- */
- extend: function(dst, src) {
- for (var k in src) dst[k] = src[k]; return dst;
- },
-
- /**
- * Like Array.join(), but for the key-value pairs in an object
- */
- join: function(o, delimit1, delimit2) {
- if (o.join) return o.join(delimit1); // If it's an array
- var pairs = [];
- for (var k in o) pairs.push(k + delimit1 + o[k]);
- return pairs.join(delimit2);
- },
-
- /**
- * Array#indexOf isn't supported in IE, so we use this as a cross-browser solution
- */
- indexOf: function(arr, o) {
- if (arr.indexOf) return arr.indexOf(o);
- for (var i = 0; i < this.length; i++) if (arr[i] === o) return i;
- return -1;
- }
- };
-
- /**
- * Test manages a single test (created with
- * JSLitmus.test())
- *
- * @private
- */
- var Test = function (name, f) {
- if (!f) throw new Error('Undefined test function');
- if (!(/function[^\(]*\(([^,\)]*)/).test(f.toString())) {
- throw new Error('"' + name + '" test: Test is not a valid Function object');
- }
- this.loopArg = RegExp.$1;
- this.name = name;
- this.f = f;
- };
-
- jsl.extend(Test, /** @lends Test */ {
- /** Calibration tests for establishing iteration loop overhead */
- CALIBRATIONS: [
- new Test('calibrating loop', function(count) {while (count--);}),
- new Test('calibrating function', jsl.F)
- ],
-
- /**
- * Run calibration tests. Returns true if calibrations are not yet
- * complete (in which case calling code should run the tests yet again).
- * onCalibrated - Callback to invoke when calibrations have finished
- */
- calibrate: function(onCalibrated) {
- for (var i = 0; i < Test.CALIBRATIONS.length; i++) {
- var cal = Test.CALIBRATIONS[i];
- if (cal.running) return true;
- if (!cal.count) {
- cal.isCalibration = true;
- cal.onStop = onCalibrated;
- //cal.MIN_TIME = .1; // Do calibrations quickly
- cal.run(2e4);
- return true;
- }
- }
- return false;
- }
- });
-
- jsl.extend(Test.prototype, {/** @lends Test.prototype */
- /** Initial number of iterations */
- INIT_COUNT: 10,
- /** Max iterations allowed (i.e. used to detect bad looping functions) */
- MAX_COUNT: 1e9,
- /** Minimum time a test should take to get valid results (secs) */
- MIN_TIME: .5,
-
- /** Callback invoked when test state changes */
- onChange: jsl.F,
-
- /** Callback invoked when test is finished */
- onStop: jsl.F,
-
- /**
- * Reset test state
- */
- reset: function() {
- delete this.count;
- delete this.time;
- delete this.running;
- delete this.error;
- },
-
- /**
- * Run the test (in a timeout). We use a timeout to make sure the browser
- * has a chance to finish rendering any UI changes we've made, like
- * updating the status message.
- */
- run: function(count) {
- count = count || this.INIT_COUNT;
- jsl.status(this.name + ' x ' + count);
- this.running = true;
- var me = this;
- setTimeout(function() {me._run(count);}, 200);
- },
-
- /**
- * The nuts and bolts code that actually runs a test
- */
- _run: function(count) {
- var me = this;
-
- // Make sure calibration tests have run
- if (!me.isCalibration && Test.calibrate(function() {me.run(count);})) return;
- this.error = null;
-
- try {
- var start, f = this.f, now, i = count;
-
- // Start the timer
- start = new Date();
-
- // Now for the money shot. If this is a looping function ...
- if (this.loopArg) {
- // ... let it do the iteration itself
- f(count);
- } else {
- // ... otherwise do the iteration for it
- while (i--) f();
- }
-
- // Get time test took (in secs)
- this.time = Math.max(1,new Date() - start)/1000;
-
- // Store iteration count and per-operation time taken
- this.count = count;
- this.period = this.time/count;
-
- // Do we need to do another run?
- this.running = this.time <= this.MIN_TIME;
-
- // ... if so, compute how many times we should iterate
- if (this.running) {
- // Bump the count to the nearest power of 2
- var x = this.MIN_TIME/this.time;
- var pow = Math.pow(2, Math.max(1, Math.ceil(Math.log(x)/Math.log(2))));
- count *= pow;
- if (count > this.MAX_COUNT) {
- throw new Error('Max count exceeded. If this test uses a looping function, make sure the iteration loop is working properly.');
- }
- }
- } catch (e) {
- // Exceptions are caught and displayed in the test UI
- this.reset();
- this.error = e;
- }
-
- // Figure out what to do next
- if (this.running) {
- me.run(count);
- } else {
- jsl.status('');
- me.onStop(me);
- }
-
- // Finish up
- this.onChange(this);
- },
-
- /**
- * Get the number of operations per second for this test.
- *
- * @param normalize if true, iteration loop overhead taken into account
- */
- getHz: function(/**Boolean*/ normalize) {
- var p = this.period;
-
- // Adjust period based on the calibration test time
- if (normalize && !this.isCalibration) {
- var cal = Test.CALIBRATIONS[this.loopArg ? 0 : 1];
-
- // If the period is within 20% of the calibration time, then zero the
- // it out
- p = p < cal.period*1.2 ? 0 : p - cal.period;
- }
-
- return Math.round(1/p);
- },
-
- /**
- * Get a friendly string describing the test
- */
- toString: function() {
- return this.name + ' - ' + this.time/this.count + ' secs';
- }
- });
-
- // CSS we need for the UI
- var STYLESHEET = '<style> \
- #jslitmus {font-family:sans-serif; font-size: 12px;} \
- #jslitmus a {text-decoration: none;} \
- #jslitmus a:hover {text-decoration: underline;} \
- #jsl_status { \
- margin-top: 10px; \
- font-size: 10px; \
- color: #888; \
- } \
- A IMG {border:none} \
- #test_results { \
- margin-top: 10px; \
- font-size: 12px; \
- font-family: sans-serif; \
- border-collapse: collapse; \
- border-spacing: 0px; \
- } \
- #test_results th, #test_results td { \
- border: solid 1px #ccc; \
- vertical-align: top; \
- padding: 3px; \
- } \
- #test_results th { \
- vertical-align: bottom; \
- background-color: #ccc; \
- padding: 1px; \
- font-size: 10px; \
- } \
- #test_results #test_platform { \
- color: #444; \
- text-align:center; \
- } \
- #test_results .test_row { \
- color: #006; \
- cursor: pointer; \
- } \
- #test_results .test_nonlooping { \
- border-left-style: dotted; \
- border-left-width: 2px; \
- } \
- #test_results .test_looping { \
- border-left-style: solid; \
- border-left-width: 2px; \
- } \
- #test_results .test_name {white-space: nowrap;} \
- #test_results .test_pending { \
- } \
- #test_results .test_running { \
- font-style: italic; \
- } \
- #test_results .test_done {} \
- #test_results .test_done { \
- text-align: right; \
- font-family: monospace; \
- } \
- #test_results .test_error {color: #600;} \
- #test_results .test_error .error_head {font-weight:bold;} \
- #test_results .test_error .error_body {font-size:85%;} \
- #test_results .test_row:hover td { \
- background-color: #ffc; \
- text-decoration: underline; \
- } \
- #chart { \
- margin: 10px 0px; \
- width: 250px; \
- } \
- #chart img { \
- border: solid 1px #ccc; \
- margin-bottom: 5px; \
- } \
- #chart #tiny_url { \
- height: 40px; \
- width: 250px; \
- } \
- #jslitmus_credit { \
- font-size: 10px; \
- color: #888; \
- margin-top: 8px; \
- } \
- </style>';
-
- // HTML markup for the UI
- var MARKUP = '<div id="jslitmus"> \
- <button onclick="JSLitmus.runAll(event)">Run Tests</button> \
- <button id="stop_button" disabled="disabled" onclick="JSLitmus.stop()">Stop Tests</button> \
- <br \> \
- <br \> \
- <input type="checkbox" style="vertical-align: middle" id="test_normalize" checked="checked" onchange="JSLitmus.renderAll()""> Normalize results \
- <table id="test_results"> \
- <colgroup> \
- <col /> \
- <col width="100" /> \
- </colgroup> \
- <tr><th id="test_platform" colspan="2">' + platform + '</th></tr> \
- <tr><th>Test</th><th>Ops/sec</th></tr> \
- <tr id="test_row_template" class="test_row" style="display:none"> \
- <td class="test_name"></td> \
- <td class="test_result">Ready</td> \
- </tr> \
- </table> \
- <div id="jsl_status"></div> \
- <div id="chart" style="display:none"> \
- <a id="chart_link" target="_blank"><img id="chart_image"></a> \
- TinyURL (for chart): \
- <iframe id="tiny_url" frameBorder="0" scrolling="no" src=""></iframe> \
- </div> \
- <a id="jslitmus_credit" title="JSLitmus home page" href="http://code.google.com/p/jslitmus" target="_blank">Powered by JSLitmus</a> \
- </div>';
-
- /**
- * The public API for creating and running tests
- */
- window.JSLitmus = {
- /** The list of all tests that have been registered with JSLitmus.test */
- _tests: [],
- /** The queue of tests that need to be run */
- _queue: [],
-
- /**
- * The parsed query parameters the current page URL. This is provided as a
- * convenience for test functions - it's not used by JSLitmus proper
- */
- params: {},
-
- /**
- * Initialize
- */
- _init: function() {
- // Parse query params into JSLitmus.params[] hash
- var match = (location + '').match(/([^?#]*)(#.*)?$/);
- if (match) {
- var pairs = match[1].split('&');
- for (var i = 0; i < pairs.length; i++) {
- var pair = pairs[i].split('=');
- if (pair.length > 1) {
- var key = pair.shift();
- var value = pair.length > 1 ? pair.join('=') : pair[0];
- this.params[key] = value;
- }
- }
- }
-
- // Write out the stylesheet. We have to do this here because IE
- // doesn't honor sheets written after the document has loaded.
- document.write(STYLESHEET);
-
- // Setup the rest of the UI once the document is loaded
- if (window.addEventListener) {
- window.addEventListener('load', this._setup, false);
- } else if (document.addEventListener) {
- document.addEventListener('load', this._setup, false);
- } else if (window.attachEvent) {
- window.attachEvent('onload', this._setup);
- }
-
- return this;
- },
-
- /**
- * Set up the UI
- */
- _setup: function() {
- var el = jsl.$('jslitmus_container');
- if (!el) document.body.appendChild(el = document.createElement('div'));
-
- el.innerHTML = MARKUP;
-
- // Render the UI for all our tests
- for (var i=0; i < JSLitmus._tests.length; i++)
- JSLitmus.renderTest(JSLitmus._tests[i]);
- },
-
- /**
- * (Re)render all the test results
- */
- renderAll: function() {
- for (var i = 0; i < JSLitmus._tests.length; i++)
- JSLitmus.renderTest(JSLitmus._tests[i]);
- JSLitmus.renderChart();
- },
-
- /**
- * (Re)render the chart graphics
- */
- renderChart: function() {
- var url = JSLitmus.chartUrl();
- jsl.$('chart_link').href = url;
- jsl.$('chart_image').src = url;
- jsl.$('chart').style.display = '';
-
- // Update the tiny URL
- jsl.$('tiny_url').src = 'http://tinyurl.com/api-create.php?url='+escape(url);
- },
-
- /**
- * (Re)render the results for a specific test
- */
- renderTest: function(test) {
- // Make a new row if needed
- if (!test._row) {
- var trow = jsl.$('test_row_template');
- if (!trow) return;
-
- test._row = trow.cloneNode(true);
- test._row.style.display = '';
- test._row.id = '';
- test._row.onclick = function() {JSLitmus._queueTest(test);};
- test._row.title = 'Run ' + test.name + ' test';
- trow.parentNode.appendChild(test._row);
- test._row.cells[0].innerHTML = test.name;
- }
-
- var cell = test._row.cells[1];
- var cns = [test.loopArg ? 'test_looping' : 'test_nonlooping'];
-
- if (test.error) {
- cns.push('test_error');
- cell.innerHTML =
- '<div class="error_head">' + test.error + '</div>' +
- '<ul class="error_body"><li>' +
- jsl.join(test.error, ': ', '</li><li>') +
- '</li></ul>';
- } else {
- if (test.running) {
- cns.push('test_running');
- cell.innerHTML = 'running';
- } else if (jsl.indexOf(JSLitmus._queue, test) >= 0) {
- cns.push('test_pending');
- cell.innerHTML = 'pending';
- } else if (test.count) {
- cns.push('test_done');
- var hz = test.getHz(jsl.$('test_normalize').checked);
- cell.innerHTML = hz != Infinity ? hz : '&infin;';
- } else {
- cell.innerHTML = 'ready';
- }
- }
- cell.className = cns.join(' ');
- },
-
- /**
- * Create a new test
- */
- test: function(name, f) {
- // Create the Test object
- var test = new Test(name, f);
- JSLitmus._tests.push(test);
-
- // Re-render if the test state changes
- test.onChange = JSLitmus.renderTest;
-
- // Run the next test if this one finished
- test.onStop = function(test) {
- if (JSLitmus.onTestFinish) JSLitmus.onTestFinish(test);
- JSLitmus.currentTest = null;
- JSLitmus._nextTest();
- };
-
- // Render the new test
- this.renderTest(test);
- },
-
- /**
- * Add all tests to the run queue
- */
- runAll: function(e) {
- e = e || window.event;
- var reverse = e && e.shiftKey, len = JSLitmus._tests.length;
- for (var i = 0; i < len; i++) {
- JSLitmus._queueTest(JSLitmus._tests[!reverse ? i : (len - i - 1)]);
- }
- },
-
- /**
- * Remove all tests from the run queue. The current test has to finish on
- * it's own though
- */
- stop: function() {
- while (JSLitmus._queue.length) {
- var test = JSLitmus._queue.shift();
- JSLitmus.renderTest(test);
- }
- },
-
- /**
- * Run the next test in the run queue
- */
- _nextTest: function() {
- if (!JSLitmus.currentTest) {
- var test = JSLitmus._queue.shift();
- if (test) {
- jsl.$('stop_button').disabled = false;
- JSLitmus.currentTest = test;
- test.run();
- JSLitmus.renderTest(test);
- if (JSLitmus.onTestStart) JSLitmus.onTestStart(test);
- } else {
- jsl.$('stop_button').disabled = true;
- JSLitmus.renderChart();
- }
- }
- },
-
- /**
- * Add a test to the run queue
- */
- _queueTest: function(test) {
- if (jsl.indexOf(JSLitmus._queue, test) >= 0) return;
- JSLitmus._queue.push(test);
- JSLitmus.renderTest(test);
- JSLitmus._nextTest();
- },
-
- /**
- * Generate a Google Chart URL that shows the data for all tests
- */
- chartUrl: function() {
- var n = JSLitmus._tests.length, markers = [], data = [];
- var d, min = 0, max = -1e10;
- var normalize = jsl.$('test_normalize').checked;
-
- // Gather test data
- for (var i=0; i < JSLitmus._tests.length; i++) {
- var test = JSLitmus._tests[i];
- if (test.count) {
- var hz = test.getHz(normalize);
- var v = hz != Infinity ? hz : 0;
- data.push(v);
- markers.push('t' + jsl.escape(test.name + '(' + jsl.toLabel(hz)+ ')') + ',000000,0,' +
- markers.length + ',10');
- max = Math.max(v, max);
- }
- }
- if (markers.length <= 0) return null;
-
- // Build chart title
- var title = document.getElementsByTagName('title');
- title = (title && title.length) ? title[0].innerHTML : null;
- var chart_title = [];
- if (title) chart_title.push(title);
- chart_title.push('Ops/sec (' + platform + ')');
-
- // Build labels
- var labels = [jsl.toLabel(min), jsl.toLabel(max)];
-
- var w = 250, bw = 15;
- var bs = 5;
- var h = markers.length*(bw + bs) + 30 + chart_title.length*20;
-
- var params = {
- chtt: escape(chart_title.join('|')),
- chts: '000000,10',
- cht: 'bhg', // chart type
- chd: 't:' + data.join(','), // data set
- chds: min + ',' + max, // max/min of data
- chxt: 'x', // label axes
- chxl: '0:|' + labels.join('|'), // labels
- chsp: '0,1',
- chm: markers.join('|'), // test names
- chbh: [bw, 0, bs].join(','), // bar widths
- // chf: 'bg,lg,0,eeeeee,0,eeeeee,.5,ffffff,1', // gradient
- chs: w + 'x' + h
- };
- return 'http://chart.apis.google.com/chart?' + jsl.join(params, '=', '&');
- }
- };
-
- JSLitmus._init();
-})();

0 comments on commit 3eabdb8

Please sign in to comment.