summaryrefslogtreecommitdiffstats
path: root/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js')
-rw-r--r--Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js464
1 files changed, 0 insertions, 464 deletions
diff --git a/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js b/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js
deleted file mode 100644
index d77e8991f..000000000
--- a/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-var base = base || {};
-
-(function(){
-
-// Safari 5.1 lacks Function.prototype.bind.
-if (!('bind' in Function.prototype)) {
- Function.prototype.bind = function(thisObject) {
- var method = this;
- var boundArguments = [];
- for (var i = 1; i < arguments.length; ++i) {
- boundArguments.push(arguments[i]);
- }
- return function() {
- var actualParameters = [];
- for (var i = 0; i < boundArguments.length; ++i) {
- actualParameters.push(boundArguments[i]);
- }
- for (var i = 0; i < arguments.length; ++i) {
- actualParameters.push(arguments[i]);
- }
- return method.apply(thisObject, actualParameters);
- }
- }
-}
-
-base.asInteger = function(stringOrInteger)
-{
- if (typeof stringOrInteger == 'string')
- return parseInt(stringOrInteger);
- return stringOrInteger;
-};
-
-base.endsWith = function(string, suffix)
-{
- if (suffix.length > string.length)
- return false;
- var expectedIndex = string.length - suffix.length;
- return string.lastIndexOf(suffix) == expectedIndex;
-};
-
-base.repeatString = function(string, count)
-{
- return new Array(count + 1).join(string);
-};
-
-base.joinPath = function(parent, child)
-{
- if (parent.length == 0)
- return child;
- return parent + '/' + child;
-};
-
-base.dirName = function(path)
-{
- var directoryIndex = path.lastIndexOf('/');
- if (directoryIndex == -1)
- return path;
- return path.substr(0, directoryIndex);
-};
-
-base.trimExtension = function(url)
-{
- var index = url.lastIndexOf('.');
- if (index == -1)
- return url;
- return url.substr(0, index);
-}
-
-base.uniquifyArray = function(array)
-{
- var seen = {};
- var result = [];
- $.each(array, function(index, value) {
- if (seen[value])
- return;
- seen[value] = true;
- result.push(value);
- });
- return result;
-};
-
-base.flattenArray = function(arrayOfArrays)
-{
- if (!arrayOfArrays.length)
- return [];
- return arrayOfArrays.reduce(function(left, right) {
- return left.concat(right);
- });
-};
-
-base.filterDictionary = function(dictionary, predicate)
-{
- var result = {};
-
- for (var key in dictionary) {
- if (predicate(key))
- result[key] = dictionary[key];
- }
-
- return result;
-};
-
-base.mapDictionary = function(dictionary, functor)
-{
- var result = {};
-
- for (var key in dictionary) {
- var value = functor(dictionary[key]);
- if (typeof value !== 'undefined')
- result[key] = value;
- }
-
- return result;
-};
-
-base.filterTree = function(tree, isLeaf, predicate)
-{
- var filteredTree = {};
-
- function walkSubtree(subtree, directory)
- {
- for (var childName in subtree) {
- var child = subtree[childName];
- var childPath = base.joinPath(directory, childName);
- if (isLeaf(child)) {
- if (predicate(child))
- filteredTree[childPath] = child;
- continue;
- }
- walkSubtree(child, childPath);
- }
- }
-
- walkSubtree(tree, '');
- return filteredTree;
-};
-
-base.forEachDirectory = function(pathList, callback)
-{
- var pathsByDirectory = {};
- pathList.forEach(function(path) {
- var directory = base.dirName(path);
- pathsByDirectory[directory] = pathsByDirectory[directory] || [];
- pathsByDirectory[directory].push(path);
- });
- Object.keys(pathsByDirectory).sort().forEach(function(directory) {
- var paths = pathsByDirectory[directory];
- callback(directory + ' (' + paths.length + ' tests)', paths);
- });
-};
-
-base.parseJSONP = function(jsonp)
-{
- var startIndex = jsonp.indexOf('(') + 1;
- var endIndex = jsonp.lastIndexOf(')');
- if (startIndex == 0 || endIndex == -1)
- return {};
- return JSON.parse(jsonp.substr(startIndex, endIndex - startIndex));
-};
-
-base.RequestTracker = function(requestsInFlight, callback, args)
-{
- this._requestsInFlight = requestsInFlight;
- this._callback = callback;
- this._args = args || [];
- this._tryCallback();
-};
-
-base.RequestTracker.prototype = {
- _tryCallback: function()
- {
- if (!this._requestsInFlight && this._callback)
- this._callback.apply(null, this._args);
- },
- requestComplete: function()
- {
- --this._requestsInFlight;
- this._tryCallback();
- }
-}
-
-base.callInParallel = function(functionList, callback)
-{
- var requestTracker = new base.RequestTracker(functionList.length, callback);
-
- $.each(functionList, function(index, func) {
- func(function() {
- requestTracker.requestComplete();
- });
- });
-};
-
-base.callInSequence = function(func, argumentList, callback)
-{
- var nextIndex = 0;
-
- function callNext()
- {
- if (nextIndex >= argumentList.length) {
- callback();
- return;
- }
-
- func(argumentList[nextIndex++], callNext);
- }
-
- callNext();
-};
-
-base.CallbackIterator = function(callback, listOfArgumentArrays)
-{
- this._callback = callback;
- this._nextIndex = 0;
- this._listOfArgumentArrays = listOfArgumentArrays;
-};
-
-base.CallbackIterator.prototype.hasNext = function()
-{
- return this._nextIndex < this._listOfArgumentArrays.length;
-};
-
-base.CallbackIterator.prototype.hasPrevious = function()
-{
- return this._nextIndex - 2 >= 0;
-};
-
-base.CallbackIterator.prototype.callNext = function()
-{
- if (!this.hasNext())
- return;
- var args = this._listOfArgumentArrays[this._nextIndex];
- this._nextIndex++;
- this._callback.apply(null, args);
-};
-
-base.CallbackIterator.prototype.callPrevious = function()
-{
- if (!this.hasPrevious())
- return;
- var args = this._listOfArgumentArrays[this._nextIndex - 2];
- this._nextIndex--;
- this._callback.apply(null, args);
-};
-
-base.AsynchronousCache = function(fetch)
-{
- this._fetch = fetch;
- this._dataCache = {};
- this._callbackCache = {};
-};
-
-base.AsynchronousCache.prototype.get = function(key, callback)
-{
- var self = this;
-
- if (self._dataCache[key]) {
- // FIXME: Consider always calling callback asynchronously.
- callback(self._dataCache[key]);
- return;
- }
-
- if (key in self._callbackCache) {
- self._callbackCache[key].push(callback);
- return;
- }
-
- self._callbackCache[key] = [callback];
-
- self._fetch.call(null, key, function(data) {
- self._dataCache[key] = data;
-
- var callbackList = self._callbackCache[key];
- delete self._callbackCache[key];
-
- callbackList.forEach(function(cachedCallback) {
- cachedCallback(data);
- });
- });
-};
-
-base.AsynchronousCache.prototype.clear = function()
-{
- this._dataCache = {};
- this._callbackCache = {};
-}
-
-/*
- Maintains a dictionary of items, tracking their updates and removing items that haven't been updated.
- An "update" is a call to the "update" method.
- To remove stale items, call the "remove" method. It will remove all
- items that have not been been updated since the last call of "remove".
-*/
-base.UpdateTracker = function()
-{
- this._items = {};
- this._updated = {};
-}
-
-base.UpdateTracker.prototype = {
- /*
- Update an {key}/{item} pair. You can make the dictionary act as a set and
- skip the {item}, in which case the {key} is also the {item}.
- */
- update: function(key, object)
- {
- object = object || key;
- this._items[key] = object;
- this._updated[key] = 1;
- },
- exists: function(key)
- {
- return !!this.get(key);
- },
- get: function(key)
- {
- return this._items[key];
- },
- length: function()
- {
- return Object.keys(this._items).length;
- },
- /*
- Callback parameters are:
- - item
- - key
- - updated, which is true if the item was updated after last purge() call.
- */
- forEach: function(callback, thisObject)
- {
- if (!callback)
- return;
-
- Object.keys(this._items).sort().forEach(function(key) {
- var item = this._items[key];
- callback.call(thisObject || item, item, key, !!this._updated[key]);
- }, this);
- },
- purge: function(removeCallback, thisObject) {
- removeCallback = removeCallback || function() {};
- this.forEach(function(item, key, updated) {
- if (updated)
- return;
- removeCallback.call(thisObject || item, item);
- delete this._items[key];
- }, this);
- this._updated = {};
- }
-}
-
-// Based on http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/resources/shared/js/cr/ui.js
-base.extends = function(base, prototype)
-{
- var extended = function() {
- var element = typeof base == 'string' ? document.createElement(base) : base.call(this);
- extended.prototype.__proto__ = element.__proto__;
- element.__proto__ = extended.prototype;
- var singleton = element.init && element.init.apply(element, arguments);
- if (singleton)
- return singleton;
- return element;
- }
-
- extended.prototype = prototype;
- return extended;
-}
-
-function createRelativeTimeDescriptor(divisorInMilliseconds, unit)
-{
- return function(delta) {
- var deltaInUnits = delta / divisorInMilliseconds;
- return (deltaInUnits).toFixed(0) + ' ' + unit + (deltaInUnits >= 1.5 ? 's' : '') + ' ago';
- }
-}
-
-var kMinuteInMilliseconds = 60 * 1000;
-var kRelativeTimeSlots = [
- {
- maxMilliseconds: kMinuteInMilliseconds,
- describe: function(delta) { return 'Just now'; }
- },
- {
- maxMilliseconds: 60 * kMinuteInMilliseconds,
- describe: createRelativeTimeDescriptor(kMinuteInMilliseconds, 'minute')
- },
- {
- maxMilliseconds: 24 * 60 * kMinuteInMilliseconds,
- describe: createRelativeTimeDescriptor(60 * kMinuteInMilliseconds, 'hour')
- },
- {
- maxMilliseconds: Number.MAX_VALUE,
- describe: createRelativeTimeDescriptor(24 * 60 * kMinuteInMilliseconds, 'day')
- }
-];
-
-/*
- Represent time as descriptive text, relative to now and gradually decreasing in precision:
- delta < 1 minutes => Just Now
- delta < 60 minutes => X minute[s] ago
- delta < 24 hours => X hour[s] ago
- delta < inf => X day[s] ago
-*/
-base.relativizeTime = function(time)
-{
- var result;
- var delta = new Date().getTime() - time;
- kRelativeTimeSlots.some(function(slot) {
- if (delta >= slot.maxMilliseconds)
- return false;
-
- result = slot.describe(delta);
- return true;
- });
- return result;
-}
-
-base.getURLParameter = function(name)
-{
- var match = RegExp(name + '=' + '(.+?)(&|$)').exec(location.search);
- if (!match)
- return null;
- return decodeURI(match[1])
-}
-
-base.underscoredBuilderName = function(builderName)
-{
- return builderName.replace(/[ .()]/g, '_');
-}
-
-base.createLinkNode = function(url, textContent, opt_target)
-{
- var link = document.createElement('a');
- link.href = url;
- if (opt_target)
- link.target = opt_target;
- link.appendChild(document.createTextNode(textContent));
- return link;
-}
-
-})();