describe 'Concrete' describe 'Super' before $('body').append('
') end after $('#dom_test').remove() end before_each $.concrete.clear_all_rules() $('#dom_test').html('
') end it 'can call the super function' var a = 1; $('#a').concrete({ foo: function(){a *= 2;} }); $('#a.a').concrete({ foo: function(){a += 2; this._super();} }); $('#a').foo(); a.should.equal 6 end it 'super to a non-existant class should be ignored' var a = 1; $('#a').concrete({ foo: function(){a *= 2; this._super();} }); $('#a.a').concrete({ foo: function(){a += 2; this._super();} }); $('#a').foo(); a.should.equal 6 end it 'can call super from two different functions without screwing up what super points to' var list = []; $('#a').concrete({ foo: function(){ list.push('foo'); this.bar(); }, bar: function(){ list.push('bar'); } }); $('#a.a').concrete({ foo: function(){ list.push('foo2'); this._super(); list.push('foo2'); this._super(); }, bar: function(){ list.push('bar2'); this._super(); } }); $('#a').foo(); list.should.eql [ 'foo2', 'foo', 'bar2', 'bar', 'foo2', 'foo', 'bar2', 'bar' ] end end end