Форк Rambox
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.

266 lines
8.3 KiB

describe("AbstractManager", function(){
var manager;
beforeEach(function(){
manager = new Ext.AbstractManager();
});
afterEach(function(){
manager = null;
});
describe("get/register/unregister", function(){
it("should return undefined for an item not in the collection", function(){
expect(manager.get('notthere')).toBeUndefined();
});
it("should return the object if it exists in the collection", function(){
var o = {id: 'item'};
manager.register(o);
expect(manager.get('item')).toBe(o);
});
it("should register multiple items", function(){
var o1 = {id: 'item1'},
o2 = {id: 'item2'};
manager.register(o1);
manager.register(o2);
expect(manager.get('item1')).toBe(o1);
expect(manager.get('item2')).toBe(o2);
});
it("should remove items when unregistered", function(){
var o1 = {id: 'item1'},
o2 = {id: 'item2'};
manager.register(o1);
manager.register(o2);
manager.unregister(o2);
expect(manager.get('item1')).toBe(o1);
expect(manager.get('item2')).toBeUndefined();
});
});
describe("registerType/isRegistered/create", function(){
afterEach(function(){
delete Ext.util.Filter.type;
});
it("should copy the type name onto the prototype", function(){
manager.registerType('filter', Ext.util.Filter);
expect(Ext.util.Filter.type).toEqual('filter');
});
it("should return true when a type is registered", function(){
manager.registerType('filter', Ext.util.Filter);
expect(manager.isRegistered('filter')).toBe(true);
});
it("should return false when a type is not registered", function(){
expect(manager.isRegistered('notRegged')).toBe(false);
});
it("should thrown an exception when trying to create a type that doesn't exist", function(){
expect(function(){
manager.create('filter');
}).toRaiseExtError();
});
it("should return an instance of the type", function(){
manager.registerType('filter', Ext.util.Filter);
expect(manager.create({
type: 'filter',
filterFn: Ext.emptyFn
}) instanceof Ext.util.Filter).toBe(true);
});
it("should fallback to the default type", function(){
manager.registerType('filter', Ext.util.Filter);
expect(manager.create({
filterFn: Ext.emptyFn
}, 'filter') instanceof Ext.util.Filter).toBe(true);
});
it("should pass the config to the constructor", function(){
manager.registerType('filter', Ext.util.Filter);
var filter = manager.create({
type: 'filter',
property: 'name',
value: 'x'
});
expect(filter.getProperty()).toBe('name');
});
});
describe("onAvailable", function(){
it("should never fire if no items are added", function(){
var spy = jasmine.createSpy('spy');
manager.onAvailable('item', spy);
expect(spy.callCount).toBe(0);
});
it("should never fire if items with no matching id are added", function(){
var spy = jasmine.createSpy('spy');
manager.onAvailable('item', spy);
manager.register({
id: 'other'
});
expect(spy.callCount).toBe(0);
});
it("should fire the function if an item is added with a matching id", function(){
var spy = jasmine.createSpy('spy');
manager.onAvailable('item', spy);
manager.register({
id: 'item'
});
expect(spy.callCount).toBe(1);
});
it("should fire the function if the onAvailable is bound when the item already exists", function(){
var spy = jasmine.createSpy('spy');
manager.register({
id: 'item'
});
manager.onAvailable('item', spy);
expect(spy.callCount).toBe(1);
});
it("should pass the item as a parameter", function(){
var o = {id: 'item'},
actual,
fn = function(item){
actual = item;
};
manager.onAvailable('item', fn);
manager.register(o);
expect(actual).toBe(o);
});
it("should default the scope to the item if not specified", function(){
var o = {id: 'item'},
actual,
fn = function(){
actual = this;
};
manager.onAvailable('item', fn);
manager.register(o);
expect(actual).toBe(o);
});
it("should use the passed scope", function(){
var o = {id: 'item'},
actual,
scope = {},
fn = function(){
actual = this;
};
manager.onAvailable('item', fn, scope);
manager.register(o);
expect(actual).toBe(scope);
});
it("should remove the listener once the component is created", function(){
var fn1 = function(){
++first;
}, fn2 = function(){
++second;
}, first = 0,
second = 0,
o = {
id: 'item'
};
manager.onAvailable('item', fn1);
manager.register(o);
manager.unregister(o);
manager.onAvailable('item', fn2);
manager.register(o);
expect(first).toBe(1);
expect(second).toBe(1);
})
});
describe("each", function(){
it("should not iterate if there are no items", function(){
var spy = jasmine.createSpy('spy');
manager.each(spy);
expect(spy.callCount).toBe(0);
});
it("should loop over each item", function(){
var spy = jasmine.createSpy('spy'),
i = 0;
for (; i < 5; ++i) {
manager.register({
id: 'id' + i
});
}
manager.each(spy);
expect(spy.callCount).toBe(5);
});
it("should default the scope to the manager", function(){
var o = {id: 'item'},
scope,
fn = function(){
scope = this;
};
manager.register(o);
manager.each(fn);
expect(scope).toBe(manager);
});
it("should use the passed scope", function(){
var o = {id: 'item'},
scope = {},
actual,
fn = function(){
actual = this;
};
manager.register(o);
manager.each(fn, scope);
expect(actual).toBe(scope);
});
});
describe("getCount", function(){
it("should return 0 by default", function(){
expect(manager.getCount()).toBe(0);
});
it("should return the correct count after adding items", function(){
manager.register({
id: 'a'
});
expect(manager.getCount()).toBe(1);
manager.register({
id: 'b'
});
expect(manager.getCount()).toBe(2);
});
it("should return the correct count after removing items", function(){
var o = {id: 'item'};
manager.register(o);
manager.unregister(o);
expect(manager.getCount()).toBe(0);
});
})
});