From 2d7adeec8d64bb4bd653bbe422642e411f2b918b Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 21 Dec 2018 12:52:29 -0500 Subject: [PATCH 1/4] mock and fix for surface plot with empty z array required minimum 2x2 data for a surface revised conditions for z correct z length check new baseline added --- src/traces/surface/defaults.js | 10 ++++-- .../baselines/gl3d_surface-with-no-z-data.png | Bin 0 -> 13781 bytes .../mocks/gl3d_surface-with-no-z-data.json | 33 ++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 test/image/baselines/gl3d_surface-with-no-z-data.png create mode 100644 test/image/mocks/gl3d_surface-with-no-z-data.json diff --git a/src/traces/surface/defaults.js b/src/traces/surface/defaults.js index 8c1307f5bf3..5d004ffca2e 100644 --- a/src/traces/surface/defaults.js +++ b/src/traces/surface/defaults.js @@ -23,14 +23,18 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } + var x = coerce('x'); + var y = coerce('y'); + var z = coerce('z'); - if(!z) { + if(!z || !z.length || + (x ? (x.length < 2) : false) || + (y ? (y.length < 2) : false) + ) { traceOut.visible = false; return; } - var x = coerce('x'); - coerce('y'); traceOut._xlength = (Array.isArray(x) && Lib.isArrayOrTypedArray(x[0])) ? z.length : z[0].length; traceOut._ylength = z.length; diff --git a/test/image/baselines/gl3d_surface-with-no-z-data.png b/test/image/baselines/gl3d_surface-with-no-z-data.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb4cf0ba81eb61da087cd2b16e9edbab8928b8d GIT binary patch literal 13781 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 with no Z data would be invisible.", + "width": 600, + "height": 400 + } +} From 4a3e00a13f8738a935bf64d68394cdcb0be5d677 Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 21 Dec 2018 15:55:14 -0500 Subject: [PATCH 2/4] added jasmine tests --- test/jasmine/tests/gl3d_plot_interact_test.js | 2 - test/jasmine/tests/surface_test.js | 92 +++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/gl3d_plot_interact_test.js b/test/jasmine/tests/gl3d_plot_interact_test.js index 77e713bc719..a44fc0e8eb8 100644 --- a/test/jasmine/tests/gl3d_plot_interact_test.js +++ b/test/jasmine/tests/gl3d_plot_interact_test.js @@ -670,13 +670,11 @@ describe('Test gl3d plots', function() { .then(done); }); - it('@gl should avoid passing blank texts to webgl', function(done) { function assertIsFilled(msg) { var fullLayout = gd._fullLayout; expect(fullLayout.scene._scene.glplot.objects[0].glyphBuffer.length).not.toBe(0, msg); } - Plotly.plot(gd, [{ type: 'scatter3d', mode: 'text', diff --git a/test/jasmine/tests/surface_test.js b/test/jasmine/tests/surface_test.js index 00cfe59ff05..bd8fdb6a2cc 100644 --- a/test/jasmine/tests/surface_test.js +++ b/test/jasmine/tests/surface_test.js @@ -1,4 +1,8 @@ var Surface = require('@src/traces/surface'); +var Plotly = require('@lib/index'); +var failTest = require('../assets/fail_test'); +var createGraphDiv = require('../assets/create_graph_div'); +var destroyGraphDiv = require('../assets/destroy_graph_div'); var Lib = require('@src/lib'); @@ -178,5 +182,93 @@ describe('Test surface', function() { expect(traceOut.ycalendar).toBe('ethiopian'); expect(traceOut.zcalendar).toBe('mayan'); }); + + }); + + + describe('Test dimension and expected visibility tests', function() { + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + + afterEach(function() { + Plotly.purge(gd); + destroyGraphDiv(); + }); + + + function assertVisibility(exp, msg) { + expect(gd._fullData[0]).not.toBe(undefined, 'no visibility!'); + expect(gd._fullData[0].visible).toBe(exp, msg); + } + + fit('@gl surface should be invisible when the z array is empty', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'z': [] + }]) + .then(function() { + assertVisibility(false, 'not to be visible'); + }) + .catch(failTest) + .then(done); + }); + + fit('@gl surface should be invisible when the x array is defined but has less than two rows', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'x': [0], + 'y': [0, 1], + 'z': [[1], [2]] + }]) + .then(function() { + assertVisibility(false, 'not to be visible'); + }) + .catch(failTest) + .then(done); + }); + + fit('@gl surface should be invisible when the y array is defined but has less than two colums', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'x': [0, 1], + 'y': [0], + 'z': [[1, 2]] + }]) + .then(function() { + assertVisibility(false, 'not to be visible'); + }) + .catch(failTest) + .then(done); + }); + + fit('@gl surface should be visible when the x and y are not provided; but z array is provided', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'z': [[1, 2], [3, 4]] + }]) + .then(function() { + assertVisibility(true, 'to be visible'); + }) + .catch(failTest) + .then(done); + }); + + fit('@gl surface should be invisible when the x and y are provided; but z array is not provided', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'x': [0, 1], + 'y': [0, 1] + }]) + .then(function() { + assertVisibility(false, 'to be invisible'); + }) + .catch(failTest) + .then(done); + }); + }); }); From 56a570edb49d304897dfdad1bbd827267e5c5438 Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 21 Dec 2018 15:56:02 -0500 Subject: [PATCH 3/4] removed image test --- .../baselines/gl3d_surface-with-no-z-data.png | Bin 13781 -> 0 bytes .../mocks/gl3d_surface-with-no-z-data.json | 33 ------------------ 2 files changed, 33 deletions(-) delete mode 100644 test/image/baselines/gl3d_surface-with-no-z-data.png delete mode 100644 test/image/mocks/gl3d_surface-with-no-z-data.json diff --git a/test/image/baselines/gl3d_surface-with-no-z-data.png b/test/image/baselines/gl3d_surface-with-no-z-data.png deleted file mode 100644 index 8eb4cf0ba81eb61da087cd2b16e9edbab8928b8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13781 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 with no Z data would be invisible.", - "width": 600, - "height": 400 - } -} From b76710d2b8f7d391be7e25e325ed42d677ac15c8 Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 21 Dec 2018 16:08:17 -0500 Subject: [PATCH 4/4] modified condition tests --- src/traces/surface/defaults.js | 5 ++-- test/jasmine/tests/surface_test.js | 45 +++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/traces/surface/defaults.js b/src/traces/surface/defaults.js index 5d004ffca2e..8c0d8c6b967 100644 --- a/src/traces/surface/defaults.js +++ b/src/traces/surface/defaults.js @@ -28,14 +28,13 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var z = coerce('z'); if(!z || !z.length || - (x ? (x.length < 2) : false) || - (y ? (y.length < 2) : false) + (x ? (x.length < 1) : false) || + (y ? (y.length < 1) : false) ) { traceOut.visible = false; return; } - traceOut._xlength = (Array.isArray(x) && Lib.isArrayOrTypedArray(x[0])) ? z.length : z[0].length; traceOut._ylength = z.length; diff --git a/test/jasmine/tests/surface_test.js b/test/jasmine/tests/surface_test.js index bd8fdb6a2cc..d0a02db942d 100644 --- a/test/jasmine/tests/surface_test.js +++ b/test/jasmine/tests/surface_test.js @@ -185,7 +185,6 @@ describe('Test surface', function() { }); - describe('Test dimension and expected visibility tests', function() { var gd; @@ -193,21 +192,33 @@ describe('Test surface', function() { gd = createGraphDiv(); }); - afterEach(function() { Plotly.purge(gd); destroyGraphDiv(); }); - function assertVisibility(exp, msg) { expect(gd._fullData[0]).not.toBe(undefined, 'no visibility!'); expect(gd._fullData[0].visible).toBe(exp, msg); } - fit('@gl surface should be invisible when the z array is empty', function(done) { + it('@gl surface should be invisible when the z array is empty', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'z': [] + }]) + .then(function() { + assertVisibility(false, 'not to be visible'); + }) + .catch(failTest) + .then(done); + }); + + it('@gl surface should be invisible when the x array is defined but is empty', function(done) { Plotly.plot(gd, [{ 'type': 'surface', + 'x': [], + 'y': [0, 1], 'z': [] }]) .then(function() { @@ -217,7 +228,21 @@ describe('Test surface', function() { .then(done); }); - fit('@gl surface should be invisible when the x array is defined but has less than two rows', function(done) { + it('@gl surface should be invisible when the y array is defined but is empty', function(done) { + Plotly.plot(gd, [{ + 'type': 'surface', + 'x': [0, 1], + 'y': [], + 'z': [] + }]) + .then(function() { + assertVisibility(false, 'not to be visible'); + }) + .catch(failTest) + .then(done); + }); + + it('@gl surface should be invisible when the x array is defined and has at least one item', function(done) { Plotly.plot(gd, [{ 'type': 'surface', 'x': [0], @@ -225,13 +250,13 @@ describe('Test surface', function() { 'z': [[1], [2]] }]) .then(function() { - assertVisibility(false, 'not to be visible'); + assertVisibility(true, 'to be visible'); }) .catch(failTest) .then(done); }); - fit('@gl surface should be invisible when the y array is defined but has less than two colums', function(done) { + it('@gl surface should be invisible when the y array is defined and has at least one item', function(done) { Plotly.plot(gd, [{ 'type': 'surface', 'x': [0, 1], @@ -239,13 +264,13 @@ describe('Test surface', function() { 'z': [[1, 2]] }]) .then(function() { - assertVisibility(false, 'not to be visible'); + assertVisibility(true, 'to be visible'); }) .catch(failTest) .then(done); }); - fit('@gl surface should be visible when the x and y are not provided; but z array is provided', function(done) { + it('@gl surface should be visible when the x and y are not provided; but z array is provided', function(done) { Plotly.plot(gd, [{ 'type': 'surface', 'z': [[1, 2], [3, 4]] @@ -257,7 +282,7 @@ describe('Test surface', function() { .then(done); }); - fit('@gl surface should be invisible when the x and y are provided; but z array is not provided', function(done) { + it('@gl surface should be invisible when the x and y are provided; but z array is not provided', function(done) { Plotly.plot(gd, [{ 'type': 'surface', 'x': [0, 1],