123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182 |
- describe('flot', function() {
- describe('setRange', function() {
- var placeholder, plot;
- var options = {
- series: {
- shadowSize: 0, // don't draw shadows
- lines: { show: false },
- points: { show: true, fill: false, symbol: 'circle' }
- }
- };
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should keep the axis min and max for none autoscaling if no data is set', function () {
- options.xaxis = {autoScale: 'none', min: 0, max: 50};
- options.yaxis = {autoScale: 'none', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should swap the axis min and max for min > max', function () {
- options.xaxis = {autoScale: 'none', min: 50, max: 0};
- options.yaxis = {autoScale: 'none', min: 100, max: 0};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should keep the axis min and max for exact autoscaling if no data is set', function () {
- options.xaxis = {autoScale: 'exact', min: 0, max: 50};
- options.yaxis = {autoScale: 'exact', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should keep the axis min and max for grow-exact autoscaling if no data is set', function () {
- options.xaxis = {autoScale: 'exact', growOnly: true, min: 0, max: 50};
- options.yaxis = {autoScale: 'exact', growOnly: true, min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should keep the axis min and max for loose autoscaling if no data is set', function () {
- options.xaxis = {autoScale: 'loose', min: 0, max: 50};
- options.yaxis = {autoScale: 'loose', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should keep the axis min and max for grow-loose autoscaling if no data is set', function () {
- options.xaxis = {autoScale: 'loose', growOnly: true, min: 0, max: 50};
- options.yaxis = {autoScale: 'loose', growOnly: true, min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should keep the axis min and max for window autoscaling if no data is set', function () {
- options.xaxis = {autoScale: 'sliding-window', min: 0, max: 50};
- options.yaxis = {autoScale: 'sliding-window', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should not shift the axis min and max for window autoscaling if data is in window', function () {
- options.xaxis = {autoScale: 'sliding-window', min: 0, max: 10};
- options.yaxis = {autoScale: 'sliding-window', min: 0, max: 10};
- // default window size is 100
- plot = $.plot(placeholder, [[]], options);
- plot.setData([[[0, 0], [50, 50], [100, 100]]]);
- plot.setupGrid(true);
- plot.draw();
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(100);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should shift the axis min and max for window autoscaling if data is bigger than window', function () {
- options.xaxis = {autoScale: 'sliding-window', min: 0, max: 10};
- options.yaxis = {autoScale: 'sliding-window', min: 0, max: 10};
- // default window size is 100
- plot = $.plot(placeholder, [[]], options);
- plot.setData([[[0, 0], [100, 100], [200, 200]]]);
- plot.setupGrid(true);
- plot.draw();
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(100);
- expect(axes.xaxis.max).toBe(200);
- expect(axes.yaxis.min).toBe(100);
- expect(axes.yaxis.max).toBe(200);
- });
- it('should widen the axis max if axis min is the same as axis max', function () {
- options.xaxis = {min: 0, max: 0};
- options.yaxis = {min: 2, max: 2};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(1);
- expect(axes.yaxis.min).toBe(2);
- expect(axes.yaxis.max).toBe(2.01);
- });
- it('should widen the axis min and max if both are null', function () {
- options.xaxis = {};
- options.yaxis = {};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(-0.01);
- expect(axes.xaxis.max).toBe(0.01);
- expect(axes.yaxis.min).toBe(-0.01);
- expect(axes.yaxis.max).toBe(0.01);
- });
- it('should widen the axis min if is null', function () {
- options.xaxis = {max: 1};
- options.yaxis = {max: 0};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(-1);
- expect(axes.xaxis.max).toBe(1);
- expect(axes.yaxis.min).toBe(-1);
- expect(axes.yaxis.max).toBe(0);
- });
- it('should not change the axis min and max for none autoscaling if data is set', function () {
- options.xaxis = {autoScale: 'none', min: 0, max: 50};
- options.yaxis = {autoScale: 'none', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- plot.setData([[[0, 1], [1, 2]]]);
- plot.setupGrid(true);
- plot.draw();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(50);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(100);
- });
- it('should change the axis min and max for exact autoscaling if data is set', function () {
- options.xaxis = {autoScale: 'exact', min: 0, max: 50};
- options.yaxis = {autoScale: 'exact', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- plot.setData([[[0, 1], [1, 2]]]);
- plot.setupGrid(true);
- plot.draw();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(1);
- expect(axes.yaxis.min).toBe(1);
- expect(axes.yaxis.max).toBe(2);
- });
- it('should change the axis min and max for loose autoscaling if data is set', function () {
- options.xaxis = {autoScale: 'loose', min: 0, max: 50};
- options.yaxis = {autoScale: 'loose', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- plot.setData([[[-0.2, -15], [10, 100]]]);
- plot.setupGrid(true);
- plot.draw();
- expect(axes.xaxis.min).toBe(-1);
- expect(axes.xaxis.max).toBe(11);
- expect(axes.yaxis.min).toBe(-20);
- expect(axes.yaxis.max).toBe(120);
- });
- it('should keep the axis min 0 for loose autoscaling if all values are positive', function () {
- options.xaxis = {autoScale: 'loose', min: 0, max: 50};
- options.yaxis = {autoScale: 'loose', min: 0, max: 100};
- plot = $.plot(placeholder, [[]], options);
- var axes = plot.getAxes();
- plot.setData([[[0, 0.1], [10, 100]]]);
- plot.setupGrid(true);
- plot.draw();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.yaxis.min).toBe(0);
- });
- it('should ignore NaN, Infinity and -Infinity values', function () {
- options.xaxis = {autoScale: 'exact'};
- options.yaxis = {autoScale: 'exact'};
- plot = $.plot(placeholder, [[[Infinity, 0], [NaN, NaN], [0, Infinity], [10, -Infinity], [-Infinity, 10], [3, 5], [8, 2]]], options);
- var axes = plot.getAxes();
- expect(axes.xaxis.min).toBe(0);
- expect(axes.xaxis.max).toBe(10);
- expect(axes.yaxis.min).toBe(0);
- expect(axes.yaxis.max).toBe(10);
- });
- });
- describe('computeRangeForDataSeries', function() {
- var placeholder, plot;
- var options = {
- series: {
- shadowSize: 0, // don't draw shadows
- lines: { show: false },
- points: { show: true, fill: false, symbol: 'circle' }
- }
- };
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should return Infinity and -Infinity for the minimum and the maximum respectively of x and y for an empty series', function () {
- plot = $.plot(placeholder, [[]], options);
- var series = plot.getData();
- var limits = plot.computeRangeForDataSeries(series[0]);
- expect(limits.xmin).toBe(Infinity);
- expect(limits.xmax).toBe(-Infinity);
- expect(limits.ymin).toBe(Infinity);
- expect(limits.ymax).toBe(-Infinity);
- });
- it('should return the minimum and the maximum of x and y for a series', function () {
- plot = $.plot(placeholder, [[[0, 1], [1, 2], [2, 3]]], options);
- var series = plot.getData();
- var limits = plot.computeRangeForDataSeries(series[0]);
- expect(limits.xmin).toBe(0);
- expect(limits.xmax).toBe(2);
- expect(limits.ymin).toBe(1);
- expect(limits.ymax).toBe(3);
- });
- it('should return the minimum and the maximum of x and y for an xy series', function () {
- plot = $.plot(placeholder, [[[10, 1], [11, 2], [12, 3]]], options);
- var series = plot.getData();
- var limits = plot.computeRangeForDataSeries(series[0]);
- expect(limits.xmin).toBe(10);
- expect(limits.xmax).toBe(12);
- expect(limits.ymin).toBe(1);
- expect(limits.ymax).toBe(3);
- });
- it('should not compute the minimum and the maximum when autoScale="none"', function () {
- options.xaxis = {autoScale: 'none'};
- options.yaxis = {autoScale: 'none'};
- plot = $.plot(placeholder, [[[0, 1], [1, 2], [2, 3]]], options);
- var series = plot.getData();
- var limits = plot.computeRangeForDataSeries(series[0]);
- expect(limits.xmin).toBe(Infinity);
- expect(limits.xmax).toBe(-Infinity);
- expect(limits.ymin).toBe(Infinity);
- expect(limits.ymax).toBe(-Infinity);
- });
- it('should compute the minimum and the maximum when autoScale="none" and force=true', function () {
- options.xaxis = {autoScale: 'none'};
- options.yaxis = {autoScale: 'none'};
- plot = $.plot(placeholder, [[[0, 1], [1, 2], [2, 3]]], options);
- var series = plot.getData();
- var limits = plot.computeRangeForDataSeries(series[0], true);
- expect(limits.xmin).toBe(0);
- expect(limits.xmax).toBe(2);
- expect(limits.ymin).toBe(1);
- expect(limits.ymax).toBe(3);
- });
- });
- describe('adjustSeriesDataRange', function() {
- var placeholder, plot;
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- plot = $.plot(placeholder, [[]], {});
- });
- it('should set the minimum to zero if needed when {lines|bars}.show=true and {lines|bars}.zero=true', function () {
- [true, false].forEach(function(show) {
- var series = {
- lines: { show: show, zero: show },
- bars: { show: !show, zero: !show, barWidth: 0.8 },
- datapoints: { pointsize: 1 }
- },
- limits = {xmin: 10, ymin: 11, xmax: 12, ymax: 13};
- limits = plot.adjustSeriesDataRange(series, limits);
- expect(limits.ymin).toBe(0);
- expect(limits.ymax).toBe(13);
- });
- });
- it('should set the maximum to zero if needed when {lines|bars}.show=true and {lines|bars}.zero=true', function () {
- [true, false].forEach(function(show) {
- var series = {
- lines: { show: show, zero: show },
- bars: { show: !show, zero: !show, barWidth: 0.8 },
- datapoints: { pointsize: 1 }
- },
- limits = {xmin: 10, ymin: -11, xmax: 12, ymax: -9};
- limits = plot.adjustSeriesDataRange(series, limits);
- expect(limits.ymin).toBe(-11);
- expect(limits.ymax).toBe(0);
- });
- });
- it('should not change the limits of the y when {lines|bars}.show=true, {lines|bars}.zero=true, but datapoints.pointsize>2', function () {
- [true, false].forEach(function(show) {
- var series = {
- lines: { show: show, zero: show },
- bars: { show: !show, zero: !show, barWidth: 0.8 },
- datapoints: { pointsize: 3 }
- },
- limits = {xmin: 10, ymin: -11, xmax: 12, ymax: -9};
- limits = plot.adjustSeriesDataRange(series, limits);
- expect(limits.ymin).toBe(-11);
- expect(limits.ymax).toBe(-9);
- });
- });
- it('should change the limits of x to fit the width of the bars', function () {
- var series = {
- lines: { show: false },
- bars: { show: true, align: 'center', barWidth: 6 }
- },
- limits = {xmin: 10, ymin: 11, xmax: 12, ymax: 13};
- limits = plot.adjustSeriesDataRange(series, limits);
- expect(limits.xmin).toBe(10 - 6 / 2);
- expect(limits.xmax).toBe(12 + 6 / 2);
- });
- it('should change the limits of x to reserve only the needed space given by width of the bars', function () {
- var series = {
- lines: { show: false },
- bars: { show: true, align: 'center', barWidth: 6 },
- datapoints: {points: [0.1, 1, 0.2, 10], pointsize: 2}
- },
- limits = {xmin: 10, ymin: 11, xmax: 12, ymax: 13};
- limits = plot.adjustSeriesDataRange(series, limits);
- expect(limits.xmin).toBeCloseTo(10 - ((0.1 * 6) / 2));
- expect(limits.xmax).toBeCloseTo(12 - ((0.1 * 6) / 2) + (0.1 * 6));
- });
- });
- describe('findNearbyItem', function() {
- var placeholder, plot, sampledata = [[0, 1], [1, 1.1], [2, 1.2]];
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should be able to find the nearest point to the given coordinates', function() {
- plot = $.plot(placeholder, [sampledata], {});
- var item = plot.findNearbyItem(0, 0, function() {
- return true;
- }, Number.MAX_VALUE);
- expect(item.datapoint[0]).toEqual(sampledata[0][0]);
- expect(item.datapoint[1]).toEqual(sampledata[0][1]);
- expect(item.dataIndex).toEqual(0);
- });
- it('should be able to search in a certain radius', function() {
- plot = $.plot(placeholder, [sampledata], {});
- var item = plot.findNearbyItem(0, 0, function() {
- return true;
- }, 1);
- expect(item).toEqual(null);
- item = plot.findNearbyItem(0, 0, function() {
- return true;
- }, 1000);
- expect(item).not.toEqual(null);
- });
- it('should work for bars', function() {
- plot = $.plot(placeholder, [sampledata], {
- bars: {show: true}
- });
- item = plot.findNearbyItem(0, 0, function() {
- return true;
- }, 1000);
- expect(item).not.toEqual(null);
- });
- });
- describe('findNearbyInterpolationPoint', function() {
- var placeholder, plot, sampledata = [[0, 1], [1, 1.1], [2, 1.2]];
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should be able to find the nearest point to the given coordinates', function() {
- plot = $.plot(placeholder, [sampledata], {});
- var item = plot.findNearbyInterpolationPoint(0, 0, function() {
- return true;
- });
- expect(item.datapoint[0]).toEqual(sampledata[0][0]);
- expect(item.datapoint[1]).toEqual(sampledata[0][1]);
- });
- it('should interpolate the intersections properly with linear scales', function() {
- plot = $.plot(placeholder, [sampledata], {});
- var item = plot.findNearbyInterpolationPoint(0.5, 0, function() {
- return true;
- });
- var expectedY = sampledata[0][1] + (sampledata[1][1] - sampledata[0][1]) / 2;
- expect(item.datapoint[0]).toEqual(0.5);
- expect(item.datapoint[1]).toEqual(expectedY);
- });
- it('should return the interpolation with the closest point for multiple series', function() {
- plot = $.plot(placeholder, [[[-10, 0], [10, 1], [100, 2]], [[5, 0], [20, 1], [21, 2]], [[0, 0], [2, 1], [4, 2]]], {});
- var item = plot.findNearbyInterpolationPoint(1, 1, function() {
- return true;
- });
- var expectedY = 0 + (1 - 0) / 2;
- expect(item.datapoint[0]).toEqual(1);
- expect(item.datapoint[1]).toEqual(expectedY);
- });
- it('should interpolate correctly if data comes in reverse order', function () {
- const reversedData = [[4, 1.4], [3, 1.3], [2, 1.2], [1, 1.1], [0, 1.0], [-1, 0.9]];
- plot = $.plot(placeholder, [reversedData], {});
- var point1 = plot.findNearbyInterpolationPoint(0.5, 0, function() {
- return true;
- });
- expect(point1.datapoint[0]).toEqual(0.5);
- expect(point1.datapoint[1]).toEqual(1.05);
- var point2 = plot.findNearbyInterpolationPoint(2.25, 0, function () {
- return true;
- });
- expect(point2.datapoint[0]).toEqual(2.25);
- expect(point2.datapoint[1]).toEqual(1.225);
- var point3 = plot.findNearbyInterpolationPoint(-0.5, 0, function () {
- return true;
- });
- expect(point3.datapoint[0]).toEqual(-0.5);
- expect(point3.datapoint[1]).toEqual(0.95);
- });
- it('should return null for empty dataseries', function() {
- plot = $.plot(placeholder, [], {});
- var item = plot.findNearbyInterpolationPoint(0.5, 0, function() {
- return true;
- });
- expect(item).toEqual(null);
- });
- it('for a dataserie with a single point should return null', function() {
- plot = $.plot(placeholder, [[[1, 2]]], {});
- var item = plot.findNearbyInterpolationPoint(0, 0, function() {
- return true;
- });
- expect(item).toEqual(null);
- });
- it('should return null if below the data bounds', function () {
- plot = $.plot(placeholder, [[[-10, 0], [10, 1], [100, 2]]], {});
- var item = plot.findNearbyInterpolationPoint(-20, 1, function() {
- return true;
- });
- expect(item).toBe(null);
- });
- it('should return null if above the data bounds', function () {
- plot = $.plot(placeholder, [[[-10, 0], [10, 1], [100, 2]]], {});
- var item = plot.findNearbyInterpolationPoint(120, 1, function() {
- return true;
- });
- expect(item).toBe(null);
- });
- });
- describe('setupTickFormatter', function() {
- var placeholder, plot, sampledata = [[0, 1], [1, 1.1], [2, 1.2]];
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should set a default tick formatter to each default axis', function () {
- plot = $.plot(placeholder, [sampledata], { });
- plot.getXAxes().concat(plot.getYAxes()).forEach(function(axis) {
- expect(typeof axis.tickFormatter).toBe('function');
- });
- });
- it('should set a default tick formatter to each specified axis', function () {
- plot = $.plot(placeholder, [sampledata], {
- xaxis: { autoScale: 'exact' },
- yaxes: [
- { autoScale: 'exact' },
- { autoScale: 'none', min: -1, max: 1 }
- ]
- });
- plot.getXAxes().concat(plot.getYAxes()).forEach(function(axis) {
- expect(typeof axis.tickFormatter).toBe('function');
- });
- });
- it('should set and use the specified tick formatter', function () {
- var formatters = [
- jasmine.createSpy('formatter'),
- jasmine.createSpy('formatter'),
- jasmine.createSpy('formatter')
- ];
- plot = $.plot(placeholder, [sampledata], {
- xaxis: { autoScale: 'exact', tickFormatter: formatters[0] },
- yaxes: [
- { autoScale: 'exact', tickFormatter: formatters[1] },
- { autoScale: 'none', min: -1, max: 1, tickFormatter: formatters[2], show: true }
- ]
- });
- formatters.forEach(function(formatter) {
- expect(formatter).toHaveBeenCalled();
- });
- });
- it('should leave the formatter set to the axis unchanged when updating the plot', function () {
- var formatter = jasmine.createSpy('formatter');
- plot = $.plot(placeholder, [sampledata], { });
- // the absolute/relative time plugin is setting the tickFormatter
- //directly to the axes just like here:
- plot.getXAxes()[0].tickFormatter = formatter;
- plot.setData([sampledata, sampledata]);
- plot.setupGrid();
- plot.draw();
- expect(plot.getXAxes()[0].tickFormatter).toBe(formatter);
- });
- });
- describe('computeTickSize', function() {
- var placeholder;
- var plot;
- var sampledata = [[0, 1], [1, 1.1], [2, 1.2]];
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should return the correct size', function () {
- plot = $.plot(placeholder, [sampledata], {});
- var testVector = [
- [1, 10, 10, 1],
- [1, 1.01, 10, 0.001],
- [0.99963, 0.99964, 5, 0.000002],
- [1, 1.1, 5, 0.02],
- [0, 10000, 5, 2000],
- [0, 10, 4, 2.5],
- [0, 750, 10, 100],
- [0, 740, 10, 50]
- ];
- testVector.forEach(function (t) {
- var min = t[0],
- max = t[1],
- ticks = t[2],
- expectedValue = t[3],
- size = plot.computeTickSize(min, max, ticks);
- expect(size).toEqual(expectedValue);
- });
- });
- it('should depend on tickDecimals when specified', function() {
- plot = $.plot(placeholder, [sampledata], {});
- var testVector = [
- [1, 10, 10, 3, 1],
- [1, 1.01, 10, 2, 0.01],
- [0.99963, 0.99964, 5, 3, 0.001],
- [1, 1.1, 5, 1, 0.1],
- [0, 10000, 5, 1, 2000],
- [1, 1.00000000000001, 10, 5, 0.00001],
- [0, 10, 4, 0, 2],
- [0, 750, 10, 1, 100],
- [0, 740, 10, 10, 50],
- [0, 1000, 4, 2, 250]
- ];
- testVector.forEach(function(t) {
- var min = t[0],
- max = t[1],
- ticks = t[2],
- tickDecimals = t[3],
- expectedValue = t[4];
- var size = plot.computeTickSize(min, max, ticks, tickDecimals);
- expect(size).toEqual(expectedValue);
- });
- });
- });
- describe('defaultTickGenerator', function() {
- var placeholder;
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('works for the maximum axis interval', function () {
- var plot = $.plot(placeholder, [[[0, -Number.MAX_VALUE], [1, Number.MAX_VALUE]]], {});
- var yaxis = plot.getYAxes()[0];
- expect(yaxis.ticks).not.toEqual([]);
- });
- });
- describe('drawAxisLabels', function() {
- var placeholder, sampledata = [[1.1e18, 0.1], [1.2e18, 5.1], [1.3e18, 10.1]];
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('should draw no tick labels when showTickLabels = none', function () {
- $.plot(placeholder, [sampledata], {
- xaxis: {
- autoScale: 'loose',
- showTickLabels: 'none'
- }
- });
- var tickLabels = xTickLabels(placeholder);
- expect(tickLabels.length).toBe(0);
- });
- it('should draw two tick labels when showTickLabels = endpoints', function () {
- $.plot(placeholder, [sampledata], {
- xaxis: {
- autoScale: 'loose',
- showTickLabels: 'endpoints'
- }
- });
- var tickLabels = xTickLabels(placeholder);
- expect(tickLabels.length).toBe(2);
- });
- it('should draw multiple tick labels when showTickLabels = all', function () {
- $.plot(placeholder, [sampledata], {
- xaxis: {
- autoScale: 'loose',
- showTickLabels: 'all'
- }
- });
- var tickLabels = xTickLabels(placeholder);
- expect(tickLabels.length).toBeGreaterThan(2);
- });
- ['major', 'endpoints', 'all'].forEach(function(showTickLabels) {
- it('should not overlap the tick labels when the values are large and showTickLabels = ' + showTickLabels, function () {
- $.plot(placeholder, [sampledata], {
- xaxis: {
- autoScale: 'exact',
- showTickLabels: showTickLabels
- }
- });
- var tickLabelBoxes = xTickLabelBoxes(placeholder),
- overlaps = tickLabelBoxes.some(function(b1) {
- return tickLabelBoxes.some(function(b2) {
- return b1 !== b2 && overlapping(b1, b2);
- });
- });
- expect(overlaps).toBe(false);
- });
- });
- function xTickLabels(placeholder) {
- var labels$ = placeholder.find('.flot-x-axis').find('.flot-tick-label'),
- labels = labels$.map(function(i, label) {
- return label.textContent;
- }).get();
- return labels;
- }
- function xTickLabelBoxes(placeholder) {
- var labels$ = placeholder.find('.flot-x-axis').find('.flot-tick-label'),
- boxes = labels$.map(function(i, label) {
- var label$ = $(label),
- pos = label$.position();
- return {
- x1: pos.left, y1: pos.top, x2: label$.outerWidth() + pos.left, y2: label$.outerHeight() + pos.top
- };
- }).get();
- return boxes;
- }
- overlapping = function(b1, b2) {
- return (b1.x1 <= b2.x1 && b2.x1 <= b1.x2) || (b2.x1 <= b1.x1 && b1.x1 <= b2.x2);
- }
- describe('for bars', function() {
- it('should not show x axis endpoints for bars with showTickLabels = all', function() {
- var plot = $.plot(placeholder, [[[-3, 1], [30, 15], [20, 7], [5, 2]]], {
- xaxis: {
- autoScale: 'exact',
- showTickLabels: 'all'
- },
- yaxis: {
- autoScale: 'exact',
- showTickLabels: 'all'
- },
- series: {
- bars: {
- lineWidth: 1,
- show: true,
- fillColor: 'blue',
- barWidth: 0.8
- }
- }
- });
- var xaxis = plot.getXAxes()[0],
- yaxis = plot.getYAxes()[0],
- ticks = xaxis.ticks;
- expect(xaxis.min).not.toEqual(ticks[0].v);
- expect(xaxis.max).not.toEqual(ticks[ticks.length - 1].v);
- ticks = yaxis.ticks;
- expect(yaxis.min).toEqual(ticks[0].v);
- expect(yaxis.max).toEqual(ticks[ticks.length - 1].v);
- });
- it('should show endpoints for multiple series type where showTickLabels = all', function() {
- var plot = $.plot(placeholder, [{
- data: [[-3, 2], [20, 15], [4, 5]],
- lines: { show: true, fill: true }
- }, {
- data: [[-3, 1], [30, 15], [20, 7], [5, 2]],
- bars: { show: true }
- }, {
- data: [[-1, 1], [30, 10], [20, 7], [6, 3]],
- points: { show: true }
- }], {
- xaxis: {
- autoScale: 'exact',
- showTickLabels: 'all'
- }});
- var xaxis = plot.getXAxes()[0],
- ticks = xaxis.ticks;
- expect(xaxis.min).toEqual(ticks[0].v);
- expect(xaxis.max).toEqual(ticks[ticks.length - 1].v);
- });
- });
- });
- describe('decimation', function () {
- var placeholder;
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('calls the "decimate" function of data series when the plot type is line', function () {
- var expected = [1, 2, 3, 3];
- var decimate = jasmine.createSpy('decimate').and.returnValue(expected);
- var data = [{data: [], decimate: decimate}];
- $.plot(placeholder, data, {series: {lines: {show: true}}});
- expect(decimate).toHaveBeenCalled();
- });
- it('calls the "decimatePoints" function of data series when the plot type is points', function () {
- var expected = [1, 2, 3, 3];
- var decimatePoints = jasmine.createSpy('decimate').and.returnValue(expected);
- var data = [{data: [], decimatePoints: decimatePoints}];
- $.plot(placeholder, data, {series: {lines: {show: false}, points: {show: true}}});
- expect(decimatePoints).toHaveBeenCalled();
- });
- it('calls the "decimate" function of data series when the plot type is bars', function () {
- var expected = [1, 2, 3, 3];
- var decimateBars = jasmine.createSpy('decimate').and.returnValue(expected);
- var data = [{data: [], decimate: decimateBars}];
- $.plot(placeholder, data, {series: {lines: {show: false}, bars: {show: true}}});
- expect(decimateBars).toHaveBeenCalled();
- });
- });
- describe('setData', function () {
- var placeholder;
- var data = [[[1, 2], [3, 4]]];
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- it('stores data in the internal buffer', function () {
- var expected = [1, 2, 3, 4];
- var plot = $.plot(placeholder, [], {});
- plot.setData(data);
- var series = plot.getData();
- expect(series.length).toEqual(1);
- expect(series[0].data).toEqual(data[0]);
- expect(series[0].datapoints.points).toEqual(expected);
- expect(series[0].datapoints.pointsize).toEqual(2);
- });
- it('reuses the internal buffer', function () {
- var plot = $.plot(placeholder, [[]], {});
- var buffer = plot.getData()[0].datapoints.points;
- plot.setData(data);
- expect(plot.getData()[0].datapoints.points).toBe(buffer);
- });
- it('expands the internal buffer as neccessary', function () {
- var plot = $.plot(placeholder, [[[3, 4]]], {});
- expect(plot.getData()[0].datapoints.points.length).toBe(2);
- plot.setData(data);
- expect(plot.getData()[0].datapoints.points.length).toBe(4);
- });
- it('shrinks the internal buffer as neccessary', function () {
- var plot = $.plot(placeholder, [[[3, 4], [5, 6], [6, 7], [8, 9]]], {});
- expect(plot.getData()[0].datapoints.points.length).toBe(8);
- plot.setData(data);
- expect(plot.getData()[0].datapoints.points.length).toBe(4);
- });
- });
- describe('draw axis', function() {
- var placeholder;
- beforeEach(function() {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- });
- ['left', 'right'].forEach(function(axisPosition) {
- it('should draw ' + axisPosition + ' y axis next to plot', function() {
- var testVector = [
- [200000000000, 4000000000000],
- [200000000000000, 400000000000000],
- [20000000000000000, 40000000000000000],
- [200000000000000000, 400000000000000000],
- [2000000000000000000, 4000000000000000000],
- [200000000000000000000, 400000000000000000000],
- [20000000000000000000000, 40000000000000000000000]];
- testVector.forEach(function (testValue) {
- var plot = $.plot(placeholder, [[1, 2, 3]], {
- xaxis: {
- autoScale: 'none',
- min: testValue[0],
- max: testValue[1],
- showTickLabels: 'all'
- },
- yaxis: {
- position: axisPosition
- }});
- var yaxis = plot.getYAxes()[0];
- if (axisPosition === 'left') {
- expect(yaxis.box.left + yaxis.box.width).toBeCloseTo(plot.getPlotOffset().left, -1);
- } else {
- expect(yaxis.box.left).toBeCloseTo(plot.getPlotOffset().left + plot.width(), -1);
- }
- });
- });
- });
- ['top', 'bottom'].forEach(function(axisPosition) {
- it('should draw ' + axisPosition + ' x axis next to plot', function() {
- var testVector = [20, 28, 36, 44, 52, 60, 68, 76, 84];
- testVector.forEach(function (fontSize) {
- var plot = $.plot(placeholder, [[1, 2, 3]], {
- xaxis: {
- position: axisPosition
- },
- yaxis: {
- font: {
- size: fontSize
- }
- }});
- var xaxis = plot.getXAxes()[0];
- if (axisPosition === 'top') {
- expect(xaxis.box.top + xaxis.box.height).toBeCloseTo(plot.getPlotOffset().top, -1);
- } else {
- expect(xaxis.box.top).toBeCloseTo(plot.getPlotOffset().top + plot.height(), -1);
- }
- });
- });
- });
- it('should draw y axis next to plot for multiple axis on the same side', function() {
- var testVector = [
- [200000000000, 4000000000000],
- [200000000000000, 400000000000000],
- [20000000000000000, 40000000000000000],
- [200000000000000000, 400000000000000000],
- [2000000000000000000, 4000000000000000000],
- [200000000000000000000, 400000000000000000000],
- [20000000000000000000000, 40000000000000000000000]];
- testVector.forEach(function (testValue) {
- var plot = $.plot(placeholder, [[1, 2, 3]], {
- xaxis: {
- autoScale: 'none',
- min: testValue[0],
- max: testValue[1],
- showTickLabels: 'all',
- font: {
- size: 48
- }
- },
- yaxes: [{
- position: 'left',
- show: true
- }, {
- position: 'left',
- show: true
- }, {
- position: 'left',
- show: true
- }]});
- var yaxis = plot.getYAxes()[0];
- expect(yaxis.box.left + yaxis.box.width).toBeCloseTo(plot.getPlotOffset().left, -1);
- });
- });
- });
- describe('Grid margin', function() {
- var placeholder, placeholder2, fixtures;
- beforeEach(function() {
- fixtures = setFixtures('<div id="test-container" style="width: 600px;height: 400px"/>' +
- '<div id="test-container2" style="width: 600px;height: 400px"/>');
- placeholder = fixtures.find('#test-container');
- placeholder2 = fixtures.find('#test-container2');
- });
- it('should change plot dimensions', function() {
- var testVector = [
- [-20, 0, 0, 0],
- [20, 0, 0, 0],
- [20, -20, 0, 0],
- [-20, -20, 0, 0],
- [-20, 20, 0, 0],
- [20, 20, 0, 0],
- [0, 0, -20, 0],
- [0, 0, 20, 0],
- [0, 0, -20, 20],
- [0, 0, -20, -20],
- [0, 0, 20, 20],
- [0, 0, 20, -20],
- [20, 20, 20, 20],
- [-20, -20, -20, -20]
- ];
- testVector.forEach(function (testValue) {
- var plot1 = $.plot(placeholder, [[]], {}),
- plot2 = $.plot(placeholder2, [[]], {
- grid: { margin: {
- left: testValue[0],
- right: testValue[1],
- top: testValue[2],
- bottom: testValue[3]
- }}});
- expect(plot2.width()).toBe(plot1.width() - testValue[0] - testValue[1]);
- expect(plot2.height()).toBe(plot1.height() - testValue[2] - testValue[3]);
- });
- });
- it('should move the axis according to grid margin', function() {
- var testVector = [
- [-20, 0, 0, 0],
- [20, 0, 0, 0],
- [20, -20, 0, 0],
- [-20, -20, 0, 0],
- [-20, 20, 0, 0],
- [20, 20, 0, 0],
- [0, 0, -20, 0],
- [0, 0, 20, 0],
- [0, 0, -20, 20],
- [0, 0, -20, -20],
- [0, 0, 20, 20],
- [0, 0, 20, -20],
- [20, 20, 20, 20],
- [-20, -20, -20, -20]
- ];
- testVector.forEach(function (testValue) {
- var plot1 = $.plot(placeholder, [[]], {
- xaxes: [{
- position: 'bottom',
- show: true
- }, {
- position: 'top',
- show: true
- }],
- yaxes: [{
- position: 'left',
- show: true
- }, {
- position: 'right',
- show: true
- }]
- }),
- plot2 = $.plot(placeholder2, [[]], {
- xaxes: [{
- position: 'bottom',
- show: true
- }, {
- position: 'top',
- show: true
- }],
- yaxes: [{
- position: 'left',
- show: true
- }, {
- position: 'right',
- show: true
- }],
- grid: { margin: {
- left: testValue[0],
- right: testValue[1],
- top: testValue[2],
- bottom: testValue[3]
- }}});
- var yaxis1 = plot1.getYAxes()[0],
- yaxis2 = plot2.getYAxes()[0];
- expect(yaxis1.box.left + testValue[0]).toEqual(yaxis2.box.left);
- yaxis1 = plot1.getYAxes()[1];
- yaxis2 = plot2.getYAxes()[1];
- expect(yaxis1.box.left - testValue[1]).toEqual(yaxis2.box.left);
- var xaxis1 = plot1.getXAxes()[0],
- xaxis2 = plot2.getXAxes()[0];
- expect(xaxis1.box.top - testValue[3]).toEqual(xaxis2.box.top);
- xaxis1 = plot1.getXAxes()[1];
- xaxis2 = plot2.getXAxes()[1];
- expect(xaxis1.box.top + testValue[2]).toEqual(xaxis2.box.top);
- });
- });
- it('should work for margin: number', function() {
- var plot1 = $.plot(placeholder, [[]], {}),
- plot2 = $.plot(placeholder2, [[]], {
- grid: { margin: 20 }
- });
- expect(plot2.width()).toBe(plot1.width() - 20 - 20);
- expect(plot2.height()).toBe(plot1.height() - 20 - 20);
- });
- });
- });
|