3 * Copyright(c) 2006-2010 Ext JS, Inc.
5 * http://www.extjs.com/license
7 Ext.test.session.addTest('Function', {
9 name: 'Global Function Decorators',
14 test_createCallback: function(){
15 var fn = function(a, b){
16 Y.Assert.areEqual('a', a, 'Test passed param');
17 Y.Assert.areEqual('b', b, 'Test passed param');
21 var cb = fn.createCallback('a', 'b'),
22 rt = cb(); // does not accept params
23 Y.Assert.areEqual('x', rt, 'Test return value of callback');
27 test_createDelegate: function(){
32 var fn = function(a, b, c){
33 Y.Assert.areEqual(scope, this, 'Test if "this" is correct');
34 Y.Assert.areEqual('bar', this.foo, 'Test if property matches');
35 Y.Assert.areEqual('a', a, 'Test passed param');
36 Y.Assert.areEqual('b', b, 'Test passed param');
37 Y.Assert.areEqual('c', c, 'Test passed param');
41 var cb = fn.createDelegate(scope, ['b', 'c'], true /* appendArgs: true appends these to passed params */),
42 rt = cb('a'); // a b c
43 Y.Assert.areEqual('x', rt, 'Test return value');
46 var cbTwo = fn.createDelegate(scope, ['a', 'b'], 0);
47 rt = cbTwo('c'); // a b c
48 Y.Assert.areEqual('x', rt, 'Test return value');
51 var cbThree = fn.createDelegate(scope, ['b'], 1 /* this replaces at pos 1 */);
52 rt = cbThree('a', 'c'); // a b c
53 Y.Assert.areEqual('x', rt, 'Test return value');
55 var cbFour = fn.createDelegate(scope, ['a', 'b', 'c']);
56 rt = cbFour('x', 'y'); // overridden with a b c
57 Y.Assert.areEqual('x', rt, 'Test return value');
61 test_createInterceptor: function(){
67 var fn = function(a, b){
68 Y.Assert.areEqual(scope, this, 'Test if "this" is correct');
69 Y.Assert.areEqual('bar', this.foo, 'Test if property matches');
70 Y.Assert.areEqual('a', a, 'Test passed param');
71 Y.Assert.areEqual('b', b, 'Test passed param');
77 var rt = fn.call(scope, 'a', 'b'); // n 1
78 Y.Assert.areEqual('x', rt, 'Test the return value');
80 var cb = fn.createDelegate(scope).createInterceptor(function(a, b, z){
81 Y.Assert.areEqual(scope, this, 'Test if "this" is correct');
82 Y.Assert.areEqual('bar', this.foo, 'Test if property matches');
83 Y.Assert.areEqual('a', a, 'Test passed param');
84 Y.Assert.areEqual('b', b, 'Test passed param');
85 return z === undefined;
87 // intercepted, but allowed to continue
88 rt = cb('a', 'b'); // n 2
89 Y.Assert.areEqual('x', rt, 'Test the return value');
91 // intercepted, and cancelled
93 Y.Assert.areEqual(2, scope.n, 'Test the interceptor call count');
97 test_createSequence: function(){
103 var fn = function(a, b){
104 Y.Assert.areEqual(scope, this, 'Test if "this" is correct');
105 Y.Assert.areEqual('bar', this.foo, 'Test if property matches');
106 Y.Assert.areEqual('a', a, 'Test passed param');
107 Y.Assert.areEqual('b', b, 'Test passed param');
112 var rt = fn.call(scope, 'a', 'b'); // seq 1
113 Y.Assert.areEqual('x', rt, 'Test the return value');
114 Y.Assert.areEqual(1, scope.seq, 'Test the counter');
116 var cb = fn.createDelegate(scope).createSequence(fn, scope);
117 rt = cb('a', 'b'); // seq 2, 3
118 Y.Assert.areEqual('x', rt, 'Test the return value');
119 Y.Assert.areEqual(3, scope.seq, 'Test the number of times the sequence was called');
123 test_defer: function(){
129 var fn = function(a, b){
130 Y.Assert.areEqual(scope, this, 'Test if "this" is correct');
131 Y.Assert.areEqual('bar', this.foo, 'Test if property matches');
132 Y.Assert.areEqual('a', a, 'Test passed param');
133 Y.Assert.areEqual('b', b, 'Test passed param');
137 fn.defer(1, scope, ['a', 'b']);
138 fn.defer(2, scope, ['a', 'b']);
140 setTimeout(function(){
141 Y.Assert.areEqual(2, scope.n, 'Test if the counter matches the call timer count');