diff options
| author | Adam Abrons | 2010-03-15 17:02:54 -0700 | 
|---|---|---|
| committer | Adam Abrons | 2010-03-15 17:02:54 -0700 | 
| commit | 39c6c5975bedf6e1610f7328a088acda9ab3406a (patch) | |
| tree | c49a499733b7a3ec3547c64ff4d3ba5f9381dfa7 | |
| parent | 79b743e52feb2c57ba0ae42d6d2742bc2189b22f (diff) | |
| download | angular.js-39c6c5975bedf6e1610f7328a088acda9ab3406a.tar.bz2 | |
get scenarios running again - open Runner.html in a browser to run them
| -rw-r--r-- | example/calculator-bootstrap.html | 3 | ||||
| -rw-r--r-- | scenario/Runner.html | 10 | ||||
| -rw-r--r-- | scenario/datastore-scenarios.js | 19 | ||||
| -rw-r--r-- | scenario/datastore.html | 12 | ||||
| -rw-r--r-- | scenario/widgets-scenarios.js | 49 | ||||
| -rw-r--r-- | scenario/widgets.html | 58 | ||||
| -rw-r--r-- | src/scenario/Runner.js (renamed from src/test/Runner.js) | 51 | ||||
| -rw-r--r-- | src/scenario/Steps.js (renamed from src/test/Steps.js) | 6 | ||||
| -rw-r--r-- | src/scenario/_namespace.js | 6 | ||||
| -rw-r--r-- | src/scenario/bootstrap.js | 47 | ||||
| -rw-r--r-- | src/test/_namespace.js | 5 | ||||
| -rw-r--r-- | test/scenario/StepsTest.js (renamed from test/test/StepsTest.js) | 0 | 
12 files changed, 236 insertions, 30 deletions
| diff --git a/example/calculator-bootstrap.html b/example/calculator-bootstrap.html index e37fe02d..c72837dc 100644 --- a/example/calculator-bootstrap.html +++ b/example/calculator-bootstrap.html @@ -10,7 +10,8 @@          scope.set('a', 3);          scope.updateView();        }); -    </script>  </head> +    </script> +  </head>    <body>      Quantity: <input type="text" name="a" value="2">      * diff --git a/scenario/Runner.html b/scenario/Runner.html new file mode 100644 index 00000000..fb4b0f8f --- /dev/null +++ b/scenario/Runner.html @@ -0,0 +1,10 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +  <head> +    <script type="text/javascript" src="../src/scenario/bootstrap.js"></script> +    <script type="text/javascript" src="widgets-scenarios.js"></script> +    <!--<script type="text/javascript" src="datastore-scenarios.js"></script>--> +  </head> +  <body> +  </body> +</html> diff --git a/scenario/datastore-scenarios.js b/scenario/datastore-scenarios.js new file mode 100644 index 00000000..6038070b --- /dev/null +++ b/scenario/datastore-scenarios.js @@ -0,0 +1,19 @@ +angular.scenarioDef.datastore = { +  $before:[ +    {Given:"dataset",  +      dataset:{ +        Book:[{$id:'moby', name:"Moby Dick"},  +              {$id:'gadsby', name:'Great Gadsby'}] +      } +    }, +    {Given:"browser", at:"datastore.html#book=moby"}, +  ], +  checkLoadBook:[ +    {Then:"drainRequestQueue"}, +                  +    {Then:"text", at:"{{book.$id}}", should_be:"moby"}, +    {Then:"text", at:"li[$index=0] {{book.name}}", should_be:"Great Gahdsby"}, +    {Then:"text", at:"li[$index=0] {{book.name}}", should_be:"Moby Dick"}, +     +  ] +}; diff --git a/scenario/datastore.html b/scenario/datastore.html new file mode 100644 index 00000000..355d151c --- /dev/null +++ b/scenario/datastore.html @@ -0,0 +1,12 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +  <head> +    <script type="text/javascript" src="../angular-bootstrap.js#database=$MEMORY"></script> +  </head> +  <body ng-entity="book=Book" ng-init="books=Book.all()"> +    <p>{{book.$id}}</p> +    <li ng-repeat="book in books.$orderBy('name')"> +      <li>{{book.name}}</li> +    </li> +  </body> + </html> diff --git a/scenario/widgets-scenarios.js b/scenario/widgets-scenarios.js new file mode 100644 index 00000000..663b06da --- /dev/null +++ b/scenario/widgets-scenarios.js @@ -0,0 +1,49 @@ +angular.scenarioDef.widgets = { +  $before:[ +    {Given:"browser", at:"widgets.html"} +  ], +  checkWidgetBinding:[ +    {Then:"text", at:"{{name}}", should_be:""}, +    {When:"enter", text:"John", at:":input[name=name]"}, +    {Then:"text", at:"{{name}}", should_be:"John"}, +     +    {Then:"text", at:"{{gender}}", should_be:""}, +    {When:"click", at:"input:radio[value=male]"}, +    {Then:"text", at:"{{gender}}", should_be:"male"}, +     +    {Then:"text", at:"{{tea}}", should_be:"on"}, +    {When:"click", at:"input[name=tea]"}, +    {Then:"text", at:"{{tea}}", should_be:""}, +     +    {Then:"text", at:"{{coffee}}", should_be:""}, +    {When:"click", at:"input[name=coffee]"}, +    {Then:"text", at:"{{coffee}}", should_be:"on"}, +     +    {Then:"text", at:"{{count}}", should_be:0}, +    {When:"click", at:"form :button"}, +    {When:"click", at:"form :submit"}, +    {When:"click", at:"form :image"}, +    {Then:"text", at:"{{count}}", should_be:3}, +     +    {Then:"text", at:"{{select}}", should_be:"A"}, +    {When:"select", at:"select[name=select]", option:"B"}, +    {Then:"text", at:"{{select}}", should_be:"B"}, + +    {Then:"text", at:"{{multiple}}", should_be:"[]"}, +    {When:"select", at:"select[name=multiple]", option:"A"}, +    {Then:"text", at:"{{multiple}}", should_be:["A"]}, +    {When:"select", at:"select[name=multiple]", option:"B"}, +    {Then:"text", at:"{{multiple}}", should_be:["A", "B"]}, +    {When:"select", at:"select[name=multiple]", option:"A"}, +    {Then:"text", at:"{{multiple}}", should_be:["B"]}, +     +    {Then:"text", at:"{{hidden}}", should_be:"hiddenValue"}, + +    {Then:"text", at:"{{password}}", should_be:"passwordValue"}, +    {When:"enter", text:"reset", at:":input[name=password]"}, +    {Then:"text", at:"{{password}}", should_be:"reset"}, +  ], +  checkNewWidgetEmpty:[ +    {Then:"text", at:"{{name}}", should_be:""}, +  ] +}; diff --git a/scenario/widgets.html b/scenario/widgets.html new file mode 100644 index 00000000..cb28e78c --- /dev/null +++ b/scenario/widgets.html @@ -0,0 +1,58 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +  <head> +    <script type="text/javascript" src="../lib/underscore/underscore.js"></script> +    <script type="text/javascript" src="../lib/jquery/jquery-1.3.2.js"></script> +    <script type="text/javascript" src="../src/angular-bootstrap.js"></script> +    <script type="text/javascript"> +      $(document).ready(function(){angular.compile(document).init();}); +    </script> +  </head> +  <body> +    <p> +     name: <input type="text" name="name" /> name={{name}} <br/> +    </p> +    <p> +     <input type="radio" name="gender" value="female"/> Female +     <input type="radio" name="gender" value="male"/> Male +     gender={{gender}} +    </p> +    <p> +     <input type="checkbox" name="tea" checked value="on"/> tea={{tea}} <br/> +     <input type="checkbox" name="coffee" value="on"/> coffee={{coffee}} <br/> +    </p> +    <p ng-init="count = 0"> +      <form> +       <input type="button" value="button" ng-action="count = count + 1"/> +       <input type="submit" value="submit" ng-action="count = count + 1"/> +       <input type="image" src="" ng-action="count = count + 1"/> +       <a href="#ERROR" ng-action="count=count+1">action</a> +       count={{count}} +      </form> +    </p> +    <p> +      <select name="select"> +        <option>A</option> +        <option>B</option> +        <option>C</option> +      </select> +      select={{select}} +    </p> +    <p> +     <select name="multiple" multiple> +       <option>A</option> +       <option>B</option> +       <option>C</option> +     </select> +      multiple={{multiple}} +    </p> +    <p> +      <input type="hidden" name="hidden" value="hiddenValue" /> +      Hidden field = {{hidden}} +    </p> +    <p> +      <input type="password" name="password" value="passwordValue" /> +      Password field = {{password}} +    </p> +  </body> + </html> diff --git a/src/test/Runner.js b/src/scenario/Runner.js index c6684951..7caddc98 100644 --- a/src/test/Runner.js +++ b/src/scenario/Runner.js @@ -1,15 +1,16 @@ -if (typeof test == 'undefined')        test = {}; - -test.ScenarioRunner = function(scenarios, body) { +var scenario = angular.scenario; +scenario.SuiteRunner = function(scenarios, body) {    this.scenarios = scenarios;    this.body = body;  }; -test.ScenarioRunner.prototype = { +scenario.SuiteRunner.prototype = {    run:function(){      this.setUpUI();      this.runScenarios();    }, + +    setUpUI:function(){      this.body.html(        '<div id="runner">' + @@ -24,23 +25,25 @@ test.ScenarioRunner.prototype = {        jQuery(this).parent().find('.log').toggle();      });    }, + +    runScenarios:function(){ -    var runner = new test.Runner(this.console, this.testFrame); -    _.stepper(this.scenarios, function(next, scenario, name){ -        new test.Scenario(name, scenario).run(runner, next); +    var runner = new scenario.Runner(this.console, this.testFrame); +    _.stepper(this.scenarios, function(next, scenarioObj, name){ +        new scenario.Scenario(name, scenarioObj).run(runner, next);        }, function(){        }      );    }  }; -test.Runner = function(console, frame){ +scenario.Runner = function(console, frame){    this.console = console;    this.current = null;    this.tests = [];    this.frame = frame;  }; -test.Runner.prototype = { +scenario.Runner.prototype = {    start:function(name){      var current = this.current = {        name:name, @@ -86,11 +89,11 @@ test.Runner.prototype = {    }  }; -test.Scenario = function(name, scenario){ +scenario.Scenario = function(name, scenario){    this.name = name;    this.scenario = scenario;  }; -test.Scenario.prototype = { +scenario.Scenario.prototype = {    run:function(runner, callback) {      var self = this;      _.stepper(this.scenario, function(next, steps, name){ @@ -108,16 +111,20 @@ test.Scenario.prototype = {        }      }, callback);    }, + +    verb:function(step){      var fn = null; -  if (!step) fn = function (){ throw "Step is null!"; }; -  else if (step.Given) fn = angular.test.GIVEN[step.Given]; -  else if (step.When) fn = angular.test.WHEN[step.When]; -  else if (step.Then) fn = angular.test.THEN[step.Then]; -    return fn || function (){ -             throw "ERROR: Need Given/When/Then got: " + toJson(step); -           }; +    if (!step) fn = function (){ throw "Step is null!"; }; +    else if (step.Given) fn = scenario.GIVEN[step.Given]; +    else if (step.When) fn = scenario.WHEN[step.When]; +    else if (step.Then) fn = scenario.THEN[step.Then]; +      return fn || function (){ +         throw "ERROR: Need Given/When/Then got: " + toJson(step); +       };    }, + +    context: function(runner) {      var frame = runner.frame;      var window = frame[0].contentWindow; @@ -144,11 +151,13 @@ test.Scenario.prototype = {      };      return context;    }, + +    executeStep:function(runner, step, callback) {      if (!step) { -    callback(); -    return; -  } +      callback(); +      return; +    }      runner.log("info", toJson(step));      var fn = this.verb(step);      var context = this.context(runner); diff --git a/src/test/Steps.js b/src/scenario/Steps.js index cc9ff549..f8ac173f 100644 --- a/src/test/Steps.js +++ b/src/scenario/Steps.js @@ -1,4 +1,4 @@ -angular.test.GIVEN = { +angular.scenario.GIVEN = {    browser:function(){      var self = this;      if (jQuery.browser.safari && this.frame.attr('src') == this.at) { @@ -17,7 +17,7 @@ angular.test.GIVEN = {      this.frame.name="$DATASET:" + toJson({dataset:this.dataset});    }  }; -angular.test.WHEN = { +angular.scenario.WHEN = {    enter:function(){      var element = this.element(this.at);      element.attr('value', this.text); @@ -40,7 +40,7 @@ angular.test.WHEN = {      element.change();    }  }; -angular.test.THEN = { +angular.scenario.THEN = {    text:function(){      var element = this.element(this.at);      if (typeof this.should_be != undefined ) { diff --git a/src/scenario/_namespace.js b/src/scenario/_namespace.js new file mode 100644 index 00000000..7da3a5d8 --- /dev/null +++ b/src/scenario/_namespace.js @@ -0,0 +1,6 @@ +if (!angular)                       var angular = window['angular'] = {}; +if (!angular['scenario'])           var angularScenario = angular['scenario'] = {}; +if (!angular['scenarioDef'])        var scenarioDef = angular['scenarioDef'] = {}; +if (!angular['scenario']['GIVEN'])  angularScenario['GIVEN'] = {}; +if (!angular['scenario']['WHEN'])   angularScenario['WHEN'] = {}; +if (!angular['scenario']['THEN'])   angularScenario['THEN'] = {}; diff --git a/src/scenario/bootstrap.js b/src/scenario/bootstrap.js new file mode 100644 index 00000000..1d40b9d0 --- /dev/null +++ b/src/scenario/bootstrap.js @@ -0,0 +1,47 @@ +(function(onLoadDelegate){ +  var prefix = (function(){ +    var filename = /(.*\/)bootstrap.js(#(.*))?/; +    var scripts = document.getElementsByTagName("script"); +    for(var j = 0; j < scripts.length; j++) { +      var src = scripts[j].src; +      if (src && src.match(filename)) { +        var parts = src.match(filename); +        return parts[1]; +      } +    }     +  })(); +  function addScript(path) { +    document.write('<script type="text/javascript" src="' + prefix + path + '"></script>'); +  }; +  function addCSS(path) { +    document.write('<link rel="stylesheet" type="text/css" href="' + prefix + path + '"/>'); +  }; +  window.onload = function(){ +    if (!_.stepper) {  +      _.stepper = function(collection, iterator, done){ +        var keys = _.keys(collection); +        function next() { +          if (keys.length) { +            var key = keys.shift(); +            iterator(next, collection[key], key); +          } else { +            (done||_.identity)(); +          } +        } +        next(); +      }; +    } +    _.defer(function(){ +      new angular.scenario.SuiteRunner(angular.scenarioDef, jQuery(document.body)).run(); +    }); +    (onLoadDelegate||function(){})(); +  }; +  addCSS("../../css/angular-scenario.css"); +  addScript("../../lib/underscore/underscore.js"); +  addScript("../../lib/jquery/jquery-1.3.2.js"); +  addScript("../angular-bootstrap.js"); +  addScript("_namespace.js"); +  addScript("Steps.js"); +  addScript("Runner.js"); +})(window.onload); + diff --git a/src/test/_namespace.js b/src/test/_namespace.js deleted file mode 100644 index e29ae72a..00000000 --- a/src/test/_namespace.js +++ /dev/null @@ -1,5 +0,0 @@ -if (!angular)                   var angular = window['angular'] = {}; -if (!angular['test'])           var angularTest = angular['test'] = {}; -if (!angular['test']['GIVEN'])  angularTest['GIVEN'] = {}; -if (!angular['test']['WHEN'])   angularTest['WHEN'] = {}; -if (!angular['test']['THEN'])   angularTest['THEN'] = {}; diff --git a/test/test/StepsTest.js b/test/scenario/StepsTest.js index 9d64d0a9..9d64d0a9 100644 --- a/test/test/StepsTest.js +++ b/test/scenario/StepsTest.js | 
