From e664186f93838ca1fb1b2e4277f7c18264f81d92 Mon Sep 17 00:00:00 2001 From: Andres Ornelas Date: Tue, 29 Jun 2010 15:43:02 -0700 Subject: initial concept --- src/scenario/Future.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/scenario/Future.js (limited to 'src/scenario') diff --git a/src/scenario/Future.js b/src/scenario/Future.js new file mode 100644 index 00000000..057b89db --- /dev/null +++ b/src/scenario/Future.js @@ -0,0 +1,57 @@ +function Future(name, behavior) { + this.value = undefined; + this.name = name; + this.behavior = behavior; + this.fulfilled = false; +} + +Future.prototype = { + fulfill: function(value){ + this.fulfilled = true; + this.value = value; + } +}; + +function future(name, behavior) { + return new Future(name, behavior); +}; + +function repeater(selector) { + var repeaterFuture = future('repeater ' + selector, function(done) { + done($(selector)); + }); + + repeaterFuture.count = function(){ + return future(repeaterFuture.name + ' count', function(done) { + done(repeaterFuture.value.size()); + }); + }; + + return repeaterFuture; +} + +function Matcher(future, logger) { + var self = this; + this.logger = logger; + this.future = future; +} + +Matcher.addMatcher = function(name, matcher){ + Matcher.prototype[name] = function(expected) { + var future = this.future; + $scenario.addFuture( + 'expect ' + future.name + ' ' + name + ' ' + expected, + function(done){ + if (matcher(future.value, expected)) + throw "Expected " + expected + ' but was ' + future.value; + done(); + } + ); + }; +}; + +Matcher.addMatcher('toEqual', function(a,b){ return a == b; }); + +function expect(future) { + return new Matcher(future, window.alert); +} -- cgit v1.2.3