Telegram Web, preconfigured for usage in I2P.
http://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.0 KiB
166 lines
4.0 KiB
11 years ago
|
(function(window) {
|
||
|
|
||
|
var formatFailedStep = function(step) {
|
||
|
|
||
|
var stack = step.trace.stack;
|
||
|
var message = step.message;
|
||
|
if (stack) {
|
||
|
// remove the trailing dot
|
||
|
var firstLine = stack.substring(0, stack.indexOf('\n') - 1);
|
||
|
if (message && message.indexOf(firstLine) === -1) {
|
||
|
stack = message + '\n' + stack;
|
||
|
}
|
||
|
|
||
|
// remove jasmine stack entries
|
||
|
return stack.replace(/\n.+jasmine\.js\?\d*\:.+(?=(\n|$))/g, '');
|
||
|
}
|
||
|
|
||
|
return message;
|
||
|
};
|
||
|
|
||
|
var indexOf = function(collection, item) {
|
||
|
if (collection.indexOf) {
|
||
|
return collection.indexOf(item);
|
||
|
}
|
||
|
|
||
|
for (var i = 0, ii = collection.length; i < ii; i++) {
|
||
|
if (collection[i] === item) {
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
};
|
||
|
|
||
|
|
||
|
// TODO(vojta): Karma might provide this
|
||
|
var getCurrentTransport = function() {
|
||
|
// probably running in debug.html (there's no socket.io)
|
||
|
if (!window.parent.io) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
var location = window.parent.location;
|
||
|
return window.parent.io.sockets[location.protocol + '//' + location.host].transport.name;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Very simple reporter for jasmine
|
||
|
*/
|
||
|
var KarmaReporter = function(tc) {
|
||
|
|
||
|
var getAllSpecNames = function(topLevelSuites) {
|
||
|
var specNames = {};
|
||
|
|
||
|
var processSuite = function(suite, pointer) {
|
||
|
var childSuite;
|
||
|
var childPointer;
|
||
|
|
||
|
for (var i = 0; i < suite.suites_.length; i++) {
|
||
|
childSuite = suite.suites_[i];
|
||
|
childPointer = pointer[childSuite.description] = {};
|
||
|
processSuite(childSuite, childPointer);
|
||
|
}
|
||
|
|
||
|
pointer._ = [];
|
||
|
for (var j = 0; j < suite.specs_.length; j++) {
|
||
|
pointer._.push(suite.specs_[j].description);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var suite;
|
||
|
var pointer;
|
||
|
for (var k = 0; k < topLevelSuites.length; k++) {
|
||
|
suite = topLevelSuites[k];
|
||
|
pointer = specNames[suite.description] = {};
|
||
|
processSuite(suite, pointer);
|
||
|
}
|
||
|
|
||
|
return specNames;
|
||
|
};
|
||
|
|
||
|
this.reportRunnerStarting = function(runner) {
|
||
|
var transport = getCurrentTransport();
|
||
|
var specNames = null;
|
||
|
|
||
|
// This structure can be pretty huge and it blows up socke.io connection, when polling.
|
||
|
// https://github.com/LearnBoost/socket.io-client/issues/569
|
||
|
if (transport === 'websocket' || transport === 'flashsocket') {
|
||
|
specNames = getAllSpecNames(runner.topLevelSuites());
|
||
|
}
|
||
|
|
||
|
tc.info({total: runner.specs().length, specs: specNames});
|
||
|
};
|
||
|
|
||
|
this.reportRunnerResults = function(runner) {
|
||
|
tc.complete({
|
||
|
coverage: window.__coverage__
|
||
|
});
|
||
|
};
|
||
|
|
||
|
this.reportSuiteResults = function(suite) {
|
||
|
// memory clean up
|
||
|
suite.after_ = null;
|
||
|
suite.before_ = null;
|
||
|
suite.queue = null;
|
||
|
};
|
||
|
|
||
|
this.reportSpecStarting = function(spec) {
|
||
|
spec.results_.time = new Date().getTime();
|
||
|
};
|
||
|
|
||
|
this.reportSpecResults = function(spec) {
|
||
|
var result = {
|
||
|
id: spec.id,
|
||
|
description: spec.description,
|
||
|
suite: [],
|
||
|
success: spec.results_.failedCount === 0,
|
||
|
skipped: spec.results_.skipped,
|
||
|
time: spec.results_.skipped ? 0 : new Date().getTime() - spec.results_.time,
|
||
|
log: []
|
||
|
};
|
||
|
|
||
|
var suitePointer = spec.suite;
|
||
|
while (suitePointer) {
|
||
|
result.suite.unshift(suitePointer.description);
|
||
|
suitePointer = suitePointer.parentSuite;
|
||
|
}
|
||
|
|
||
|
if (!result.success) {
|
||
|
var steps = spec.results_.items_;
|
||
|
for (var i = 0; i < steps.length; i++) {
|
||
|
if (!steps[i].passed_) {
|
||
|
result.log.push(formatFailedStep(steps[i]));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
tc.result(result);
|
||
|
|
||
|
// memory clean up
|
||
|
spec.results_ = null;
|
||
|
spec.spies_ = null;
|
||
|
spec.queue = null;
|
||
|
};
|
||
|
|
||
|
this.log = function() {};
|
||
|
};
|
||
|
|
||
|
|
||
|
var createStartFn = function(tc, jasmineEnvPassedIn) {
|
||
|
return function(config) {
|
||
|
// we pass jasmineEnv during testing
|
||
|
// in production we ask for it lazily, so that adapter can be loaded even before jasmine
|
||
|
var jasmineEnv = jasmineEnvPassedIn || window.jasmine.getEnv();
|
||
|
|
||
|
jasmineEnv.addReporter(new KarmaReporter(tc));
|
||
|
jasmineEnv.execute();
|
||
|
};
|
||
|
};
|
||
|
|
||
|
|
||
|
window.__karma__.start = createStartFn(window.__karma__);
|
||
|
|
||
|
})(window);
|