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.
165 lines
4.0 KiB
165 lines
4.0 KiB
(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);
|
|
|