Added late static binding tests
- This simply tests a very important consequence of the existing implementation - Regression testclosure/master
parent
f4b31f2639
commit
54e9c14051
|
@ -936,3 +936,66 @@ var common = require( './common' ),
|
||||||
);
|
);
|
||||||
} )();
|
} )();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We support the concept of late static binding. That is, static members can be
|
||||||
|
* overridden by subtypes in the same way that non-static members can. This
|
||||||
|
* can be compared to Java, which only supports static *hiding*, not overriding.
|
||||||
|
*/
|
||||||
|
( function testCanOverrideStaticMembers()
|
||||||
|
{
|
||||||
|
var val_orig = 'foobaz',
|
||||||
|
val = 'foobar',
|
||||||
|
|
||||||
|
Foo = builder.build(
|
||||||
|
{
|
||||||
|
'public static prop': val_orig,
|
||||||
|
|
||||||
|
'public static foo': function()
|
||||||
|
{
|
||||||
|
return this.bar();
|
||||||
|
},
|
||||||
|
|
||||||
|
'public static bar': function()
|
||||||
|
{
|
||||||
|
return val_orig;
|
||||||
|
},
|
||||||
|
|
||||||
|
'public static baz': function()
|
||||||
|
{
|
||||||
|
// should return overridden val
|
||||||
|
return this.$( 'prop' );
|
||||||
|
},
|
||||||
|
} ),
|
||||||
|
|
||||||
|
SubFoo = builder.build( Foo,
|
||||||
|
{
|
||||||
|
'public static prop': val,
|
||||||
|
|
||||||
|
// override parent static method (this is truly overriding, not
|
||||||
|
// hiding)
|
||||||
|
'public static bar': function()
|
||||||
|
{
|
||||||
|
return val;
|
||||||
|
},
|
||||||
|
} )
|
||||||
|
;
|
||||||
|
|
||||||
|
assert.equal( SubFoo.bar(), val,
|
||||||
|
"System supports overriding static methods"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert.equal( SubFoo.baz(), val,
|
||||||
|
"System supports overriding static properties"
|
||||||
|
);
|
||||||
|
|
||||||
|
// ensure we didn't negatively impact the parent (crazy things can happen
|
||||||
|
// when you screw up an implementation)
|
||||||
|
assert.equal( Foo.bar(), val_orig,
|
||||||
|
"Subtypes' method overrides do not impact parent"
|
||||||
|
);
|
||||||
|
assert.equal( Foo.baz(), val_orig,
|
||||||
|
"Subtypes' property overrides do not impact parent"
|
||||||
|
);
|
||||||
|
} )();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue