discordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teams
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
325 lines
14 KiB
325 lines
14 KiB
describe("Ext.Util", function() { |
|
describe("Ext.callback", function() { |
|
var spy; |
|
|
|
beforeEach(function() { |
|
spy = jasmine.createSpy(); |
|
}); |
|
|
|
it('should not fail if given a null callback', function () { |
|
expect(function() { |
|
Ext.callback(null); |
|
}).not.toThrow(); |
|
}); |
|
|
|
it('should not fail if given an undefined callback', function () { |
|
expect(function() { |
|
Ext.callback(undefined); |
|
}).not.toThrow(); |
|
}); |
|
|
|
it('should not fail if given an invalid callback', function () { |
|
expect(function() { |
|
Ext.callback(42); |
|
}).not.toThrow(); |
|
}); |
|
|
|
it("should pass arguments to the callback function", function() { |
|
Ext.callback(spy, fakeScope, [1, 2, 3, 4, 6]); |
|
expect(spy).toHaveBeenCalledWith(1, 2, 3, 4,6); |
|
}); |
|
|
|
it("should be able to defer function call", function() { |
|
runs(function() { |
|
Ext.callback(spy, undefined, [1, 2, 3, 4, 6], 1); |
|
expect(spy).not.toHaveBeenCalled(); |
|
}); |
|
waitsFor(function() { |
|
return spy.callCount > 0; |
|
}, "deferred callback never called"); |
|
runs(function() { |
|
expect(spy).toHaveBeenCalledWith(1, 2, 3, 4, 6); |
|
}); |
|
|
|
}); |
|
|
|
it("should return the return value of the given function", function () { |
|
var x = 0, |
|
fn = function (y) { |
|
return x = this.z * 10 + y; |
|
}, |
|
y = Ext.callback(fn, {z: 42}, [7]); |
|
|
|
expect(x).toBe(427); |
|
expect(y).toBe(427); |
|
}); |
|
|
|
describe("scoping", function() { |
|
describe("with a function", function() { |
|
describe("scope 'this'", function() { |
|
it("should resolve the scope to the defaultScope", function() { |
|
Ext.callback(spy, 'this', undefined, undefined, undefined, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should resolve the scope to the caller", function() { |
|
Ext.callback(spy, 'this', undefined, undefined, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should prefer the defaultScope to the caller", function() { |
|
Ext.callback(spy, 'this', undefined, undefined, {}, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should fallback to global scope if no caller is passed", function() { |
|
Ext.callback(spy, 'this'); |
|
expect(spy.mostRecentCall.object).toBe(Ext.global); |
|
}); |
|
}); |
|
|
|
describe("scope 'controller'", function() { |
|
it("should resolve the scope to the defaultScope", function() { |
|
Ext.callback(spy, 'controller', undefined, undefined, undefined, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should resolve the scope to the caller", function() { |
|
Ext.callback(spy, 'controller', undefined, undefined, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should prefer the defaultScope to the caller", function() { |
|
Ext.callback(spy, 'controller', undefined, undefined, {}, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should fallback to global scope if no caller is passed", function() { |
|
Ext.callback(spy, 'controller'); |
|
expect(spy.mostRecentCall.object).toBe(Ext.global); |
|
}); |
|
}); |
|
|
|
it("should execute the passed function in the specified scope", function() { |
|
Ext.callback(spy, fakeScope); |
|
expect(spy.mostRecentCall.object).toBe(fakeScope); |
|
}); |
|
|
|
it("should default the scope to Ext.global", function() { |
|
Ext.callback(spy); |
|
expect(spy.mostRecentCall.object).toBe(Ext.global); |
|
}); |
|
}); |
|
|
|
describe("with a string", function() { |
|
var scopeInfo; |
|
|
|
beforeEach(function() { |
|
scopeInfo = { |
|
foo: function() { |
|
|
|
} |
|
}; |
|
spyOn(scopeInfo, 'foo'); |
|
}); |
|
|
|
describe("without caller", function() { |
|
it("should throw if no scope is passed", function() { |
|
expect(function() { |
|
Ext.callback('foo'); |
|
}).toThrow(); |
|
}); |
|
|
|
it("should throw if the method cannot be found on the passed scope", function() { |
|
expect(function() { |
|
Ext.callback('foo', {}); |
|
}).toThrow(); |
|
}); |
|
|
|
// Can't resolve the string scope without a caller |
|
it("should throw if passed 'this' as scope", function() { |
|
expect(function() { |
|
Ext.callback('foo', 'this'); |
|
}).toThrow(); |
|
}); |
|
|
|
it("should throw if passed 'controller' as scope", function() { |
|
expect(function() { |
|
Ext.callback('foo', 'controller'); |
|
}).toThrow(); |
|
}); |
|
|
|
it("should call the resolved method on the passed scope", function() { |
|
Ext.callback('foo', scopeInfo); |
|
expect(scopeInfo.foo).toHaveBeenCalled(); |
|
expect(scopeInfo.foo.mostRecentCall.object).toBe(scopeInfo); |
|
}); |
|
|
|
it("should retain scope on defer", function() { |
|
runs(function() { |
|
Ext.callback('foo', scopeInfo, undefined, 1); |
|
expect(scopeInfo.foo).not.toHaveBeenCalled(); |
|
}); |
|
waitsFor(function() { |
|
return scopeInfo.foo.callCount > 0; |
|
}, "deferred callback never called"); |
|
runs(function() { |
|
expect(scopeInfo.foo).toHaveBeenCalled(); |
|
expect(scopeInfo.foo.mostRecentCall.object).toBe(scopeInfo); |
|
}); |
|
}); |
|
}); |
|
|
|
describe("with caller", function() { |
|
var theScope, caller; |
|
beforeEach(function() { |
|
theScope = { |
|
foo: function() { |
|
|
|
} |
|
}; |
|
caller = { |
|
resolveListenerScope: function() { |
|
return theScope; |
|
} |
|
}; |
|
spyOn(theScope, 'foo'); |
|
}); |
|
|
|
describe("object scope", function() { |
|
it("should favour a passed scope", function() { |
|
Ext.callback('foo', scopeInfo, undefined, undefined, caller); |
|
expect(scopeInfo.foo).toHaveBeenCalled(); |
|
expect(scopeInfo.foo.mostRecentCall.object).toBe(scopeInfo); |
|
expect(theScope.foo).not.toHaveBeenCalled(); |
|
}); |
|
|
|
it("should throw if the method cannot be found on the passed caller", function() { |
|
expect(function() { |
|
Ext.callback('fake', undefined, undefined, undefined, caller); |
|
}).toThrow(); |
|
}); |
|
|
|
it("should call the resolved method on the passed scope", function() { |
|
Ext.callback('foo', undefined, undefined, undefined, caller); |
|
expect(theScope.foo).toHaveBeenCalled(); |
|
expect(theScope.foo.mostRecentCall.object).toBe(caller.resolveListenerScope()); |
|
}); |
|
|
|
it("should retain scope on defer", function() { |
|
runs(function() { |
|
Ext.callback('foo', undefined, undefined, 1, caller); |
|
expect(theScope.foo).not.toHaveBeenCalled(); |
|
}); |
|
waitsFor(function() { |
|
return theScope.foo.callCount > 0; |
|
}, "deferred callback never called"); |
|
runs(function() { |
|
expect(theScope.foo).toHaveBeenCalled(); |
|
expect(theScope.foo.mostRecentCall.object).toBe(caller.resolveListenerScope()); |
|
}); |
|
}); |
|
}); |
|
|
|
describe("scope: 'this'", function() { |
|
it("should call resolveListenerScope on the caller", function() { |
|
spyOn(caller, 'resolveListenerScope').andCallThrough(); |
|
Ext.callback('foo', 'this', undefined, undefined, caller); |
|
expect(caller.resolveListenerScope).toHaveBeenCalledWith('this'); |
|
expect(theScope.foo).toHaveBeenCalled(); |
|
expect(theScope.foo.mostRecentCall.object).toBe(theScope); |
|
}); |
|
|
|
it("should throw if the method cannot be found on the passed caller", function() { |
|
expect(function() { |
|
Ext.callback('fake', 'this', undefined, undefined, caller); |
|
}).toThrow(); |
|
}); |
|
|
|
it("should retain scope on defer", function() { |
|
runs(function() { |
|
Ext.callback('foo', 'this', undefined, 1, caller); |
|
expect(theScope.foo).not.toHaveBeenCalled(); |
|
}); |
|
waitsFor(function() { |
|
return theScope.foo.callCount > 0; |
|
}, "deferred callback never called"); |
|
runs(function() { |
|
expect(theScope.foo).toHaveBeenCalled(); |
|
expect(theScope.foo.mostRecentCall.object).toBe(theScope); |
|
}); |
|
}); |
|
}); |
|
|
|
describe("scope: 'controller'", function() { |
|
it("should call resolveListenerScope on the caller", function() { |
|
spyOn(caller, 'resolveListenerScope').andCallThrough(); |
|
Ext.callback('foo', 'controller', undefined, undefined, caller); |
|
expect(caller.resolveListenerScope).toHaveBeenCalledWith('controller'); |
|
expect(theScope.foo).toHaveBeenCalled(); |
|
expect(theScope.foo.mostRecentCall.object).toBe(theScope); |
|
}); |
|
|
|
it("should throw if the method cannot be found on the passed caller", function() { |
|
expect(function() { |
|
Ext.callback('fake', 'controller', undefined, undefined, caller); |
|
}).toThrow(); |
|
}); |
|
|
|
it("should retain scope on defer", function() { |
|
runs(function() { |
|
Ext.callback('foo', 'controller', undefined, 1, caller); |
|
expect(theScope.foo).not.toHaveBeenCalled(); |
|
}); |
|
waitsFor(function() { |
|
return theScope.foo.callCount > 0; |
|
}, "deferred callback never called"); |
|
runs(function() { |
|
expect(theScope.foo).toHaveBeenCalled(); |
|
expect(theScope.foo.mostRecentCall.object).toBe(theScope); |
|
}); |
|
}); |
|
}); |
|
}); |
|
}); |
|
}); |
|
}); // Ext.callback |
|
|
|
describe('copyToIf String[]', function () { |
|
var dest; |
|
var source = { a: 1, b: 'x', c: 42 }; |
|
|
|
beforeEach(function () { |
|
dest = { a: 427 }; |
|
}); |
|
|
|
it('should leave existing properties alone', function () { |
|
Ext.copyToIf(dest, source, ['a']); |
|
expect(dest).toEqual({ a: 427 }); |
|
}); |
|
|
|
it('should add new properties', function () { |
|
Ext.copyToIf(dest, source, ['a','b']); |
|
expect(dest).toEqual({ a: 427, b: 'x' }); |
|
}); |
|
}); |
|
|
|
describe('copyToIf String', function () { |
|
var dest; |
|
var source = { a: 1, b: 'x', c: 42 }; |
|
|
|
beforeEach(function () { |
|
dest = { a: 427 }; |
|
}); |
|
|
|
it('should leave existing properties alone', function () { |
|
Ext.copyToIf(dest, source, 'a'); |
|
expect(dest).toEqual({ a: 427 }); |
|
}); |
|
|
|
it('should add new properties', function () { |
|
Ext.copyToIf(dest, source, 'a,b'); |
|
expect(dest).toEqual({ a: 427, b: 'x' }); |
|
}); |
|
}) |
|
});
|
|
|