Chart.js/test/specs/plugin.title.tests.js

332 lines
6.9 KiB
JavaScript
Raw Normal View History

2016-02-15 00:04:12 +01:00
// Test the rectangle element
var Title = Chart.registry.getPlugin('title')._element;
2016-02-15 00:04:12 +01:00
describe('Title block tests', function() {
it('Should have the correct default config', function() {
expect(Chart.defaults.plugins.title).toEqual({
align: 'center',
2016-02-15 00:04:12 +01:00
display: false,
position: 'top',
fullWidth: true,
weight: 2000,
2020-05-21 23:07:06 +02:00
font: {
style: 'bold'
},
2016-02-15 00:04:12 +01:00
padding: 10,
text: ''
});
2016-02-15 00:04:12 +01:00
});
it('should update correctly', function() {
var chart = {
options: Chart.helpers.clone(Chart.defaults)
};
2016-02-15 00:04:12 +01:00
var options = Chart.helpers.clone(Chart.defaults.plugins.title);
options.text = 'My title';
2016-02-15 00:04:12 +01:00
var title = new Title({
2016-02-15 00:04:12 +01:00
chart: chart,
options: options
});
2020-01-05 16:42:42 +01:00
title.update(400, 200);
2016-02-15 00:04:12 +01:00
2020-01-05 16:42:42 +01:00
expect(title.width).toEqual(0);
expect(title.height).toEqual(0);
2016-02-15 00:04:12 +01:00
// Now we have a height since we display
title.options.display = true;
2020-01-05 16:42:42 +01:00
title.update(400, 200);
2016-02-15 00:04:12 +01:00
2020-01-05 16:42:42 +01:00
expect(title.width).toEqual(400);
expect(title.height).toEqual(34.4);
2016-02-15 00:04:12 +01:00
});
it('should update correctly when vertical', function() {
var chart = {
options: Chart.helpers.clone(Chart.defaults)
};
2016-02-15 00:04:12 +01:00
var options = Chart.helpers.clone(Chart.defaults.plugins.title);
options.text = 'My title';
2016-02-15 00:04:12 +01:00
options.position = 'left';
var title = new Title({
2016-02-15 00:04:12 +01:00
chart: chart,
options: options
});
2020-01-05 16:42:42 +01:00
title.update(200, 400);
2016-02-15 00:04:12 +01:00
2020-01-05 16:42:42 +01:00
expect(title.width).toEqual(0);
expect(title.height).toEqual(0);
2016-02-15 00:04:12 +01:00
// Now we have a height since we display
title.options.display = true;
2020-01-05 16:42:42 +01:00
title.update(200, 400);
2016-02-15 00:04:12 +01:00
2020-01-05 16:42:42 +01:00
expect(title.width).toEqual(34.4);
expect(title.height).toEqual(400);
2016-02-15 00:04:12 +01:00
});
it('should have the correct size when there are multiple lines of text', function() {
var chart = {
options: Chart.helpers.clone(Chart.defaults)
};
var options = Chart.helpers.clone(Chart.defaults.plugins.title);
options.text = ['line1', 'line2'];
options.position = 'left';
options.display = true;
2020-05-21 23:07:06 +02:00
options.font.lineHeight = 1.5;
var title = new Title({
chart: chart,
options: options
});
2020-01-05 16:42:42 +01:00
title.update(200, 400);
2020-01-05 16:42:42 +01:00
expect(title.width).toEqual(56);
expect(title.height).toEqual(400);
});
2016-02-15 00:04:12 +01:00
it('should draw correctly horizontally', function() {
var chart = {
options: Chart.helpers.clone(Chart.defaults)
};
2016-02-15 00:04:12 +01:00
var context = window.createMockContext();
var options = Chart.helpers.clone(Chart.defaults.plugins.title);
options.text = 'My title';
2016-02-15 00:04:12 +01:00
var title = new Title({
2016-02-15 00:04:12 +01:00
chart: chart,
options: options,
ctx: context
});
title.update(400, 200);
title.draw();
expect(context.getCalls()).toEqual([]);
// Now we have a height since we display
title.options.display = true;
2020-01-05 16:42:42 +01:00
title.update(400, 200);
2016-02-15 00:04:12 +01:00
title.top = 50;
title.left = 100;
2020-01-05 16:42:42 +01:00
title.bottom = title.top + title.height;
title.right = title.left + title.width;
2016-02-15 00:04:12 +01:00
title.draw();
expect(context.getCalls()).toEqual([{
2016-05-05 03:08:59 +02:00
name: 'save',
args: []
}, {
name: 'setFillStyle',
args: ['#666']
2016-05-05 03:08:59 +02:00
}, {
name: 'translate',
args: [300, 67.2]
2016-05-05 03:08:59 +02:00
}, {
name: 'rotate',
args: [0]
}, {
name: 'setTextAlign',
args: ['center'],
2016-02-15 00:04:12 +01:00
}, {
name: 'fillText',
args: ['My title', 0, 0, 400]
2016-05-05 03:08:59 +02:00
}, {
name: 'restore',
args: []
2016-02-15 00:04:12 +01:00
}]);
});
it ('should draw correctly vertically', function() {
var chart = {
options: Chart.helpers.clone(Chart.defaults)
};
2016-02-15 00:04:12 +01:00
var context = window.createMockContext();
var options = Chart.helpers.clone(Chart.defaults.plugins.title);
options.text = 'My title';
2016-02-15 00:04:12 +01:00
options.position = 'left';
var title = new Title({
2016-02-15 00:04:12 +01:00
chart: chart,
options: options,
ctx: context
});
title.update(200, 400);
title.draw();
expect(context.getCalls()).toEqual([]);
// Now we have a height since we display
title.options.display = true;
2020-01-05 16:42:42 +01:00
title.update(200, 400);
2016-02-15 00:04:12 +01:00
title.top = 50;
title.left = 100;
2020-01-05 16:42:42 +01:00
title.bottom = title.top + title.height;
title.right = title.left + title.width;
2016-02-15 00:04:12 +01:00
title.draw();
expect(context.getCalls()).toEqual([{
name: 'save',
args: []
}, {
name: 'setFillStyle',
args: ['#666']
2016-02-15 00:04:12 +01:00
}, {
name: 'translate',
args: [117.2, 250]
2016-02-15 00:04:12 +01:00
}, {
name: 'rotate',
args: [-0.5 * Math.PI]
}, {
name: 'setTextAlign',
args: ['center'],
2016-02-15 00:04:12 +01:00
}, {
name: 'fillText',
args: ['My title', 0, 0, 400]
2016-02-15 00:04:12 +01:00
}, {
name: 'restore',
args: []
}]);
// Rotation is other way on right side
title.options.position = 'right';
// Reset call tracker
context.resetCalls();
2020-01-05 16:42:42 +01:00
title.update(200, 400);
2016-02-15 00:04:12 +01:00
title.top = 50;
title.left = 100;
2020-01-05 16:42:42 +01:00
title.bottom = title.top + title.height;
title.right = title.left + title.width;
2016-02-15 00:04:12 +01:00
title.draw();
expect(context.getCalls()).toEqual([{
name: 'save',
args: []
}, {
name: 'setFillStyle',
args: ['#666']
2016-02-15 00:04:12 +01:00
}, {
name: 'translate',
args: [117.2, 250]
2016-02-15 00:04:12 +01:00
}, {
name: 'rotate',
args: [0.5 * Math.PI]
}, {
name: 'setTextAlign',
args: ['center'],
2016-02-15 00:04:12 +01:00
}, {
name: 'fillText',
args: ['My title', 0, 0, 400]
2016-02-15 00:04:12 +01:00
}, {
name: 'restore',
args: []
}]);
});
describe('config update', function() {
it ('should update the options', function() {
var chart = acquireChart({
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D'],
datasets: [{
data: [10, 20, 30, 100]
}]
},
options: {
title: {
display: true
}
}
});
expect(chart.titleBlock.options.display).toBe(true);
chart.options.title.display = false;
chart.update();
expect(chart.titleBlock.options.display).toBe(false);
});
it ('should update the associated layout item', function() {
var chart = acquireChart({
type: 'line',
data: {},
options: {
title: {
fullWidth: true,
position: 'top',
weight: 150
}
}
});
expect(chart.titleBlock.fullWidth).toBe(true);
expect(chart.titleBlock.position).toBe('top');
expect(chart.titleBlock.weight).toBe(150);
chart.options.title.fullWidth = false;
chart.options.title.position = 'left';
chart.options.title.weight = 42;
chart.update();
expect(chart.titleBlock.fullWidth).toBe(false);
expect(chart.titleBlock.position).toBe('left');
expect(chart.titleBlock.weight).toBe(42);
});
it ('should remove the title if the new options are false', function() {
var chart = acquireChart({
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D'],
datasets: [{
data: [10, 20, 30, 100]
}]
}
});
expect(chart.titleBlock).not.toBe(undefined);
chart.options.title = false;
chart.update();
expect(chart.titleBlock).toBe(undefined);
});
it ('should create the title if the title options are changed to exist', function() {
var chart = acquireChart({
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D'],
datasets: [{
data: [10, 20, 30, 100]
}]
},
options: {
title: false
}
});
expect(chart.titleBlock).toBe(undefined);
chart.options.title = {};
chart.update();
expect(chart.titleBlock).not.toBe(undefined);
expect(chart.titleBlock.options).toEqual(jasmine.objectContaining(Chart.defaults.plugins.title));
});
});
});