describe 'Concrete' describe 'Basics' before $.concrete.warningLevel = $.concrete.WARN_LEVEL_BESTPRACTISE; $('body').append('
') end after $('#dom_test').remove() end before_each $.concrete.clear_all_rules() $('#dom_test').html('
') end it 'can attach and call a base function' $('#a').concrete({ foo: function(){return this.attr('id');} }); $('.a').foo().should.equal 'a' end it 'can attach and call several base functions' $('#a').concrete({ foo: function(){return 'foo_' + this.attr('id');}, bar: function(){return 'bar_' + this.attr('id');} }); $('.a').foo().should.equal 'foo_a' $('.a').bar().should.equal 'bar_a' end it 'can attach and call a namespaced function' $('#a').concrete('bar', function($){return{ foo: function(){return this.attr('id');} }}); $('.a').concrete('bar').foo().should.equal 'a' end it 'can attach and call a nested namespaced function' $('#a').concrete('qux.baz.bar', function($){return{ foo: function(){return this.attr('id');} }}); $('.a').concrete('qux.baz.bar').foo().should.equal 'a' end it 'can call two functions on two elements' var res = [] $('#a').concrete({ foo: function(){res.push(this.attr('id'));}, }) $('#b.c').concrete({ foo: function(){res.push(this.attr('id'));}, }) $('#dom_test div').foo(); res.should.eql ['b', 'a'] end it 'can call two namespaced functions on two elements' var res = [] $('#a').concrete('bar', function($){return{ foo: function(){res.push(this.attr('id'));}, }}) $('#b.c').concrete('bar', function($){return{ foo: function(){res.push(this.attr('id'));}, }}) $('#dom_test div').concrete('bar').foo(); res.should.eql ['b', 'a'] end end end