diff options
| author | Elliott Sprehn | 2010-10-08 16:43:40 -0700 | 
|---|---|---|
| committer | Elliott Sprehn | 2010-10-14 09:47:39 -0700 | 
| commit | 03df6cbddbb80186caf571e29957370b2ef9881c (patch) | |
| tree | d5a321c8b207b464a5c8a300c422186e20e8ae31 /src/scenario/Describe.js | |
| parent | 0f104317dff5628765e26cc68df7dd1175b2aa5e (diff) | |
| download | angular.js-03df6cbddbb80186caf571e29957370b2ef9881c.tar.bz2 | |
New Angular Scenario runner and DSL system with redesigned HTML UI.
Uses the Jasmine syntax for tests, ex:
describe('widgets', function() {
  it('should verify that basic widgets work', function(){
    navigateTo('widgets.html');
    input('text.basic').enter('Carlos');
    expect(binding('text.basic')).toEqual('Carlos');
    input('text.basic').enter('Carlos Santana');
    expect(binding('text.basic')).not().toEqual('Carlos Boozer');
    input('text.password').enter('secret');
    expect(binding('text.password')).toEqual('secret');
    expect(binding('text.hidden')).toEqual('hiddenValue');
    expect(binding('gender')).toEqual('male');
    input('gender').select('female');
    expect(binding('gender')).toEqual('female');
  });
});
Note: To create new UI's implement the interface shown in angular.scenario.ui.Html.
Diffstat (limited to 'src/scenario/Describe.js')
| -rw-r--r-- | src/scenario/Describe.js | 108 | 
1 files changed, 108 insertions, 0 deletions
| diff --git a/src/scenario/Describe.js b/src/scenario/Describe.js new file mode 100644 index 00000000..896b337f --- /dev/null +++ b/src/scenario/Describe.js @@ -0,0 +1,108 @@ +/** + * The representation of define blocks. Don't used directly, instead use + * define() in your tests. + */ +angular.scenario.Describe = function(descName, parent) { +  this.beforeEachFns = []; +  this.afterEachFns = []; +  this.its = []; +  this.children = []; +  this.name = descName; +  this.parent = parent; +  this.id = angular.scenario.Describe.id++; +   +  /** +   * Calls all before functions. +   */ +  var beforeEachFns = this.beforeEachFns; +  this.setupBefore = function() { +    if (parent) parent.setupBefore.call(this); +    angular.foreach(beforeEachFns, function(fn) { fn.call(this); }, this); +  }; + +  /** +   * Calls all after functions. +   */ +  var afterEachFns = this.afterEachFns; +  this.setupAfter  = function() { +    angular.foreach(afterEachFns, function(fn) { fn.call(this); }, this); +    if (parent) parent.setupAfter.call(this); +  }; +}; + +// Shared Unique ID generator for every describe block +angular.scenario.Describe.id = 0; + +/** + * Defines a block to execute before each it or nested describe. + * + * @param {Function} Body of the block. + */ +angular.scenario.Describe.prototype.beforeEach = function(body) { +  this.beforeEachFns.push(body); +}; + +/** + * Defines a block to execute after each it or nested describe. + * + * @param {Function} Body of the block. + */ +angular.scenario.Describe.prototype.afterEach = function(body) { +  this.afterEachFns.push(body); +}; + +/** + * Creates a new describe block that's a child of this one. + * + * @param {String} Name of the block. Appended to the parent block's name. + * @param {Function} Body of the block. + */ +angular.scenario.Describe.prototype.describe = function(name, body) { +  var child = new angular.scenario.Describe(name, this); +  this.children.push(child); +  body.call(child); +}; + +/** + * Use to disable a describe block. + */ +angular.scenario.Describe.prototype.xdescribe = angular.noop; + +/** + * Defines a test. + * + * @param {String} Name of the test. + * @param {Function} Body of the block. + */ +angular.scenario.Describe.prototype.it = function(name, body) { +  var self = this; +  this.its.push({ +    definition: this, +    name: name,  +    fn: function() { +      self.setupBefore.call(this); +      body.call(this); +      self.setupAfter.call(this); +    } +  }); +}; + +/** + * Use to disable a test block. + */ +angular.scenario.Describe.prototype.xit = angular.noop; + +/** + * Gets an array of functions representing all the tests (recursively). + * that can be executed with SpecRunner's. + */ +angular.scenario.Describe.prototype.getSpecs = function() { +  var specs = arguments[0] || []; +  angular.foreach(this.children, function(child) { +    child.getSpecs(specs); +  }); +  angular.foreach(this.its, function(it) { +    specs.push(it); +  }); +  return specs; +}; | 
