aboutsummaryrefslogtreecommitdiffstats
path: root/src/scenario/SpecRunner.js
diff options
context:
space:
mode:
authorMisko Hevery2012-03-23 14:03:24 -0700
committerMisko Hevery2012-03-28 11:16:35 -0700
commit2430f52bb97fa9d682e5f028c977c5bf94c5ec38 (patch)
treee7529b741d70199f36d52090b430510bad07f233 /src/scenario/SpecRunner.js
parent944098a4e0f753f06b40c73ca3e79991cec6c2e2 (diff)
downloadangular.js-2430f52bb97fa9d682e5f028c977c5bf94c5ec38.tar.bz2
chore(module): move files around in preparation for more modules
Diffstat (limited to 'src/scenario/SpecRunner.js')
-rw-r--r--src/scenario/SpecRunner.js145
1 files changed, 0 insertions, 145 deletions
diff --git a/src/scenario/SpecRunner.js b/src/scenario/SpecRunner.js
deleted file mode 100644
index f4b9b0a7..00000000
--- a/src/scenario/SpecRunner.js
+++ /dev/null
@@ -1,145 +0,0 @@
-'use strict';
-
-/**
- * This class is the "this" of the it/beforeEach/afterEach method.
- * Responsibilities:
- * - "this" for it/beforeEach/afterEach
- * - keep state for single it/beforeEach/afterEach execution
- * - keep track of all of the futures to execute
- * - run single spec (execute each future)
- */
-angular.scenario.SpecRunner = function() {
- this.futures = [];
- this.afterIndex = 0;
-};
-
-/**
- * Executes a spec which is an it block with associated before/after functions
- * based on the describe nesting.
- *
- * @param {Object} spec A spec object
- * @param {function()} specDone function that is called when the spec finshes. Function(error, index)
- */
-angular.scenario.SpecRunner.prototype.run = function(spec, specDone) {
- var self = this;
- this.spec = spec;
-
- this.emit('SpecBegin', spec);
-
- try {
- spec.before.call(this);
- spec.body.call(this);
- this.afterIndex = this.futures.length;
- spec.after.call(this);
- } catch (e) {
- this.emit('SpecError', spec, e);
- this.emit('SpecEnd', spec);
- specDone();
- return;
- }
-
- var handleError = function(error, done) {
- if (self.error) {
- return done();
- }
- self.error = true;
- done(null, self.afterIndex);
- };
-
- asyncForEach(
- this.futures,
- function(future, futureDone) {
- self.step = future;
- self.emit('StepBegin', spec, future);
- try {
- future.execute(function(error) {
- if (error) {
- self.emit('StepFailure', spec, future, error);
- self.emit('StepEnd', spec, future);
- return handleError(error, futureDone);
- }
- self.emit('StepEnd', spec, future);
- self.$window.setTimeout(function() { futureDone(); }, 0);
- });
- } catch (e) {
- self.emit('StepError', spec, future, e);
- self.emit('StepEnd', spec, future);
- handleError(e, futureDone);
- }
- },
- function(e) {
- if (e) {
- self.emit('SpecError', spec, e);
- }
- self.emit('SpecEnd', spec);
- // Call done in a timeout so exceptions don't recursively
- // call this function
- self.$window.setTimeout(function() { specDone(); }, 0);
- }
- );
-};
-
-/**
- * Adds a new future action.
- *
- * Note: Do not pass line manually. It happens automatically.
- *
- * @param {string} name Name of the future
- * @param {function()} behavior Behavior of the future
- * @param {function()} line fn() that returns file/line number
- */
-angular.scenario.SpecRunner.prototype.addFuture = function(name, behavior, line) {
- var future = new angular.scenario.Future(name, angular.bind(this, behavior), line);
- this.futures.push(future);
- return future;
-};
-
-/**
- * Adds a new future action to be executed on the application window.
- *
- * Note: Do not pass line manually. It happens automatically.
- *
- * @param {string} name Name of the future
- * @param {function()} behavior Behavior of the future
- * @param {function()} line fn() that returns file/line number
- */
-angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior, line) {
- var self = this;
- var NG = /\[ng\\\:/;
- return this.addFuture(name, function(done) {
- this.application.executeAction(function($window, $document) {
-
- //TODO(esprehn): Refactor this so it doesn't need to be in here.
- $document.elements = function(selector) {
- var args = Array.prototype.slice.call(arguments, 1);
- selector = (self.selector || '') + ' ' + (selector || '');
- selector = _jQuery.trim(selector) || '*';
- angular.forEach(args, function(value, index) {
- selector = selector.replace('$' + (index + 1), value);
- });
- var result = $document.find(selector);
- if (selector.match(NG)) {
- result = result.add(selector.replace(NG, '[ng-'), $document);
- }
- if (!result.length) {
- throw {
- type: 'selector',
- message: 'Selector ' + selector + ' did not match any elements.'
- };
- }
-
- return result;
- };
-
- try {
- behavior.call(self, $window, $document, done);
- } catch(e) {
- if (e.type && e.type === 'selector') {
- done(e.message);
- } else {
- throw e;
- }
- }
- });
- }, line);
-};