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

904 lines
34 KiB

describe('Ext.chart.axis.Axis', function() {
describe('resolveListenerScope', function () {
var testScope;
function setTestScope() {
testScope = this;
}
var scopeObject = {
setTestScope: setTestScope
};
var store = Ext.create('Ext.data.Store', {
fields: ['x', 'y'],
data: [
{x: 0, y: 0},
{x: 1, y: 1}
]
});
var axisConfig = {
type: 'numeric',
position: 'bottom'
};
function createContainer(options) {
var config = {
width: 400,
height: 400,
layout: 'fit'
};
Ext.apply(config, options);
var container = Ext.create('Ext.container.Container', config);
container.setTestScope = setTestScope;
return container;
}
function createController() {
return Ext.create('Ext.app.ViewController', {
setTestScope: setTestScope
});
}
function createChart(options) {
var config = {
store: store,
axes: axisConfig
};
Ext.apply(config, options);
var chart = Ext.create('Ext.chart.CartesianChart', config);
chart.setTestScope = setTestScope;
return chart;
}
function createAxisClass(listenerScope) {
return Ext.define(null, {
extend: 'Ext.chart.axis.Numeric',
setTestScope: setTestScope,
listeners: {
test: {
fn: 'setTestScope',
scope: listenerScope
}
}
});
}
describe('axis instance listener', function () {
describe('no chart controller, chart container controller', function () {
var chart, axis,
container, containerController;
beforeEach(function () {
testScope = undefined;
containerController = createController();
chart = createChart();
container = createContainer({
controller: containerController
});
container.add(chart);
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart container controller", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(containerController);
});
it("listener with no explicit scope should be scoped to chart container controller", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(containerController);
});
});
describe('chart controller, no chart container controller', function () {
var chart, axis,
container, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
controller: chartController
});
container = createContainer();
container.add(chart);
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart controller", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
});
describe('chart controller, chart container controller', function () {
var chart, container, axis,
chartController,
containerController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
containerController = createController();
chart = createChart({
controller: chartController
});
container = createContainer({
controller: containerController
});
container.add(chart);
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart controller", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
});
describe('no chart controller, no chart container controller', function () {
var chart, axis, container;
beforeEach(function () {
testScope = undefined;
chart = createChart();
container = createContainer();
container.add(chart);
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should fail", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
expect(function () {
axis.fireEvent('test', axis);
}).toThrow();
});
it("listener with no explicit scope should be scoped to the chart", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(chart);
});
});
describe('chart inside container with defaultListenerScope: true (no controllers)', function () {
var chart, axis, container;
beforeEach(function () {
testScope = undefined;
chart = createChart();
container = createContainer({
defaultListenerScope: true
});
container.add(chart);
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should fail", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
expect(function () {
axis.fireEvent('test', axis);
}).toThrow();
});
it("listener with no explicit scope should be scoped to the container", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(container);
});
});
describe('chart with a controller and defaultListenerScope: true', function () {
var chart, axis, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
controller: chartController,
defaultListenerScope: true
});
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to the chart controller", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to the chart", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(chart);
});
});
describe('chart with a controller', function () {
var chart, axis, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
controller: chartController
});
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to the chart controller", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to the chart controller", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
});
describe('chart with defaultListenerScope: true (container, no controllers)', function () {
var chart, container, axis, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
controller: chartController,
defaultListenerScope: true
});
container = createContainer();
container.add(chart);
axis = chart.getAxes()[0];
axis.setTestScope = setTestScope;
});
afterEach(function () {
chart.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis.on({
test: 'setTestScope',
scope: 'this'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis.on({
test: 'setTestScope',
scope: scopeObject
});
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to the chart controller", function () {
axis.on({
test: 'setTestScope',
scope: 'controller'
});
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to the chart", function () {
axis.on('test', 'setTestScope');
axis.fireEvent('test', axis);
expect(testScope).toBe(chart);
});
});
});
// #######################################################################################
describe('axis class listener', function () {
describe('no chart controller, chart container controller', function () {
var chart, axis,
container, containerController;
beforeEach(function () {
testScope = undefined;
containerController = createController();
chart = createChart({
axes: []
});
container = createContainer({
controller: containerController
});
container.add(chart);
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart container controller", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(containerController);
});
it("listener with no explicit scope should be scoped to chart container controller", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(containerController);
});
});
describe('chart controller, no chart container controller', function () {
var chart, axis,
container, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
axes: [],
controller: chartController
});
container = createContainer();
container.add(chart);
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart controller", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
});
describe('chart controller, chart container controller', function () {
var chart, container, axis,
chartController,
containerController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
containerController = createController();
chart = createChart({
axes: [],
controller: chartController
});
container = createContainer({
controller: containerController
});
container.add(chart);
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart controller", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
});
describe('no chart controller, no chart container controller', function () {
var chart, axis, container;
beforeEach(function () {
testScope = undefined;
chart = createChart({
axes: []
});
container = createContainer();
container.add(chart);
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should fail", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
expect(function () {
axis.fireEvent('test', axis);
}).toThrow();
});
it("listener with no explicit scope should be scoped to the axis", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
});
describe('chart inside container with defaultListenerScope: true (no controllers)', function () {
var chart, axis, container;
beforeEach(function () {
testScope = undefined;
chart = createChart({
axes: []
});
container = createContainer({
defaultListenerScope: true
});
container.add(chart);
});
afterEach(function () {
chart.destroy();
container.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should fail", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
expect(function () {
axis.fireEvent('test', axis);
}).toThrow();
});
it("listener with no explicit scope should be scoped to chart container", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(container);
});
});
describe('chart with a controller and defaultListenerScope: true', function () {
var chart, axis, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
axes: [],
controller: chartController,
defaultListenerScope: true
});
});
afterEach(function () {
chart.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chart);
});
});
describe('chart with a controller (no container)', function () {
var chart, axis, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
axes: [],
controller: chartController
});
});
afterEach(function () {
chart.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart controller", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
});
describe('chart with defaultListenerScope: true (container, no controllers)', function () {
var chart, container, axis, chartController;
beforeEach(function () {
testScope = undefined;
chartController = createController();
chart = createChart({
axes: [],
controller: chartController,
defaultListenerScope: true
});
container = createContainer();
container.add(chart);
});
afterEach(function () {
chart.destroy();
});
it("listener scoped to 'this' should refer to the axis", function () {
axis = new (createAxisClass('this'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(axis);
});
it("listener scoped to an arbitrary object should refer to that object", function () {
axis = new (createAxisClass(scopeObject))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(scopeObject);
});
it("listener scoped to 'controller' should refer to chart controller", function () {
axis = new (createAxisClass('controller'))();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chartController);
});
it("listener with no explicit scope should be scoped to chart", function () {
axis = new (createAxisClass())();
chart.setAxes(axis);
axis.fireEvent('test', axis);
expect(testScope).toBe(chart);
});
});
})
});
});