From e8c70e4e0f4c124a2c68eb43d6ec4e781d1bf810 Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Tue, 20 Oct 2015 22:27:30 -0400 Subject: [PATCH] Rewrite tests to use ES6 modules. --- auto_tests/runner.html | 60 +++++ auto_tests/tests/CanvasAssertions.js | 2 + auto_tests/tests/DygraphOps.js | 5 +- auto_tests/tests/PixelSampler.js | 13 ++ auto_tests/tests/Proxy.js | 2 + auto_tests/tests/Util.js | 11 +- auto_tests/tests/annotations.js | 11 +- auto_tests/tests/axis_labels-deprecated.js | 318 --------------------------- auto_tests/tests/axis_labels.js | 24 +- auto_tests/tests/callback.js | 32 ++- auto_tests/tests/connect_separated_points.js | 15 +- auto_tests/tests/css.js | 35 +-- auto_tests/tests/custom_asserts.js | 2 +- auto_tests/tests/custom_bars.js | 15 +- auto_tests/tests/data_api.js | 7 +- auto_tests/tests/date_formats.js | 11 +- auto_tests/tests/date_ticker.js | 23 +- auto_tests/tests/dygraph-options-tests.js | 10 +- auto_tests/tests/error_bars.js | 22 +- auto_tests/tests/fast_canvas_proxy.js | 8 +- auto_tests/tests/fill_step_plot.js | 16 +- auto_tests/tests/formats.js | 10 +- auto_tests/tests/grid_per_axis.js | 60 ++--- auto_tests/tests/gviz.js | 11 +- auto_tests/tests/hidpi.js | 7 +- auto_tests/tests/interaction_model.js | 20 +- auto_tests/tests/missing_points.js | 20 +- auto_tests/tests/multi_csv.js | 10 +- auto_tests/tests/multiple_axes.js | 12 +- auto_tests/tests/no_hours.js | 11 +- auto_tests/tests/numeric_ticker.js | 20 +- auto_tests/tests/parser.js | 17 +- auto_tests/tests/pathological_cases.js | 16 +- auto_tests/tests/per_axis.js | 20 +- auto_tests/tests/per_series.js | 12 +- auto_tests/tests/plugins.js | 11 +- auto_tests/tests/plugins_legend.js | 23 +- auto_tests/tests/range_selector.js | 31 ++- auto_tests/tests/range_tests.js | 10 +- auto_tests/tests/resize.js | 23 +- auto_tests/tests/rolling_average.js | 12 +- auto_tests/tests/sanity.js | 6 +- auto_tests/tests/scientific_notation.js | 11 +- auto_tests/tests/scrolling_div.js | 19 +- auto_tests/tests/selection.js | 9 +- auto_tests/tests/simple_drawing.js | 22 +- auto_tests/tests/smooth_plotter.js | 5 + auto_tests/tests/stacked.js | 20 +- auto_tests/tests/step_plot_per_series.js | 21 +- auto_tests/tests/synchronize.js | 9 +- auto_tests/tests/to_dom_coords.js | 19 +- auto_tests/tests/two_digit_years.js | 10 +- auto_tests/tests/update_options.js | 12 +- auto_tests/tests/update_while_panning.js | 11 +- auto_tests/tests/utils_test.js | 38 ++-- auto_tests/tests/visibility.js | 10 +- package.json | 1 + src/datahandler/bars-custom.js | 11 +- src/datahandler/bars-error.js | 13 +- src/datahandler/bars-fractions.js | 11 +- src/datahandler/bars.js | 20 +- src/datahandler/default-fractions.js | 14 +- src/dygraph-canvas.js | 5 +- src/dygraph-gviz.js | 13 +- src/dygraph-tickers.js | 2 +- src/dygraph-utils.js | 5 +- src/dygraph.js | 58 ++--- src/extras/smooth-plotter.js | 15 +- src/extras/synchronizer.js | 11 +- src/plugins/grid.js | 12 +- src/plugins/legend.js | 26 +-- tests/dashed-canvas.html | 8 +- watch-tests.sh | 63 ++++++ 73 files changed, 699 insertions(+), 809 deletions(-) create mode 100644 auto_tests/runner.html delete mode 100644 auto_tests/tests/axis_labels-deprecated.js create mode 100755 watch-tests.sh diff --git a/auto_tests/runner.html b/auto_tests/runner.html new file mode 100644 index 0000000..1768c1f --- /dev/null +++ b/auto_tests/runner.html @@ -0,0 +1,60 @@ + + + + dygraphs tests + + + +
+
+ + + + + + + + + + + + + + + + + + + diff --git a/auto_tests/tests/CanvasAssertions.js b/auto_tests/tests/CanvasAssertions.js index 2b37ec5..ef37fb9 100644 --- a/auto_tests/tests/CanvasAssertions.js +++ b/auto_tests/tests/CanvasAssertions.js @@ -244,3 +244,5 @@ CanvasAssertions.match = function(predicate, call) { } return true; }; + +export default CanvasAssertions; diff --git a/auto_tests/tests/DygraphOps.js b/auto_tests/tests/DygraphOps.js index 52f5943..460547b 100644 --- a/auto_tests/tests/DygraphOps.js +++ b/auto_tests/tests/DygraphOps.js @@ -18,6 +18,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +import * as utils from '../../src/dygraph-utils'; /** * @fileoverview Utility functions for Dygraphs. @@ -109,7 +110,7 @@ DygraphOps.dispatchDoubleClick = function(g, custom) { * type, screenX, screenY, clientX, clientY. */ DygraphOps.createOptsForPoint_ = function(g, type, x, y) { - var pos = Dygraph.findPos(g.canvas_); + var pos = utils.findPos(g.canvas_); var pageX = pos.x + x; var pageY = pos.y + y; @@ -213,3 +214,5 @@ DygraphOps.dispatchMouseOut = function(g, x, y, custom) { custom); }; + +export default DygraphOps; diff --git a/auto_tests/tests/PixelSampler.js b/auto_tests/tests/PixelSampler.js index e1b3be3..d45ab8a 100644 --- a/auto_tests/tests/PixelSampler.js +++ b/auto_tests/tests/PixelSampler.js @@ -33,6 +33,17 @@ PixelSampler.prototype.colorAtPixel = function(x, y) { }; /** + * Convenience wrapper around colorAtPixel if you only care about RGB (not A). + * @param {number} x The screen x-coordinate at which to sample. + * @param {number} y The screen y-coordinate at which to sample. + * @return {Array.} a 3D array: [R, G, B]. All three values + * are in [0, 255]. A pixel which has never been touched will be [0,0,0]. + */ +PixelSampler.prototype.rgbAtPixel = function(x, y) { + return this.colorAtPixel(x, y).slice(0, 3); +}; + +/** * The method samples a color using data coordinates (not screen coordinates). * This will round your data coordinates to the nearest screen pixel before * sampling. @@ -45,3 +56,5 @@ PixelSampler.prototype.colorAtCoordinate = function(x, y) { var dom_xy = this.dygraph_.toDomCoords(x, y); return this.colorAtPixel(Math.round(dom_xy[0]), Math.round(dom_xy[1])); }; + +export default PixelSampler; diff --git a/auto_tests/tests/Proxy.js b/auto_tests/tests/Proxy.js index 9ffc385..2348b87 100644 --- a/auto_tests/tests/Proxy.js +++ b/auto_tests/tests/Proxy.js @@ -75,3 +75,5 @@ Proxy.prototype.log__ = function(name, args) { Proxy.reset = function(proxy) { proxy.calls__ = []; } + +export default Proxy; diff --git a/auto_tests/tests/Util.js b/auto_tests/tests/Util.js index 3b8c1b8..36532cd 100644 --- a/auto_tests/tests/Util.js +++ b/auto_tests/tests/Util.js @@ -3,6 +3,9 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ + +import * as utils from '../../src/dygraph-utils'; + var Util = {}; /** @@ -90,14 +93,14 @@ Util.makeNumbers = function(ary) { /** * Sample a pixel from the canvas. * Returns an [r, g, b, a] tuple where each values is in [0, 255]. + * This is _very_ slow! If you want to sample many pixels, use PixelSampler. */ Util.samplePixel = function(canvas, x, y) { var ctx = canvas.getContext("2d"); // bypasses Proxy if applied. - // TODO(danvk): Any performance issues with this? var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); - var scale = Dygraph.getContextPixelRatio(ctx); + var scale = utils.getContextPixelRatio(ctx); var i = 4 * (x * scale + imageData.width * y * scale); var d = imageData.data; @@ -145,7 +148,7 @@ Util.overrideXMLHttpRequest = function(data) { * @return {string} The date formatted as YYYY-MM-DD. */ Util.formatDate = function(dateMillis) { - return Dygraph.dateString_(dateMillis).slice(0, 10); // 10 == "YYYY/MM/DD".length + return utils.dateString_(dateMillis).slice(0, 10); // 10 == "YYYY/MM/DD".length }; /** @@ -168,3 +171,5 @@ Util.captureConsole = function(obj) { console.error = orig[2]; }; }; + +export default Util; diff --git a/auto_tests/tests/annotations.js b/auto_tests/tests/annotations.js index 3ea5e7c..3be1936 100644 --- a/auto_tests/tests/annotations.js +++ b/auto_tests/tests/annotations.js @@ -3,14 +3,13 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("annotations", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import Util from './Util'; -afterEach(function() { -}); +describe("annotations", function() { + +cleanupAfterEach(); it('testAnnotationsDrawn', function() { var opts = { diff --git a/auto_tests/tests/axis_labels-deprecated.js b/auto_tests/tests/axis_labels-deprecated.js deleted file mode 100644 index 6ca1dc1..0000000 --- a/auto_tests/tests/axis_labels-deprecated.js +++ /dev/null @@ -1,318 +0,0 @@ -/** - * @fileoverview Test cases for how axis labels are chosen and formatted, - * specializing on the deprecated xLabelFormatter, etc. - * - * @author dan@dygraphs.com (Dan Vanderkam) - */ -describe("axis-labels-deprecated", function() { - -beforeEach(function() { - document.body.innerHTML = "
"; -}); - -afterEach(function() { -}); - -it('testDeprecatedDeprecatedXAxisTimeLabelFormatter', function() { - var opts = { - width: 480, - height: 320, - labels: ['X', 'Y1'] - }; - var data = [[5.0,0],[5.1,1],[5.2,2],[5.3,3],[5.4,4],[5.5,5],[5.6,6],[5.7,7],[5.8,8],[5.9,9]]; - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - g.updateOptions({ - axes : { - x : { - axisLabelFormatter: function (totalMinutes) { - var hours = Math.floor( totalMinutes / 60); - var minutes = Math.floor((totalMinutes - (hours * 60))); - var seconds = Math.round((totalMinutes * 60) - (hours * 3600) - (minutes * 60)); - - if (hours < 10) hours = "0" + hours; - if (minutes < 10) minutes = "0" + minutes; - if (seconds < 10) seconds = "0" + seconds; - - return hours + ':' + minutes + ':' + seconds; - } - } - } - }); - - assert.deepEqual(["00:05:00","00:05:12","00:05:24","00:05:36","00:05:48"], Util.getXLabels()); - - // The legend does not use the xAxisLabelFormatter: - g.setSelection(1); - assert.equal('5.1: Y1: 1', Util.getLegend()); -}); - -it('testDeprecatedAxisLabelFormatter', function() { - var opts = { - width: 480, - height: 320, - axes : { - x : { - axisLabelFormatter: function(x, granularity, opts, dg) { - assert.equal('number', typeof(x)); - assert.equal('number', typeof(granularity)); - assert.equal('function', typeof(opts)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'x' + x; - } - }, - y : { - axisLabelFormatter: function(y, granularity, opts, dg) { - assert.equal('number', typeof(y)); - assert.equal('number', typeof(granularity)); - assert.equal('function', typeof(opts)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'y' + y; - } - } - }, - labels: ['x', 'y'] - }; - var data = []; - for (var i = 0; i < 10; i++) { - data.push([i, 2 * i]); - } - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - - assert.deepEqual(['x0','x2','x4','x6','x8'], Util.getXLabels()); - assert.deepEqual(["y0","y5","y10","y15"], Util.getYLabels()); - - g.setSelection(2); - assert.equal("2: y: 4", Util.getLegend()); -}); - -it('testDeprecatedDateAxisLabelFormatter', function() { - var opts = { - width: 480, - height: 320, - axes : { - x : { - axisLabelFormatter: function(x, granularity, opts, dg) { - assert.isTrue(Dygraph.isDateLike(x)); - assert.equal('number', typeof(granularity)); - assert.equal('function', typeof(opts)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'x' + Util.formatDate(x); - }, - pixelsPerLabel: 60 - }, - y : { - axisLabelFormatter: function(y, granularity, opts, dg) { - assert.equal('number', typeof(y)); - assert.equal('number', typeof(granularity)); - assert.equal('function', typeof(opts)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'y' + y; - } - } - }, - labels: ['x', 'y'] - }; - var data = []; - for (var i = 1; i < 10; i++) { - data.push([new Date("2011/01/0" + i), 2 * i]); - } - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - - assert.deepEqual(["x2011/01/02","x2011/01/04","x2011/01/06","x2011/01/08"], Util.getXLabels()); - assert.deepEqual(["y5","y10","y15"], Util.getYLabels()); - - g.setSelection(0); - assert.equal("2011/01/01: y: 2", Util.getLegend()); -}); - -// This test verifies that when a valueFormatter is set (but not an -// axisLabelFormatter), then the valueFormatter is used to format the axis -// labels. -it('testDeprecatedValueFormatter', function() { - var opts = { - width: 480, - height: 320, - axes : { - x : { - valueFormatter: function(x, opts, series_name, dg) { - assert.equal('number', typeof(x)); - assert.equal('function', typeof(opts)); - assert.equal('string', typeof(series_name)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'x' + x; - } - }, - y : { - valueFormatter: function(y, opts, series_name, dg) { - assert.equal('number', typeof(y)); - assert.equal('function', typeof(opts)); - assert.equal('string', typeof(series_name)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'y' + y; - } - } - }, - labels: ['x', 'y'] - }; - var data = []; - for (var i = 0; i < 10; i++) { - data.push([i, 2 * i]); - } - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - - // the valueFormatter options do not affect the ticks. - assert.deepEqual(['0','2','4','6','8'], Util.getXLabels()); - assert.deepEqual(["0","5","10","15"], Util.getYLabels()); - - // they do affect the legend, however. - g.setSelection(2); - assert.equal("x2: y: y4", Util.getLegend()); -}); - -it('testDeprecatedDateValueFormatter', function() { - var opts = { - width: 480, - height: 320, - axes : { - x : { - valueFormatter: function(x, opts, series_name, dg) { - assert.equal('number', typeof(x)); - assert.equal('function', typeof(opts)); - assert.equal('string', typeof(series_name)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'x' + Util.formatDate(x); - }, - pixelsPerLabel: 60 - }, - y : { - valueFormatter: function(y, opts, series_name, dg) { - assert.equal('number', typeof(y)); - assert.equal('function', typeof(opts)); - assert.equal('string', typeof(series_name)); - assert.equal('[Dygraph graph]', dg.toString()); - return 'y' + y; - } - } - }, - labels: ['x', 'y'] - }; - - var data = []; - for (var i = 1; i < 10; i++) { - data.push([new Date("2011/01/0" + i), 2 * i]); - } - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - - // valueFormatters do not affect ticks. - assert.deepEqual(["02 Jan","04 Jan","06 Jan","08 Jan"], Util.getXLabels()); - assert.deepEqual(["5","10","15"], Util.getYLabels()); - - // the valueFormatter options also affect the legend. - g.setSelection(2); - assert.equal('x2011/01/03: y: y6', Util.getLegend()); -}); - -// This test verifies that when both a valueFormatter and an axisLabelFormatter -// are specified, the axisLabelFormatter takes precedence. -it('testDeprecatedAxisLabelFormatterPrecedence', function() { - var opts = { - width: 480, - height: 320, - axes : { - x : { - valueFormatter: function(x) { - return 'xvf' + x; - }, - axisLabelFormatter: function(x, granularity) { - return 'x' + x; - }, - }, - y : { - valueFormatter: function(y) { - return 'yvf' + y; - }, - axisLabelFormatter: function(y) { - return 'y' + y; - }, - } - }, - labels: ['x', 'y'] - }; - var data = []; - for (var i = 0; i < 10; i++) { - data.push([i, 2 * i]); - } - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - - assert.deepEqual(['x0','x2','x4','x6','x8'], Util.getXLabels()); - assert.deepEqual(["y0","y5","y10","y15"], Util.getYLabels()); - - g.setSelection(9); - assert.equal("xvf9: y: yvf18", Util.getLegend()); -}); - -// This is the same as the previous test, except that options are added -// one-by-one. -it('testDeprecatedAxisLabelFormatterIncremental', function() { - var opts = { - width: 480, - height: 320, - labels: ['x', 'y'] - }; - var data = []; - for (var i = 0; i < 10; i++) { - data.push([i, 2 * i]); - } - var graph = document.getElementById("graph"); - var g = new Dygraph(graph, data, opts); - g.updateOptions({ - axes : { - x : { - valueFormatter: function(x) { - return 'xvf' + x; - } - } - } - }); - g.updateOptions({ - axes : { - y : { - valueFormatter: function(y) { - return 'yvf' + y; - } - } - } - }); - g.updateOptions({ - axes : { - x : { - axisLabelFormatter: function(x) { - return 'x' + x; - } - } - } - }); - g.updateOptions({ - axes : { - y : { - axisLabelFormatter: function(y) { - return 'y' + y; - } - } - } - }); - - assert.deepEqual(["x0","x2","x4","x6","x8"], Util.getXLabels()); - assert.deepEqual(["y0","y5","y10","y15"], Util.getYLabels()); - - g.setSelection(9); - assert.equal("xvf9: y: yvf18", Util.getLegend()); -}); - -}); diff --git a/auto_tests/tests/axis_labels.js b/auto_tests/tests/axis_labels.js index abff8b2..0af8085 100644 --- a/auto_tests/tests/axis_labels.js +++ b/auto_tests/tests/axis_labels.js @@ -3,14 +3,16 @@ * * @author dan@dygraphs.com (Dan Vanderkam) */ -describe("axis-labels", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import DEFAULT_ATTRS from '../../src/dygraph-default-attrs'; +import Util from './Util'; +import {assertDeepCloseTo} from './custom_asserts'; -afterEach(function() { -}); +describe("axis-labels", function() { + +cleanupAfterEach(); var simpleData = "X,Y,Y2\n" + @@ -204,7 +206,7 @@ it('testDateAxisLabelFormatter', function() { x : { pixelsPerLabel: 60, axisLabelFormatter : function(x, granularity, opts, dg) { - assert.isTrue(Dygraph.isDateLike(x)); + assert.isTrue(utils.isDateLike(x)); assert.equal('number', typeof(granularity)); assert.equal('function', typeof(opts)); assert.equal('[Dygraph graph]', dg.toString()); @@ -705,7 +707,7 @@ it('testAxisLabelFontSize', function() { var g = new Dygraph(graph, simpleData, {}); // Be sure we're dealing with a 14-point default. - assert.equal(14, Dygraph.DEFAULT_ATTRS.axisLabelFontSize); + assert.equal(14, DEFAULT_ATTRS.axisLabelFontSize); var assertFontSize = function(selector, expected) { Util.assertStyleOfChildren(selector, "font-size", expected); @@ -763,7 +765,7 @@ it('testAxisLabelFontSizeNull', function() { }; // Be sure we're dealing with a 14-point default. - assert.equal(14, Dygraph.DEFAULT_ATTRS.axisLabelFontSize); + assert.equal(14, DEFAULT_ATTRS.axisLabelFontSize); assertFontSize(document.querySelectorAll(".dygraph-axis-label-x"), "14px"); assertFontSize(document.querySelectorAll(".dygraph-axis-label-y"), "14px"); @@ -774,7 +776,7 @@ it('testAxisLabelColor', function() { var g = new Dygraph(graph, simpleData, {}); // Be sure we're dealing with a black default. - assert.equal("black", Dygraph.DEFAULT_ATTRS.axisLabelColor); + assert.equal("black", DEFAULT_ATTRS.axisLabelColor); var assertColor = function(selector, expected) { Util.assertStyleOfChildren(selector, "color", expected); @@ -832,7 +834,7 @@ it('testAxisLabelColorNull', function() { } // Be sure we're dealing with a 14-point default. - assert.equal(14, Dygraph.DEFAULT_ATTRS.axisLabelFontSize); + assert.equal(14, DEFAULT_ATTRS.axisLabelFontSize); assertColor(document.querySelectorAll(".dygraph-axis-label-x"), "rgb(0, 0, 0)"); assertColor(document.querySelectorAll(".dygraph-axis-label-y"), "rgb(0, 0, 0)"); diff --git a/auto_tests/tests/callback.js b/auto_tests/tests/callback.js index b12ea64..1e00815 100644 --- a/auto_tests/tests/callback.js +++ b/auto_tests/tests/callback.js @@ -4,12 +4,22 @@ * @author uemit.seren@gmail.com (Ümit Seren) */ +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import Util from './Util'; +import DygraphOps from './DygraphOps'; + describe("callback", function() { +cleanupAfterEach(); + var xhr, styleSheet; +var graph; beforeEach(function() { - document.body.innerHTML = "
"; + var container = document.getElementById('graph'); + container.innerHTML = "
"; + graph = container.querySelector('#inner-graph'); xhr = XMLHttpRequest; styleSheet = document.createElement("style"); styleSheet.type = "text/css"; @@ -42,7 +52,6 @@ it('testHighlightCallbackIsCalled', function() { h_pts = pts; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, { width: 100, @@ -71,7 +80,6 @@ it('testDrawPointCallback_disabled', function() { called = true; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, { drawPointCallback: callback, }); @@ -91,7 +99,6 @@ it('testDrawPointCallback_enabled', function() { called = true; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, { drawPoints: true, drawPointCallback: callback @@ -114,7 +121,6 @@ it('testDrawPointCallback_pointSize', function() { count++; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, { drawPoints: true, drawPointCallback: callback @@ -144,10 +150,9 @@ it('testDrawPointCallback_isolated', function() { assert.equal(g, this); var dx = g.toDataXCoord(cx); xvalues.push(dx); - Dygraph.Circles.DEFAULT.apply(this, arguments); + utils.Circles.DEFAULT.apply(this, arguments); }; - var graph = document.getElementById("graph"); var testdata = [[10, 2], [11, 3], [12, NaN], [13, 2], [14, NaN], [15, 3]]; var graphOpts = { labels: ['X', 'Y'], @@ -188,7 +193,6 @@ it('testDrawHighlightPointCallbackIsCalled', function() { called = true; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, { width: 100, @@ -211,7 +215,6 @@ var runClosestTest = function(isStacked, widthNormal, widthHighlighted) { var h_pts; var h_series; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, { width: 600, @@ -359,7 +362,6 @@ it('testNaNData', function() { h_pts = pts; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, dataNaN, { width: 600, @@ -412,7 +414,6 @@ it('testNaNDataStack', function() { h_pts = pts; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, dataNaN, { width: 600, @@ -478,7 +479,6 @@ it('testGapHighlight', function() { h_pts = pts; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, dataGap, { width: 400, height: 300, @@ -521,7 +521,6 @@ it('testFailedResponse', function() { throw "should not reach here"; }; - var graph = document.getElementById("graph"); graph.style.border = "2px solid black"; var g = new Dygraph(graph, "data.csv", { // fake name width: 400, @@ -551,7 +550,6 @@ it('testHighlightCallbackRow', function() { highlightRow = row; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, "X,Y,Z\n" + "0,1,2\n" + // 0 @@ -602,7 +600,6 @@ it('testUnderlayCallback_noSeries', function() { yMax = g.yAxisRange(0)[1]; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, "\n", { underlayCallback: callback }); @@ -625,7 +622,6 @@ it('testUnderlayCallback_yAxisRange', function() { yMax = g.yAxisRange(0)[1]; }; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, "\n", { valueRange: [0,10], underlayCallback: callback @@ -645,10 +641,9 @@ it('testDrawPointCallback_idx', function() { var callback = function(g, seriesName, canvasContext, cx, cy, color, pointSizeParam,idx) { assert.equal(g, this); indices.push(idx); - Dygraph.Circles.DEFAULT.apply(this, arguments); + utils.Circles.DEFAULT.apply(this, arguments); }; - var graph = document.getElementById("graph"); var testdata = [[10, 2], [11, 3], [12, NaN], [13, 2], [14, NaN], [15, 3]]; var graphOpts = { @@ -695,7 +690,6 @@ it('testDrawHighlightPointCallback_idx', function() { idxToCheck = idx; }; var testdata = [[1, 2], [2, 3], [3, NaN], [4, 2], [5, NaN], [6, 3]]; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, testdata, { drawHighlightPointCallback: drawHighlightPointCallback, labels: ['X', 'Y'] diff --git a/auto_tests/tests/connect_separated_points.js b/auto_tests/tests/connect_separated_points.js index 2636b41..7b9fe4c 100644 --- a/auto_tests/tests/connect_separated_points.js +++ b/auto_tests/tests/connect_separated_points.js @@ -3,17 +3,20 @@ * * @author julian.eichstaedt@ch.sauter-bc.com (Fr. Sauter AG) */ + +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import CanvasAssertions from './CanvasAssertions'; +import Proxy from './Proxy'; + describe("connect-separated-points", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); -var origFunc = Dygraph.getContext; +var origFunc = utils.getContext; beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { + utils.getContext = function(canvas) { return new Proxy(origFunc(canvas)); }; }); diff --git a/auto_tests/tests/css.js b/auto_tests/tests/css.js index 89a0680..b1c96de 100644 --- a/auto_tests/tests/css.js +++ b/auto_tests/tests/css.js @@ -4,20 +4,25 @@ * @fileoverview Regression test based on some strange customBars data. * @author danvk@google.com (Dan Vanderkam) */ + +import Dygraph from '../../src/dygraph'; + describe("css", function() { +cleanupAfterEach(); + var data = "X,Y,Z\n1,2,3\n4,5,6\n"; var styleSheet; beforeEach(function() { - document.body.innerHTML = "
"; styleSheet = document.createElement("style"); styleSheet.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(styleSheet); }); afterEach(function() { + styleSheet.innerHTML = ''; }); // Verifies that an unstyled, unsized dygraph gets a default size. @@ -78,12 +83,13 @@ it('testPixelStyleWins', function() { // Verifies that a CSS percentage size works. it('testPercentageSize', function() { - document.body.innerHTML = + var testdiv = document.getElementById("graph"); + testdiv.innerHTML = '
' + - '
'; + '
'; var opts = { }; - var graph = document.getElementById("graph"); + var graph = document.getElementById("inner-graph"); graph.style.width = '50%'; graph.style.height = '50%'; @@ -109,22 +115,20 @@ it('testClassPixelSize', function() { // An invisible chart div shouldn't produce an error. it('testInvisibleChart', function() { - document.body.innerHTML = + graph.innerHTML = '
' + - '
' + + '
' + '
'; - var graph = document.getElementById("graph"); - new Dygraph(graph, data, {}); + new Dygraph('inner-graph', data, {}); }); // An invisible chart div shouldn't produce an error. it('testInvisibleChartDate', function() { - document.body.innerHTML = + graph.innerHTML = '
' + - '
' + + '
' + '
'; - var graph = document.getElementById("graph"); - new Dygraph(graph, + new Dygraph('inner-graph', "Date,Y\n" + "2010/01/01,100\n" + "2010/02/01,200\n" + @@ -137,11 +141,12 @@ it('testInvisibleChartDate', function() { // An invisible chart div that becomes visible. it('testInvisibleThenVisibleChart', function() { - document.body.innerHTML = + var testdiv = document.getElementById("graph"); + testdiv.innerHTML = ''; - var graph = document.getElementById("graph"); + var graph = document.getElementById("inner-graph"); var g = new Dygraph(graph, "Date,Y\n" + "2010/01/01,100\n" + diff --git a/auto_tests/tests/custom_asserts.js b/auto_tests/tests/custom_asserts.js index 06e2444..9391f89 100644 --- a/auto_tests/tests/custom_asserts.js +++ b/auto_tests/tests/custom_asserts.js @@ -2,7 +2,7 @@ * @fileoverview Assertions that chai doesn't provide out of the box. */ -var assertDeepCloseTo = function(actualArray, expectedArray, epsilon) { +export function assertDeepCloseTo(actualArray, expectedArray, epsilon) { assert.isArray(actualArray); assert.isArray(expectedArray); for (var i = 0; i < actualArray.length; i++) { diff --git a/auto_tests/tests/custom_bars.js b/auto_tests/tests/custom_bars.js index cbffe7e..ebc867a 100644 --- a/auto_tests/tests/custom_bars.js +++ b/auto_tests/tests/custom_bars.js @@ -4,18 +4,25 @@ * @fileoverview Regression test based on some strange customBars data. * @author danvk@google.com (Dan Vanderkam) */ +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import CanvasAssertions from './CanvasAssertions'; +import PixelSampler from './PixelSampler'; +import Proxy from './Proxy'; + describe("custom-bars", function() { -var _origFunc = Dygraph.getContext; +cleanupAfterEach(); + +var _origFunc = utils.getContext; beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { + utils.getContext = function(canvas) { return new Proxy(_origFunc(canvas)); } }); afterEach(function() { - Dygraph.getContext = _origFunc; + utils.getContext = _origFunc; }); // This test used to reliably produce an infinite loop. diff --git a/auto_tests/tests/data_api.js b/auto_tests/tests/data_api.js index 4b0ebe0..e692fc6 100644 --- a/auto_tests/tests/data_api.js +++ b/auto_tests/tests/data_api.js @@ -3,12 +3,14 @@ * * @author danvdk@gmail.com (Dan Vanderkam) */ +import Dygraph from '../../src/dygraph'; describe("data-api", function() { +cleanupAfterEach(); + var opts, graphDiv; beforeEach(function() { - document.body.innerHTML = "
"; opts = { width: 480, height: 320 @@ -17,9 +19,6 @@ beforeEach(function() { graphDiv = document.getElementById("graph"); }); -afterEach(function() { -}); - it('testBasicAccessors', function() { var g = new Dygraph(graphDiv, temperature_data, opts); diff --git a/auto_tests/tests/date_formats.js b/auto_tests/tests/date_formats.js index d15567b..f157b8d 100644 --- a/auto_tests/tests/date_formats.js +++ b/auto_tests/tests/date_formats.js @@ -3,13 +3,10 @@ * * @author dan@dygraphs.com (Dan Vanderkam) */ -describe("date-formats", function() { -beforeEach(function() { -}); +import * as utils from '../../src/dygraph-utils'; -afterEach(function() { -}); +describe("date-formats", function() { it('testISO8601', function() { // Format: YYYY-MM-DDTHH:MM:SS.ddddddZ @@ -19,7 +16,7 @@ it('testISO8601', function() { // Firefox <4 does not support this format: // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse if (navigator.userAgent.indexOf("Firefox/3.5") == -1) { - assert.equal(946816496789, Dygraph.dateParser("2000-01-02T12:34:56.789012Z")); + assert.equal(946816496789, utils.dateParser("2000-01-02T12:34:56.789012Z")); } }); @@ -36,7 +33,7 @@ it('testHyphenatedDate', function() { zp(d.getDate()) + ' ' + zp(d.getHours()) + ':' + zp(d.getMinutes()); - assert.equal(Date.UTC(2000, 1, 2), Dygraph.dateParser(str)); + assert.equal(Date.UTC(2000, 1, 2), utils.dateParser(str)); }); }); diff --git a/auto_tests/tests/date_ticker.js b/auto_tests/tests/date_ticker.js index 554105b..c02331d 100644 --- a/auto_tests/tests/date_ticker.js +++ b/auto_tests/tests/date_ticker.js @@ -6,22 +6,23 @@ * @author danvdk@gmail.com (Dan Vanderkam) */ +import * as DygraphTickers from '../../src/dygraph-tickers'; +import DEFAULT_ATTRS from '../../src/dygraph-default-attrs'; + describe("date-ticker-tests", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); var createOptionsViewForAxis = function(axis, dict) { return function (x) { if (dict && dict.hasOwnProperty(x)) { return dict[x]; } - if (Dygraph.DEFAULT_ATTRS.axes[axis].hasOwnProperty(x)) { - return Dygraph.DEFAULT_ATTRS.axes[axis][x]; + if (DEFAULT_ATTRS.axes[axis].hasOwnProperty(x)) { + return DEFAULT_ATTRS.axes[axis][x]; } - if (Dygraph.DEFAULT_ATTRS.hasOwnProperty(x)) { - return Dygraph.DEFAULT_ATTRS[x]; + if (DEFAULT_ATTRS.hasOwnProperty(x)) { + return DEFAULT_ATTRS[x]; } if (x == 'axisLabelFormatter') return null; throw "mysterious " + axis + "-axis option: " + x; @@ -41,7 +42,7 @@ it('testBasicDateTicker', function() { var opts = {labelsUTC: true}; var options = createOptionsViewForAxis('x', opts); - var ticks = Dygraph.dateTicker(-1797534000000, 1255579200000, 800, options); + var ticks = DygraphTickers.dateTicker(-1797534000000, 1255579200000, 800, options); var expected_ticks = [ {"v":-1577923200000,"label":"1920"}, {"v":-1262304000000,"label":"1930"}, @@ -57,8 +58,8 @@ it('testBasicDateTicker', function() { var start = Date.UTC(1999, 11, 31, 14, 0, 0); var end = Date.UTC(2000, 0, 1, 12, 0, 0); - var granularity = Dygraph.TWO_HOURLY; - ticks = Dygraph.getDateAxis(start, end, granularity, options); + var granularity = DygraphTickers.Granularity.TWO_HOURLY; + ticks = DygraphTickers.getDateAxis(start, end, granularity, options); changeNbspToSpace(ticks); expected_ticks = [ // months of the year are zero-based. {v: Date.UTC(1999, 11, 31, 14, 0, 0), label: '14:00'}, @@ -86,7 +87,7 @@ it('testAllDateTickers', function() { // In these tests, those spurious ticks are removed to test new behavior. var ticker = function() { - var ticks = Dygraph.dateTicker.apply(null, arguments); + var ticks = DygraphTickers.dateTicker.apply(null, arguments); changeNbspToSpace(ticks); return ticks; }; diff --git a/auto_tests/tests/dygraph-options-tests.js b/auto_tests/tests/dygraph-options-tests.js index 4311fb5..aa9db33 100644 --- a/auto_tests/tests/dygraph-options-tests.js +++ b/auto_tests/tests/dygraph-options-tests.js @@ -1,18 +1,20 @@ /** * @fileoverview Test cases for DygraphOptions. */ + +import Dygraph from '../../src/dygraph'; +import DygraphOptions from '../../src/dygraph-options'; + describe("dygraph-options-tests", function() { +cleanupAfterEach(); + var graph; beforeEach(function() { - document.body.innerHTML = "
"; graph = document.getElementById("graph"); }); -afterEach(function() { -}); - /* * Pathalogical test to ensure getSeriesNames works */ diff --git a/auto_tests/tests/error_bars.js b/auto_tests/tests/error_bars.js index e04acde..4fd3369 100644 --- a/auto_tests/tests/error_bars.js +++ b/auto_tests/tests/error_bars.js @@ -3,23 +3,17 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("error-bars", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import Util from './Util'; +import Proxy from './Proxy'; +import CanvasAssertions from './CanvasAssertions'; -var _origFunc = Dygraph.getContext; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(_origFunc(canvas)); - } -}); +describe("error-bars", function() { -afterEach(function() { - Dygraph.getContext = _origFunc; -}); +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); it('testErrorBarsDrawn', function() { var opts = { diff --git a/auto_tests/tests/fast_canvas_proxy.js b/auto_tests/tests/fast_canvas_proxy.js index 5d3322b..217dbd6 100644 --- a/auto_tests/tests/fast_canvas_proxy.js +++ b/auto_tests/tests/fast_canvas_proxy.js @@ -3,13 +3,11 @@ * * @author danvdk@gmail.com (Dan Vanderkam) */ -describe("fast-canvas-proxy", function() { -beforeEach(function() { -}); +import DygraphCanvasRenderer from '../../src/dygraph-canvas'; +import Proxy from './Proxy'; -afterEach(function() { -}); +describe("fast-canvas-proxy", function() { var fakeCanvasContext = { moveTo: function() {}, diff --git a/auto_tests/tests/fill_step_plot.js b/auto_tests/tests/fill_step_plot.js index 6406016..1c43145 100644 --- a/auto_tests/tests/fill_step_plot.js +++ b/auto_tests/tests/fill_step_plot.js @@ -4,23 +4,25 @@ * * @author benoitboivin.pro@gmail.com (Benoit Boivin) */ +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import CanvasAssertions from './CanvasAssertions'; +import Proxy from './Proxy'; + describe("fill-step-plot", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); -var origFunc = Dygraph.getContext; +var origFunc = utils.getContext; beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { + utils.getContext = function(canvas) { return new Proxy(origFunc(canvas)); }; }); afterEach(function() { - Dygraph.getContext = origFunc; + utils.getContext = origFunc; }); diff --git a/auto_tests/tests/formats.js b/auto_tests/tests/formats.js index a0b779b..f16cc6d 100644 --- a/auto_tests/tests/formats.js +++ b/auto_tests/tests/formats.js @@ -3,14 +3,12 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ -describe("formats", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; -afterEach(function() { -}); +describe("formats", function() { + +cleanupAfterEach(); var dataString = "X,Y\n" + diff --git a/auto_tests/tests/grid_per_axis.js b/auto_tests/tests/grid_per_axis.js index 6ca239c..99cc6da 100644 --- a/auto_tests/tests/grid_per_axis.js +++ b/auto_tests/tests/grid_per_axis.js @@ -4,24 +4,19 @@ * * @author david.eberlein@ch.sauter-bc.com (Fr. Sauter AG) */ -describe("grid-per-axis", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; -var origFunc = Dygraph.getContext; +import Proxy from './Proxy'; +import CanvasAssertions from './CanvasAssertions'; +import Util from './Util'; +import PixelSampler from './PixelSampler'; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(origFunc(canvas)); - }; -}); +describe("grid-per-axis", function() { -afterEach(function() { - Dygraph.getContext = origFunc; -}); +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); it('testIndependentGrids', function() { var opts = { @@ -130,17 +125,19 @@ it('testPerAxisGridColors', function() { } var x, y; x = halfUp(g.plotter_.area.x); + var sampler = new PixelSampler(g); // Step through y(0) and y2(1) axis for ( var axis = 0; axis < 2; axis++) { // Step through all gridlines of the axis for ( var i = 0; i < gridlines[axis].length; i++) { y = halfDown(g.toDomYCoord(gridlines[axis][i], axis)); // Check the grid colors. - assert.deepEqual(gridColors[axis], Util.samplePixel(g.hidden_, x, y), + assert.deepEqual(gridColors[axis], sampler.colorAtPixel(x, y), "Unexpected grid color found at pixel: x: " + x + "y: " + y); } } }); + it('testPerAxisGridWidth', function() { var opts = { width : 480, @@ -192,6 +189,8 @@ it('testPerAxisGridWidth', function() { } var x, y; x = halfUp(g.plotter_.area.x + 10); + + var sampler = new PixelSampler(g); // Step through y(0) and y2(1) axis for ( var axis = 0; axis < 2; axis++) { // Step through all gridlines of the axis @@ -200,11 +199,11 @@ it('testPerAxisGridWidth', function() { // Ignore the alpha value // FIXME(pholden): this test fails with a context pixel ratio of 2. - var drawnPixeldown2 = Util.samplePixel(g.hidden_, x, y - 2).slice(0, 3); - var drawnPixeldown1 = Util.samplePixel(g.hidden_, x, y - 1).slice(0, 3); - var drawnPixel = Util.samplePixel(g.hidden_, x, y).slice(0, 3); - var drawnPixelup1 = Util.samplePixel(g.hidden_, x, y + 1).slice(0, 3); - var drawnPixelup2 = Util.samplePixel(g.hidden_, x, y + 2).slice(0, 3); + var drawnPixeldown2 = sampler.rgbAtPixel(x, y - 2); + var drawnPixeldown1 = sampler.rgbAtPixel(x, y - 1); + var drawnPixel = sampler.rgbAtPixel(x, y); + var drawnPixelup1 = sampler.rgbAtPixel(x, y + 1); + var drawnPixelup2 = sampler.rgbAtPixel(x, y + 2); // Check the grid width. switch (axis) { case 0: // y with 2 pixels width @@ -227,26 +226,26 @@ it('testPerAxisGridWidth', function() { y = halfDown(g.plotter_.area.y) + 10; for ( var i = 0; i < xGridlines.length; i++) { x = halfUp(g.toDomXCoord(xGridlines[i])); - assert.deepEqual(emptyColor, Util.samplePixel(g.hidden_, x - 4, y).slice(0, 3), + assert.deepEqual(emptyColor, sampler.rgbAtPixel(x - 4, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); - assert.deepEqual(gridColor, Util.samplePixel(g.hidden_, x - 3, y).slice(0, 3), + assert.deepEqual(gridColor, sampler.rgbAtPixel(x - 3, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); - assert.deepEqual(gridColor, Util.samplePixel(g.hidden_, x - 2, y).slice(0, 3), + assert.deepEqual(gridColor, sampler.rgbAtPixel(x - 2, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); - assert.deepEqual(gridColor, Util.samplePixel(g.hidden_, x - 1, y).slice(0, 3), + assert.deepEqual(gridColor, sampler.rgbAtPixel(x - 1, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); - assert.deepEqual(gridColor, Util.samplePixel(g.hidden_, x, y).slice(0, 3), + assert.deepEqual(gridColor, sampler.rgbAtPixel(x, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); - assert.deepEqual(gridColor, Util.samplePixel(g.hidden_, x + 1, y).slice(0, 3), + assert.deepEqual(gridColor, sampler.rgbAtPixel(x + 1, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); - assert.deepEqual(emptyColor, Util.samplePixel(g.hidden_, x + 2, y).slice(0, 3), + assert.deepEqual(emptyColor, sampler.rgbAtPixel(x + 2, y), "Unexpected x-grid color found at pixel: x: " + x + "y: " + y); } }); it('testGridLinePattern', function() { var opts = { - width : 120, + width : 480, height : 320, errorBars : false, labels : [ "X", "Left", "Right" ], @@ -287,6 +286,7 @@ it('testGridLinePattern', function() { return Math.round(y) - 1; } var x, y; + var sampler = new PixelSampler(g); // Step through all gridlines of the axis for (var i = 0; i < yGridlines.length; i++) { y = halfDown(g.toDomYCoord(yGridlines[i], 0)); @@ -295,9 +295,11 @@ it('testGridLinePattern', function() { // avoid checking the edge pixels since they differ depending on the OS. var pixelpos = x % 10; if(pixelpos < 1 || pixelpos > 8) continue; + + // XXX: check what this looks like at master // Ignore alpha - var drawnPixel = Util.samplePixel(g.hidden_, x, y).slice(0,3); + var drawnPixel = sampler.rgbAtPixel(x, y); var pattern = (Math.floor((x) / 10)) % 2; switch (pattern) { case 0: // fill diff --git a/auto_tests/tests/gviz.js b/auto_tests/tests/gviz.js index c663029..735e6f8 100644 --- a/auto_tests/tests/gviz.js +++ b/auto_tests/tests/gviz.js @@ -2,14 +2,13 @@ * Unit tests for GViz data table support. */ -describe('gviz', function() { +import Dygraph from '../../src/dygraph'; - beforeEach(function() { - document.body.innerHTML = "
"; - }); +import Util from './Util'; - afterEach(function() { - }); +describe('gviz', function() { + + cleanupAfterEach(); // This is a fake version of the gviz DataTable API, which can only be // sourced using the google js loader. diff --git a/auto_tests/tests/hidpi.js b/auto_tests/tests/hidpi.js index cdf0ee4..1dd131c 100644 --- a/auto_tests/tests/hidpi.js +++ b/auto_tests/tests/hidpi.js @@ -3,14 +3,17 @@ * * @author danvdk@gmail.com (Dan Vanderkam) */ + +import Dygraph from '../../src/dygraph'; + describe("hidpi", function() { +cleanupAfterEach(); + var savePixelRatio; beforeEach(function() { savePixelRatio = window.devicePixelRatio; window.devicePixelRatio = 2; - - document.body.innerHTML = "
"; }); afterEach(function() { diff --git a/auto_tests/tests/interaction_model.js b/auto_tests/tests/interaction_model.js index 3d6e3d0..a846df5 100644 --- a/auto_tests/tests/interaction_model.js +++ b/auto_tests/tests/interaction_model.js @@ -3,14 +3,14 @@ * * @author konigsberg@google.com (Robert Konigsbrg) */ -describe("interaction-model", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import DygraphInteraction from '../../src/dygraph-interaction-model'; +import DygraphOps from './DygraphOps'; -afterEach(function() { -}); +describe("interaction-model", function() { + +cleanupAfterEach(); var data1 = "X,Y\n" + "20,-1\n" + @@ -100,15 +100,15 @@ it('testClickCallbackIsCalledOnCustomPan', function() { function customDown(event, g, context) { context.initializeMouseDown(event, g, context); - Dygraph.startPan(event, g, context); + DygraphInteraction.startPan(event, g, context); } function customMove(event, g, context) { - Dygraph.movePan(event, g, context); + DygraphInteraction.movePan(event, g, context); } function customUp(event, g, context) { - Dygraph.endPan(event, g, context); + DygraphInteraction.endPan(event, g, context); } var opts = { @@ -153,7 +153,7 @@ it('testClickCallbackIsCalledWithNonInteractiveModel', function() { width: 100, height : 100, clickCallback : clickCallback, - interactionModel : Dygraph.Interaction.nonInteractiveModel_ + interactionModel : DygraphInteraction.nonInteractiveModel_ }; var graph = document.getElementById("graph"); diff --git a/auto_tests/tests/missing_points.js b/auto_tests/tests/missing_points.js index 48ef26d..dce01ed 100644 --- a/auto_tests/tests/missing_points.js +++ b/auto_tests/tests/missing_points.js @@ -23,21 +23,19 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ + +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import Proxy from './Proxy'; +import CanvasAssertions from './CanvasAssertions'; +import Util from './Util'; + var ZERO_TO_FIFTY = [[ 10, 0 ] , [ 20, 50 ]]; describe("missing-points", function() { -var _origFunc = Dygraph.getContext; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(_origFunc(canvas)); - } -}); - -afterEach(function() { - Dygraph.getContext = _origFunc; -}); +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); it('testSeparatedPointsDontDraw', function() { var graph = document.getElementById("graph"); diff --git a/auto_tests/tests/multi_csv.js b/auto_tests/tests/multi_csv.js index c6b8d4f..99008e2 100644 --- a/auto_tests/tests/multi_csv.js +++ b/auto_tests/tests/multi_csv.js @@ -3,14 +3,12 @@ * * @author dan@dygraphs.com (Dan Vanderkam) */ -describe("multi-csv", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; -afterEach(function() { -}); +describe("multi-csv", function() { + +cleanupAfterEach(); function getXLabels() { var x_labels = document.getElementsByClassName("dygraph-axis-label-x"); diff --git a/auto_tests/tests/multiple_axes.js b/auto_tests/tests/multiple_axes.js index 3935b52..68c62a5 100644 --- a/auto_tests/tests/multiple_axes.js +++ b/auto_tests/tests/multiple_axes.js @@ -4,11 +4,13 @@ * @author danvdk@gmail.com (Dan Vanderkam) */ +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import Util from './Util'; + describe("multiple-axes-tests", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); var getData = function() { var data = []; @@ -220,12 +222,12 @@ it('testDrawPointCallback', function() { var results = { y : {}, y2 : {}}; var firstCallback = function(g, seriesName, ctx, canvasx, canvasy, color, radius) { results.y[seriesName] = 1; - Dygraph.Circles.DEFAULT(g, seriesName, ctx, canvasx, canvasy, color, radius); + utils.Circles.DEFAULT(g, seriesName, ctx, canvasx, canvasy, color, radius); }; var secondCallback = function(g, seriesName, ctx, canvasx, canvasy, color, radius) { results.y2[seriesName] = 1; - Dygraph.Circles.DEFAULT(g, seriesName, ctx, canvasx, canvasy, color, radius); + utils.Circles.DEFAULT(g, seriesName, ctx, canvasx, canvasy, color, radius); }; var g = new Dygraph( diff --git a/auto_tests/tests/no_hours.js b/auto_tests/tests/no_hours.js index 323c84e..bcfc1fe 100644 --- a/auto_tests/tests/no_hours.js +++ b/auto_tests/tests/no_hours.js @@ -5,14 +5,13 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("no-hours", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import Util from './Util'; -afterEach(function() { -}); +describe("no-hours", function() { + +cleanupAfterEach(); it('testNoHours', function() { var opts = { diff --git a/auto_tests/tests/numeric_ticker.js b/auto_tests/tests/numeric_ticker.js index 27707d4..b3b4620 100644 --- a/auto_tests/tests/numeric_ticker.js +++ b/auto_tests/tests/numeric_ticker.js @@ -6,22 +6,24 @@ * @author danvdk@gmail.com (Dan Vanderkam) */ +import Dygraph from '../../src/dygraph'; +import * as DygraphTickers from '../../src/dygraph-tickers'; +import DEFAULT_ATTRS from '../../src/dygraph-default-attrs'; + describe("numeric-ticker-tests", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); var createOptionsViewForAxis = function(axis, dict) { return function (x) { if (dict && dict.hasOwnProperty(x)) { return dict[x]; } - if (Dygraph.DEFAULT_ATTRS.axes[axis].hasOwnProperty(x)) { - return Dygraph.DEFAULT_ATTRS.axes[axis][x]; + if (DEFAULT_ATTRS.axes[axis].hasOwnProperty(x)) { + return DEFAULT_ATTRS.axes[axis][x]; } - if (Dygraph.DEFAULT_ATTRS.hasOwnProperty(x)) { - return Dygraph.DEFAULT_ATTRS[x]; + if (DEFAULT_ATTRS.hasOwnProperty(x)) { + return DEFAULT_ATTRS[x]; } if (x == 'axisLabelFormatter') return null; throw "mysterious " + axis + "-axis option: " + x; @@ -32,7 +34,7 @@ it('testBasicNumericTicker', function() { var opts = {"logscale":null,"labelsKMG2":false,"labelsKMB":false}; var options = createOptionsViewForAxis('y', opts); - var ticks = Dygraph.numericTicks(-0.4, 4.4, 320, options); + var ticks = DygraphTickers.numericTicks(-0.4, 4.4, 320, options); var expected_ticks = [ {"v":-0.5,"label":"-0.5"}, {"v":0,"label":"0"}, @@ -47,7 +49,7 @@ it('testBasicNumericTicker', function() { {"v":4.5,"label":"4.5"}]; assert.deepEqual(expected_ticks, ticks); - ticks = Dygraph.numericTicks(1, 84, 540, options); + ticks = DygraphTickers.numericTicks(1, 84, 540, options); var expected_ticks = [ {"v":0,"label":"0"}, {"v":5,"label":"5"}, diff --git a/auto_tests/tests/parser.js b/auto_tests/tests/parser.js index e74cbef..6634cd5 100644 --- a/auto_tests/tests/parser.js +++ b/auto_tests/tests/parser.js @@ -3,14 +3,13 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("parser", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; -afterEach(function() { -}); +describe("parser", function() { + +cleanupAfterEach(); it('testDetectLineDelimiter', function() { var data = "X,Y\r" + @@ -19,7 +18,7 @@ it('testDetectLineDelimiter', function() { "2,1\r" + "3,0\r" ; - assert.equal("\r", Dygraph.detectLineDelimiter(data)); + assert.equal("\r", utils.detectLineDelimiter(data)); data = "X,Y\n" + "0,-1\n" + @@ -27,7 +26,7 @@ it('testDetectLineDelimiter', function() { "2,1\n" + "3,0\n" ; - assert.equal("\n", Dygraph.detectLineDelimiter(data)); + assert.equal("\n", utils.detectLineDelimiter(data)); data = "X,Y\n\r" + "0,-1\n\r" + @@ -35,7 +34,7 @@ it('testDetectLineDelimiter', function() { "2,1\n\r" + "3,0\n\r" ; - assert.equal("\n\r", Dygraph.detectLineDelimiter(data)); + assert.equal("\n\r", utils.detectLineDelimiter(data)); }); it('testParseDosNewlines', function() { diff --git a/auto_tests/tests/pathological_cases.js b/auto_tests/tests/pathological_cases.js index 297167c..0bcab0b 100644 --- a/auto_tests/tests/pathological_cases.js +++ b/auto_tests/tests/pathological_cases.js @@ -4,12 +4,17 @@ * * @author dan@dygraphs.com (Dan Vanderkam) */ + +import Dygraph from '../../src/dygraph'; +import Util from './Util'; + describe("pathological-cases", function() { +cleanupAfterEach(); + var restoreConsole; var logs = {}; beforeEach(function() { - document.body.innerHTML = "
"; restoreConsole = Util.captureConsole(logs); }); @@ -17,6 +22,8 @@ afterEach(function() { restoreConsole(); }); +var graph = document.getElementById("graph"); + it('testZeroPoint', function() { var opts = { width: 480, @@ -24,7 +31,6 @@ it('testZeroPoint', function() { }; var data = "X,Y\n"; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); }); @@ -36,7 +42,6 @@ it('testOnePoint', function() { var data = "X,Y\n" + "1,2\n"; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); }); @@ -97,7 +102,7 @@ it('testCombinations', function() { var h = document.createElement('h3'); h.appendChild(document.createTextNode(baseName + ' ' + variantName)); - document.body.appendChild(h); + graph.appendChild(h); for (var dataName in dataSets) { var data = dataSets[dataName]; @@ -109,7 +114,7 @@ it('testCombinations', function() { var gdiv = document.createElement('div'); gdiv.style.display = 'inline-block'; box.appendChild(gdiv); - document.body.appendChild(box); + graph.appendChild(box); var cols = data && data[0] ? data[0].length : 0; opts.labels = ['X', 'A', 'B', 'C'].slice(0, cols); @@ -139,7 +144,6 @@ it('testNullLegend', function() { var data = "X,Y\n" + "1,2\n"; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); }); diff --git a/auto_tests/tests/per_axis.js b/auto_tests/tests/per_axis.js index 4ae6208..d7f1a49 100644 --- a/auto_tests/tests/per_axis.js +++ b/auto_tests/tests/per_axis.js @@ -3,9 +3,18 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ + +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; + +import Util from './Util'; +import CanvasAssertions from './CanvasAssertions'; +import Proxy from './Proxy'; + describe("per-axis", function() { -var _origGetContext = Dygraph.getContext; +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); var xAxisLineColor = "#00ffff"; var yAxisLineColor = "#ffff00"; @@ -13,11 +22,6 @@ var yAxisLineColor = "#ffff00"; var g, graph; beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(_origGetContext(canvas)); - } - var opts = { axes : { x : { @@ -42,10 +46,6 @@ beforeEach(function() { g = new Dygraph(graph, data, opts); }); -afterEach(function() { - Dygraph.getContext = _origGetContext; -}); - it('testDrawXAxis', function() { g.updateOptions({ axes : { x : { drawAxis: true }} }); assert.isTrue(graph.getElementsByClassName('dygraph-axis-label-x').length > 0); diff --git a/auto_tests/tests/per_series.js b/auto_tests/tests/per_series.js index 07af084..f3ff16d 100644 --- a/auto_tests/tests/per_series.js +++ b/auto_tests/tests/per_series.js @@ -3,14 +3,14 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("per-series", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; -afterEach(function() { -}); +import PixelSampler from './PixelSampler'; + +describe("per-series", function() { + +cleanupAfterEach(); it('testPerSeriesFill', function() { var opts = { diff --git a/auto_tests/tests/plugins.js b/auto_tests/tests/plugins.js index 1abccd4..f339656 100644 --- a/auto_tests/tests/plugins.js +++ b/auto_tests/tests/plugins.js @@ -3,13 +3,17 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ + +import Dygraph from '../../src/dygraph'; +import DygraphOps from './DygraphOps'; + describe("plugins", function() { +cleanupAfterEach(); + var data; beforeEach(function() { - document.body.innerHTML = "
"; - data = "X,Y1,Y2\n" + "0,1,2\n" + "1,2,1\n" + @@ -18,9 +22,6 @@ beforeEach(function() { ; }); -afterEach(function() { -}); - it('testWillDrawChart', function() { var draw = 0; diff --git a/auto_tests/tests/plugins_legend.js b/auto_tests/tests/plugins_legend.js index 124d929..26daf92 100644 --- a/auto_tests/tests/plugins_legend.js +++ b/auto_tests/tests/plugins_legend.js @@ -1,10 +1,16 @@ +import Dygraph from '../../src/dygraph'; +import LegendPlugin from '../../src/plugins/legend'; +import Util from './Util'; + describe("plugins-legend", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +var graph; -afterEach(function() { +cleanupAfterEach(); +beforeEach(function() { + var testDiv = document.getElementById('graph'); + testDiv.innerHTML = "
"; + graph = document.getElementById('inner-graph'); }); it('testLegendEscape', function() { @@ -19,10 +25,9 @@ it('testLegendEscape', function() { "3,0\n" ; - var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var legendPlugin = new Dygraph.Plugins.Legend(); + var legendPlugin = new LegendPlugin(); legendPlugin.activate(g); var e = { selectedX: 'selectedX', @@ -42,7 +47,7 @@ it('testLegendEscape', function() { it('should let labelsDiv be a string', function() { var labelsDiv = document.getElementById('label'); - var g = new Dygraph('graph', 'X,Y\n1,2\n', {labelsDiv: 'label'}); + var g = new Dygraph(graph, 'X,Y\n1,2\n', {labelsDiv: 'label'}); null g.setSelection(0); assert.equal('1: Y: 2', Util.nbspToSpace(labelsDiv.textContent)); @@ -50,14 +55,14 @@ null it('should let labelsDiv be an Element', function() { var labelsDiv = document.getElementById('label'); - var g = new Dygraph('graph', 'X,Y\n1,2\n', { labelsDiv: labelsDiv }); + var g = new Dygraph(graph, 'X,Y\n1,2\n', { labelsDiv: labelsDiv }); assert.isNull(labelsDiv.getAttribute('class')); // dygraph-legend not added. g.setSelection(0); assert.equal('1: Y: 2', Util.nbspToSpace(labelsDiv.textContent)); }); it('should render dashed patterns', function() { - var g = new Dygraph('graph', 'X,Y\n1,2\n', { + var g = new Dygraph(graph, 'X,Y\n1,2\n', { strokePattern: [5, 5], color: 'red', legend: 'always' diff --git a/auto_tests/tests/range_selector.js b/auto_tests/tests/range_selector.js index 584e054..82884c8 100644 --- a/auto_tests/tests/range_selector.js +++ b/auto_tests/tests/range_selector.js @@ -4,12 +4,23 @@ * @fileoverview Regression tests for range selector. * @author paul.eric.felix@gmail.com (Paul Felix) */ + +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; +import RangeSelectorPlugin from '../../src/plugins/range-selector'; + +import Util from './Util'; +import DygraphOps from './DygraphOps'; +import CanvasAssertions from './CanvasAssertions'; +import Proxy from './Proxy'; + describe("range-selector", function() { +cleanupAfterEach(); + var restoreConsole; var logs = {}; beforeEach(function() { - document.body.innerHTML = "
"; restoreConsole = Util.captureConsole(logs); }); @@ -403,9 +414,9 @@ it('testRangeSelectorPositionIfXAxisNotDrawn', function() { it('testMiniPlotDrawn', function() { // Install Proxy to track canvas calls. - var origFunc = Dygraph.getContext; + var origFunc = utils.getContext; var miniHtx; - Dygraph.getContext = function(canvas) { + utils.getContext = function(canvas) { if (canvas.className != 'dygraph-rangesel-bgcanvas') { return origFunc(canvas); } @@ -435,7 +446,7 @@ it('testMiniPlotDrawn', function() { assert.isNotNull(miniHtx); assert.isTrue(0 < CanvasAssertions.numLinesDrawn(miniHtx, '#ff0000')); - Dygraph.getContext = origFunc; + utils.getContext = origFunc; }); // Tests data computation for the mini plot with a single series. @@ -452,7 +463,7 @@ it('testSingleCombinedSeries', function() { var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector); + var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin); assert.isNotNull(rangeSelector); var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_(); @@ -482,7 +493,7 @@ it('testCombinedSeries', function() { var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector); + var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin); assert.isNotNull(rangeSelector); var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_(); @@ -515,7 +526,7 @@ it('testSelectedCombinedSeries', function() { var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector); + var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin); assert.isNotNull(rangeSelector); var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_(); @@ -545,7 +556,7 @@ it('testSingleCombinedSeriesCustomBars', function() { var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector); + var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin); assert.isNotNull(rangeSelector); var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_(); @@ -574,7 +585,7 @@ it('testSingleCombinedSeriesErrorBars', function() { var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector); + var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin); assert.isNotNull(rangeSelector); var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_(); @@ -604,7 +615,7 @@ it('testTwoCombinedSeriesCustomBars', function() { var graph = document.getElementById("graph"); var g = new Dygraph(graph, data, opts); - var rangeSelector = g.getPluginInstance_(Dygraph.Plugins.RangeSelector); + var rangeSelector = g.getPluginInstance_(RangeSelectorPlugin); assert.isNotNull(rangeSelector); var combinedSeries = rangeSelector.computeCombinedSeriesAndLimits_(); diff --git a/auto_tests/tests/range_tests.js b/auto_tests/tests/range_tests.js index 1391a2a..ff1018e 100644 --- a/auto_tests/tests/range_tests.js +++ b/auto_tests/tests/range_tests.js @@ -24,6 +24,12 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ + +import Dygraph from '../../src/dygraph'; + +import DygraphOps from './DygraphOps'; +import {assertDeepCloseTo} from './custom_asserts'; + var ZERO_TO_FIFTY = [[ 10, 0 ] , [ 20, 50 ]]; var ZERO_TO_FIFTY_STEPS = (function() { var a = []; @@ -42,9 +48,7 @@ var FIVE_TO_ONE_THOUSAND = [ describe("range-tests", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); var createGraph = function(opts, data, expectRangeX, expectRangeY) { if (data === undefined) data = ZERO_TO_FIFTY_STEPS; diff --git a/auto_tests/tests/resize.js b/auto_tests/tests/resize.js index 9a8cffe..6230ffb 100644 --- a/auto_tests/tests/resize.js +++ b/auto_tests/tests/resize.js @@ -3,8 +3,16 @@ * * @author konigsberg@google.com (Robert Konigsberg) */ + +import Dygraph from '../../src/dygraph'; + +import DygraphOps from './DygraphOps'; +import Util from './Util'; + describe("resize", function() { +cleanupAfterEach(); + var data = "X,Y\n" + "1,100\n" + @@ -14,18 +22,9 @@ var data = "5,300\n" + "6,100\n"; -beforeEach(function() { - document.body.innerHTML = "
"; -}); - -afterEach(function() { -}); - it('testResizeMaintainsMouseOperations', function() { - document.body.innerHTML = - '
' + - ''; - var graph = document.getElementById("graph"); + var graph = document.getElementById('graph'); + graph.setAttribute('style', 'width: 640px; height: 480px;'); var callbackCount = 0; var callback = function() { @@ -46,7 +45,7 @@ it('testResizeMaintainsMouseOperations', function() { strum(g, 300, 640); assert.equal(6, callbackCount); - document.getElementById("graph").style.width = "500px"; + graph.style.width = "500px"; g.resize(); callbackCount = 0; diff --git a/auto_tests/tests/rolling_average.js b/auto_tests/tests/rolling_average.js index 5a16aa4..4b68da2 100644 --- a/auto_tests/tests/rolling_average.js +++ b/auto_tests/tests/rolling_average.js @@ -3,14 +3,14 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("rolling-average", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; -afterEach(function() { -}); +import Util from './Util'; + +describe("rolling-average", function() { + +cleanupAfterEach(); it('testRollingAverage', function() { var opts = { diff --git a/auto_tests/tests/sanity.js b/auto_tests/tests/sanity.js index 0f3057c..e1d37ab 100644 --- a/auto_tests/tests/sanity.js +++ b/auto_tests/tests/sanity.js @@ -25,14 +25,14 @@ * @author konigsberg@google.com (Robert Konigsberg) */ +import Dygraph from '../../src/dygraph'; + describe("dygraphs-sanity", function() { var DEAD_SIMPLE_DATA = 'X,Y\n10,2100'; var ZERO_TO_FIFTY = 'X,Y\n10,0\n20,50'; -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); /** * The sanity test of sanity tests. diff --git a/auto_tests/tests/scientific_notation.js b/auto_tests/tests/scientific_notation.js index ebbf2ed..a502484 100644 --- a/auto_tests/tests/scientific_notation.js +++ b/auto_tests/tests/scientific_notation.js @@ -5,14 +5,13 @@ * * @author danvk@google.com (Dan Vanderkam) */ -describe("scientific-notation", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import {assertDeepCloseTo} from './custom_asserts'; -afterEach(function() { -}); +describe("scientific-notation", function() { + +cleanupAfterEach(); function getXValues(g) { var xs = []; diff --git a/auto_tests/tests/scrolling_div.js b/auto_tests/tests/scrolling_div.js index ce95a7e..c9dec0c 100644 --- a/auto_tests/tests/scrolling_div.js +++ b/auto_tests/tests/scrolling_div.js @@ -3,6 +3,10 @@ * * @author konigsberg@google.com (Robert Konigsbrg) */ + +import Dygraph from '../../src/dygraph'; +import DygraphOps from './DygraphOps'; + describe("scrolling-div", function() { var point, g; @@ -18,13 +22,19 @@ var LOREM_IPSUM = "non proident, sunt in culpa qui officia deserunt mollit anim id est\n" + "laborum.

"; - document.body.innerHTML = + var testDiv = document.getElementById('graph'); + testDiv.innerHTML = "
" + - "
" + + "
" + "
" + LOREM_IPSUM + "
" + "
" + LOREM_IPSUM + "
" + "
"; + // The old test runner had an 8px margin on the body + // The Mocha test runner does not. We set it on the test div to keep the + // coordinates the same. + testDiv.style.margin = '8px'; + var data = [ [ 10, 1 ], [ 20, 3 ], @@ -35,7 +45,7 @@ var LOREM_IPSUM = [ 70, 4 ], [ 80, 6 ] ]; - var graph = document.getElementById("graph"); + var graph = document.getElementById("graph-inner"); point = null; g = new Dygraph(graph, data, @@ -74,9 +84,6 @@ var detectScrollbarWidth = function() { return scrollbarWidth; }; -afterEach(function() { -}); - /** * This tests that when the nested div is unscrolled, things work normally. */ diff --git a/auto_tests/tests/selection.js b/auto_tests/tests/selection.js index 02f1227..bb8e852 100644 --- a/auto_tests/tests/selection.js +++ b/auto_tests/tests/selection.js @@ -6,11 +6,12 @@ * @author danvk@google.com (Dan Vanderkam) */ +import Dygraph from '../../src/dygraph'; +import DefaultHandler from '../../src/datahandler/default'; + describe("selection", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +cleanupAfterEach(); it('testSetGetSelection', function() { var graph = document.getElementById("graph"); @@ -51,7 +52,7 @@ it('testSetGetSelectionDense', function() { it('testSetGetSelectionMissingPoints', function() { var dataHandler = function() {}; - dataHandler.prototype = new Dygraph.DataHandlers.DefaultHandler(); + dataHandler.prototype = new DefaultHandler(); dataHandler.prototype.seriesToPoints = function(series, setName, boundaryIdStart) { var val = null; if (setName == 'A') { diff --git a/auto_tests/tests/simple_drawing.js b/auto_tests/tests/simple_drawing.js index bda0e84..2ef84f3 100644 --- a/auto_tests/tests/simple_drawing.js +++ b/auto_tests/tests/simple_drawing.js @@ -24,21 +24,19 @@ * @author konigsberg@google.com (Robert Konigsberg) */ -describe("simple-drawing", function() { +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; -var ZERO_TO_FIFTY = 'X,Y\n10,0\n20,50'; +import CanvasAssertions from './CanvasAssertions'; +import Proxy from './Proxy'; +import PixelSampler from './PixelSampler'; -var _origFunc = Dygraph.getContext; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(_origFunc(canvas)); - } -}); +describe("simple-drawing", function() { -afterEach(function() { - Dygraph.getContext = _origFunc; -}); +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); + +var ZERO_TO_FIFTY = 'X,Y\n10,0\n20,50'; it('testDrawSimpleRangePlusOne', function() { var opts = { diff --git a/auto_tests/tests/smooth_plotter.js b/auto_tests/tests/smooth_plotter.js index 41b0f5d..146e426 100644 --- a/auto_tests/tests/smooth_plotter.js +++ b/auto_tests/tests/smooth_plotter.js @@ -3,8 +3,13 @@ * * @author danvdk@gmail.com (Dan Vanderkam) */ + +import Dygraph from '../../src/dygraph'; +import '../../src/extras/smooth-plotter'; // defines Dygraph.smoothPlotter + describe("smooth-plotter", function() { +var smoothPlotter = Dygraph.smoothPlotter; var getControlPoints = smoothPlotter._getControlPoints; beforeEach(function() { diff --git a/auto_tests/tests/stacked.js b/auto_tests/tests/stacked.js index 5e4c55c..3d997af 100644 --- a/auto_tests/tests/stacked.js +++ b/auto_tests/tests/stacked.js @@ -3,20 +3,18 @@ * * @author dan@dygraphs.com (Dan Vanderkam) */ -describe("stacked", function() { -var _origGetContext = Dygraph.getContext; +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(_origGetContext(canvas)); - } -}); +import Proxy from './Proxy'; +import CanvasAssertions from './CanvasAssertions'; +import Util from './Util'; -afterEach(function() { - Dygraph.getContext = _origGetContext; -}); +describe("stacked", function() { + +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); it('testCorrectColors', function() { var opts = { diff --git a/auto_tests/tests/step_plot_per_series.js b/auto_tests/tests/step_plot_per_series.js index a5ff5ee..805a65a 100644 --- a/auto_tests/tests/step_plot_per_series.js +++ b/auto_tests/tests/step_plot_per_series.js @@ -8,24 +8,17 @@ * * @author julian.eichstaedt@ch.sauter-bc.com (Fr. Sauter AG) */ -describe("step-plot-per-series", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; -var origFunc = Dygraph.getContext; +import Proxy from './Proxy'; +import CanvasAssertions from './CanvasAssertions'; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(origFunc(canvas)); - }; -}); +describe("step-plot-per-series", function() { -afterEach(function() { - Dygraph.getContext = origFunc; -}); +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); it('testMixedModeStepAndLineFilled', function() { var opts = { diff --git a/auto_tests/tests/synchronize.js b/auto_tests/tests/synchronize.js index 173b32f..fdc20dc 100644 --- a/auto_tests/tests/synchronize.js +++ b/auto_tests/tests/synchronize.js @@ -3,6 +3,12 @@ * * @author nyx@nyx.cz (Marek Janda) */ + +import Dygraph from '../../src/dygraph'; +import '../../src/extras/synchronizer'; // Sets Dygraph.synchronize + +import DygraphOps from './DygraphOps'; + describe("synchronize", function() { var gs; var originalCallbackCalled; @@ -12,9 +18,10 @@ describe("synchronize", function() { "12,1,4,2\n" + "13,0,2,3\n"; var h_row, h_pts; + var graph = document.getElementById('graph'); beforeEach(function() { - document.body.innerHTML = "
"; + graph.innerHTML = "
"; originalCallbackCalled = false; h_row = 0, h_pts = []; gs = []; diff --git a/auto_tests/tests/to_dom_coords.js b/auto_tests/tests/to_dom_coords.js index 5aa4520..4540501 100644 --- a/auto_tests/tests/to_dom_coords.js +++ b/auto_tests/tests/to_dom_coords.js @@ -3,20 +3,17 @@ * * @author danvk@google.com (Dan Vanderkam) */ +import Dygraph from '../../src/dygraph'; +import * as utils from '../../src/dygraph-utils'; -describe("to-dom-coords", function() { +import Proxy from './Proxy'; +import CanvasAssertions from './CanvasAssertions'; +import {assertDeepCloseTo} from './custom_asserts'; -var origFunc = Dygraph.getContext; -beforeEach(function() { - document.body.innerHTML = "
"; - Dygraph.getContext = function(canvas) { - return new Proxy(origFunc(canvas)); - } -}); +describe("to-dom-coords", function() { -afterEach(function() { - Dygraph.getContext = origFunc; -}); +cleanupAfterEach(); +useProxyCanvas(utils, Proxy); // Checks that toDomCoords and toDataCoords are inverses of one another. var checkForInverses = function(g) { diff --git a/auto_tests/tests/two_digit_years.js b/auto_tests/tests/two_digit_years.js index 9e2d490..76241f8 100644 --- a/auto_tests/tests/two_digit_years.js +++ b/auto_tests/tests/two_digit_years.js @@ -3,6 +3,12 @@ * * @author gmadrid@gmail.com (George Madrid) */ + +import Dygraph from '../../src/dygraph'; +import {Granularity, getDateAxis} from '../../src/dygraph-tickers'; +import * as utils from '../../src/dygraph-utils'; +import DEFAULT_ATTRS from '../../src/dygraph-default-attrs'; + describe("two-digit-years", function() { it('testTwoDigitYears', function() { @@ -16,8 +22,8 @@ it('testTwoDigitYears', function() { start.setFullYear(9); end.setFullYear(11); - var ticks = Dygraph.getDateAxis(start, end, Dygraph.QUARTERLY, function(x) { - return Dygraph.DEFAULT_ATTRS.axes['x'][x]; + var ticks = getDateAxis(start, end, Granularity.QUARTERLY, function(x) { + return DEFAULT_ATTRS.axes['x'][x]; }); // This breaks in Firefox & Safari: diff --git a/auto_tests/tests/update_options.js b/auto_tests/tests/update_options.js index d2465c9..e581110 100644 --- a/auto_tests/tests/update_options.js +++ b/auto_tests/tests/update_options.js @@ -4,7 +4,12 @@ * @fileoverview Tests for the updateOptions function. * @author antrob@google.com (Anthony Robledo) */ + +import Dygraph from '../../src/dygraph'; + describe("update-options", function() { + +cleanupAfterEach(); var opts = { width: 480, @@ -18,13 +23,6 @@ var data = "X,Y1,Y2\n" + "2011-04-04,9,5\n" + "2011-05-05,8,3\n"; -beforeEach(function() { - document.body.innerHTML = "
"; -}); - -afterEach(function() { -}); - /* * Tweaks the dygraph so it sets g._testDrawCalled to true when internal method * drawGraph_ is called. Call unWrapDrawGraph when done with this. diff --git a/auto_tests/tests/update_while_panning.js b/auto_tests/tests/update_while_panning.js index ac01900..c810f1a 100644 --- a/auto_tests/tests/update_while_panning.js +++ b/auto_tests/tests/update_while_panning.js @@ -5,14 +5,13 @@ * * @author dan@dygraphs.com (Dan Vanderkam) */ -describe("update-while-panning", function() { -beforeEach(function() { - document.body.innerHTML = "
"; -}); +import Dygraph from '../../src/dygraph'; +import DygraphOps from './DygraphOps'; -afterEach(function() { -}); +describe("update-while-panning", function() { + +cleanupAfterEach(); // This tests the following sequence: // 1. Begin dragging a chart (x-panning) diff --git a/auto_tests/tests/utils_test.js b/auto_tests/tests/utils_test.js index e8ebe5a..6d96e26 100644 --- a/auto_tests/tests/utils_test.js +++ b/auto_tests/tests/utils_test.js @@ -4,6 +4,8 @@ * @author danvdk@gmail.com (Dan Vanderkam) */ +import * as utils from '../../src/dygraph-utils'; + describe("utils-tests", function() { it('testUpdate', function() { @@ -18,13 +20,13 @@ it('testUpdate', function() { assert.deepEqual({x: 1, y: 2}, a['c']); assert.deepEqual({f: 10, g: 20}, a['d']); - Dygraph.update(a, { c: { x: 2 } }); + utils.update(a, { c: { x: 2 } }); assert.deepEqual({x: 2}, a['c']); - Dygraph.update(a, { d: null }); + utils.update(a, { d: null }); assert.equal(null, a['d']); - Dygraph.update(a, { a: 10, b: [1, 2] }); + utils.update(a, { a: 10, b: [1, 2] }); assert.equal(10, a['a']); assert.deepEqual([1, 2], a['b']); assert.deepEqual({x: 2}, a['c']); @@ -43,13 +45,13 @@ it('testUpdateDeep', function() { assert.deepEqual({x: 1, y: 2}, a['c']); assert.deepEqual({f: 10, g: 20}, a['d']); - Dygraph.updateDeep(a, { c: { x: 2 } }); + utils.updateDeep(a, { c: { x: 2 } }); assert.deepEqual({x: 2, y: 2}, a['c']); - Dygraph.updateDeep(a, { d: null }); + utils.updateDeep(a, { d: null }); assert.equal(null, a['d']); - Dygraph.updateDeep(a, { a: 10, b: [1, 2] }); + utils.updateDeep(a, { a: 10, b: [1, 2] }); assert.equal(10, a['a']); assert.deepEqual([1, 2], a['b']); assert.deepEqual({x: 2, y: 2}, a['c']); @@ -64,7 +66,7 @@ it('testUpdateDeepDecoupled', function() { }; var b = {}; - Dygraph.updateDeep(b, a); + utils.updateDeep(b, a); b.a = 2; assert.equal(1, a.a); @@ -79,7 +81,7 @@ it('testUpdateDeepDecoupled', function() { it('testIterator_nopredicate', function() { var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; - var iter = Dygraph.createIterator(array, 1, 4); + var iter = utils.createIterator(array, 1, 4); assert.isTrue(iter.hasNext); assert.equal('b', iter.peek); assert.equal('b', iter.next()); @@ -99,7 +101,7 @@ it('testIterator_nopredicate', function() { it('testIterator_predicate', function() { var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; - var iter = Dygraph.createIterator(array, 1, 4, + var iter = utils.createIterator(array, 1, 4, function(array, idx) { return array[idx] !== 'd' }); assert.isTrue(iter.hasNext); assert.equal('b', iter.peek); @@ -117,13 +119,13 @@ it('testIterator_predicate', function() { it('testIterator_empty', function() { var array = []; - var iter = Dygraph.createIterator([], 0, 0); + var iter = utils.createIterator([], 0, 0); assert.isFalse(iter.hasNext); }); it('testIterator_outOfRange', function() { var array = ['a', 'b', 'c']; - var iter = Dygraph.createIterator(array, 1, 4, + var iter = utils.createIterator(array, 1, 4, function(array, idx) { return array[idx] !== 'd' }); assert.isTrue(iter.hasNext); assert.equal('b', iter.peek); @@ -140,7 +142,7 @@ it('testIterator_outOfRange', function() { // with invalid boundaries. it('testIterator_whole_array', function() { var array = ['a', 'b', 'c']; - var iter = Dygraph.createIterator(array, 0, array.length, + var iter = utils.createIterator(array, 0, array.length, function(array, idx) { if (idx < 0 || idx >= array.length) { throw "err"; @@ -160,7 +162,7 @@ it('testIterator_whole_array', function() { it('testIterator_no_args', function() { var array = ['a', 'b', 'c']; - var iter = Dygraph.createIterator(array); + var iter = utils.createIterator(array); assert.isTrue(iter.hasNext); assert.equal('a', iter.next()); assert.isTrue(iter.hasNext); @@ -172,15 +174,15 @@ it('testIterator_no_args', function() { }); it('testToRGB', function() { - assert.deepEqual({r: 255, g: 200, b: 150}, Dygraph.toRGB_('rgb(255,200,150)')); - assert.deepEqual({r: 255, g: 200, b: 150}, Dygraph.toRGB_('#FFC896')); - assert.deepEqual({r: 255, g: 0, b: 0}, Dygraph.toRGB_('red')); + assert.deepEqual({r: 255, g: 200, b: 150}, utils.toRGB_('rgb(255,200,150)')); + assert.deepEqual({r: 255, g: 200, b: 150}, utils.toRGB_('#FFC896')); + assert.deepEqual({r: 255, g: 0, b: 0}, utils.toRGB_('red')); assert.deepEqual({r: 255, g: 200, b: 150, a: 0.6}, - Dygraph.toRGB_('rgba(255, 200, 150, 0.6)')); + utils.toRGB_('rgba(255, 200, 150, 0.6)')); }); it('testIsPixelChangingOptionList', function() { - var isPx = Dygraph.isPixelChangingOptionList; + var isPx = utils.isPixelChangingOptionList; assert.isTrue(isPx([], { axes: { y: { digitsAfterDecimal: 3 }}})); assert.isFalse(isPx([], { axes: { y: { axisLineColor: 'blue' }}})); }); diff --git a/auto_tests/tests/visibility.js b/auto_tests/tests/visibility.js index 5f54639..1cc3764 100644 --- a/auto_tests/tests/visibility.js +++ b/auto_tests/tests/visibility.js @@ -3,14 +3,12 @@ * @author sergeyslepian@gmail.com */ -describe("visibility", function() { +import Dygraph from '../../src/dygraph'; +import Util from './Util'; -beforeEach(function() { - document.body.innerHTML = "
"; -}); +describe("visibility", function() { -afterEach(function() { -}); +cleanupAfterEach(); /** * Does a bunch of the shared busywork of setting up a graph and changing its visibility. diff --git a/package.json b/package.json index b26f91d..4d1f576 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "devDependencies": { "babelify": "^6.3.0", "browserify": "^11.2.0", + "chai": "^3.3.0", "closure-compiler": "^0.2.6", "coveralls": "^2.11.2", "gulp": "^3.8.10", diff --git a/src/datahandler/bars-custom.js b/src/datahandler/bars-custom.js index 7313ca2..d4e94d1 100644 --- a/src/datahandler/bars-custom.js +++ b/src/datahandler/bars-custom.js @@ -9,20 +9,19 @@ * @author David Eberlein (david.eberlein@ch.sauter-bc.com) */ -(function() { - /*global Dygraph:false */ "use strict"; +import BarsHandler from './bars'; + /** * @constructor * @extends Dygraph.DataHandlers.BarsHandler */ -Dygraph.DataHandlers.CustomBarsHandler = function() { +var CustomBarsHandler = function() { }; -var CustomBarsHandler = Dygraph.DataHandlers.CustomBarsHandler; -CustomBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler(); +CustomBarsHandler.prototype = new BarsHandler(); /** @inheritDoc */ CustomBarsHandler.prototype.extractSeries = function(rawData, i, options) { @@ -100,4 +99,4 @@ CustomBarsHandler.prototype.rollingAverage = return rollingData; }; -})(); +export default CustomBarsHandler; diff --git a/src/datahandler/bars-error.js b/src/datahandler/bars-error.js index 71dbe34..4a9e0bf 100644 --- a/src/datahandler/bars-error.js +++ b/src/datahandler/bars-error.js @@ -9,20 +9,19 @@ * @author David Eberlein (david.eberlein@ch.sauter-bc.com) */ -(function() { - /*global Dygraph:false */ "use strict"; +import BarsHandler from './bars'; + /** * @constructor - * @extends Dygraph.DataHandlers.BarsHandler + * @extends BarsHandler */ -Dygraph.DataHandlers.ErrorBarsHandler = function() { +var ErrorBarsHandler = function() { }; -var ErrorBarsHandler = Dygraph.DataHandlers.ErrorBarsHandler; -ErrorBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler(); +ErrorBarsHandler.prototype = new BarsHandler(); /** @inheritDoc */ ErrorBarsHandler.prototype.extractSeries = function(rawData, i, options) { @@ -99,4 +98,4 @@ ErrorBarsHandler.prototype.rollingAverage = return rollingData; }; -})(); +export default ErrorBarsHandler; diff --git a/src/datahandler/bars-fractions.js b/src/datahandler/bars-fractions.js index 8594c07..1cbc2a4 100644 --- a/src/datahandler/bars-fractions.js +++ b/src/datahandler/bars-fractions.js @@ -10,20 +10,19 @@ * @author David Eberlein (david.eberlein@ch.sauter-bc.com) */ -(function() { - /*global Dygraph:false */ "use strict"; +import BarsHandler from './bars'; + /** * @constructor * @extends Dygraph.DataHandlers.BarsHandler */ -Dygraph.DataHandlers.FractionsBarsHandler = function() { +var FractionsBarsHandler = function() { }; -var FractionsBarsHandler = Dygraph.DataHandlers.FractionsBarsHandler; -FractionsBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler(); +FractionsBarsHandler.prototype = new BarsHandler(); /** @inheritDoc */ FractionsBarsHandler.prototype.extractSeries = function(rawData, i, options) { @@ -110,4 +109,4 @@ FractionsBarsHandler.prototype.rollingAverage = return rollingData; }; -})(); +export default FractionsBarsHandler; diff --git a/src/datahandler/bars.js b/src/datahandler/bars.js index 7100148..b7975dc 100644 --- a/src/datahandler/bars.js +++ b/src/datahandler/bars.js @@ -11,23 +11,21 @@ * @author David Eberlein (david.eberlein@ch.sauter-bc.com) */ -(function() { - /*global Dygraph:false */ /*global DygraphLayout:false */ "use strict"; +import DygraphDataHandler from './datahandler'; +import DygraphLayout from '../dygraph-layout'; + /** * @constructor * @extends {Dygraph.DataHandler} */ -Dygraph.DataHandlers.BarsHandler = function() { - Dygraph.DataHandler.call(this); +var BarsHandler = function() { + DygraphDataHandler.call(this); }; -Dygraph.DataHandlers.BarsHandler.prototype = new Dygraph.DataHandler(); - -// alias for the rest of the implementation -var BarsHandler = Dygraph.DataHandlers.BarsHandler; +BarsHandler.prototype = new DygraphDataHandler(); // TODO(danvk): figure out why the jsdoc has to be copy/pasted from superclass. // (I get closure compiler errors if this isn't here.) @@ -66,8 +64,8 @@ BarsHandler.prototype.onPointsCreated_ = function(series, points) { var point = points[i]; point.y_top = NaN; point.y_bottom = NaN; - point.yval_minus = Dygraph.DataHandler.parseFloat(item[2][0]); - point.yval_plus = Dygraph.DataHandler.parseFloat(item[2][1]); + point.yval_minus = DygraphDataHandler.parseFloat(item[2][0]); + point.yval_plus = DygraphDataHandler.parseFloat(item[2][1]); } }; @@ -106,4 +104,4 @@ BarsHandler.prototype.onLineEvaluated = function(points, axis, logscale) { } }; -})(); +export default BarsHandler; diff --git a/src/datahandler/default-fractions.js b/src/datahandler/default-fractions.js index 35d36eb..2bf1793 100644 --- a/src/datahandler/default-fractions.js +++ b/src/datahandler/default-fractions.js @@ -9,20 +9,20 @@ * @author David Eberlein (david.eberlein@ch.sauter-bc.com) */ -(function() { - /*global Dygraph:false */ "use strict"; +import DygraphDataHandler from './datahandler'; +import DefaultHandler from './default'; + /** - * @extends Dygraph.DataHandlers.DefaultHandler + * @extends DefaultHandler * @constructor */ -Dygraph.DataHandlers.DefaultFractionHandler = function() { +var DefaultFractionHandler = function() { }; -var DefaultFractionHandler = Dygraph.DataHandlers.DefaultFractionHandler; -DefaultFractionHandler.prototype = new Dygraph.DataHandlers.DefaultHandler(); +DefaultFractionHandler.prototype = new DefaultHandler(); DefaultFractionHandler.prototype.extractSeries = function(rawData, i, options) { // TODO(danvk): pre-allocate series here. @@ -84,4 +84,4 @@ DefaultFractionHandler.prototype.rollingAverage = function(originalData, rollPer return rollingData; }; -})(); +export default DefaultFractionHandler; diff --git a/src/dygraph-canvas.js b/src/dygraph-canvas.js index 256edc1..7ba66ff 100644 --- a/src/dygraph-canvas.js +++ b/src/dygraph-canvas.js @@ -28,6 +28,7 @@ "use strict"; import * as utils from './dygraph-utils'; +import Dygraph from './dygraph'; /** @@ -153,7 +154,7 @@ DygraphCanvasRenderer._drawStyledLine = function(e, var ctx = e.drawingContext; ctx.save(); if (stroking) { - ctx.installPattern(strokePattern); + if (ctx.setLineDash) ctx.setLineDash(strokePattern); } var pointsOnLine = DygraphCanvasRenderer._drawSeries( @@ -162,7 +163,7 @@ DygraphCanvasRenderer._drawStyledLine = function(e, e, pointsOnLine, drawPointCallback, color, pointSize); if (stroking) { - ctx.uninstallPattern(); + if (ctx.setLineDash) ctx.setLineDash([]); } ctx.restore(); diff --git a/src/dygraph-gviz.js b/src/dygraph-gviz.js index d2d7a0d..12c55a7 100644 --- a/src/dygraph-gviz.js +++ b/src/dygraph-gviz.js @@ -17,17 +17,18 @@ * - http://dygraphs.com/tests/annotation-gviz.html */ -(function() { /*global Dygraph:false */ "use strict"; +import Dygraph from './dygraph'; + /** * A wrapper around Dygraph that implements the gviz API. * @param {!HTMLDivElement} container The DOM object the visualization should * live in. * @constructor */ -Dygraph.GVizChart = function(container) { +var GVizChart = function(container) { this.container = container; }; @@ -35,7 +36,7 @@ Dygraph.GVizChart = function(container) { * @param {GVizDataTable} data * @param {Object.<*>} options */ -Dygraph.GVizChart.prototype.draw = function(data, options) { +GVizChart.prototype.draw = function(data, options) { // Clear out any existing dygraph. // TODO(danvk): would it make more sense to simply redraw using the current // date_graph object? @@ -53,7 +54,7 @@ Dygraph.GVizChart.prototype.draw = function(data, options) { * @param {Array.<{row:number}>} selection_array array of the selected cells * @public */ -Dygraph.GVizChart.prototype.setSelection = function(selection_array) { +GVizChart.prototype.setSelection = function(selection_array) { var row = false; if (selection_array.length) { row = selection_array[0].row; @@ -66,7 +67,7 @@ Dygraph.GVizChart.prototype.setSelection = function(selection_array) { * @return {Array.<{row:number,column:number}>} array of the selected cells * @public */ -Dygraph.GVizChart.prototype.getSelection = function() { +GVizChart.prototype.getSelection = function() { var selection = []; var row = this.date_graph.getSelection(); @@ -81,4 +82,4 @@ Dygraph.GVizChart.prototype.getSelection = function() { return selection; }; -})(); +export default GVizChart; diff --git a/src/dygraph-tickers.js b/src/dygraph-tickers.js index 7eb17dd..31ae852 100644 --- a/src/dygraph-tickers.js +++ b/src/dygraph-tickers.js @@ -301,7 +301,7 @@ TICK_PLACEMENT[Granularity.CENTENNIAL] = {datefield: DateField.DATEFIELD_Y, * This is a list of human-friendly values at which to show tick marks on a log * scale. It is k * 10^n, where k=1..9 and n=-39..+39, so: * ..., 1, 2, 3, 4, 5, ..., 9, 10, 20, 30, ..., 90, 100, 200, 300, ... - * NOTE: this assumes that Dygraph.LOG_SCALE = 10. + * NOTE: this assumes that utils.LOG_SCALE = 10. * @type {Array.} */ var PREFERRED_LOG_TICK_VALUES = (function() { diff --git a/src/dygraph-utils.js b/src/dygraph-utils.js index d16da53..5ca8d67 100644 --- a/src/dygraph-utils.js +++ b/src/dygraph-utils.js @@ -330,7 +330,6 @@ export var DateAccessorsUTC = { * @private */ export function hmsString_(hh, mm, ss) { - var zeropad = Dygraph.zeropad; var ret = zeropad(hh) + ":" + zeropad(mm); if (ss) { ret += ":" + zeropad(ss); @@ -599,7 +598,7 @@ export function clone(o) { var r = []; for (var i = 0; i < o.length; i++) { if (isArrayLike(o[i])) { - r.push(Dygraph.clone(o[i])); + r.push(clone(o[i])); } else { r.push(o[i]); } @@ -768,7 +767,7 @@ export function repeatAndCleanup(repeatFn, maxFrames, framePeriodInMillis, (function loop() { if (frameNumber >= maxFrames) return; - Dygraph.requestAnimFrame.call(window, function() { + requestAnimFrame.call(window, function() { // Determine which frame to draw based on the delay so far. Will skip // frames if necessary. var currentTime = new Date().getTime(); diff --git a/src/dygraph.js b/src/dygraph.js index 396b858..321b8fa 100644 --- a/src/dygraph.js +++ b/src/dygraph.js @@ -54,8 +54,12 @@ import DygraphInteraction from './dygraph-interaction-model'; import * as DygraphTickers from './dygraph-tickers'; import * as utils from './dygraph-utils'; import DEFAULT_ATTRS from './dygraph-default-attrs'; -import DygraphDataHandler from './datahandler/datahandler'; + import DefaultHandler from './datahandler/default'; +import ErrorBarsHandler from './datahandler/bars-error'; +import CustomBarsHandler from './datahandler/bars-custom'; +import DefaultFractionHandler from './datahandler/default-fractions'; +import FractionsBarsHandler from './datahandler/bars-fractions'; import AnnotationsPlugin from './plugins/annotations'; import AxesPlugin from './plugins/axes'; @@ -64,6 +68,8 @@ import GridPlugin from './plugins/grid'; import LegendPlugin from './plugins/legend'; import RangeSelectorPlugin from './plugins/range-selector'; +import GVizChart from './dygraph-gviz'; + /*global DygraphLayout:false, DygraphCanvasRenderer:false, DygraphOptions:false, G_vmlCanvasManager:false,ActiveXObject:false */ "use strict"; @@ -648,10 +654,10 @@ Dygraph.prototype.toDataXCoord = function(x) { // // Use both sides as the exponent in 10^exp and we're done. // x = 10 ^ (log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0]))) - var logr0 = Dygraph.log10(xRange[0]); - var logr1 = Dygraph.log10(xRange[1]); + var logr0 = utils.log10(xRange[0]); + var logr1 = utils.log10(xRange[1]); var exponent = logr0 + (pct * (logr1 - logr0)); - var value = Math.pow(Dygraph.LOG_SCALE, exponent); + var value = Math.pow(utils.LOG_SCALE, exponent); return value; } }; @@ -697,10 +703,10 @@ Dygraph.prototype.toDataYCoord = function(y, axis) { // // Use both sides as the exponent in 10^exp and we're done. // y = 10 ^ (log(yRange[1]) - (pct * (log(yRange[1]) - log(yRange[0])))); - var logr0 = Dygraph.log10(yRange[0]); - var logr1 = Dygraph.log10(yRange[1]); + var logr0 = utils.log10(yRange[0]); + var logr1 = utils.log10(yRange[1]); var exponent = logr1 - (pct * (logr1 - logr0)); - var value = Math.pow(Dygraph.LOG_SCALE, exponent); + var value = Math.pow(utils.LOG_SCALE, exponent); return value; } }; @@ -732,9 +738,9 @@ Dygraph.prototype.toPercentYCoord = function(y, axis) { var pct; var logscale = this.attributes_.getForAxis("logscale", axis); if (logscale) { - var logr0 = Dygraph.log10(yRange[0]); - var logr1 = Dygraph.log10(yRange[1]); - pct = (logr1 - Dygraph.log10(y)) / (logr1 - logr0); + var logr0 = utils.log10(yRange[0]); + var logr1 = utils.log10(yRange[1]); + pct = (logr1 - utils.log10(y)) / (logr1 - logr0); } else { // yRange[1] - y is unit distance from the bottom. // yRange[1] - yRange[0] is the scale of the range. @@ -766,9 +772,9 @@ Dygraph.prototype.toPercentXCoord = function(x) { var pct; var logscale = this.attributes_.getForAxis("logscale", 'x') ; if (logscale === true) { // logscale can be null so we test for true explicitly. - var logr0 = Dygraph.log10(xRange[0]); - var logr1 = Dygraph.log10(xRange[1]); - pct = (Dygraph.log10(x) - logr0) / (logr1 - logr0); + var logr0 = utils.log10(xRange[0]); + var logr1 = utils.log10(xRange[1]); + pct = (utils.log10(x) - logr0) / (logr1 - logr0); } else { // x - xRange[0] is unit distance from the left. // xRange[1] - xRange[0] is the scale of the range. @@ -932,11 +938,11 @@ Dygraph.prototype.destroy = function() { this.removeTrackedEvents_(); // remove mouse event handlers (This may not be necessary anymore) - Dygraph.removeEvent(window, 'mouseout', this.mouseOutHandler_); - Dygraph.removeEvent(this.mouseEventElement_, 'mousemove', this.mouseMoveHandler_); + utils.removeEvent(window, 'mouseout', this.mouseOutHandler_); + utils.removeEvent(this.mouseEventElement_, 'mousemove', this.mouseMoveHandler_); // remove window handlers - Dygraph.removeEvent(window,'resize', this.resizeHandler_); + utils.removeEvent(window,'resize', this.resizeHandler_); this.resizeHandler_ = null; removeRecursive(this.maindiv_); @@ -1019,7 +1025,7 @@ Dygraph.prototype.setColors_ = function() { // alternate colors for high contrast. var idx = i % 2 ? (half + (i + 1)/ 2) : Math.ceil((i + 1) / 2); var hue = (1.0 * idx / (1 + num)); - colorStr = Dygraph.hsvToRGB(hue, sat, val); + colorStr = utils.hsvToRGB(hue, sat, val); } } this.colors_.push(colorStr); @@ -1573,7 +1579,7 @@ Dygraph.prototype.findClosestPoint = function(domX, domY) { var points = this.layout_.points[setIdx]; for (var i = 0; i < points.length; ++i) { point = points[i]; - if (!Dygraph.isValidPoint(point)) continue; + if (!utils.isValidPoint(point)) continue; dx = point.canvasx - domX; dy = point.canvasy - domY; dist = dx * dx + dy * dy; @@ -1614,12 +1620,12 @@ Dygraph.prototype.findStackedPoint = function(domX, domY) { var points = this.layout_.points[setIdx]; if (rowIdx >= points.length) continue; var p1 = points[rowIdx]; - if (!Dygraph.isValidPoint(p1)) continue; + if (!utils.isValidPoint(p1)) continue; var py = p1.canvasy; if (domX > p1.canvasx && rowIdx + 1 < points.length) { // interpolate series Y value using next point var p2 = points[rowIdx + 1]; - if (Dygraph.isValidPoint(p2)) { + if (utils.isValidPoint(p2)) { var dx = p2.canvasx - p1.canvasx; if (dx > 0) { var r = (domX - p1.canvasx) / dx; @@ -1629,7 +1635,7 @@ Dygraph.prototype.findStackedPoint = function(domX, domY) { } else if (domX < p1.canvasx && rowIdx > 0) { // interpolate series Y value using previous point var p0 = points[rowIdx - 1]; - if (Dygraph.isValidPoint(p0)) { + if (utils.isValidPoint(p0)) { var dx = p1.canvasx - p0.canvasx; if (dx > 0) { var r = (p1.canvasx - domX) / dx; @@ -2014,14 +2020,14 @@ Dygraph.prototype.getHandlerClass_ = function() { handlerClass = this.attr_('dataHandler'); } else if (this.fractions_) { if (this.getBooleanOption('errorBars')) { - handlerClass = DygraphDataHandlers.FractionsBarsHandler; + handlerClass = FractionsBarsHandler; } else { - handlerClass = DygraphDataHandlers.DefaultFractionHandler; + handlerClass = DefaultFractionHandler; } } else if (this.getBooleanOption('customBars')) { - handlerClass = DygraphDataHandlers.CustomBarsHandler; + handlerClass = CustomBarsHandler; } else if (this.getBooleanOption('errorBars')) { - handlerClass = DygraphDataHandlers.ErrorBarsHandler; + handlerClass = ErrorBarsHandler; } else { handlerClass = DefaultHandler; } @@ -3548,4 +3554,6 @@ Dygraph.PLUGINS = [ GridPlugin ]; +Dygraph.GVizChart = GVizChart; + export default Dygraph; diff --git a/src/extras/smooth-plotter.js b/src/extras/smooth-plotter.js index 119bf3f..d0182f4 100644 --- a/src/extras/smooth-plotter.js +++ b/src/extras/smooth-plotter.js @@ -1,6 +1,13 @@ -var smoothPlotter = (function() { +(function() { "use strict"; +var Dygraph; +if (window.Dygraph) { + Dygraph = window.Dygraph; +} else if (typeof(module) !== 'undefined') { + Dygraph = require('../dygraph'); +} + /** * Given three sequential points, p0, p1 and p2, find the left and right * control points for p1. @@ -121,6 +128,10 @@ function smoothPlotter(e) { smoothPlotter.smoothing = 1/3; smoothPlotter._getControlPoints = getControlPoints; // for testing -return smoothPlotter; +// older versions exported a global. +// This will be removed in the future. +// The preferred way to access smoothPlotter is via Dygraph.smoothPlotter. +window.smoothPlotter = smoothPlotter; +Dygraph.smoothPlotter = smoothPlotter; })(); diff --git a/src/extras/synchronizer.js b/src/extras/synchronizer.js index dd4329c..bf5b6f3 100644 --- a/src/extras/synchronizer.js +++ b/src/extras/synchronizer.js @@ -35,7 +35,14 @@ /* global Dygraph:false */ 'use strict'; -Dygraph.synchronize = function(/* dygraphs..., opts */) { +var Dygraph; +if (window.Dygraph) { + Dygraph = window.Dygraph; +} else if (typeof(module) !== 'undefined') { + Dygraph = require('../dygraph'); +} + +var synchronize = function(/* dygraphs..., opts */) { if (arguments.length === 0) { throw 'Invalid invocation of Dygraph.synchronize(). Need >= 1 argument.'; } @@ -217,4 +224,6 @@ function attachSelectionHandlers(gs, prevCallbacks) { } } +Dygraph.synchronize = synchronize; + })(); diff --git a/src/plugins/grid.js b/src/plugins/grid.js index bf6e3fe..16a83a2 100644 --- a/src/plugins/grid.js +++ b/src/plugins/grid.js @@ -65,8 +65,9 @@ grid.prototype.willDrawChart = function(e) { for (i = 0; i < ticks.length; i++) { var axis = ticks[i][0]; if(drawGrid[axis]) { + ctx.save(); if (stroking[axis]) { - ctx.installPattern(strokePattern[axis]); + if (ctx.setLineDash) ctx.setLineDash(strokePattern[axis]); } ctx.strokeStyle = strokeStyles[axis]; ctx.lineWidth = lineWidths[axis]; @@ -76,12 +77,9 @@ grid.prototype.willDrawChart = function(e) { ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x + area.w, y); - ctx.closePath(); ctx.stroke(); - if (stroking[axis]) { - ctx.uninstallPattern(); - } + ctx.restore(); } } ctx.restore(); @@ -94,7 +92,7 @@ grid.prototype.willDrawChart = function(e) { var strokePattern = g.getOptionForAxis('gridLinePattern', 'x'); var stroking = strokePattern && (strokePattern.length >= 2); if (stroking) { - ctx.installPattern(strokePattern); + if (ctx.setLineDash) ctx.setLineDash(strokePattern); } ctx.strokeStyle = g.getOptionForAxis('gridLineColor', 'x'); ctx.lineWidth = g.getOptionForAxis('gridLineWidth', 'x'); @@ -108,7 +106,7 @@ grid.prototype.willDrawChart = function(e) { ctx.stroke(); } if (stroking) { - ctx.uninstallPattern(); + if (ctx.setLineDash) ctx.setLineDash([]); } ctx.restore(); } diff --git a/src/plugins/legend.js b/src/plugins/legend.js index 95a161c..2e667d2 100644 --- a/src/plugins/legend.js +++ b/src/plugins/legend.js @@ -26,12 +26,12 @@ import * as utils from '../dygraph-utils'; * * @constructor */ -var legend = function() { +var Legend = function() { this.legend_div_ = null; this.is_generated_div_ = false; // do we own this div, or was it user-specified? }; -legend.prototype.toString = function() { +Legend.prototype.toString = function() { return "Legend Plugin"; }; @@ -50,7 +50,7 @@ var generateLegendDashHTML; * @param {Dygraph} g Graph instance. * @return {object.} Mapping of event names to callbacks. */ -legend.prototype.activate = function(g) { +Legend.prototype.activate = function(g) { var div; var divWidth = g.getOption('labelsDivWidth'); @@ -77,7 +77,7 @@ legend.prototype.activate = function(g) { "overflow": "hidden"}; // TODO(danvk): get rid of labelsDivStyles? CSS is better. - Dygraph.update(messagestyle, g.getOption('labelsDivStyles')); + utils.update(messagestyle, g.getOption('labelsDivStyles')); div = document.createElement("div"); div.className = "dygraph-legend"; for (var name in messagestyle) { @@ -122,7 +122,7 @@ var escapeHTML = function(str) { return str.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); }; -legend.prototype.select = function(e) { +Legend.prototype.select = function(e) { var xValue = e.selectedX; var points = e.selectedPoints; var row = e.selectedRow; @@ -156,12 +156,12 @@ legend.prototype.select = function(e) { this.legend_div_.style.top = topLegend + "px"; } - var html = legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_, row); + var html = Legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_, row); this.legend_div_.innerHTML = html; this.legend_div_.style.display = ''; }; -legend.prototype.deselect = function(e) { +Legend.prototype.deselect = function(e) { var legendMode = e.dygraph.getOption('legend'); if (legendMode !== 'always') { this.legend_div_.style.display = "none"; @@ -171,11 +171,11 @@ legend.prototype.deselect = function(e) { var oneEmWidth = calculateEmWidthInDiv(this.legend_div_); this.one_em_width_ = oneEmWidth; - var html = legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth, null); + var html = Legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth, null); this.legend_div_.innerHTML = html; }; -legend.prototype.didDrawChart = function(e) { +Legend.prototype.didDrawChart = function(e) { this.deselect(e); }; @@ -188,7 +188,7 @@ legend.prototype.didDrawChart = function(e) { * - its top edge is flush with the top edge of the charting area * @private */ -legend.prototype.predraw = function(e) { +Legend.prototype.predraw = function(e) { // Don't touch a user-specified labelsDiv. if (!this.is_generated_div_) return; @@ -205,7 +205,7 @@ legend.prototype.predraw = function(e) { * Called when dygraph.destroy() is called. * You should null out any references and detach any DOM elements. */ -legend.prototype.destroy = function() { +Legend.prototype.destroy = function() { this.legend_div_ = null; }; @@ -222,7 +222,7 @@ legend.prototype.destroy = function() { * 'always'}) and with dashed lines. * @param {number} row The selected row index. */ -legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth, row) { +Legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth, row) { // TODO(danvk): deprecate this option in place of {legend: 'never'} if (g.getOption('showLabelsOnHighlight') !== true) return ''; @@ -362,4 +362,4 @@ generateLegendDashHTML = function(strokePattern, color, oneEmWidth) { return dash; }; -export default legend; +export default Legend; diff --git a/tests/dashed-canvas.html b/tests/dashed-canvas.html index dc472fa..e12d998 100644 --- a/tests/dashed-canvas.html +++ b/tests/dashed-canvas.html @@ -1,6 +1,6 @@ - +

You should see solid black and blue lines with a dashed red line in between @@ -25,7 +25,8 @@ ctx.lineTo(580, 200); ctx.stroke(); // Draw a dashed line segment. -ctx.installPattern([10, 10]); +// ctx.installPattern([10, 10]); +ctx.setLineDash([10, 10]); ctx.strokeStyle = 'red'; ctx.beginPath(); ctx.moveTo(100, 50); @@ -42,7 +43,8 @@ ctx2.moveTo(100, 50); ctx2.lineTo(600, 50); ctx2.stroke(); -ctx.uninstallPattern(); +// ctx.uninstallPattern(); +ctx.setLineDash([]); // Now that we've uninstalled the pattern, should be normal again. ctx.strokeStyle = 'blue'; diff --git a/watch-tests.sh b/watch-tests.sh new file mode 100755 index 0000000..002f879 --- /dev/null +++ b/watch-tests.sh @@ -0,0 +1,63 @@ +watchify \ + -v -t babelify \ + --debug \ + -o dist/tests.js \ + auto_tests/tests/sanity.js \ + auto_tests/tests/pathological_cases.js \ + auto_tests/tests/axis_labels.js \ + auto_tests/tests/annotations.js \ + auto_tests/tests/callback.js \ + auto_tests/tests/connect_separated_points.js \ + auto_tests/tests/fill_step_plot.js \ + auto_tests/tests/custom_bars.js \ + auto_tests/tests/css.js \ + auto_tests/tests/data_api.js \ + auto_tests/tests/date_formats.js \ + auto_tests/tests/date_ticker.js \ + auto_tests/tests/error_bars.js \ + auto_tests/tests/dygraph-options-tests.js \ + auto_tests/tests/fast_canvas_proxy.js \ + auto_tests/tests/formats.js \ + auto_tests/tests/hidpi.js \ + auto_tests/tests/interaction_model.js \ + auto_tests/tests/missing_points.js \ + auto_tests/tests/multi_csv.js \ + + +cat < /dev/null + + +# These ones are going to be hard +cat < /dev/null -- 2.7.4