+++ /dev/null
-/**
- * @fileoverview Jasmine JsTestDriver Adapter.
- * @author misko@hevery.com (Misko Hevery)
- */
-(function(window) {
- var rootDescribes = new Describes(window);
- rootDescribes.collectMode();
-
- var JASMINE_TYPE = 'jasmine test case';
- TestCase('Jasmine Adapter Tests', null, JASMINE_TYPE);
-
- var jasminePlugin = {
- name:'jasmine',
-
- getTestRunsConfigurationFor: function(testCaseInfos, expressions, testRunsConfiguration) {
- for (var i = 0; i < testCaseInfos.length; i++) {
- if (testCaseInfos[i].getType() == JASMINE_TYPE) {
- testRunsConfiguration.push(new jstestdriver.TestRunConfiguration(testCaseInfos[i], []));
- }
- }
- return false;
- },
-
- runTestConfiguration: function(testRunConfiguration, onTestDone, onTestRunConfigurationComplete) {
- if (testRunConfiguration.getTestCaseInfo().getType() != JASMINE_TYPE) return false;
-
- var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env();
- rootDescribes.playback();
- var specLog = jstestdriver.console.log_ = [];
- var start;
- jasmineEnv.specFilter = function(spec) {
- return rootDescribes.isExclusive(spec);
- };
- jasmineEnv.reporter = {
- log: function(str) {
- specLog.push(str);
- },
-
- reportRunnerStarting: function(runner) { },
-
- reportSpecStarting: function(spec) {
- specLog = jstestdriver.console.log_ = [];
- start = new Date().getTime();
- },
-
- reportSpecResults: function(spec) {
- var suite = spec.suite;
- var results = spec.results();
- if (results.skipped) return;
- var end = new Date().getTime();
- var messages = [];
- var resultItems = results.getItems();
- var state = 'passed';
- for ( var i = 0; i < resultItems.length; i++) {
- if (!resultItems[i].passed()) {
- state = resultItems[i].message.match(/AssertionError:/) ? 'error' : 'failed';
- messages.push({
- message: resultItems[i].toString(),
- name: resultItems[i].trace.name,
- stack: formatStack(resultItems[i].trace.stack)
- });
- }
- }
- onTestDone(
- new jstestdriver.TestResult(
- suite.getFullName(),
- spec.description,
- state,
- jstestdriver.angular.toJson(messages),
- specLog.join('\n'),
- end - start));
- },
-
- reportSuiteResults: function(suite) {},
-
- reportRunnerResults: function(runner) {
- onTestRunConfigurationComplete();
- }
- };
- jasmineEnv.execute();
- return true;
- },
-
- onTestsFinish: function() {
- jasmine.currentEnv_ = null;
- rootDescribes.collectMode();
- }
- };
- jstestdriver.pluginRegistrar.register(jasminePlugin);
-
- function formatStack(stack) {
- var lines = (stack||'').split(/\r?\n/);
- var frames = [];
- for (var i = 0; i < lines.length; i++) {
- if (!lines[i].match(/\/jasmine[\.-]/)) {
- frames.push(lines[i].replace(/https?:\/\/\w+(:\d+)?\/test\//, '').replace(/^\s*/, ' '));
- }
- }
- return frames.join('\n');
- }
-
- function noop() {}
- function Describes(window) {
- var describes = {};
- var beforeEachs = {};
- var afterEachs = {};
- // Here we store:
- // 0: everyone runs
- // 1: run everything under ddescribe
- // 2: run only iits (ignore ddescribe)
- var exclusive = 0;
- var collectMode = true;
- intercept('describe', describes);
- intercept('xdescribe', describes);
- intercept('beforeEach', beforeEachs);
- intercept('afterEach', afterEachs);
-
- function intercept(functionName, collection) {
- window[functionName] = function(desc, fn) {
- if (collectMode) {
- collection[desc] = function() {
- jasmine.getEnv()[functionName](desc, fn);
- };
- } else {
- jasmine.getEnv()[functionName](desc, fn);
- }
- };
- }
- window.ddescribe = function(name, fn) {
- if (exclusive < 1) {
- exclusive = 1; // run ddescribe only
- }
- window.describe(name, function() {
- var oldIt = window.it;
- window.it = function(name, fn) {
- fn.exclusive = 1; // run anything under ddescribe
- jasmine.getEnv().it(name, fn);
- };
- try {
- fn.call(this);
- } finally {
- window.it = oldIt;
- };
- });
- };
- window.iit = function(name, fn) {
- exclusive = fn.exclusive = 2; // run only iits
- jasmine.getEnv().it(name, fn);
- };
-
-
- this.collectMode = function() {
- collectMode = true;
- exclusive = 0; // run everything
- };
- this.playback = function() {
- collectMode = false;
- playback(beforeEachs);
- playback(afterEachs);
- playback(describes);
-
- function playback(set) {
- for ( var name in set) {
- set[name]();
- }
- }
- };
-
- this.isExclusive = function(spec) {
- if (exclusive) {
- var blocks = spec.queue.blocks;
- for ( var i = 0; i < blocks.length; i++) {
- if (blocks[i].func.exclusive >= exclusive) {
- return true;
- }
- }
- return false;
- }
- return true;
- };
- }
-
-})(window);
-
-// Patch Jasmine for proper stack traces
-jasmine.Spec.prototype.fail = function (e) {
- var expectationResult = new jasmine.ExpectationResult({
- passed: false,
- message: e ? jasmine.util.formatException(e) : 'Exception'
- });
- // PATCH
- if (e) {
- expectationResult.trace = e;
- }
- this.results_.addResult(expectationResult);
-};