diff options
Diffstat (limited to 'test/ScopeSpec.js')
| -rw-r--r-- | test/ScopeSpec.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/test/ScopeSpec.js b/test/ScopeSpec.js new file mode 100644 index 00000000..0a0b4241 --- /dev/null +++ b/test/ScopeSpec.js @@ -0,0 +1,90 @@ +describe('scope/model', function(){ + + it('should create a scope with parent', function(){ + var model = scope({name:'Misko'}); + expect(model.name).toEqual('Misko'); + }); + + it('should have $get/set$/parent$', function(){ + var parent = {}; + var model = scope(parent); + model.$set('name', 'adam'); + expect(model.name).toEqual('adam'); + expect(model.$get('name')).toEqual('adam'); + expect(model.$parent).toEqual(parent); + }); + + //$eval + it('should eval function with correct this and pass arguments', function(){ + var model = scope(); + model.$eval(function(name){ + this.name = name; + }, 'works'); + expect(model.name).toEqual('works'); + }); + + it('should eval expression with correct this', function(){ + var model = scope(); + model.$eval('name="works"'); + expect(model.name).toEqual('works'); + }); + + //$onEval + it('should watch an expression for change', function(){ + var model = scope(); + model.oldValue = ""; + var count = 0; + model.name = 'adam'; + model.$watch('name', function(){ count ++; }); + model.$watch(function(){return model.name;}, function(newValue, oldValue){ + this.newValue = newValue; + this.oldValue = oldValue; + }); + model.name = 'misko'; + model.$eval(); + expect(count).toEqual(1); + expect(model.newValue).toEqual('misko'); + expect(model.oldValue).toEqual('adam'); + }); + + it('should eval with no arguments', function(){ + var model = scope(); + var count = 0; + model.$onEval(function(){count++;}); + model.$eval(); + expect(count).toEqual(1); + }); + + //$bind + it('should curry a function with respect to scope', function(){ + var model = scope(); + model.name = 'misko'; + expect(model.$bind(function(){return this.name;})()).toEqual('misko'); + }); + + //$behavior + it('should behave as class', function(){ + function Printer(brand){ + this.brand = brand; + }; + Printer.prototype.print = function(){ + this.printed = true; + }; + var model = scope({ name: 'parent' }, Printer, 'hp'); + expect(model.brand).toEqual('hp'); + model.print(); + expect(model.printed).toEqual(true); + }); + + + + //$tryEval + it('should report error on element', function(){ + + }); + + it('should report error on visible element', function(){ + + }); + +}); |
