Files
openlayers/master/examples/test_oo_mixin.html
Éric Lemoine 5d14b9e2d4 Updated
2013-02-20 10:38:25 +01:00

163 lines
4.7 KiB
HTML

<html>
<head>
<title>OO/mixin</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true"></script>
<script type="text/javascript">
dojo.require("dojox.lang.oo.mixin");
dojo.require("dojox.lang.oo.general");
dojo.require("dojox.lang.oo.aop");
var oo = dojox.lang.oo, oog = oo.general, ooa = oo.aop;
var test = function(){
// test chaining of constructor() and destroy()
var a = {
init: function(){ console.log("init #1"); },
abc: function(){ console.log("abc #1: args = ", arguments); return 1; },
destroy: function(){ console.log("destroy #1"); }
},
b = {
init: function(){ console.log("init #2"); },
abc: function(){ console.log("abc #2: args = ", arguments); return 2; },
destroy: function(){ console.log("destroy #2"); }
},
c = {
init: function(){ console.log("init #3"); },
abc: function(){ console.log("abc #3: args = ", arguments); return 3; },
destroy: function(){ console.log("destroy #3"); }
};
console.log("=== test default mixin: a");
var t = oo.mixin({}, a);
t.init();
t.abc(42);
t.destroy();
console.log("=== test default mixin: a + b");
var t = oo.mixin({}, a, b);
t.init();
t.abc(42);
t.destroy();
console.log("=== test default mixin: a + b + c");
var t = oo.mixin({}, a, b, c);
t.init();
t.abc(42);
t.destroy();
console.log("=== test default mixin: a + (b - 'abc')");
var t = oo.mixin({}, a, oo.filter(b, {abc: ""}));
t.init();
t.abc(42);
t.destroy();
console.log("=== test default mixin: a + (b - 'destroy' * 'abc'/'def')");
var t = oo.mixin({}, a, oo.filter(b, {abc: "def", destroy: ""}));
t.init();
t.abc(42);
console.log("the next line shoud print 'abc #2'");
t.def(42);
t.destroy();
console.log("=== test default mixin: a + 'abc2'/after + 'abc3'/before");
var t = oo.mixin({}, a,
oo.filter(oog.after(b), {init: "", destroy: ""}),
oo.filter(oog.before(c), {init: "", destroy: ""})
);
t.init();
t.abc(42);
t.destroy();
console.log("=== test augment and override (negative case)");
var t = oo.mixin({}, a, {
abc: oog.augment(function(){ console.log("augmented"); }), // can't override
def: oog.override(function(){ console.log("overidden"); }) // nothing to override
});
t.init();
t.abc(42);
console.log("should be 'undefined': ", t.def);
t.destroy();
console.log("=== test augment and override (positive case)");
var t = oo.mixin({}, a, {
def: oog.augment(function(){ console.log("augmented"); }), // can't override
abc: oog.override(function(){ console.log("overidden"); }) // nothing to override
});
t.init();
t.abc(42);
t.def(42);
t.destroy();
console.log("=== test augment and general.after (no chaining for existing functions)");
var t = oo.mixin({}, a, {
abc: oog.augment(oog.after(
function(){ console.log("overidden"); }
))
});
t.init();
t.abc(42);
t.destroy();
console.log("=== test override and general.after (chaining only for existing functions)");
var t = oo.mixin({}, a, {
abc: oog.override(oog.after(
function(){ console.log("overidden? not really"); }
))
});
t.init();
t.abc(42);
t.destroy();
console.log("=== test decorated objects");
var t = oo.mixin({}, a, oog.after({
abc: function(){ console.log("added after abc"); },
def: function(){ console.log("added after def"); }
}));
t.init();
t.abc(42);
t.def(42);
t.destroy();
console.log("=== test aop-like decorators");
var t = oo.mixin({}, a,
{
abc: ooa.around(function(f, args){
console.log("aop.around: args = ", args);
var ret = f.apply(this, args);
console.log("aop.around: ret = ", ret);
return ret;
})
},
{
abc: ooa.before(function(){
console.log("aop.before: args = ", arguments);
})
},
{
abc: ooa.afterReturning(function(ret){
console.log("aop.afterReturning: ret = ", ret);
})
},
{
abc: ooa.after(function(){
console.log("aop.after");
})
}
);
t.init();
t.abc(42);
t.destroy();
};
//dojo.addOnLoad(test);
</script>
</head>
<body>
<p>This test is meant to run with Firebug. Open the console to see the output.</p>
<p><button onclick="test()">Start</button></p>
</body>
</html>