|
-
- describe('Time scale tests', function() {
- var chartInstance;
-
- beforeEach(function() {
- window.addDefaultMatchers(jasmine);
-
-
- jasmine.addMatchers({
- toBeCloseToTime: function() {
- return {
- compare: function(actual, expected) {
- var result = false;
-
- var diff = actual.diff(expected.value, expected.unit, true);
- result = Math.abs(diff) < (expected.threshold !== undefined ? expected.threshold : 0.5);
-
- return {
- pass: result
- };
- }
- }
- }
- });
- });
-
- afterEach(function() {
- if (chartInstance)
- {
- releaseChart(chartInstance);
- }
- });
-
- it('Should load moment.js as a dependency', function() {
- expect(window.moment).not.toBe(undefined);
- });
-
- it('Should register the constructor with the scale service', function() {
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- expect(Constructor).not.toBe(undefined);
- expect(typeof Constructor).toBe('function');
- });
-
- it('Should have the correct default config', function() {
- var defaultConfig = Chart.scaleService.getScaleDefaults('time');
- expect(defaultConfig).toEqual({
- display: true,
- gridLines: {
- color: "rgba(0, 0, 0, 0.1)",
- drawBorder: true,
- drawOnChartArea: true,
- drawTicks: true,
- tickMarkLength: 10,
- lineWidth: 1,
- offsetGridLines: false,
- display: true,
- zeroLineColor: "rgba(0,0,0,0.25)",
- zeroLineWidth: 1
- },
- position: "bottom",
- scaleLabel: {
- labelString: '',
- display: false
- },
- ticks: {
- beginAtZero: false,
- minRotation: 0,
- maxRotation: 50,
- mirror: false,
- padding: 10,
- reverse: false,
- display: true,
- callback: defaultConfig.ticks.callback,
- autoSkip: false,
- autoSkipPadding: 0,
- labelOffset: 0
- },
- time: {
- parser: false,
- format: false,
- unit: false,
- round: false,
- isoWeekday: false,
- displayFormat: false,
- displayFormats: {
- 'millisecond': 'h:mm:ss.SSS a',
- 'second': 'h:mm:ss a',
- 'minute': 'h:mm:ss a',
- 'hour': 'MMM D, hA',
- 'day': 'll',
- 'week': 'll',
- 'month': 'MMM YYYY',
- 'quarter': '[Q]Q - YYYY',
- 'year': 'YYYY'
- }
- }
- });
-
-
- expect(defaultConfig.ticks.callback).toEqual(jasmine.any(Function));
- });
-
- it('should build ticks using days', function() {
- var scaleID = 'myScale';
-
- var mockData = {
- labels: ["2015-01-01T20:00:00", "2015-01-02T21:00:00", "2015-01-03T22:00:00", "2015-01-05T23:00:00", "2015-01-07T03:00", "2015-01-08T10:00", "2015-01-10T12:00"],
- };
-
- var mockContext = window.createMockContext();
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- var scale = new Constructor({
- ctx: mockContext,
- options: Chart.scaleService.getScaleDefaults('time'),
- chart: {
- data: mockData
- },
- id: scaleID
- });
-
-
- scale.update(400, 50);
-
-
- expect(scale.ticks).toEqual([ 'Dec 28, 2014', 'Jan 4, 2015', 'Jan 11, 2015' ]);
- });
-
- it('should build ticks using date objects', function() {
-
- function newDateFromRef(days) {
- return moment('01/01/2015 12:00', 'DD/MM/YYYY HH:mm').add(days, 'd').toDate();
- }
-
- var scaleID = 'myScale';
- var mockData = {
- labels: [newDateFromRef(0), newDateFromRef(1), newDateFromRef(2), newDateFromRef(4), newDateFromRef(6), newDateFromRef(7), newDateFromRef(9)],
- };
-
- var mockContext = window.createMockContext();
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- var scale = new Constructor({
- ctx: mockContext,
- options: Chart.scaleService.getScaleDefaults('time'),
- chart: {
- data: mockData
- },
- id: scaleID
- });
-
- scale.update(400, 50);
-
-
- expect(scale.ticks).toEqual([ 'Dec 28, 2014', 'Jan 4, 2015', 'Jan 11, 2015' ]);
- });
-
- it('should build ticks when the data is xy points', function() {
-
- function newDateFromRef(days) {
- return moment('01/01/2015 12:00', 'DD/MM/YYYY HH:mm').add(days, 'd').toDate();
- }
-
- chartInstance = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- xAxisID: 'xScale0',
- yAxisID: 'yScale0',
- data: [{
- x: newDateFromRef(0),
- y: 1
- }, {
- x: newDateFromRef(1),
- y: 10
- }, {
- x: newDateFromRef(2),
- y: 0
- }, {
- x: newDateFromRef(4),
- y: 5
- }, {
- x: newDateFromRef(6),
- y: 77
- }, {
- x: newDateFromRef(7),
- y: 9
- }, {
- x: newDateFromRef(9),
- y: 5
- }]
- }],
- },
- options: {
- scales: {
- xAxes: [{
- id: 'xScale0',
- type: 'time',
- position: 'bottom'
- }],
- yAxes: [{
- id: 'yScale0',
- type: 'linear'
- }]
- }
- }
- });
-
-
- var xScale = chartInstance.scales.xScale0;
- expect(xScale.ticks).toEqual([ 'Jan 1, 2015', 'Jan 3, 2015', 'Jan 5, 2015', 'Jan 7, 2015', 'Jan 9, 2015', 'Jan 11, 2015' ]);
- });
-
- it('should allow custom time parsers', function() {
- chartInstance = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- xAxisID: 'xScale0',
- yAxisID: 'yScale0',
- data: [{
- x: 375068900,
- y: 1
- }]
- }],
- },
- options: {
- scales: {
- xAxes: [{
- id: 'xScale0',
- type: 'time',
- position: 'bottom',
- time: {
- unit: 'day',
- round: true,
- parser: function customTimeParser(label) {
- return moment.unix(label);
- }
- }
- }],
- yAxes: [{
- id: 'yScale0',
- type: 'linear'
- }]
- }
- }
- });
-
-
- var xScale = chartInstance.scales.xScale0;
-
-
- expect(xScale.ticks[0]).toEqualOneOf(['Nov 19, 1981', 'Nov 20, 1981', 'Nov 21, 1981']);
- expect(xScale.ticks[1]).toEqualOneOf(['Nov 19, 1981', 'Nov 20, 1981', 'Nov 21, 1981']);
- });
-
- it('should build ticks using the config unit', function() {
- var scaleID = 'myScale';
-
- var mockData = {
- labels: ["2015-01-01T20:00:00", "2015-01-02T21:00:00"],
- };
-
- var mockContext = window.createMockContext();
- var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('time'));
- config.time.unit = 'hour';
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- var scale = new Constructor({
- ctx: mockContext,
- options: config,
- chart: {
- data: mockData
- },
- id: scaleID
- });
-
-
- scale.update(400, 50);
- expect(scale.ticks).toEqual(['Jan 1, 8PM', 'Jan 1, 9PM', 'Jan 1, 10PM', 'Jan 1, 11PM', 'Jan 2, 12AM', 'Jan 2, 1AM', 'Jan 2, 2AM', 'Jan 2, 3AM', 'Jan 2, 4AM', 'Jan 2, 5AM', 'Jan 2, 6AM', 'Jan 2, 7AM', 'Jan 2, 8AM', 'Jan 2, 9AM', 'Jan 2, 10AM', 'Jan 2, 11AM', 'Jan 2, 12PM', 'Jan 2, 1PM', 'Jan 2, 2PM', 'Jan 2, 3PM', 'Jan 2, 4PM', 'Jan 2, 5PM', 'Jan 2, 6PM', 'Jan 2, 7PM', 'Jan 2, 8PM', 'Jan 2, 9PM']);
- });
-
- it('should build ticks using the config diff', function() {
- var scaleID = 'myScale';
-
- var mockData = {
- labels: ["2015-01-01T20:00:00", "2015-02-02T21:00:00", "2015-02-21T01:00:00"],
- };
-
- var mockContext = window.createMockContext();
- var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('time'));
- config.time.unit = 'week';
- config.time.round = 'week';
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- var scale = new Constructor({
- ctx: mockContext,
- options: config,
- chart: {
- data: mockData
- },
- id: scaleID
- });
-
-
- scale.update(400, 50);
-
-
- expect(scale.ticks).toEqual(['Dec 28, 2014', 'Jan 4, 2015', 'Jan 11, 2015', 'Jan 18, 2015', 'Jan 25, 2015', 'Feb 1, 2015', 'Feb 8, 2015', 'Feb 15, 2015']);
- });
-
- it('Should use the min and max options', function() {
- var scaleID = 'myScale';
-
- var mockData = {
- labels: ["2015-01-01T20:00:00", "2015-01-02T20:00:00", "2015-01-03T20:00:00"],
- };
-
- var mockContext = window.createMockContext();
- var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('time'));
- config.time.min = "2015-01-01T04:00:00";
- config.time.max = "2015-01-05T06:00:00"
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- var scale = new Constructor({
- ctx: mockContext,
- options: config,
- chart: {
- data: mockData
- },
- id: scaleID
- });
-
- scale.update(400, 50);
- expect(scale.ticks).toEqual([ 'Jan 1, 2015', 'Jan 5, 2015' ]);
- });
-
- it('Should use the isoWeekday option', function() {
- var scaleID = 'myScale';
-
- var mockData = {
- labels: [
- "2015-01-01T20:00:00",
- "2015-01-02T20:00:00",
- "2015-01-03T20:00:00"
- ]
- };
-
- var mockContext = window.createMockContext();
- var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('time'));
- config.time.unit = 'week';
-
- config.time.isoWeekday = 3;
- var Constructor = Chart.scaleService.getScaleConstructor('time');
- var scale = new Constructor({
- ctx: mockContext,
- options: config,
- chart: {
- data: mockData
- },
- id: scaleID
- });
-
- scale.update(400, 50);
- expect(scale.ticks).toEqual([ 'Dec 31, 2014', 'Jan 7, 2015' ]);
- });
-
- it('should get the correct pixel for a value', function() {
- chartInstance = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- xAxisID: 'xScale0',
- yAxisID: 'yScale0',
- data: []
- }],
- labels: ["2015-01-01T20:00:00", "2015-01-02T21:00:00", "2015-01-03T22:00:00", "2015-01-05T23:00:00", "2015-01-07T03:00", "2015-01-08T10:00", "2015-01-10T12:00"],
- },
- options: {
- scales: {
- xAxes: [{
- id: 'xScale0',
- type: 'time',
- position: 'bottom'
- }],
- yAxes: [{
- id: 'yScale0',
- type: 'linear',
- position: 'left'
- }]
- }
- }
- });
-
- var xScale = chartInstance.scales.xScale0;
-
- expect(xScale.getPixelForValue('', 0, 0)).toBeCloseToPixel(78);
- expect(xScale.getPixelForValue('', 6, 0)).toBeCloseToPixel(452);
-
- expect(xScale.getValueForPixel(78)).toBeCloseToTime({
- value: moment(chartInstance.data.labels[0]),
- unit: 'hour',
- threshold: 0.75
- });
- expect(xScale.getValueForPixel(452)).toBeCloseToTime({
- value: moment(chartInstance.data.labels[6]),
- unit: 'hour'
- });
- });
-
- it('should get the correct label for a data value', function() {
- chartInstance = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- xAxisID: 'xScale0',
- yAxisID: 'yScale0',
- data: []
- }],
- labels: ["2015-01-01T20:00:00", "2015-01-02T21:00:00", "2015-01-03T22:00:00", "2015-01-05T23:00:00", "2015-01-07T03:00", "2015-01-08T10:00", "2015-01-10T12:00"],
- },
- options: {
- scales: {
- xAxes: [{
- id: 'xScale0',
- type: 'time',
- position: 'bottom'
- }],
- yAxes: [{
- id: 'yScale0',
- type: 'linear',
- position: 'left'
- }]
- }
- }
- });
-
- var xScale = chartInstance.scales.xScale0;
- expect(xScale.getLabelForIndex(0, 0)).toBe('2015-01-01T20:00:00');
- expect(xScale.getLabelForIndex(6, 0)).toBe('2015-01-10T12:00');
-
- });
- });
|