From ad7d8820638d828aad55a574c6f43721bb982631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 14 Sep 2016 22:21:38 -0400 Subject: [PATCH 1/3] tasks: handle image server request width & height specs --- test/image/assets/get_image_request_options.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/image/assets/get_image_request_options.js b/test/image/assets/get_image_request_options.js index 02b1f84347f..82589f76d16 100644 --- a/test/image/assets/get_image_request_options.js +++ b/test/image/assets/get_image_request_options.js @@ -23,6 +23,9 @@ module.exports = function getRequestOpts(specs) { scale: specs.scale || DEFAULT_SCALE }; + if(specs.width) body.width = specs.width; + if(specs.height) body.height = specs.height; + return { method: 'POST', url: constants.testContainerUrl, From 8828380cfa754a72714a29f92d1385880a4d9550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 14 Sep 2016 22:21:58 -0400 Subject: [PATCH 2/3] tasks: update comment in export test --- test/image/export_test.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/image/export_test.js b/test/image/export_test.js index 6d0e7d2557f..dba2a5c75e2 100644 --- a/test/image/export_test.js +++ b/test/image/export_test.js @@ -9,8 +9,11 @@ var request = require('request'); var test = require('tape'); // image formats to test +// // N.B. 'png' is tested in `npm run test-image, no need to duplicate here -// TODO figure why 'jpeg' and 'webp' lead to errors +// +// N.B. 'jpeg' and 'webp' lead to errors because of the image server code +// is looking for Plotly.Color which isn't exposed anymore var FORMATS = ['svg', 'pdf', 'eps']; // non-exhaustive list of mocks to test From 1e61ed67feb138d29ac9e3c22ac4111395c0c864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 14 Sep 2016 22:22:21 -0400 Subject: [PATCH 3/3] tasks: use image-size to check svg file size in export test --- package.json | 1 + test/image/export_test.js | 31 +++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 199d5c48f90..8456f224cf5 100644 --- a/package.json +++ b/package.json @@ -100,6 +100,7 @@ "fuse.js": "^2.2.0", "glob": "^7.0.0", "gzip-size": "^3.0.0", + "image-size": "^0.5.0", "jasmine-core": "^2.4.1", "karma": "^1.1.0", "karma-browserify": "^5.0.1", diff --git a/test/image/export_test.js b/test/image/export_test.js index dba2a5c75e2..a29106da5de 100644 --- a/test/image/export_test.js +++ b/test/image/export_test.js @@ -1,4 +1,5 @@ var fs = require('fs'); +var sizeOf = require('image-size'); var getMockList = require('./assets/get_mock_list'); var getRequestOpts = require('./assets/get_image_request_options'); @@ -19,7 +20,11 @@ var FORMATS = ['svg', 'pdf', 'eps']; // non-exhaustive list of mocks to test var DEFAULT_LIST = ['0', 'geo_first', 'gl3d_z-range', 'text_export', 'layout_image']; -// minimum satisfactory file size +// return dimensions [in px] +var WIDTH = 700; +var HEIGHT = 500; + +// minimum satisfactory file size [in bytes] var MIN_SIZE = 100; /** @@ -72,18 +77,32 @@ function runInBatch(mockList) { // The tests below determine whether the images are properly // exported by (only) checking the file size of the generated images. function testExport(mockName, format, t) { - var requestOpts = getRequestOpts({ mockName: mockName, format: format }), + var specs = { + mockName: mockName, + format: format, + width: WIDTH, + height: HEIGHT + }; + + var requestOpts = getRequestOpts(specs), imagePaths = getImagePaths(mockName, format), saveImageStream = fs.createWriteStream(imagePaths.test); function checkExport(err) { if(err) throw err; - fs.stat(imagePaths.test, function(err, stats) { - var didExport = stats.size > MIN_SIZE; + var didExport; - t.ok(didExport, mockName + ' should be properly exported as a ' + format); - }); + if(format === 'svg') { + var dims = sizeOf(imagePaths.test); + didExport = (dims.width === WIDTH) && (dims.height === HEIGHT); + } + else { + var stats = fs.statSync(imagePaths.test); + didExport = stats.size > MIN_SIZE; + } + + t.ok(didExport, mockName + ' should be properly exported as a ' + format); } request(requestOpts)