From 5738c1fec346eb6ee972b1141b8be3ed3d2f5fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 30 Jun 2016 11:33:56 -0400 Subject: [PATCH 1/3] bar: set marker.line.width dflt to 0 - so that plotting code - which relies on marker.line.width to set the effective 'bargap' does not error out - broken since https://github.com/plotly/plotly.js/pull/124/ --- src/traces/bar/attributes.js | 24 ++++++++++++++++-------- src/traces/histogram/attributes.js | 14 +------------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/traces/bar/attributes.js b/src/traces/bar/attributes.js index 21ac947047d..25b7568bd13 100644 --- a/src/traces/bar/attributes.js +++ b/src/traces/bar/attributes.js @@ -15,6 +15,19 @@ var extendFlat = require('../../lib/extend').extendFlat; var scatterMarkerAttrs = scatterAttrs.marker; var scatterMarkerLineAttrs = scatterMarkerAttrs.line; +var markerLineWidth = extendFlat({}, + scatterMarkerLineAttrs.width, { dflt: 0 }); + +var markerLine = extendFlat({}, { + width: markerLineWidth +}, colorAttributes('marker.line')); + +var marker = extendFlat({}, { + showscale: scatterMarkerAttrs.showscale, + line: markerLine +}, colorAttributes('marker')); + + module.exports = { x: scatterAttrs.x, x0: scatterAttrs.x0, @@ -23,6 +36,7 @@ module.exports = { y0: scatterAttrs.y0, dy: scatterAttrs.dy, text: scatterAttrs.text, + orientation: { valType: 'enumerated', role: 'info', @@ -33,14 +47,8 @@ module.exports = { 'along the vertical (horizontal).' ].join(' ') }, - marker: extendFlat({}, { - showscale: scatterMarkerAttrs.showscale, - line: extendFlat({}, - {width: scatterMarkerLineAttrs.width}, - colorAttributes('marker.line') - )}, - colorAttributes('marker') - ), + + marker: marker, r: scatterAttrs.r, t: scatterAttrs.t, diff --git a/src/traces/histogram/attributes.js b/src/traces/histogram/attributes.js index 5c687871080..757c923c190 100644 --- a/src/traces/histogram/attributes.js +++ b/src/traces/histogram/attributes.js @@ -9,12 +9,7 @@ 'use strict'; var barAttrs = require('../bar/attributes'); -var colorAttributes = require('../../components/colorscale/color_attributes'); -var extendFlat = require('../../lib/extend').extendDeep; - -var barMarkerAttrs = barAttrs.marker; -var barMarkerLineAttrs = barMarkerAttrs.line; module.exports = { x: { @@ -124,14 +119,7 @@ module.exports = { }, ybins: makeBinsAttr('y'), - marker: extendFlat({}, { - showscale: barMarkerAttrs.showscale, - line: extendFlat({}, - {width: extendFlat({}, barMarkerLineAttrs.width, {dflt: 0})}, - colorAttributes('marker.line')) - }, - colorAttributes('marker') - ), + marker: barAttrs.marker, _nestedModules: { 'error_y': 'ErrorBars', From cf73a9919126ca4ee6ee442c616834c217f9ecda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 30 Jun 2016 11:34:10 -0400 Subject: [PATCH 2/3] test: add bargap 0 mock --- test/image/baselines/bar_bargap0.png | Bin 0 -> 16633 bytes test/image/mocks/bar_bargap0.json | 40 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/image/baselines/bar_bargap0.png create mode 100644 test/image/mocks/bar_bargap0.json diff --git a/test/image/baselines/bar_bargap0.png b/test/image/baselines/bar_bargap0.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd5e98821f6176cce9e6bec2c566cd496b02faa GIT binary patch literal 16633 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 Kzk{$1755(+oeVPo literal 0 HcmV?d00001 diff --git a/test/image/mocks/bar_bargap0.json b/test/image/mocks/bar_bargap0.json new file mode 100644 index 00000000000..14ff09ea6b7 --- /dev/null +++ b/test/image/mocks/bar_bargap0.json @@ -0,0 +1,40 @@ +{ + "data": [ + { + "x": [ + "giraffes", + "orangutans", + "monkeys" + ], + "y": [ + 20, + 14, + 23 + ], + "name": "SF Zoo", + "type": "bar" + } + ], + "layout": { + "bargap": 0, + "xaxis": { + "type": "category", + "range": [ + -0.5, + 2.5 + ], + "autorange": true + }, + "yaxis": { + "type": "linear", + "range": [ + 0, + 24.210526315789473 + ], + "autorange": true + }, + "height": 450, + "width": 1100, + "autosize": false + } +} From f98334c3361047d36bae3965a630b3c7a1550d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 30 Jun 2016 12:02:45 -0400 Subject: [PATCH 3/3] test-runner: check if baseline img exist before px comparison --- test/image/compare_pixels_test.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/test/image/compare_pixels_test.js b/test/image/compare_pixels_test.js index 1335843011a..ac5f5cccf95 100644 --- a/test/image/compare_pixels_test.js +++ b/test/image/compare_pixels_test.js @@ -147,11 +147,12 @@ function comparePixels(mockName, cb) { saveImageStream = fs.createWriteStream(imagePaths.test); function checkImage() { - var gmOpts = { - file: imagePaths.diff, - highlightColor: 'purple', - tolerance: TOLERANCE - }; + + // baseline image must be generated first + if(!doesFileExist(imagePaths.baseline)) { + var err = new Error('baseline image not found'); + return onEqualityCheck(err, false); + } /* * N.B. The non-zero tolerance was added in @@ -169,6 +170,12 @@ function comparePixels(mockName, cb) { * Further investigation is needed. */ + var gmOpts = { + file: imagePaths.diff, + highlightColor: 'purple', + tolerance: TOLERANCE + }; + gm.compare( imagePaths.test, imagePaths.baseline, @@ -194,6 +201,17 @@ function comparePixels(mockName, cb) { .on('close', checkImage); } +function doesFileExist(filePath) { + try { + if(fs.statSync(filePath).isFile()) return true; + } + catch(e) { + return false; + } + + return false; +} + function touch(filePath) { fs.closeSync(fs.openSync(filePath, 'w')); }