123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- // Test the rectangle element
- describe('Rectangle element tests', function() {
- it ('Should be constructed', function() {
- var rectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- expect(rectangle).not.toBe(undefined);
- expect(rectangle._datasetIndex).toBe(2);
- expect(rectangle._index).toBe(1);
- });
- it ('Should correctly identify as in range', function() {
- var rectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- // Safely handles if these are called before the viewmodel is instantiated
- expect(rectangle.inRange(5)).toBe(false);
- expect(rectangle.inLabelRange(5)).toBe(false);
- // Attach a view object as if we were the controller
- rectangle._view = {
- base: 0,
- width: 4,
- x: 10,
- y: 15
- };
- expect(rectangle.inRange(10, 15)).toBe(true);
- expect(rectangle.inRange(10, 10)).toBe(true);
- expect(rectangle.inRange(10, 16)).toBe(false);
- expect(rectangle.inRange(5, 5)).toBe(false);
- expect(rectangle.inLabelRange(5)).toBe(false);
- expect(rectangle.inLabelRange(7)).toBe(false);
- expect(rectangle.inLabelRange(10)).toBe(true);
- expect(rectangle.inLabelRange(12)).toBe(true);
- expect(rectangle.inLabelRange(15)).toBe(false);
- expect(rectangle.inLabelRange(20)).toBe(false);
- // Test when the y is below the base (negative bar)
- var negativeRectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- // Attach a view object as if we were the controller
- negativeRectangle._view = {
- base: 0,
- width: 4,
- x: 10,
- y: -15
- };
- expect(negativeRectangle.inRange(10, -16)).toBe(false);
- expect(negativeRectangle.inRange(10, 1)).toBe(false);
- expect(negativeRectangle.inRange(10, -5)).toBe(true);
- });
- it ('should get the correct height', function() {
- var rectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- // Attach a view object as if we were the controller
- rectangle._view = {
- base: 0,
- width: 4,
- x: 10,
- y: 15
- };
- expect(rectangle.height()).toBe(-15);
- // Test when the y is below the base (negative bar)
- var negativeRectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- // Attach a view object as if we were the controller
- negativeRectangle._view = {
- base: -10,
- width: 4,
- x: 10,
- y: -15
- };
- expect(negativeRectangle.height()).toBe(5);
- });
- it ('should get the correct tooltip position', function() {
- var rectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- // Attach a view object as if we were the controller
- rectangle._view = {
- base: 0,
- width: 4,
- x: 10,
- y: 15
- };
- expect(rectangle.tooltipPosition()).toEqual({
- x: 10,
- y: 15,
- });
- // Test when the y is below the base (negative bar)
- var negativeRectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1
- });
- // Attach a view object as if we were the controller
- negativeRectangle._view = {
- base: -10,
- width: 4,
- x: 10,
- y: -15
- };
- expect(negativeRectangle.tooltipPosition()).toEqual({
- x: 10,
- y: -15,
- });
- });
- it ('should draw correctly', function() {
- var mockContext = window.createMockContext();
- var rectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1,
- _chart: {
- ctx: mockContext,
- }
- });
- // Attach a view object as if we were the controller
- rectangle._view = {
- backgroundColor: 'rgb(255, 0, 0)',
- base: 0,
- borderColor: 'rgb(0, 0, 255)',
- borderWidth: 1,
- ctx: mockContext,
- width: 4,
- x: 10,
- y: 15,
- };
- rectangle.draw();
- expect(mockContext.getCalls()).toEqual([{
- name: 'beginPath',
- args: [],
- }, {
- name: 'setFillStyle',
- args: ['rgb(255, 0, 0)']
- }, {
- name: 'setStrokeStyle',
- args: ['rgb(0, 0, 255)'],
- }, {
- name: 'setLineWidth',
- args: [1]
- }, {
- name: 'moveTo',
- args: [8.5, 0]
- }, {
- name: 'lineTo',
- args: [8.5, 15.5]
- }, {
- name: 'lineTo',
- args: [11.5, 15.5]
- }, {
- name: 'lineTo',
- args: [11.5, 0]
- }, {
- name: 'fill',
- args: [],
- }, {
- name: 'stroke',
- args: []
- }]);
- });
- it ('should draw correctly with no stroke', function() {
- var mockContext = window.createMockContext();
- var rectangle = new Chart.elements.Rectangle({
- _datasetIndex: 2,
- _index: 1,
- _chart: {
- ctx: mockContext,
- }
- });
- // Attach a view object as if we were the controller
- rectangle._view = {
- backgroundColor: 'rgb(255, 0, 0)',
- base: 0,
- borderColor: 'rgb(0, 0, 255)',
- ctx: mockContext,
- width: 4,
- x: 10,
- y: 15,
- };
- rectangle.draw();
- expect(mockContext.getCalls()).toEqual([{
- name: 'beginPath',
- args: [],
- }, {
- name: 'setFillStyle',
- args: ['rgb(255, 0, 0)']
- }, {
- name: 'setStrokeStyle',
- args: ['rgb(0, 0, 255)'],
- }, {
- name: 'setLineWidth',
- args: [undefined]
- }, {
- name: 'moveTo',
- args: [8, 0]
- }, {
- name: 'lineTo',
- args: [8, 15]
- }, {
- name: 'lineTo',
- args: [12, 15]
- }, {
- name: 'lineTo',
- args: [12, 0]
- }, {
- name: 'fill',
- args: [],
- }]);
- });
- function testBorderSkipped (borderSkipped, expectedDrawCalls) {
- var mockContext = window.createMockContext();
- var rectangle = new Chart.elements.Rectangle({
- _chart: { ctx: mockContext }
- });
- // Attach a view object as if we were the controller
- rectangle._view = {
- borderSkipped: borderSkipped, // set tested 'borderSkipped' parameter
- ctx: mockContext,
- base: 0,
- width: 4,
- x: 10,
- y: 15,
- };
-
- rectangle.draw();
- var drawCalls = rectangle._view.ctx.getCalls().splice(4, 4);
- expect(drawCalls).toEqual(expectedDrawCalls);
- }
-
- it ('should draw correctly respecting "borderSkipped" == "bottom"', function() {
- testBorderSkipped ('bottom', [
- { name: 'moveTo', args: [8, 0] },
- { name: 'lineTo', args: [8, 15] },
- { name: 'lineTo', args: [12, 15] },
- { name: 'lineTo', args: [12, 0] },
- ]);
- });
- it ('should draw correctly respecting "borderSkipped" == "left"', function() {
- testBorderSkipped ('left', [
- { name: 'moveTo', args: [8, 15] },
- { name: 'lineTo', args: [12, 15] },
- { name: 'lineTo', args: [12, 0] },
- { name: 'lineTo', args: [8, 0] },
- ]);
- });
- it ('should draw correctly respecting "borderSkipped" == "top"', function() {
- testBorderSkipped ('top', [
- { name: 'moveTo', args: [12, 15] },
- { name: 'lineTo', args: [12, 0] },
- { name: 'lineTo', args: [8, 0] },
- { name: 'lineTo', args: [8, 15] },
- ]);
- });
- it ('should draw correctly respecting "borderSkipped" == "right"', function() {
- testBorderSkipped ('right', [
- { name: 'moveTo', args: [12, 0] },
- { name: 'lineTo', args: [8, 0] },
- { name: 'lineTo', args: [8, 15] },
- { name: 'lineTo', args: [12, 15] },
- ]);
- });
- });
|