mirror of
https://github.com/chartjs/Chart.js.git
synced 2026-03-13 11:46:55 +01:00
Replace the old style canvas "mock" context checks by image based unit tests which are easier to maintain and allow more flexibility in the drawing logic since we are not testing the context calls but the final painted result.
182 lines
3.6 KiB
JavaScript
182 lines
3.6 KiB
JavaScript
describe('Chart.elements.Point', function() {
|
|
describe('auto', jasmine.specsFromFixtures('element.point'));
|
|
|
|
it ('Should be constructed', function() {
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1
|
|
});
|
|
|
|
expect(point).not.toBe(undefined);
|
|
expect(point._datasetIndex).toBe(2);
|
|
expect(point._index).toBe(1);
|
|
});
|
|
|
|
it ('Should correctly identify as in range', function() {
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1
|
|
});
|
|
|
|
// Safely handles if these are called before the viewmodel is instantiated
|
|
expect(point.inRange(5)).toBe(false);
|
|
expect(point.inLabelRange(5)).toBe(false);
|
|
|
|
// Attach a view object as if we were the controller
|
|
point._view = {
|
|
radius: 2,
|
|
hitRadius: 3,
|
|
x: 10,
|
|
y: 15
|
|
};
|
|
|
|
expect(point.inRange(10, 15)).toBe(true);
|
|
expect(point.inRange(10, 10)).toBe(false);
|
|
expect(point.inRange(10, 5)).toBe(false);
|
|
expect(point.inRange(5, 5)).toBe(false);
|
|
|
|
expect(point.inLabelRange(5)).toBe(false);
|
|
expect(point.inLabelRange(7)).toBe(true);
|
|
expect(point.inLabelRange(10)).toBe(true);
|
|
expect(point.inLabelRange(12)).toBe(true);
|
|
expect(point.inLabelRange(15)).toBe(false);
|
|
expect(point.inLabelRange(20)).toBe(false);
|
|
});
|
|
|
|
it ('should get the correct tooltip position', function() {
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1
|
|
});
|
|
|
|
// Attach a view object as if we were the controller
|
|
point._view = {
|
|
radius: 2,
|
|
borderWidth: 6,
|
|
x: 10,
|
|
y: 15
|
|
};
|
|
|
|
expect(point.tooltipPosition()).toEqual({
|
|
x: 10,
|
|
y: 15,
|
|
padding: 8
|
|
});
|
|
});
|
|
|
|
it('should get the correct area', function() {
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1
|
|
});
|
|
|
|
// Attach a view object as if we were the controller
|
|
point._view = {
|
|
radius: 2,
|
|
};
|
|
|
|
expect(point.getArea()).toEqual(Math.PI * 4);
|
|
});
|
|
|
|
it('should get the correct center point', function() {
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1
|
|
});
|
|
|
|
// Attach a view object as if we were the controller
|
|
point._view = {
|
|
radius: 2,
|
|
x: 10,
|
|
y: 10
|
|
};
|
|
|
|
expect(point.getCenterPoint()).toEqual({x: 10, y: 10});
|
|
});
|
|
|
|
it ('should draw correctly with default settings if necessary', function() {
|
|
var mockContext = window.createMockContext();
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1,
|
|
_chart: {
|
|
ctx: mockContext,
|
|
}
|
|
});
|
|
|
|
// Attach a view object as if we were the controller
|
|
point._view = {
|
|
radius: 2,
|
|
hitRadius: 3,
|
|
x: 10,
|
|
y: 15,
|
|
ctx: mockContext
|
|
};
|
|
|
|
point.draw();
|
|
|
|
expect(mockContext.getCalls()).toEqual([{
|
|
name: 'setStrokeStyle',
|
|
args: ['rgba(0,0,0,0.1)']
|
|
}, {
|
|
name: 'setLineWidth',
|
|
args: [1]
|
|
}, {
|
|
name: 'setFillStyle',
|
|
args: ['rgba(0,0,0,0.1)']
|
|
}, {
|
|
name: 'save',
|
|
args: []
|
|
}, {
|
|
name: 'translate',
|
|
args: [10, 15]
|
|
}, {
|
|
name: 'rotate',
|
|
args: [0]
|
|
}, {
|
|
name: 'beginPath',
|
|
args: []
|
|
}, {
|
|
name: 'arc',
|
|
args: [0, 0, 2, 0, 2 * Math.PI]
|
|
}, {
|
|
name: 'closePath',
|
|
args: [],
|
|
}, {
|
|
name: 'fill',
|
|
args: [],
|
|
}, {
|
|
name: 'stroke',
|
|
args: []
|
|
}, {
|
|
name: 'restore',
|
|
args: []
|
|
}]);
|
|
});
|
|
|
|
it ('should not draw if skipped', function() {
|
|
var mockContext = window.createMockContext();
|
|
var point = new Chart.elements.Point({
|
|
_datasetIndex: 2,
|
|
_index: 1,
|
|
_chart: {
|
|
ctx: mockContext,
|
|
}
|
|
});
|
|
|
|
// Attach a view object as if we were the controller
|
|
point._view = {
|
|
radius: 2,
|
|
hitRadius: 3,
|
|
x: 10,
|
|
y: 15,
|
|
ctx: mockContext,
|
|
skip: true
|
|
};
|
|
|
|
point.draw();
|
|
|
|
expect(mockContext.getCalls()).toEqual([]);
|
|
});
|
|
});
|