/* global describe, it, beforeEach, afterEach, expect, setFixtures */ /* jshint browser: true*/ describe('A Flot chart with absolute time axes', function () { 'use strict'; var plot; var placeholder; beforeEach(function () { var fixture = setFixtures('
').find('#demo-container').get(0); placeholder = $('
'); placeholder.appendTo(fixture); }); afterEach(function () { if (plot) { plot.shutdown(); } }); var firstAndLast = function (arr) { return [arr[0], arr[arr.length - 1]]; }; var createPlotWithAbsoluteTimeAxis = function (placeholder, data, formatString, base, minTickSize) { return $.plot(placeholder, data, { xaxis: { mode: 'time', timeformat: formatString, timeBase: base, minTickSize: minTickSize, showTickLabels: 'all' }, yaxis: {} }); }; var validateTickLabelFormat = function (ticks, regexFormat) { var isFormatCorrect = true; ticks.forEach(function (t) { if (!t.label.match(regexFormat)) { isFormatCorrect = false; } }); return isFormatCorrect; }; it('shows time ticks', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [1000, 2]]], '%Y/%m/%d %M:%S', 'milliseconds'); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '1970/01/01 00:00'}, {v: 1000, label: '1970/01/01 00:01'} ]); }); describe('date generator', function () { it('clamps values greater than Date() range to the limit of Date()', function () { var dateGenerator = $.plot.dateGenerator; expect(dateGenerator(8640000000000001, {}).date).toEqual(new Date(8640000000000000)); expect(dateGenerator(8640000000000002, {}).date).toEqual(new Date(8640000000000000)); expect(dateGenerator(-8640000000000001, {}).date).toEqual(new Date(-8640000000000000)); expect(dateGenerator(-9640000000000000, {}).date).toEqual(new Date(-8640000000000000)); }); }); describe('timebase in microseconds', function () { it('supports timestamps given in microseconds', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [1000000, 2]]], '%Y/%m/%d %M:%S', 'microseconds'); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '1970/01/01 00:00'}, {v: 1000000, label: '1970/01/01 00:01'} ]); }); }); describe('sub-second ticks', function () { it('formats ticks to microsecond accuracy', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [1000125, 2]]], '%H:%M:%S.%s', 'microseconds'); expect(validateTickLabelFormat(plot.getAxes().xaxis.ticks, /00:00:0\d\.\d{6}/)).toEqual(true); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '00:00:00.000000'}, {v: 1000125, label: '00:00:01.000125'} ]); }); it('formats ticks to millisecond (3 decimals) accuracy', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [1002000, 2]]], '%H:%M:%S.%3s', 'microseconds'); expect(validateTickLabelFormat(plot.getAxes().xaxis.ticks, /00:00:0\d\.\d{3}/)).toEqual(true); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '00:00:00.000'}, {v: 1002000, label: '00:00:01.002'} ]); }); it('creates ticks automatically to microsecond accuracy', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [10, 2]]], null, 'microseconds'); expect(validateTickLabelFormat(plot.getAxes().xaxis.ticks, /00\.\d{6}/)).toEqual(true); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '00.000000'}, {v: 10, label: '00.000010'} ]); }); it('creates quarter-second ticks', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [1, 2]]], null, 'seconds', [250, 'millisecond']); expect(validateTickLabelFormat(plot.getAxes().xaxis.ticks, /0\d\.(00|25|50|75)/)).toEqual(true); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '00.00'}, {v: 1, label: '01.00'} ]) }); it('creates quarter-millisecond ticks', function () { plot = createPlotWithAbsoluteTimeAxis(placeholder, [[[0, 1], [1, 2]]], null, 'milliseconds', [250, 'microsecond']); expect(validateTickLabelFormat(plot.getAxes().xaxis.ticks, /00\.00\d(00|25|50|75)/)).toEqual(true); expect(firstAndLast(plot.getAxes().xaxis.ticks)).toEqual([ {v: 0, label: '00.00000'}, {v: 1, label: '00.00100'} ]) }); }); });