cartodb/lib/assets/javascripts/cdb/test/spec/ui/common/tabpane.spec.js
zhongjin a96ef233c9 cdb
2020-06-15 12:07:54 +08:00

287 lines
6.6 KiB
JavaScript

describe('core.ui.common.TabPane', function() {
var pane;
beforeEach(function() {
pane = new cdb.ui.common.TabPane();
});
it("getPreviousPane should return the last pane if the active pane is the first one", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
pane.active('tab1');
expect(pane.getPreviousPane()).toEqual(v3);
});
it("getPreviousPane should return the previous pane", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
pane.active('tab2');
expect(pane.getPreviousPane()).toEqual(v1);
});
it("getNextPane should return the next pane", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
pane.active('tab1');
expect(pane.getNextPane()).toEqual(v2);
});
it("getNextPane should return the first pane if the last pane is active", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
pane.active('tab3');
expect(pane.getNextPane()).toEqual(v1);
});
it("getActive should return the desired pane", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
expect(pane.getPane('tab1')).toEqual(v1);
expect(pane.getPane('tab3')).toEqual(v3);
expect(pane.getPane('tab2')).toEqual(v2);
});
it("getActivePane should return the active pane", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
// Finally, activate one of them
pane.active('tab2');
expect(pane.getActivePane()).toEqual(v2);
});
it("activating a tab should return the view", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View(),
v3 = new cdb.core.View();
// Add some tabs
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3);
// Finally, activate one of them
var activeView = pane.active('tab2');
expect(activeView).toEqual(v2);
});
it("should allow to add a pane", function() {
var v1 = new cdb.core.View();
spy = {
tabAdded: function(){}
};
spyOn(spy, 'tabAdded');
pane.bind('tabAdded', spy.tabAdded, spy);
pane.addTab('tab1', v1);
expect(pane._subviews[v1.cid]).toBeTruthy();
expect(pane.activeTab).toEqual('tab1');
expect(pane.$el.children()[0]).toEqual(v1.el);
expect(spy.tabAdded).toHaveBeenCalledWith('tab1', v1);
});
it("should allow to remove a pane", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View();
// Add the views
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.active('tab1');
pane.removeTab('tab1');
expect(pane._subviews[v1.cid]).toBeFalsy();
expect(pane.activeTab).toEqual('tab2');
// There shold be only one children
expect(pane.$el.children()[0]).toEqual(v2.el);
expect(pane.$el.children().length).toEqual(1);
});
it("should remove all panels ", function() {
var v1 = new cdb.core.View();
var v2 = new cdb.core.View();
spyOn(v1, 'clean');
spyOn(v2, 'clean');
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.removeTabs();
expect(_.keys(pane.tabs).length).toEqual(0);
expect(v1.clean).toHaveBeenCalled()
expect(v2.clean).toHaveBeenCalled()
});
it("should trigger on activate", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View();
spy = {
tabEnabled: function(){},
tabDisabled: function(){}
};
spyOn(spy, 'tabDisabled');
spyOn(spy, 'tabEnabled');
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
expect(pane.activeTab).toEqual('tab2');
pane.bind('tabEnabled', spy.tabEnabled, spy);
pane.bind('tabDisabled', spy.tabDisabled, spy);
pane.active('tab1');
expect(spy.tabEnabled).toHaveBeenCalledWith('tab1', v1);
expect(spy.tabDisabled).toHaveBeenCalledWith('tab2', v2);
expect(v1.el.style.display).toEqual('block');
expect(v2.el.style.display).toEqual('none');
});
it("should call activated and deactivaed on tab if exists", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View();
v1.activated = function() {};
v2.deactivated = function() {};
spyOn(spy, 'tabDisabled');
spyOn(spy, 'tabEnabled');
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
var a = spyOn(v1, 'activated');
var d = spyOn(v2, 'deactivated');
pane.active('tab1');
expect(a).toHaveBeenCalled();
expect(d).toHaveBeenCalled();
});
it("each should call function for each tab", function() {
var // Let's create the views
v1 = new cdb.core.View(),
v2 = new cdb.core.View();
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
var t = [];
pane.each(function(name, tab) {
t.push([name, tab]);
});
expect(t.length).toEqual(2);
expect(t[0][0]).toEqual('tab1')
expect(t[1][0]).toEqual('tab2')
expect(t[0][1].cid).toEqual(v1.cid);
expect(t[1][1].cid).toEqual(v2.cid);
});
it("user after option inserting view after specified index", function() {
var v1, v2, v3;
v1 = new cdb.core.View(),
v2 = new cdb.core.View();
v3 = new cdb.core.View();
pane.addTab('tab1', v1);
pane.addTab('tab2', v2);
pane.addTab('tab3', v3, { after: 0 });
expect(pane.$el.children()[0]).toEqual(v1.el);
expect(pane.$el.children()[1]).toEqual(v3.el);
expect(pane.$el.children()[2]).toEqual(v2.el);
});
it("clean should remove all tabs", function() {
spyOn(pane, "removeTabs");
pane.clean();
expect(pane.removeTabs).toHaveBeenCalled();
});
});