diff --git a/.circleci/config.yml b/.circleci/config.yml index 9dc14f4d5f2..ceddf7c21b8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -80,17 +80,12 @@ jobs: test-image: docker: - - image: plotly/testbed:latest - working_directory: /var/www/streambed/image_server/plotly.js/ + - image: quay.io/plotly/image-exporter:single-entry + working_directory: /var/www/image-exporter/plotly.js/ steps: - checkout - attach_workspace: - at: /var/www/streambed/image_server/plotly.js/ - - run: - name: Run and setup container - command: | - supervisord & - npm run docker -- setup + at: /var/www/image-exporter/plotly.js/ - run: name: Run image tests command: ./.circleci/test.sh image @@ -99,17 +94,12 @@ jobs: test-image2: docker: - - image: plotly/testbed:latest - working_directory: /var/www/streambed/image_server/plotly.js/ + - image: quay.io/plotly/image-exporter:single-entry + working_directory: /var/www/image-exporter/plotly.js/ steps: - checkout - attach_workspace: - at: /var/www/streambed/image_server/plotly.js/ - - run: - name: Run and setup container - command: | - supervisord & - npm run docker -- setup + at: /var/www/image-exporter/plotly.js/ - run: name: Run image tests command: ./.circleci/test.sh image2 diff --git a/.circleci/download_artifacts.sh b/.circleci/download_artifacts.sh new file mode 100755 index 00000000000..cf829b897dd --- /dev/null +++ b/.circleci/download_artifacts.sh @@ -0,0 +1,31 @@ +#! /bin/bash +# +# https://circleci.com/docs/2.0/artifacts/#downloading-all-artifacts-for-a-build-on-circleci + +if [[ $# -eq 0 ]] ; then + echo 'Must provide Circle CI built number' + echo 'Go to https://circleci.com/gh/plotly/plotly.js to find out' + exit 1 +fi + +if [[ -z "${CIRCLECI_TOKEN}" ]]; then + echo 'CIRCLECI_TOKEN environment variable must be set' + echo 'Go to https://circleci.com/account/api to generate an access token' + exit 1 +fi + +BUILT=$1 +URL="https://circleci.com/api/v1.1/project/github/plotly/plotly.js/$BUILT/artifacts?circle-token=$CIRCLECI_TOKEN" +DIR="$(dirname $0)/../build/circleci-artifacts-$BUILT" + +mkdir -p $DIR/{test_images,test_images_diff} + +FILES=$(curl -s $URL | grep -o 'https://[^"]*') + +for f in $FILES; do + if [[ $f == *"/test_images/"* ]]; then + wget $f %$CIRCLECI_TOKEN -q --show-progress -P $DIR/test_images + elif [[ $f == *"/test_images_diff/"* ]]; then + wget $f %$CIRCLECI_TOKEN -q --show-progress -P $DIR/test_images_diff + fi +done diff --git a/package-lock.json b/package-lock.json index 305ca60c946..e751f26230c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,6 +97,12 @@ "d3-interpolate": "1.1.6" } }, + "@types/node": { + "version": "8.10.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.12.tgz", + "integrity": "sha512-aRFUGj/f9JVA0qSQiCK9ebaa778mmqMIcy1eKnPktgfm9O6VsnIzzB5wJnjp9/jVrfm7fX1rr3OR1nndppGZUg==", + "dev": true + }, "JSONStream": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", @@ -913,6 +919,36 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "0.3.1", + "error": "7.0.2", + "raw-body": "1.1.7", + "safe-json-parse": "1.0.1" + }, + "dependencies": { + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "requires": { + "bytes": "1.0.0", + "string_decoder": "0.10.31" + } + } + } + }, "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", @@ -1567,7 +1603,7 @@ "minimist": "1.2.0", "object-filter": "1.0.2", "object.assign": "4.1.0", - "run-parallel": "1.1.7", + "run-parallel": "1.1.9", "semver": "5.5.0" } }, @@ -1964,6 +2000,12 @@ "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", "dev": true }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", @@ -2722,6 +2764,58 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "electron": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.4.tgz", + "integrity": "sha512-2f1cx0G3riMFODXFftF5AHXy+oHfhpntZHTDN66Hxtl09gmEr42B3piNEod9MEmw72f75LX2JfeYceqq1PF8cA==", + "dev": true, + "requires": { + "@types/node": "8.10.12", + "electron-download": "3.3.0", + "extract-zip": "1.6.6" + } + }, + "electron-download": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", + "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "fs-extra": "0.30.0", + "home-path": "1.0.5", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "2.1.0", + "rc": "1.2.5", + "semver": "5.5.0", + "sumchecker": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + } + } + }, "element-size": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", @@ -2856,6 +2950,16 @@ "prr": "1.0.1" } }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "0.2.1", + "xtend": "4.0.1" + } + }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -3212,6 +3316,44 @@ "resolved": "https://registry.npmjs.org/extract-frustum-planes/-/extract-frustum-planes-1.0.0.tgz", "integrity": "sha1-l9VwP/BWTIw8aDjKxF+ee8UsnvU=" }, + "extract-zip": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "debug": "2.6.9", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -3251,6 +3393,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -3276,6 +3427,12 @@ "integrity": "sha1-5tJptWVnuJIlgTmOmQ3XB49y1hY=", "dev": true }, + "file-type": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.7.1.tgz", + "integrity": "sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ==", + "dev": true + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -5594,6 +5751,12 @@ "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "dev": true }, + "home-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz", + "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=", + "dev": true + }, "hosted-git-info": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", @@ -6226,6 +6389,12 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -6875,6 +7044,15 @@ "is-buffer": "1.1.6" } }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, "labeled-stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", @@ -8601,6 +8779,32 @@ "set-blocking": "2.0.0" } }, + "nugget": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "requires": { + "debug": "2.6.9", + "minimist": "1.2.0", + "pretty-bytes": "1.0.4", + "progress-stream": "1.2.0", + "request": "2.83.0", + "single-line-log": "1.1.2", + "throttleit": "0.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -8774,6 +8978,36 @@ "gl-mat4": "1.1.4" } }, + "orca": { + "version": "github:plotly/orca#1fa162f3d2af7cc038b0d966d84884521489b68e", + "dev": true, + "requires": { + "body": "5.1.0", + "fast-isnumeric": "1.1.1", + "file-type": "7.7.1", + "get-stdin": "5.0.1", + "glob": "7.1.2", + "is-plain-obj": "1.1.0", + "is-url": "1.2.4", + "minimist": "1.2.0", + "read-chunk": "2.1.0", + "request": "2.83.0", + "run-parallel": "1.1.9", + "run-parallel-limit": "1.0.5", + "run-series": "1.1.4", + "semver": "5.5.0", + "string-to-stream": "1.1.1", + "uuid": "3.2.1" + }, + "dependencies": { + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + } + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -9092,6 +9326,12 @@ "sha.js": "2.4.10" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -9140,6 +9380,15 @@ "pinkie": "2.0.4" } }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "dev": true, + "requires": { + "pngjs": "3.3.3" + } + }, "planar-dual": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/planar-dual/-/planar-dual-1.0.2.tgz", @@ -9184,6 +9433,12 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "pngjs": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.3.tgz", + "integrity": "sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==", + "dev": true + }, "point-cluster": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/point-cluster/-/point-cluster-3.1.4.tgz", @@ -9291,6 +9546,16 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, "pretty-ms": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-3.1.0.tgz", @@ -9324,6 +9589,55 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "requires": { + "speedometer": "0.1.4", + "through2": "0.2.3" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "requires": { + "readable-stream": "1.1.14", + "xtend": "2.1.2" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "0.4.0" + } + } + } + }, "protocol-buffers-schema": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-2.2.0.tgz", @@ -9584,6 +9898,24 @@ "strip-json-comments": "2.0.1" } }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, + "requires": { + "pify": "3.0.0", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "read-last-lines": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/read-last-lines/-/read-last-lines-1.3.0.tgz", @@ -10433,9 +10765,15 @@ } }, "run-parallel": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.7.tgz", - "integrity": "sha512-nB641a6enJOh0fdsFHR9SiVCiOlAyjMplImDdjV3kWCzJZw9rwzvGwmpGuPmfX//Yxblh0pkzPcFcxA81iwmxA==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "run-parallel-limit": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.0.5.tgz", + "integrity": "sha512-NsY+oDngvrvMxKB3G8ijBzIema6aYbQMD2bHOamvN52BysbIGTnEY2xsNyfrcr9GhY995/t/0nQN3R3oZvaDlg==", "dev": true }, "run-series": { @@ -10469,6 +10807,12 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, "sane-topojson": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sane-topojson/-/sane-topojson-2.0.0.tgz", @@ -10773,6 +11117,37 @@ } } }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true, + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, "slab-decomposition": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/slab-decomposition/-/slab-decomposition-1.0.2.tgz", @@ -10992,6 +11367,12 @@ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, "split": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", @@ -11458,6 +11839,54 @@ } } }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-to-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz", + "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -11585,6 +12014,33 @@ "minimist": "1.2.0" } }, + "sumchecker": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", + "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "es6-promise": "4.2.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + } + } + }, "supercluster": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-2.3.0.tgz", @@ -11758,6 +12214,12 @@ "thenify": "3.3.0" } }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -12595,6 +13057,15 @@ } } }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json index 0f6d820a249..21b299c45e4 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "check-node-version": "^3.2.0", "deep-equal": "^1.0.1", "ecstatic": "^3.2.0", + "electron": "1.8.4", "eslint": "^4.18.0", "falafel": "^2.0.0", "fs-extra": "^2.0.0", @@ -145,10 +146,14 @@ "node-sass": "^4.7.2", "npm-link-check": "^2.0.0", "open": "0.0.5", + "orca": "github:plotly/orca#single-entry", + "pixelmatch": "^4.0.2", + "pngjs": "^3.3.3", "prepend-file": "^1.3.1", "prettysize": "1.1.0", "read-last-lines": "^1.1.0", "requirejs": "^2.3.1", + "run-parallel": "^1.1.9", "run-series": "^1.1.4", "through2": "^2.0.3", "true-case-path": "^1.0.2", diff --git a/tasks/baseline.js b/tasks/baseline.js index 2e6f666a883..53ef124633f 100644 --- a/tasks/baseline.js +++ b/tasks/baseline.js @@ -1,17 +1,5 @@ -var constants = require('./util/constants'); -var common = require('./util/common'); -var containerCommands = require('./util/container_commands'); - -var msg = [ - 'Generating baseline image(s) using build/plotly.js from', - common.getTimeLastModified(constants.pathToPlotlyBuild), - '\n' -].join(' '); - -var cmd = containerCommands.getRunCmd( - process.env.CIRCLECI, - 'node test/image/make_baseline.js ' + process.argv.slice(2).join(' ') -); - -console.log(msg); -common.execCmd(cmd); +require('./util/common').testImageWrapper({ + msg: 'baseline generation', + script: 'make_baseline.js', + args: process.argv.slice(2) +}); diff --git a/tasks/bundle.js b/tasks/bundle.js index b787c13f913..7c6586c1c14 100644 --- a/tasks/bundle.js +++ b/tasks/bundle.js @@ -51,7 +51,6 @@ tasks.push(function(cb) { standalone: 'Plotly', debug: DEV, compressAttrs: true, - packFlat: true, pathToMinBundle: constants.pathToPlotlyDistMin }, cb); }); @@ -68,7 +67,6 @@ tasks.push(function(cb) { _bundle(constants.pathToPlotlyIndex, constants.pathToPlotlyDistWithMeta, { standalone: 'Plotly', debug: DEV, - packFlat: true }, function() { makeSchema(constants.pathToPlotlyDistWithMeta, constants.pathToSchema)(); cb(); @@ -82,7 +80,6 @@ constants.partialBundlePaths.forEach(function(pathObj) { standalone: 'Plotly', debug: DEV, compressAttrs: true, - packFlat: true, pathToMinBundle: pathObj.distMin }, cb); }); diff --git a/tasks/cibundle.js b/tasks/cibundle.js index f6f88ea87a5..5a2310e2295 100644 --- a/tasks/cibundle.js +++ b/tasks/cibundle.js @@ -17,7 +17,6 @@ _bundle(constants.pathToPlotlyIndex, constants.pathToPlotlyBuild, { standalone: 'Plotly', debug: true, compressAttrs: true, - packFlat: true, pathToMinBundle: constants.pathToPlotlyDistMin }); diff --git a/tasks/docker.js b/tasks/docker.js index a767caa587c..b36d5cfda0f 100644 --- a/tasks/docker.js +++ b/tasks/docker.js @@ -1,50 +1,71 @@ var constants = require('./util/constants'); var common = require('./util/common'); -var containerCommands = require('./util/container_commands'); -var isCI = process.env.CIRCLECI; var arg = process.argv[2]; +var img = constants.testContainerImage; +var name = constants.testContainerName; +var home = constants.testContainerHome; -var msg, cmd, cb, errorCb; +var msg; +var cmd; +var errorCb; switch(arg) { - case 'pull': msg = 'Pulling latest docker image'; - cmd = 'docker pull ' + constants.testContainerImage; + cmd = 'docker pull ' + img; break; case 'run': - msg = 'Booting up ' + constants.testContainerName + ' docker container'; - cmd = containerCommands.dockerRun; + msg = 'Booting up ' + name + ' docker container'; + + cmd = [ + 'docker run -di', + '--name', name, + '--volume', constants.pathToRoot + ':' + home, + // set shared memory size as a workaround + // - https://github.com/plotly/orca/pull/50 + // - https://bugs.chromium.org/p/chromium/issues/detail?id=736452 + // - https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#tips + '--shm-size=2g', + '--volume /dev/shm:/dev/shm', + // save files as local owner + '--user `id -u`', + // override container entry point + '--entrypoint /bin/bash', + img + ].join(' '); // if docker-run fails, try docker-start. errorCb = function(err) { - if(err) common.execCmd('docker start ' + constants.testContainerName); + if(err) { + if(err.message && err.message.indexOf('already in use') !== -1) { + common.execCmd('docker start ' + name); + } + else { + console.log(err); + } + } }; break; - case 'setup': - msg = 'Setting up ' + constants.testContainerName + ' docker container for testing'; - cmd = containerCommands.getRunCmd(isCI, containerCommands.setup); - break; - case 'stop': - msg = 'Stopping ' + constants.testContainerName + ' docker container'; - cmd = 'docker stop ' + constants.testContainerName; + msg = 'Stopping ' + name + ' docker container'; + cmd = 'docker stop ' + name; break; + case 'rm': case 'remove': - msg = 'Removing ' + constants.testContainerName + ' docker container'; - cmd = 'docker rm ' + constants.testContainerName; + msg = 'Removing ' + name + ' docker container'; + cmd = 'docker rm ' + name; break; default: - console.log('Usage: pull, run, setup, stop, remove'); + console.log('Usage: pull, run, stop, remove'); process.exit(0); break; } console.log(msg); -common.execCmd(cmd, cb, errorCb); +common.execCmd(cmd, null, errorCb); diff --git a/tasks/test_export.js b/tasks/test_export.js index de08f97e7e7..feac9f03757 100644 --- a/tasks/test_export.js +++ b/tasks/test_export.js @@ -1,17 +1,5 @@ -var constants = require('./util/constants'); -var common = require('./util/common'); -var containerCommands = require('./util/container_commands'); - -var msg = [ - 'Running image export tests using build/plotly.js from', - common.getTimeLastModified(constants.pathToPlotlyBuild), - '\n' -].join(' '); - -var cmd = containerCommands.getRunCmd( - process.env.CIRCLECI, - 'node test/image/export_test.js ' + process.argv.slice(2).join(' ') -); - -console.log(msg); -common.execCmd(cmd); +require('./util/common').testImageWrapper({ + msg: 'image export test', + script: 'export_test.js', + args: process.argv.slice(2) +}); diff --git a/tasks/test_image.js b/tasks/test_image.js index 8156cabaead..640418d8690 100644 --- a/tasks/test_image.js +++ b/tasks/test_image.js @@ -1,17 +1,5 @@ -var constants = require('./util/constants'); -var common = require('./util/common'); -var containerCommands = require('./util/container_commands'); - -var msg = [ - 'Running image comparison tests using build/plotly.js from', - common.getTimeLastModified(constants.pathToPlotlyBuild), - '\n' -].join(' '); - -var cmd = containerCommands.getRunCmd( - process.env.CIRCLECI, - 'node test/image/compare_pixels_test.js ' + process.argv.slice(2).join(' ') -); - -console.log(msg); -common.execCmd(cmd); +require('./util/common').testImageWrapper({ + msg: 'image comparison test', + script: 'compare_pixels_test.js', + args: process.argv.slice(2) +}); diff --git a/tasks/util/common.js b/tasks/util/common.js index b9330febd56..50650d79392 100644 --- a/tasks/util/common.js +++ b/tasks/util/common.js @@ -1,5 +1,8 @@ var fs = require('fs'); +var path = require('path'); var exec = require('child_process').exec; +var execSync = require('child_process').execSync; +var constants = require('./constants'); exports.execCmd = function(cmd, cb, errorCb) { cb = cb ? cb : function() {}; @@ -22,8 +25,7 @@ exports.writeFile = function(filePath, content, cb) { exports.doesDirExist = function(dirPath) { try { if(fs.statSync(dirPath).isDirectory()) return true; - } - catch(e) { + } catch(e) { return false; } @@ -33,8 +35,7 @@ exports.doesDirExist = function(dirPath) { exports.doesFileExist = function(filePath) { try { if(fs.statSync(filePath).isFile()) return true; - } - catch(e) { + } catch(e) { return false; } @@ -53,8 +54,8 @@ exports.getTimeLastModified = function(filePath) { throw new Error(filePath + ' does not exist'); } - var stats = fs.statSync(filePath), - formattedTime = exports.formatTime(stats.mtime); + var stats = fs.statSync(filePath); + var formattedTime = exports.formatTime(stats.mtime); return formattedTime; }; @@ -66,3 +67,55 @@ exports.touch = function(filePath) { exports.throwOnError = function(err) { if(err) throw err; }; + +exports.testImageWrapper = function(opts) { + var isCI = process.env.CIRCLECI; + var useLocalElectron = process.env.LOCAL_ELECTRON; + var args = opts.args.join(' '); + + var msg = [ + 'Running ' + opts.msg + ' using build/plotly.js from', + exports.getTimeLastModified(constants.pathToPlotlyBuild), + '\n' + ].join(' '); + + var pathToElectron; + var pathToScript; + var cmd; + + if(useLocalElectron) { + try { + // N.B. this is what require('electron') in a node context + pathToElectron = require('electron'); + } catch(e) { + throw new Error('electron not installed locally'); + } + + pathToScript = path.join(constants.pathToImageTest, opts.script); + cmd = [pathToElectron, pathToScript, args].join(' '); + } else { + pathToElectron = path.join(constants.testContainerHome, '..', 'node_modules', '.bin', 'electron'); + pathToScript = path.join(constants.testContainerHome, 'test', 'image', opts.script); + + var baseCmd = [ + 'xvfb-run --auto-servernum', + '--server-args \'-screen 0, 1024x768x24\'', + pathToElectron, pathToScript, args + ].join(' '); + + if(isCI) { + cmd = baseCmd; + } else { + cmd = [ + 'docker exec -i', constants.testContainerName, + '/bin/bash -c', + '"' + baseCmd + '"' + ].join(' '); + } + } + + console.log(msg); + if(process.env.DEBUG) console.log('\n' + cmd); + + execSync(cmd, {stdio: [0, 1, 2]}); +}; diff --git a/tasks/util/constants.js b/tasks/util/constants.js index 20fa44fd695..47d71ca7095 100644 --- a/tasks/util/constants.js +++ b/tasks/util/constants.js @@ -51,6 +51,7 @@ module.exports = { pathToTopojsonDist: path.join(pathToDist, 'topojson/'), pathToPlotlyGeoAssetsSrc: path.join(pathToSrc, 'assets/geo_assets.js'), pathToPlotlyGeoAssetsDist: path.join(pathToDist, 'plotly-geo-assets.js'), + pathToMathJax: path.join(pathToDist, 'extras', 'mathjax', 'MathJax.js'), pathToFontSVG: path.join(pathToSrc, 'fonts/ploticon/ploticon.svg'), pathToFontSVGBuild: path.join(pathToBuild, 'ploticon.js'), @@ -78,11 +79,9 @@ module.exports = { mapboxAccessToken: 'pk.eyJ1IjoiZXRwaW5hcmQiLCJhIjoiY2luMHIzdHE0MGFxNXVubTRxczZ2YmUxaCJ9.hwWZful0U2CQxit4ItNsiQ', pathToCredentials: path.join(pathToBuild, 'credentials.json'), - testContainerImage: 'plotly/testbed:latest', - testContainerName: process.env.PLOTLYJS_TEST_CONTAINER_NAME || 'imagetest', - testContainerPort: '9010', - testContainerUrl: 'http://localhost:9010/', - testContainerHome: '/var/www/streambed/image_server/plotly.js', + testContainerImage: 'quay.io/plotly/image-exporter:single-entry', + testContainerName: process.env.PLOTLYJS_TEST_CONTAINER_NAME || 'orcabed', + testContainerHome: '/var/www/image-exporter/plotly.js', uglifyOptions: { mangle: true, diff --git a/tasks/util/container_commands.js b/tasks/util/container_commands.js deleted file mode 100644 index 8a6200ccf77..00000000000 --- a/tasks/util/container_commands.js +++ /dev/null @@ -1,66 +0,0 @@ -var constants = require('./constants'); - -var containerCommands = { - cdHome: 'cd ' + constants.testContainerHome, - cpIndex: 'cp -f test/image/index.html ../server_app/index.html', - injectEnv: [ - 'sed -i', - 's/process.env.PLOTLY_MAPBOX_DEFAULT_ACCESS_TOKEN/\\\'' + constants.mapboxAccessToken + '\\\'/', - '../server_app/main.js' - ].join(' '), - restart: 'supervisorctl restart nw1' -}; - -containerCommands.ping = [ - 'wget', - '--server-response --spider --tries=20 --retry-connrefused', - constants.testContainerUrl + 'ping' -].join(' '); - -containerCommands.setup = [ - containerCommands.cpIndex, - containerCommands.injectEnv, - containerCommands.restart, - containerCommands.ping, - 'sleep 5' -].join(' && '); - -containerCommands.dockerRun = [ - 'docker run -d', - '--name', constants.testContainerName, - '-v', constants.pathToRoot + ':' + constants.testContainerHome, - '-p', constants.testContainerPort + ':' + constants.testContainerPort, - constants.testContainerImage -].join(' '); - -containerCommands.getRunCmd = function(isCI, commands) { - var _commands = Array.isArray(commands) ? commands.slice() : [commands]; - var cmd; - - if(isCI) { - _commands = [containerCommands.ping].concat(_commands); - cmd = getRunCI(_commands); - } else { - _commands = [containerCommands.setup].concat(_commands); - cmd = getRunLocal(_commands); - } - - return cmd; -}; - -function getRunLocal(commands) { - commands = [containerCommands.cdHome].concat(commands); - return [ - 'docker exec -i', - constants.testContainerName, - '/bin/bash -c', - '"' + commands.join(' && ') + '"' - ].join(' '); -} - -function getRunCI(commands) { - commands = [containerCommands.cdHome].concat(commands); - return commands.join(' && '); -} - -module.exports = containerCommands; diff --git a/test/image/assets/get_image_paths.js b/test/image/assets/get_image_paths.js index 915bce2c2c0..0b5d0513a04 100644 --- a/test/image/assets/get_image_paths.js +++ b/test/image/assets/get_image_paths.js @@ -1,23 +1,23 @@ var path = require('path'); var constants = require('../../../tasks/util/constants'); - var DEFAULT_FORMAT = 'png'; - /** * Return paths to baseline, test-image and diff images for a given mock name. * * @param {string} mockName * @param {string} format * @return {object} - * baseline - * test - * diff + * mock + * baseline + * test + * diff */ module.exports = function getImagePaths(mockName, format) { format = format || DEFAULT_FORMAT; return { + mock: join(constants.pathToTestImageMocks, mockName, 'json'), baseline: join(constants.pathToTestImageBaselines, mockName, format), test: join(constants.pathToTestImages, mockName, format), diff: join(constants.pathToTestImagesDiff, 'diff-' + mockName, format) diff --git a/test/image/assets/get_mock_list.js b/test/image/assets/get_mock_list.js index e0f4b39a147..71bb3420d5a 100644 --- a/test/image/assets/get_mock_list.js +++ b/test/image/assets/get_mock_list.js @@ -3,21 +3,28 @@ var glob = require('glob'); var constants = require('../../../tasks/util/constants'); - /** * Return array of mock name corresponding to input glob pattern * - * @param {string} pattern + * @param {array} _ : argv._ from minimist * @return {array} */ -module.exports = function getMocks(pattern) { - // defaults to 'all' - pattern = pattern || '*'; +module.exports = function getMockList(_) { + if(_.length === 0) { + return fromPattern('*'); + } else { + return _ + .map(String) + .map(fromPattern) + .reduce(function(a, b) { return a.concat(b); }); + } +}; +function fromPattern(pattern) { // defaults to '.json' ext is none is provided if(path.extname(pattern) === '') pattern += '.json'; - var patternFull = constants.pathToTestImageMocks + '/' + pattern; + var patternFull = path.join(constants.pathToTestImageMocks, pattern); var matches = glob.sync(patternFull); // return only the mock name (not a full path, no ext) @@ -26,4 +33,4 @@ module.exports = function getMocks(pattern) { }); return mockNames; -}; +} diff --git a/test/image/assets/run.js b/test/image/assets/run.js new file mode 100644 index 00000000000..8b24f07dd05 --- /dev/null +++ b/test/image/assets/run.js @@ -0,0 +1,71 @@ +var orca = require('orca/src'); +var constants = require('../../../tasks/util/constants'); + +function run(mockList, input, argv, write) { + argv = argv || {}; + + if(!Array.isArray(mockList) || mockList.length === 0) { + errorOut('Empty mockList list'); + } + if(!Array.isArray(input) || input.length === 0) { + errorOut('Empty input list'); + } + if(mockList.length !== input.length) { + errorOut('mockList and input must have same length'); + } + + var app = orca.run({ + input: input, + write: function(info, _, done) { write(info, done); }, + parallelLimit: argv.queue ? 1 : argv['parallel-limit'], + debug: process.env.DEBUG, + component: { + name: 'plotly-graph', + options: { + plotlyJS: constants.pathToPlotlyBuild, + mapboxAccessToken: constants.mapboxAccessToken, + mathjax: constants.pathToMathJax, + topojson: constants.pathToPlotlyGeoAssetsDist + } + } + }); + + var failed = []; + + app.on('after-export', function(info) { + var mockName = mockList[info.itemIndex]; + console.log('ok ' + mockName); + }); + + app.on('export-error', function(info) { + var mockName = mockList[info.itemIndex]; + + var msg = 'not ok ' + mockName + ' - ' + info.msg; + if(info.error) msg += ' ' + info.error; + + console.warn(msg); + failed.push(msg); + }); + + app.on('renderer-error', function(info) { + console.warn('renderer error: ' + info.msg); + console.warn(info.error); + }); + + app.on('after-export-all', function(info) { + if(info.code === 1) { + console.log('\nFailed test(s):'); + console.log(failed.join('\n')); + } + process.exit(info.code); + }); + + return app; +} + +function errorOut(msg) { + console.error(msg); + process.exit(1); +} + +module.exports = run; diff --git a/test/image/baselines/0.png b/test/image/baselines/0.png index 9d6c91ac31a..321b19371e1 100644 Binary files a/test/image/baselines/0.png and b/test/image/baselines/0.png differ diff --git a/test/image/baselines/1.png b/test/image/baselines/1.png index eb01e3dfafc..4fe98665b80 100644 Binary files a/test/image/baselines/1.png and b/test/image/baselines/1.png differ diff --git a/test/image/baselines/10.png b/test/image/baselines/10.png index 475b193bcb5..554b434a340 100644 Binary files a/test/image/baselines/10.png and b/test/image/baselines/10.png differ diff --git a/test/image/baselines/11.png b/test/image/baselines/11.png index 0b5e7486d53..89ab406d351 100644 Binary files a/test/image/baselines/11.png and b/test/image/baselines/11.png differ diff --git a/test/image/baselines/12.png b/test/image/baselines/12.png index 4b81dee9a6c..ed4c287df7d 100644 Binary files a/test/image/baselines/12.png and b/test/image/baselines/12.png differ diff --git a/test/image/baselines/13.png b/test/image/baselines/13.png index 2d1b1652ef5..1e1a52d1b52 100644 Binary files a/test/image/baselines/13.png and b/test/image/baselines/13.png differ diff --git a/test/image/baselines/14.png b/test/image/baselines/14.png index bcea17520b0..6ad6abbb823 100644 Binary files a/test/image/baselines/14.png and b/test/image/baselines/14.png differ diff --git a/test/image/baselines/15.png b/test/image/baselines/15.png index cb368944185..cb71bf22ecd 100644 Binary files a/test/image/baselines/15.png and b/test/image/baselines/15.png differ diff --git a/test/image/baselines/16.png b/test/image/baselines/16.png index cfa602db6b7..9fb3deb300c 100644 Binary files a/test/image/baselines/16.png and b/test/image/baselines/16.png differ diff --git a/test/image/baselines/17.png b/test/image/baselines/17.png index e9292065669..3e5becd21db 100644 Binary files a/test/image/baselines/17.png and b/test/image/baselines/17.png differ diff --git a/test/image/baselines/18.png b/test/image/baselines/18.png index 478c7f21823..62ce02b8876 100644 Binary files a/test/image/baselines/18.png and b/test/image/baselines/18.png differ diff --git a/test/image/baselines/19.png b/test/image/baselines/19.png index fc65db8d341..a9364a1227c 100644 Binary files a/test/image/baselines/19.png and b/test/image/baselines/19.png differ diff --git a/test/image/baselines/20.png b/test/image/baselines/20.png index 2e8b83f7def..e5ee39eaece 100644 Binary files a/test/image/baselines/20.png and b/test/image/baselines/20.png differ diff --git a/test/image/baselines/21.png b/test/image/baselines/21.png index e17d6d60c2c..788bdb03058 100644 Binary files a/test/image/baselines/21.png and b/test/image/baselines/21.png differ diff --git a/test/image/baselines/22.png b/test/image/baselines/22.png index fa84aea1e82..c5130582016 100644 Binary files a/test/image/baselines/22.png and b/test/image/baselines/22.png differ diff --git a/test/image/baselines/23.png b/test/image/baselines/23.png index 6a4223e6b18..2a1987b60bd 100644 Binary files a/test/image/baselines/23.png and b/test/image/baselines/23.png differ diff --git a/test/image/baselines/24.png b/test/image/baselines/24.png index 5f5ef817bc6..53872d3ee8d 100644 Binary files a/test/image/baselines/24.png and b/test/image/baselines/24.png differ diff --git a/test/image/baselines/25.png b/test/image/baselines/25.png index 5008e9ea872..2cedb4ef9d7 100644 Binary files a/test/image/baselines/25.png and b/test/image/baselines/25.png differ diff --git a/test/image/baselines/26.png b/test/image/baselines/26.png index 77374918c3f..9308c9f0a76 100644 Binary files a/test/image/baselines/26.png and b/test/image/baselines/26.png differ diff --git a/test/image/baselines/27.png b/test/image/baselines/27.png index 5ae3813e461..6be65998d4a 100644 Binary files a/test/image/baselines/27.png and b/test/image/baselines/27.png differ diff --git a/test/image/baselines/28.png b/test/image/baselines/28.png index 5c6e382b07e..1e17f0c40a8 100644 Binary files a/test/image/baselines/28.png and b/test/image/baselines/28.png differ diff --git a/test/image/baselines/29.png b/test/image/baselines/29.png index a05d30b307f..e5962dc7fc7 100644 Binary files a/test/image/baselines/29.png and b/test/image/baselines/29.png differ diff --git a/test/image/baselines/2dhistogram_contour_subplots.png b/test/image/baselines/2dhistogram_contour_subplots.png index 61dbea133e2..00493ee3778 100644 Binary files a/test/image/baselines/2dhistogram_contour_subplots.png and b/test/image/baselines/2dhistogram_contour_subplots.png differ diff --git a/test/image/baselines/30.png b/test/image/baselines/30.png index 94dda21ced6..b805642a676 100644 Binary files a/test/image/baselines/30.png and b/test/image/baselines/30.png differ diff --git a/test/image/baselines/31.png b/test/image/baselines/31.png index 1b4de09c01c..e4aaabcfc22 100644 Binary files a/test/image/baselines/31.png and b/test/image/baselines/31.png differ diff --git a/test/image/baselines/32.png b/test/image/baselines/32.png index 4602377412d..78c6fdf29e9 100644 Binary files a/test/image/baselines/32.png and b/test/image/baselines/32.png differ diff --git a/test/image/baselines/4.png b/test/image/baselines/4.png index d98ff4cd002..5808a16a318 100644 Binary files a/test/image/baselines/4.png and b/test/image/baselines/4.png differ diff --git a/test/image/baselines/5.png b/test/image/baselines/5.png index 6d0396fb097..f3a1cc76c25 100644 Binary files a/test/image/baselines/5.png and b/test/image/baselines/5.png differ diff --git a/test/image/baselines/6.png b/test/image/baselines/6.png index e05e5738fa5..442575fa969 100644 Binary files a/test/image/baselines/6.png and b/test/image/baselines/6.png differ diff --git a/test/image/baselines/7.png b/test/image/baselines/7.png index f223320669d..ceef40aa959 100644 Binary files a/test/image/baselines/7.png and b/test/image/baselines/7.png differ diff --git a/test/image/baselines/8.png b/test/image/baselines/8.png index 42556fb16e4..aafd349aeec 100644 Binary files a/test/image/baselines/8.png and b/test/image/baselines/8.png differ diff --git a/test/image/baselines/airfoil.png b/test/image/baselines/airfoil.png index 562ffa99d90..7cbab924a41 100644 Binary files a/test/image/baselines/airfoil.png and b/test/image/baselines/airfoil.png differ diff --git a/test/image/baselines/animation.png b/test/image/baselines/animation.png index 91bda9d9621..d0b468bbc89 100644 Binary files a/test/image/baselines/animation.png and b/test/image/baselines/animation.png differ diff --git a/test/image/baselines/annotations-autorange.png b/test/image/baselines/annotations-autorange.png index d1fb548a0fe..841a5a65b11 100644 Binary files a/test/image/baselines/annotations-autorange.png and b/test/image/baselines/annotations-autorange.png differ diff --git a/test/image/baselines/annotations.png b/test/image/baselines/annotations.png index 4a349f6df12..9ecdc9911a0 100644 Binary files a/test/image/baselines/annotations.png and b/test/image/baselines/annotations.png differ diff --git a/test/image/baselines/autorange-tozero-rangemode.png b/test/image/baselines/autorange-tozero-rangemode.png index 8f52a059a31..5c8357f54d3 100644 Binary files a/test/image/baselines/autorange-tozero-rangemode.png and b/test/image/baselines/autorange-tozero-rangemode.png differ diff --git a/test/image/baselines/axes-autotype-empty.png b/test/image/baselines/axes-autotype-empty.png index 3ab891cb10a..a0f68a7b46f 100644 Binary files a/test/image/baselines/axes-autotype-empty.png and b/test/image/baselines/axes-autotype-empty.png differ diff --git a/test/image/baselines/axes-ticks.png b/test/image/baselines/axes-ticks.png index cb7a83c6a8f..12302e0b03b 100644 Binary files a/test/image/baselines/axes-ticks.png and b/test/image/baselines/axes-ticks.png differ diff --git a/test/image/baselines/axes_booleans.png b/test/image/baselines/axes_booleans.png index a286547a420..ad5ebd45d02 100644 Binary files a/test/image/baselines/axes_booleans.png and b/test/image/baselines/axes_booleans.png differ diff --git a/test/image/baselines/axes_category_ascending.png b/test/image/baselines/axes_category_ascending.png index f65f8ef73d4..95057c1406f 100644 Binary files a/test/image/baselines/axes_category_ascending.png and b/test/image/baselines/axes_category_ascending.png differ diff --git a/test/image/baselines/axes_category_categoryarray.png b/test/image/baselines/axes_category_categoryarray.png index 105b0baa2a2..5e03dce65a3 100644 Binary files a/test/image/baselines/axes_category_categoryarray.png and b/test/image/baselines/axes_category_categoryarray.png differ diff --git a/test/image/baselines/axes_category_categoryarray_truncated_tails.png b/test/image/baselines/axes_category_categoryarray_truncated_tails.png index ef9c917505c..22d3c7d824e 100644 Binary files a/test/image/baselines/axes_category_categoryarray_truncated_tails.png and b/test/image/baselines/axes_category_categoryarray_truncated_tails.png differ diff --git a/test/image/baselines/axes_category_descending.png b/test/image/baselines/axes_category_descending.png index 9aaa43edaaa..373f86f28db 100644 Binary files a/test/image/baselines/axes_category_descending.png and b/test/image/baselines/axes_category_descending.png differ diff --git a/test/image/baselines/axes_category_descending_with_gaps.png b/test/image/baselines/axes_category_descending_with_gaps.png index 191b91b7995..aecea8fcaf6 100644 Binary files a/test/image/baselines/axes_category_descending_with_gaps.png and b/test/image/baselines/axes_category_descending_with_gaps.png differ diff --git a/test/image/baselines/axes_category_null.png b/test/image/baselines/axes_category_null.png index fccc962bf5c..58ab357bc41 100644 Binary files a/test/image/baselines/axes_category_null.png and b/test/image/baselines/axes_category_null.png differ diff --git a/test/image/baselines/axes_enumerated_ticks.png b/test/image/baselines/axes_enumerated_ticks.png index 5e2dad1405e..539c6edb354 100644 Binary files a/test/image/baselines/axes_enumerated_ticks.png and b/test/image/baselines/axes_enumerated_ticks.png differ diff --git a/test/image/baselines/axes_free_default.png b/test/image/baselines/axes_free_default.png index 7b6c66e521b..a18ae10ca5f 100644 Binary files a/test/image/baselines/axes_free_default.png and b/test/image/baselines/axes_free_default.png differ diff --git a/test/image/baselines/axes_labels.png b/test/image/baselines/axes_labels.png index e21752587cc..25b4cfacc54 100644 Binary files a/test/image/baselines/axes_labels.png and b/test/image/baselines/axes_labels.png differ diff --git a/test/image/baselines/axes_line_noticklabels.png b/test/image/baselines/axes_line_noticklabels.png index 20ca059a88c..bec5e4fb1d9 100644 Binary files a/test/image/baselines/axes_line_noticklabels.png and b/test/image/baselines/axes_line_noticklabels.png differ diff --git a/test/image/baselines/axes_lines.png b/test/image/baselines/axes_lines.png index aa570e3aead..7506da50b92 100644 Binary files a/test/image/baselines/axes_lines.png and b/test/image/baselines/axes_lines.png differ diff --git a/test/image/baselines/axes_range_manual.png b/test/image/baselines/axes_range_manual.png index 9ebce9e1f7c..000ce35b257 100644 Binary files a/test/image/baselines/axes_range_manual.png and b/test/image/baselines/axes_range_manual.png differ diff --git a/test/image/baselines/axes_range_mode.png b/test/image/baselines/axes_range_mode.png index 927bd5e1a57..69aca739c50 100644 Binary files a/test/image/baselines/axes_range_mode.png and b/test/image/baselines/axes_range_mode.png differ diff --git a/test/image/baselines/axes_range_type.png b/test/image/baselines/axes_range_type.png index de4d196f356..cb77640c0fc 100644 Binary files a/test/image/baselines/axes_range_type.png and b/test/image/baselines/axes_range_type.png differ diff --git a/test/image/baselines/axes_reversed.png b/test/image/baselines/axes_reversed.png index 6c777c6ad60..12c989035ad 100644 Binary files a/test/image/baselines/axes_reversed.png and b/test/image/baselines/axes_reversed.png differ diff --git a/test/image/baselines/axes_scaleanchor.png b/test/image/baselines/axes_scaleanchor.png index 48c55dba35f..bee750236f6 100644 Binary files a/test/image/baselines/axes_scaleanchor.png and b/test/image/baselines/axes_scaleanchor.png differ diff --git a/test/image/baselines/axes_visible-false.png b/test/image/baselines/axes_visible-false.png index 3f12542a06e..05b6b2fee7f 100644 Binary files a/test/image/baselines/axes_visible-false.png and b/test/image/baselines/axes_visible-false.png differ diff --git a/test/image/baselines/axislabel_separatethousands.png b/test/image/baselines/axislabel_separatethousands.png index 64e60032333..007f6fef13c 100644 Binary files a/test/image/baselines/axislabel_separatethousands.png and b/test/image/baselines/axislabel_separatethousands.png differ diff --git a/test/image/baselines/bar-colorscale-colorbar.png b/test/image/baselines/bar-colorscale-colorbar.png index 371fcece1a2..9fc36a68313 100644 Binary files a/test/image/baselines/bar-colorscale-colorbar.png and b/test/image/baselines/bar-colorscale-colorbar.png differ diff --git a/test/image/baselines/bar-marker-line-colorscales.png b/test/image/baselines/bar-marker-line-colorscales.png index 50b1bc8520f..8cab0298f9f 100644 Binary files a/test/image/baselines/bar-marker-line-colorscales.png and b/test/image/baselines/bar-marker-line-colorscales.png differ diff --git a/test/image/baselines/bar_and_histogram.png b/test/image/baselines/bar_and_histogram.png index 99bd2626b13..8aa0a5ede3c 100644 Binary files a/test/image/baselines/bar_and_histogram.png and b/test/image/baselines/bar_and_histogram.png differ diff --git a/test/image/baselines/bar_attrs_group.png b/test/image/baselines/bar_attrs_group.png index 70303cdec40..b1c7be15044 100644 Binary files a/test/image/baselines/bar_attrs_group.png and b/test/image/baselines/bar_attrs_group.png differ diff --git a/test/image/baselines/bar_attrs_group_norm.png b/test/image/baselines/bar_attrs_group_norm.png index ceb86e17b82..4dfdfdf1233 100644 Binary files a/test/image/baselines/bar_attrs_group_norm.png and b/test/image/baselines/bar_attrs_group_norm.png differ diff --git a/test/image/baselines/bar_attrs_overlay.png b/test/image/baselines/bar_attrs_overlay.png index 63e845af88a..07877902b71 100644 Binary files a/test/image/baselines/bar_attrs_overlay.png and b/test/image/baselines/bar_attrs_overlay.png differ diff --git a/test/image/baselines/bar_attrs_relative.png b/test/image/baselines/bar_attrs_relative.png index a190cfc7e23..9478851bbd3 100644 Binary files a/test/image/baselines/bar_attrs_relative.png and b/test/image/baselines/bar_attrs_relative.png differ diff --git a/test/image/baselines/bar_bargap0.png b/test/image/baselines/bar_bargap0.png index cb28738e50c..aa2d039b1ea 100644 Binary files a/test/image/baselines/bar_bargap0.png and b/test/image/baselines/bar_bargap0.png differ diff --git a/test/image/baselines/bar_cliponaxis-false.png b/test/image/baselines/bar_cliponaxis-false.png index a6c0cfefd0c..5120e77c749 100644 Binary files a/test/image/baselines/bar_cliponaxis-false.png and b/test/image/baselines/bar_cliponaxis-false.png differ diff --git a/test/image/baselines/bar_group_percent.png b/test/image/baselines/bar_group_percent.png index add38a4d52d..0181159a811 100644 Binary files a/test/image/baselines/bar_group_percent.png and b/test/image/baselines/bar_group_percent.png differ diff --git a/test/image/baselines/bar_line.png b/test/image/baselines/bar_line.png index 8d37e62a736..b83069fa727 100644 Binary files a/test/image/baselines/bar_line.png and b/test/image/baselines/bar_line.png differ diff --git a/test/image/baselines/bar_marker_array.png b/test/image/baselines/bar_marker_array.png index 747544a2d48..d8a1c8427f7 100644 Binary files a/test/image/baselines/bar_marker_array.png and b/test/image/baselines/bar_marker_array.png differ diff --git a/test/image/baselines/bar_multiline_labels.png b/test/image/baselines/bar_multiline_labels.png index 7788b298bd8..9d62d25f22d 100644 Binary files a/test/image/baselines/bar_multiline_labels.png and b/test/image/baselines/bar_multiline_labels.png differ diff --git a/test/image/baselines/bar_nonnumeric_sizes.png b/test/image/baselines/bar_nonnumeric_sizes.png index 6f05e329e1e..972bb994741 100644 Binary files a/test/image/baselines/bar_nonnumeric_sizes.png and b/test/image/baselines/bar_nonnumeric_sizes.png differ diff --git a/test/image/baselines/bar_stack-with-gaps.png b/test/image/baselines/bar_stack-with-gaps.png index 61540bddb7e..ffbd32856c2 100644 Binary files a/test/image/baselines/bar_stack-with-gaps.png and b/test/image/baselines/bar_stack-with-gaps.png differ diff --git a/test/image/baselines/bar_stackrelative_negative.png b/test/image/baselines/bar_stackrelative_negative.png index add20b5908e..64bc84427c9 100644 Binary files a/test/image/baselines/bar_stackrelative_negative.png and b/test/image/baselines/bar_stackrelative_negative.png differ diff --git a/test/image/baselines/bar_stackrelativeto100_negative.png b/test/image/baselines/bar_stackrelativeto100_negative.png index 34f97dd0325..34668defb36 100644 Binary files a/test/image/baselines/bar_stackrelativeto100_negative.png and b/test/image/baselines/bar_stackrelativeto100_negative.png differ diff --git a/test/image/baselines/bar_stackto1.png b/test/image/baselines/bar_stackto1.png index 530075b3c60..c7c8a6be012 100644 Binary files a/test/image/baselines/bar_stackto1.png and b/test/image/baselines/bar_stackto1.png differ diff --git a/test/image/baselines/bar_stackto100_negative.png b/test/image/baselines/bar_stackto100_negative.png index a249725ac64..9fa6c1f0759 100644 Binary files a/test/image/baselines/bar_stackto100_negative.png and b/test/image/baselines/bar_stackto100_negative.png differ diff --git a/test/image/baselines/basic_area.png b/test/image/baselines/basic_area.png index f1f3a909e47..bfe5bbca58b 100644 Binary files a/test/image/baselines/basic_area.png and b/test/image/baselines/basic_area.png differ diff --git a/test/image/baselines/basic_bar.png b/test/image/baselines/basic_bar.png index f73d9bd7a35..fcb9c7cb58c 100644 Binary files a/test/image/baselines/basic_bar.png and b/test/image/baselines/basic_bar.png differ diff --git a/test/image/baselines/basic_error_bar.png b/test/image/baselines/basic_error_bar.png index 9fdd47203ed..d3fe0ded5c8 100644 Binary files a/test/image/baselines/basic_error_bar.png and b/test/image/baselines/basic_error_bar.png differ diff --git a/test/image/baselines/basic_heatmap.png b/test/image/baselines/basic_heatmap.png index 6715d951437..a4141bb2cf5 100644 Binary files a/test/image/baselines/basic_heatmap.png and b/test/image/baselines/basic_heatmap.png differ diff --git a/test/image/baselines/basic_line.png b/test/image/baselines/basic_line.png index 67dd2909f09..65aa16bea63 100644 Binary files a/test/image/baselines/basic_line.png and b/test/image/baselines/basic_line.png differ diff --git a/test/image/baselines/benchmarks.png b/test/image/baselines/benchmarks.png index c2186f5ed1f..9bbf04e6b29 100644 Binary files a/test/image/baselines/benchmarks.png and b/test/image/baselines/benchmarks.png differ diff --git a/test/image/baselines/binding.png b/test/image/baselines/binding.png index aaef2610968..327322a13ac 100644 Binary files a/test/image/baselines/binding.png and b/test/image/baselines/binding.png differ diff --git a/test/image/baselines/blackbody_heatmap.png b/test/image/baselines/blackbody_heatmap.png index 956f431f8a0..9571a0616df 100644 Binary files a/test/image/baselines/blackbody_heatmap.png and b/test/image/baselines/blackbody_heatmap.png differ diff --git a/test/image/baselines/bluered_heatmap.png b/test/image/baselines/bluered_heatmap.png index 3b3eb50ec02..83fa83a9b15 100644 Binary files a/test/image/baselines/bluered_heatmap.png and b/test/image/baselines/bluered_heatmap.png differ diff --git a/test/image/baselines/box_grouped.png b/test/image/baselines/box_grouped.png index fc7cf632651..d0da123d311 100644 Binary files a/test/image/baselines/box_grouped.png and b/test/image/baselines/box_grouped.png differ diff --git a/test/image/baselines/box_grouped_horz.png b/test/image/baselines/box_grouped_horz.png index 4c55500cd07..90e1480d8b2 100644 Binary files a/test/image/baselines/box_grouped_horz.png and b/test/image/baselines/box_grouped_horz.png differ diff --git a/test/image/baselines/box_horz_notched.png b/test/image/baselines/box_horz_notched.png index b611698da7f..f5b94e4e350 100644 Binary files a/test/image/baselines/box_horz_notched.png and b/test/image/baselines/box_horz_notched.png differ diff --git a/test/image/baselines/box_notched.png b/test/image/baselines/box_notched.png index fbb63c19c2d..3bc5c23f4e7 100644 Binary files a/test/image/baselines/box_notched.png and b/test/image/baselines/box_notched.png differ diff --git a/test/image/baselines/box_plot_jitter.png b/test/image/baselines/box_plot_jitter.png index e292fc302f6..152fd33e1ad 100644 Binary files a/test/image/baselines/box_plot_jitter.png and b/test/image/baselines/box_plot_jitter.png differ diff --git a/test/image/baselines/box_plot_jitter_edge_cases.png b/test/image/baselines/box_plot_jitter_edge_cases.png index b1fd5f70202..285971a1097 100644 Binary files a/test/image/baselines/box_plot_jitter_edge_cases.png and b/test/image/baselines/box_plot_jitter_edge_cases.png differ diff --git a/test/image/baselines/box_with-empty-1st-trace.png b/test/image/baselines/box_with-empty-1st-trace.png index aaee8d92a53..ec0761713d5 100644 Binary files a/test/image/baselines/box_with-empty-1st-trace.png and b/test/image/baselines/box_with-empty-1st-trace.png differ diff --git a/test/image/baselines/boxplots_outliercolordflt.png b/test/image/baselines/boxplots_outliercolordflt.png index d1955a92101..ecc9fbdcb71 100644 Binary files a/test/image/baselines/boxplots_outliercolordflt.png and b/test/image/baselines/boxplots_outliercolordflt.png differ diff --git a/test/image/baselines/boxplots_undefined_vals.png b/test/image/baselines/boxplots_undefined_vals.png index b08fe661243..391403ef906 100644 Binary files a/test/image/baselines/boxplots_undefined_vals.png and b/test/image/baselines/boxplots_undefined_vals.png differ diff --git a/test/image/baselines/bubble_markersize0.png b/test/image/baselines/bubble_markersize0.png index 7b0c62949d4..de38ede6115 100644 Binary files a/test/image/baselines/bubble_markersize0.png and b/test/image/baselines/bubble_markersize0.png differ diff --git a/test/image/baselines/bubble_nonnumeric-sizes.png b/test/image/baselines/bubble_nonnumeric-sizes.png index 2520fc37ac4..ec459f6eae1 100644 Binary files a/test/image/baselines/bubble_nonnumeric-sizes.png and b/test/image/baselines/bubble_nonnumeric-sizes.png differ diff --git a/test/image/baselines/bubblechart.png b/test/image/baselines/bubblechart.png index e32d0764bf6..0946335f8ef 100644 Binary files a/test/image/baselines/bubblechart.png and b/test/image/baselines/bubblechart.png differ diff --git a/test/image/baselines/candlestick_double-y-axis.png b/test/image/baselines/candlestick_double-y-axis.png index 7db85e0a0c8..e26828f732d 100644 Binary files a/test/image/baselines/candlestick_double-y-axis.png and b/test/image/baselines/candlestick_double-y-axis.png differ diff --git a/test/image/baselines/candlestick_rangeslider_thai.png b/test/image/baselines/candlestick_rangeslider_thai.png index 901883613cd..210113425d3 100644 Binary files a/test/image/baselines/candlestick_rangeslider_thai.png and b/test/image/baselines/candlestick_rangeslider_thai.png differ diff --git a/test/image/baselines/carpet_axis.png b/test/image/baselines/carpet_axis.png index 33d691330b9..374fb8d9b00 100644 Binary files a/test/image/baselines/carpet_axis.png and b/test/image/baselines/carpet_axis.png differ diff --git a/test/image/baselines/category-autorange.png b/test/image/baselines/category-autorange.png index 078844e735e..5f74522a285 100644 Binary files a/test/image/baselines/category-autorange.png and b/test/image/baselines/category-autorange.png differ diff --git a/test/image/baselines/category_dtick_3.png b/test/image/baselines/category_dtick_3.png index 7581a6c2dc6..471baec6f4b 100644 Binary files a/test/image/baselines/category_dtick_3.png and b/test/image/baselines/category_dtick_3.png differ diff --git a/test/image/baselines/cheater.png b/test/image/baselines/cheater.png index aa6517788ec..b9cb4cc298d 100644 Binary files a/test/image/baselines/cheater.png and b/test/image/baselines/cheater.png differ diff --git a/test/image/baselines/cheater_constraint_greater_than.png b/test/image/baselines/cheater_constraint_greater_than.png index c35f2d3af9f..074d86aa031 100644 Binary files a/test/image/baselines/cheater_constraint_greater_than.png and b/test/image/baselines/cheater_constraint_greater_than.png differ diff --git a/test/image/baselines/cheater_constraint_greater_than_with_hill.png b/test/image/baselines/cheater_constraint_greater_than_with_hill.png index 426283f854b..28f5cd67a79 100644 Binary files a/test/image/baselines/cheater_constraint_greater_than_with_hill.png and b/test/image/baselines/cheater_constraint_greater_than_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_greater_than_with_valley.png b/test/image/baselines/cheater_constraint_greater_than_with_valley.png index 7197ebbf6d7..baf24b91942 100644 Binary files a/test/image/baselines/cheater_constraint_greater_than_with_valley.png and b/test/image/baselines/cheater_constraint_greater_than_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range.png b/test/image/baselines/cheater_constraint_inner_range.png index 573373e14f2..3eb2fe5d48e 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range.png and b/test/image/baselines/cheater_constraint_inner_range.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_hi_top.png b/test/image/baselines/cheater_constraint_inner_range_hi_top.png index a1f0585bf51..10721db7f31 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_hi_top.png and b/test/image/baselines/cheater_constraint_inner_range_hi_top.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_hi_top_with_hill.png b/test/image/baselines/cheater_constraint_inner_range_hi_top_with_hill.png index 96da7d662ad..7829f03b226 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_hi_top_with_hill.png and b/test/image/baselines/cheater_constraint_inner_range_hi_top_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_hi_top_with_valley.png b/test/image/baselines/cheater_constraint_inner_range_hi_top_with_valley.png index 7fae0f999e9..05046166577 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_hi_top_with_valley.png and b/test/image/baselines/cheater_constraint_inner_range_hi_top_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_lo_top.png b/test/image/baselines/cheater_constraint_inner_range_lo_top.png index abca06004c2..2a035e3956d 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_lo_top.png and b/test/image/baselines/cheater_constraint_inner_range_lo_top.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_lo_top_with_hill.png b/test/image/baselines/cheater_constraint_inner_range_lo_top_with_hill.png index b6d665a2958..9304acfce02 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_lo_top_with_hill.png and b/test/image/baselines/cheater_constraint_inner_range_lo_top_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_lo_top_with_valley.png b/test/image/baselines/cheater_constraint_inner_range_lo_top_with_valley.png index c80f57624bf..0059f407185 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_lo_top_with_valley.png and b/test/image/baselines/cheater_constraint_inner_range_lo_top_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_with_hill.png b/test/image/baselines/cheater_constraint_inner_range_with_hill.png index 1926275efdb..0c209e61f9e 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_with_hill.png and b/test/image/baselines/cheater_constraint_inner_range_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_inner_range_with_valley.png b/test/image/baselines/cheater_constraint_inner_range_with_valley.png index e624bd7d7e2..f53f40adaad 100644 Binary files a/test/image/baselines/cheater_constraint_inner_range_with_valley.png and b/test/image/baselines/cheater_constraint_inner_range_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_less_than.png b/test/image/baselines/cheater_constraint_less_than.png index 9b31ca23f71..482631806bd 100644 Binary files a/test/image/baselines/cheater_constraint_less_than.png and b/test/image/baselines/cheater_constraint_less_than.png differ diff --git a/test/image/baselines/cheater_constraint_less_than_with_hill.png b/test/image/baselines/cheater_constraint_less_than_with_hill.png index d132642f1be..8d5aa76c769 100644 Binary files a/test/image/baselines/cheater_constraint_less_than_with_hill.png and b/test/image/baselines/cheater_constraint_less_than_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_less_than_with_valley.png b/test/image/baselines/cheater_constraint_less_than_with_valley.png index 40cf9f3d0d3..a312971f145 100644 Binary files a/test/image/baselines/cheater_constraint_less_than_with_valley.png and b/test/image/baselines/cheater_constraint_less_than_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range.png b/test/image/baselines/cheater_constraint_outer_range.png index 8228721ad09..7b2490806a0 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range.png and b/test/image/baselines/cheater_constraint_outer_range.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_hi_top.png b/test/image/baselines/cheater_constraint_outer_range_hi_top.png index f6128c23f82..469f5168dd7 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_hi_top.png and b/test/image/baselines/cheater_constraint_outer_range_hi_top.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_hi_top_with_hill.png b/test/image/baselines/cheater_constraint_outer_range_hi_top_with_hill.png index 3724a980642..89287aa74c8 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_hi_top_with_hill.png and b/test/image/baselines/cheater_constraint_outer_range_hi_top_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_hi_top_with_valley.png b/test/image/baselines/cheater_constraint_outer_range_hi_top_with_valley.png index 7bf09f33105..5234a12b96b 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_hi_top_with_valley.png and b/test/image/baselines/cheater_constraint_outer_range_hi_top_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_lo_top.png b/test/image/baselines/cheater_constraint_outer_range_lo_top.png index bf4c3606f71..50a8a62d083 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_lo_top.png and b/test/image/baselines/cheater_constraint_outer_range_lo_top.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_lo_top_with_hill.png b/test/image/baselines/cheater_constraint_outer_range_lo_top_with_hill.png index abb7b06a329..0b43ae2d99c 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_lo_top_with_hill.png and b/test/image/baselines/cheater_constraint_outer_range_lo_top_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_lo_top_with_valley.png b/test/image/baselines/cheater_constraint_outer_range_lo_top_with_valley.png index 82d6acc63da..059e19b3929 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_lo_top_with_valley.png and b/test/image/baselines/cheater_constraint_outer_range_lo_top_with_valley.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_with_hill.png b/test/image/baselines/cheater_constraint_outer_range_with_hill.png index 0d7d02f440b..1a61d4027be 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_with_hill.png and b/test/image/baselines/cheater_constraint_outer_range_with_hill.png differ diff --git a/test/image/baselines/cheater_constraint_outer_range_with_valley.png b/test/image/baselines/cheater_constraint_outer_range_with_valley.png index 25c5cce2b94..083a6f44e39 100644 Binary files a/test/image/baselines/cheater_constraint_outer_range_with_valley.png and b/test/image/baselines/cheater_constraint_outer_range_with_valley.png differ diff --git a/test/image/baselines/cheater_constraints.png b/test/image/baselines/cheater_constraints.png index c79c53351c8..16abb235d71 100644 Binary files a/test/image/baselines/cheater_constraints.png and b/test/image/baselines/cheater_constraints.png differ diff --git a/test/image/baselines/cheater_contour.png b/test/image/baselines/cheater_contour.png index 8c7c33b9e57..4ab93358225 100644 Binary files a/test/image/baselines/cheater_contour.png and b/test/image/baselines/cheater_contour.png differ diff --git a/test/image/baselines/cheater_fully_filled.png b/test/image/baselines/cheater_fully_filled.png index 0c2cedc4919..4b2b01b1a64 100644 Binary files a/test/image/baselines/cheater_fully_filled.png and b/test/image/baselines/cheater_fully_filled.png differ diff --git a/test/image/baselines/cheater_smooth.png b/test/image/baselines/cheater_smooth.png index 7d4b479bf24..e099dc022d7 100644 Binary files a/test/image/baselines/cheater_smooth.png and b/test/image/baselines/cheater_smooth.png differ diff --git a/test/image/baselines/cheaterslope.png b/test/image/baselines/cheaterslope.png index 5f71f40f1d8..23aea046fa3 100644 Binary files a/test/image/baselines/cheaterslope.png and b/test/image/baselines/cheaterslope.png differ diff --git a/test/image/baselines/cheaterslope_noticklabels.png b/test/image/baselines/cheaterslope_noticklabels.png index 267ba49038d..430079c3707 100644 Binary files a/test/image/baselines/cheaterslope_noticklabels.png and b/test/image/baselines/cheaterslope_noticklabels.png differ diff --git a/test/image/baselines/cividis_heatmap.png b/test/image/baselines/cividis_heatmap.png index e1f614a66b3..9e74a2fe576 100644 Binary files a/test/image/baselines/cividis_heatmap.png and b/test/image/baselines/cividis_heatmap.png differ diff --git a/test/image/baselines/cliponaxis_false-dates-log.png b/test/image/baselines/cliponaxis_false-dates-log.png index 37af1d51d69..8fcaa3627b0 100644 Binary files a/test/image/baselines/cliponaxis_false-dates-log.png and b/test/image/baselines/cliponaxis_false-dates-log.png differ diff --git a/test/image/baselines/cliponaxis_false.png b/test/image/baselines/cliponaxis_false.png index 3e3303d357f..8d7305ae686 100644 Binary files a/test/image/baselines/cliponaxis_false.png and b/test/image/baselines/cliponaxis_false.png differ diff --git a/test/image/baselines/colorbar_enumerated_ticks.png b/test/image/baselines/colorbar_enumerated_ticks.png index 5e9b2dcc789..b960b03e204 100644 Binary files a/test/image/baselines/colorbar_enumerated_ticks.png and b/test/image/baselines/colorbar_enumerated_ticks.png differ diff --git a/test/image/baselines/colorbar_tick_prefix_suffix.png b/test/image/baselines/colorbar_tick_prefix_suffix.png index 3730b31eb65..a487d28deb0 100644 Binary files a/test/image/baselines/colorbar_tick_prefix_suffix.png and b/test/image/baselines/colorbar_tick_prefix_suffix.png differ diff --git a/test/image/baselines/colorbar_tickformat.png b/test/image/baselines/colorbar_tickformat.png index 483e107bb52..26a40eba461 100644 Binary files a/test/image/baselines/colorbar_tickformat.png and b/test/image/baselines/colorbar_tickformat.png differ diff --git a/test/image/baselines/colorscale_constraint.png b/test/image/baselines/colorscale_constraint.png index b83fbb1635e..a1e20f184c5 100644 Binary files a/test/image/baselines/colorscale_constraint.png and b/test/image/baselines/colorscale_constraint.png differ diff --git a/test/image/baselines/colorscale_opacity.png b/test/image/baselines/colorscale_opacity.png index bc300734de0..897d7c84d21 100644 Binary files a/test/image/baselines/colorscale_opacity.png and b/test/image/baselines/colorscale_opacity.png differ diff --git a/test/image/baselines/connectgaps_2d.png b/test/image/baselines/connectgaps_2d.png index 80bdf117b11..f440ec82b0f 100644 Binary files a/test/image/baselines/connectgaps_2d.png and b/test/image/baselines/connectgaps_2d.png differ diff --git a/test/image/baselines/contour_constraints.png b/test/image/baselines/contour_constraints.png index e0924427939..2a9c66f9546 100644 Binary files a/test/image/baselines/contour_constraints.png and b/test/image/baselines/contour_constraints.png differ diff --git a/test/image/baselines/contour_doublemerge.png b/test/image/baselines/contour_doublemerge.png index c86bc77bde6..29e4bbf659c 100644 Binary files a/test/image/baselines/contour_doublemerge.png and b/test/image/baselines/contour_doublemerge.png differ diff --git a/test/image/baselines/contour_edge_cases.png b/test/image/baselines/contour_edge_cases.png index 81d1e4be56b..5c1dda6e615 100644 Binary files a/test/image/baselines/contour_edge_cases.png and b/test/image/baselines/contour_edge_cases.png differ diff --git a/test/image/baselines/contour_heatmap_coloring.png b/test/image/baselines/contour_heatmap_coloring.png index 0e2a7370fcb..5d25e924060 100644 Binary files a/test/image/baselines/contour_heatmap_coloring.png and b/test/image/baselines/contour_heatmap_coloring.png differ diff --git a/test/image/baselines/contour_lines_coloring.png b/test/image/baselines/contour_lines_coloring.png index 9b2fc5ca51f..0479b5b32f9 100644 Binary files a/test/image/baselines/contour_lines_coloring.png and b/test/image/baselines/contour_lines_coloring.png differ diff --git a/test/image/baselines/contour_log.png b/test/image/baselines/contour_log.png index e5cbbae7e17..3eae893ea35 100644 Binary files a/test/image/baselines/contour_log.png and b/test/image/baselines/contour_log.png differ diff --git a/test/image/baselines/contour_match_edges.png b/test/image/baselines/contour_match_edges.png index 3f965e83545..cef0af2d95c 100644 Binary files a/test/image/baselines/contour_match_edges.png and b/test/image/baselines/contour_match_edges.png differ diff --git a/test/image/baselines/contour_nolines.png b/test/image/baselines/contour_nolines.png index 63b6b77f733..dea3cb70681 100644 Binary files a/test/image/baselines/contour_nolines.png and b/test/image/baselines/contour_nolines.png differ diff --git a/test/image/baselines/contour_scatter.png b/test/image/baselines/contour_scatter.png index aba6976d3d8..55361f799c9 100644 Binary files a/test/image/baselines/contour_scatter.png and b/test/image/baselines/contour_scatter.png differ diff --git a/test/image/baselines/contour_transposed-irregular.png b/test/image/baselines/contour_transposed-irregular.png index 71a8a98538c..0ce02e7a13c 100644 Binary files a/test/image/baselines/contour_transposed-irregular.png and b/test/image/baselines/contour_transposed-irregular.png differ diff --git a/test/image/baselines/contour_transposed.png b/test/image/baselines/contour_transposed.png index 7c661234040..5bb784ec7e2 100644 Binary files a/test/image/baselines/contour_transposed.png and b/test/image/baselines/contour_transposed.png differ diff --git a/test/image/baselines/contour_valid_ses.png b/test/image/baselines/contour_valid_ses.png index 8705296ab22..b56b7deda42 100644 Binary files a/test/image/baselines/contour_valid_ses.png and b/test/image/baselines/contour_valid_ses.png differ diff --git a/test/image/baselines/contour_xyz-gaps-on-sides.png b/test/image/baselines/contour_xyz-gaps-on-sides.png index 9b1404bfa1d..cdf6176f5fb 100644 Binary files a/test/image/baselines/contour_xyz-gaps-on-sides.png and b/test/image/baselines/contour_xyz-gaps-on-sides.png differ diff --git a/test/image/baselines/custom_colorscale.png b/test/image/baselines/custom_colorscale.png index dd011ec425a..8d3c76fb8a7 100644 Binary files a/test/image/baselines/custom_colorscale.png and b/test/image/baselines/custom_colorscale.png differ diff --git a/test/image/baselines/custom_size_subplot.png b/test/image/baselines/custom_size_subplot.png index 05d7a2d7786..59bb8345610 100644 Binary files a/test/image/baselines/custom_size_subplot.png and b/test/image/baselines/custom_size_subplot.png differ diff --git a/test/image/baselines/date_axes.png b/test/image/baselines/date_axes.png index d7914ff7f58..95e32dd4936 100644 Binary files a/test/image/baselines/date_axes.png and b/test/image/baselines/date_axes.png differ diff --git a/test/image/baselines/date_histogram.png b/test/image/baselines/date_histogram.png index ece7dafef78..af184d17dc8 100644 Binary files a/test/image/baselines/date_histogram.png and b/test/image/baselines/date_histogram.png differ diff --git a/test/image/baselines/dendrogram.png b/test/image/baselines/dendrogram.png index e94e7bf572d..1b5901234bc 100644 Binary files a/test/image/baselines/dendrogram.png and b/test/image/baselines/dendrogram.png differ diff --git a/test/image/baselines/earth_heatmap.png b/test/image/baselines/earth_heatmap.png index 49c0e725aea..75d43fffb33 100644 Binary files a/test/image/baselines/earth_heatmap.png and b/test/image/baselines/earth_heatmap.png differ diff --git a/test/image/baselines/electric_heatmap.png b/test/image/baselines/electric_heatmap.png index f3fb2c3a8a2..6567ac8ba50 100644 Binary files a/test/image/baselines/electric_heatmap.png and b/test/image/baselines/electric_heatmap.png differ diff --git a/test/image/baselines/empty.png b/test/image/baselines/empty.png index d8494d3b276..ccacb49786c 100644 Binary files a/test/image/baselines/empty.png and b/test/image/baselines/empty.png differ diff --git a/test/image/baselines/error_bar_asymmetric_array.png b/test/image/baselines/error_bar_asymmetric_array.png index 4360c77477e..4af10efba61 100644 Binary files a/test/image/baselines/error_bar_asymmetric_array.png and b/test/image/baselines/error_bar_asymmetric_array.png differ diff --git a/test/image/baselines/error_bar_asymmetric_constant.png b/test/image/baselines/error_bar_asymmetric_constant.png index fbb154d68c3..48d0f0b8ec5 100644 Binary files a/test/image/baselines/error_bar_asymmetric_constant.png and b/test/image/baselines/error_bar_asymmetric_constant.png differ diff --git a/test/image/baselines/error_bar_bar.png b/test/image/baselines/error_bar_bar.png index 7655d5087a4..3251ecb304a 100644 Binary files a/test/image/baselines/error_bar_bar.png and b/test/image/baselines/error_bar_bar.png differ diff --git a/test/image/baselines/error_bar_bar_ids.png b/test/image/baselines/error_bar_bar_ids.png index 1ca6a60d491..accfe393d8a 100644 Binary files a/test/image/baselines/error_bar_bar_ids.png and b/test/image/baselines/error_bar_bar_ids.png differ diff --git a/test/image/baselines/error_bar_horizontal.png b/test/image/baselines/error_bar_horizontal.png index 5511468b400..2a055d90eb2 100644 Binary files a/test/image/baselines/error_bar_horizontal.png and b/test/image/baselines/error_bar_horizontal.png differ diff --git a/test/image/baselines/error_bar_layers.png b/test/image/baselines/error_bar_layers.png index 495516d6cc2..50521b8d201 100644 Binary files a/test/image/baselines/error_bar_layers.png and b/test/image/baselines/error_bar_layers.png differ diff --git a/test/image/baselines/error_bar_sqrt.png b/test/image/baselines/error_bar_sqrt.png index 81914bca512..801481f9997 100644 Binary files a/test/image/baselines/error_bar_sqrt.png and b/test/image/baselines/error_bar_sqrt.png differ diff --git a/test/image/baselines/error_bar_style.png b/test/image/baselines/error_bar_style.png index 103ca2d053f..7cd6872cd6c 100644 Binary files a/test/image/baselines/error_bar_style.png and b/test/image/baselines/error_bar_style.png differ diff --git a/test/image/baselines/fake_violins.png b/test/image/baselines/fake_violins.png index acd2d779889..fc05e951ee9 100644 Binary files a/test/image/baselines/fake_violins.png and b/test/image/baselines/fake_violins.png differ diff --git a/test/image/baselines/finance_style.png b/test/image/baselines/finance_style.png index a969a040c7e..46f453ccdc0 100644 Binary files a/test/image/baselines/finance_style.png and b/test/image/baselines/finance_style.png differ diff --git a/test/image/baselines/finance_subplots_categories.png b/test/image/baselines/finance_subplots_categories.png index 737202f3241..3c113f217a2 100644 Binary files a/test/image/baselines/finance_subplots_categories.png and b/test/image/baselines/finance_subplots_categories.png differ diff --git a/test/image/baselines/fixed_size_shapes.png b/test/image/baselines/fixed_size_shapes.png index 306caf72ed0..71d5f368a88 100644 Binary files a/test/image/baselines/fixed_size_shapes.png and b/test/image/baselines/fixed_size_shapes.png differ diff --git a/test/image/baselines/font-wishlist.png b/test/image/baselines/font-wishlist.png index f1cb471a1d3..4175099f088 100644 Binary files a/test/image/baselines/font-wishlist.png and b/test/image/baselines/font-wishlist.png differ diff --git a/test/image/baselines/fonts.png b/test/image/baselines/fonts.png index 8e802dd4ea9..8aed00e7dbc 100644 Binary files a/test/image/baselines/fonts.png and b/test/image/baselines/fonts.png differ diff --git a/test/image/baselines/geo_across-antimeridian.png b/test/image/baselines/geo_across-antimeridian.png index c54950d9c2d..b1829019d98 100644 Binary files a/test/image/baselines/geo_across-antimeridian.png and b/test/image/baselines/geo_across-antimeridian.png differ diff --git a/test/image/baselines/geo_africa-insets.png b/test/image/baselines/geo_africa-insets.png index 7ccb92d4d3f..c4ce1af9edd 100644 Binary files a/test/image/baselines/geo_africa-insets.png and b/test/image/baselines/geo_africa-insets.png differ diff --git a/test/image/baselines/geo_aitoff-sinusoidal.png b/test/image/baselines/geo_aitoff-sinusoidal.png index f1c6316363a..7baadc22160 100644 Binary files a/test/image/baselines/geo_aitoff-sinusoidal.png and b/test/image/baselines/geo_aitoff-sinusoidal.png differ diff --git a/test/image/baselines/geo_bg-color.png b/test/image/baselines/geo_bg-color.png index 4ac712167d8..dd51ce3a245 100644 Binary files a/test/image/baselines/geo_bg-color.png and b/test/image/baselines/geo_bg-color.png differ diff --git a/test/image/baselines/geo_big-frame.png b/test/image/baselines/geo_big-frame.png index 841380a025a..e8c9cceb1a9 100644 Binary files a/test/image/baselines/geo_big-frame.png and b/test/image/baselines/geo_big-frame.png differ diff --git a/test/image/baselines/geo_bubbles-colorscales.png b/test/image/baselines/geo_bubbles-colorscales.png index ffe6a751441..e943143aadd 100644 Binary files a/test/image/baselines/geo_bubbles-colorscales.png and b/test/image/baselines/geo_bubbles-colorscales.png differ diff --git a/test/image/baselines/geo_bubbles-sizeref.png b/test/image/baselines/geo_bubbles-sizeref.png index cd82b00a59e..e0234497108 100644 Binary files a/test/image/baselines/geo_bubbles-sizeref.png and b/test/image/baselines/geo_bubbles-sizeref.png differ diff --git a/test/image/baselines/geo_canadian-cites.png b/test/image/baselines/geo_canadian-cites.png index 560c7423061..8516543adff 100644 Binary files a/test/image/baselines/geo_canadian-cites.png and b/test/image/baselines/geo_canadian-cites.png differ diff --git a/test/image/baselines/geo_centering.png b/test/image/baselines/geo_centering.png index 8e65a0e8163..0fe726e7262 100644 Binary files a/test/image/baselines/geo_centering.png and b/test/image/baselines/geo_centering.png differ diff --git a/test/image/baselines/geo_choropleth-text.png b/test/image/baselines/geo_choropleth-text.png index d3c5c83d4a5..ade87c0f4fe 100644 Binary files a/test/image/baselines/geo_choropleth-text.png and b/test/image/baselines/geo_choropleth-text.png differ diff --git a/test/image/baselines/geo_choropleth-usa.png b/test/image/baselines/geo_choropleth-usa.png index a8a084894aa..2dc9a7ebdde 100644 Binary files a/test/image/baselines/geo_choropleth-usa.png and b/test/image/baselines/geo_choropleth-usa.png differ diff --git a/test/image/baselines/geo_conic-conformal.png b/test/image/baselines/geo_conic-conformal.png index af9247a1d9e..d517a94f421 100644 Binary files a/test/image/baselines/geo_conic-conformal.png and b/test/image/baselines/geo_conic-conformal.png differ diff --git a/test/image/baselines/geo_connectgaps.png b/test/image/baselines/geo_connectgaps.png index f1d4ad2398d..0225cbe0a2a 100644 Binary files a/test/image/baselines/geo_connectgaps.png and b/test/image/baselines/geo_connectgaps.png differ diff --git a/test/image/baselines/geo_country-names-text-chart.png b/test/image/baselines/geo_country-names-text-chart.png index b921e1e3dfc..a6935b4b59a 100644 Binary files a/test/image/baselines/geo_country-names-text-chart.png and b/test/image/baselines/geo_country-names-text-chart.png differ diff --git a/test/image/baselines/geo_country-names.png b/test/image/baselines/geo_country-names.png index b2524b79c5e..6e8d8400334 100644 Binary files a/test/image/baselines/geo_country-names.png and b/test/image/baselines/geo_country-names.png differ diff --git a/test/image/baselines/geo_custom-colorscale.png b/test/image/baselines/geo_custom-colorscale.png index bb8652ce625..4ed4c97c13e 100644 Binary files a/test/image/baselines/geo_custom-colorscale.png and b/test/image/baselines/geo_custom-colorscale.png differ diff --git a/test/image/baselines/geo_europe-bubbles.png b/test/image/baselines/geo_europe-bubbles.png index d474421526c..1ced2210e03 100644 Binary files a/test/image/baselines/geo_europe-bubbles.png and b/test/image/baselines/geo_europe-bubbles.png differ diff --git a/test/image/baselines/geo_fill.png b/test/image/baselines/geo_fill.png index 62acf49e8db..07dfdde4768 100644 Binary files a/test/image/baselines/geo_fill.png and b/test/image/baselines/geo_fill.png differ diff --git a/test/image/baselines/geo_first.png b/test/image/baselines/geo_first.png index 1fdff452c88..277a0ff4901 100644 Binary files a/test/image/baselines/geo_first.png and b/test/image/baselines/geo_first.png differ diff --git a/test/image/baselines/geo_kavrayskiy7.png b/test/image/baselines/geo_kavrayskiy7.png index 9ced1a0afd4..15736913582 100644 Binary files a/test/image/baselines/geo_kavrayskiy7.png and b/test/image/baselines/geo_kavrayskiy7.png differ diff --git a/test/image/baselines/geo_legendonly.png b/test/image/baselines/geo_legendonly.png index d9595eaa5ec..39dfe1b1cdd 100644 Binary files a/test/image/baselines/geo_legendonly.png and b/test/image/baselines/geo_legendonly.png differ diff --git a/test/image/baselines/geo_miterlimit-base-layers.png b/test/image/baselines/geo_miterlimit-base-layers.png index d14040b2c7c..32fd4af285e 100644 Binary files a/test/image/baselines/geo_miterlimit-base-layers.png and b/test/image/baselines/geo_miterlimit-base-layers.png differ diff --git a/test/image/baselines/geo_multi-geos.png b/test/image/baselines/geo_multi-geos.png index de0366ab098..7ba3cc30c04 100644 Binary files a/test/image/baselines/geo_multi-geos.png and b/test/image/baselines/geo_multi-geos.png differ diff --git a/test/image/baselines/geo_multiple-usa-choropleths.png b/test/image/baselines/geo_multiple-usa-choropleths.png index b90c2d32de0..7318f107f0c 100644 Binary files a/test/image/baselines/geo_multiple-usa-choropleths.png and b/test/image/baselines/geo_multiple-usa-choropleths.png differ diff --git a/test/image/baselines/geo_orthographic.png b/test/image/baselines/geo_orthographic.png index 00ceee11086..6ca644f72e8 100644 Binary files a/test/image/baselines/geo_orthographic.png and b/test/image/baselines/geo_orthographic.png differ diff --git a/test/image/baselines/geo_point-selection.png b/test/image/baselines/geo_point-selection.png index c74d0b67fae..0626af45e8c 100644 Binary files a/test/image/baselines/geo_point-selection.png and b/test/image/baselines/geo_point-selection.png differ diff --git a/test/image/baselines/geo_scattergeo-locations.png b/test/image/baselines/geo_scattergeo-locations.png index 0de614431f0..bfb149bea72 100644 Binary files a/test/image/baselines/geo_scattergeo-locations.png and b/test/image/baselines/geo_scattergeo-locations.png differ diff --git a/test/image/baselines/geo_scattergeo-out-of-usa.png b/test/image/baselines/geo_scattergeo-out-of-usa.png index aa8b27212b0..e8d6e4fb19a 100644 Binary files a/test/image/baselines/geo_scattergeo-out-of-usa.png and b/test/image/baselines/geo_scattergeo-out-of-usa.png differ diff --git a/test/image/baselines/geo_second.png b/test/image/baselines/geo_second.png index 93c2dcb394d..354f32ef2d2 100644 Binary files a/test/image/baselines/geo_second.png and b/test/image/baselines/geo_second.png differ diff --git a/test/image/baselines/geo_stereographic.png b/test/image/baselines/geo_stereographic.png index a77239e0fd9..b00b4ce6c57 100644 Binary files a/test/image/baselines/geo_stereographic.png and b/test/image/baselines/geo_stereographic.png differ diff --git a/test/image/baselines/geo_text_chart_arrays.png b/test/image/baselines/geo_text_chart_arrays.png index fc74c91f82e..12bfb62ead3 100644 Binary files a/test/image/baselines/geo_text_chart_arrays.png and b/test/image/baselines/geo_text_chart_arrays.png differ diff --git a/test/image/baselines/geo_usa-states.png b/test/image/baselines/geo_usa-states.png index e162702a55a..0c1d93d852f 100644 Binary files a/test/image/baselines/geo_usa-states.png and b/test/image/baselines/geo_usa-states.png differ diff --git a/test/image/baselines/geo_winkel-tripel.png b/test/image/baselines/geo_winkel-tripel.png index 7ad7d616bd6..60c3366ae0c 100644 Binary files a/test/image/baselines/geo_winkel-tripel.png and b/test/image/baselines/geo_winkel-tripel.png differ diff --git a/test/image/baselines/gl2d_10.png b/test/image/baselines/gl2d_10.png index 85bcc6a1a3a..2f6c33f3b74 100644 Binary files a/test/image/baselines/gl2d_10.png and b/test/image/baselines/gl2d_10.png differ diff --git a/test/image/baselines/gl2d_12.png b/test/image/baselines/gl2d_12.png index e0e6c389512..6d635cd4a2b 100644 Binary files a/test/image/baselines/gl2d_12.png and b/test/image/baselines/gl2d_12.png differ diff --git a/test/image/baselines/gl2d_14.png b/test/image/baselines/gl2d_14.png index 3b31687e969..4c4d260a1bc 100644 Binary files a/test/image/baselines/gl2d_14.png and b/test/image/baselines/gl2d_14.png differ diff --git a/test/image/baselines/gl2d_17.png b/test/image/baselines/gl2d_17.png index 7e4c8d41fa2..0ef11467ddd 100644 Binary files a/test/image/baselines/gl2d_17.png and b/test/image/baselines/gl2d_17.png differ diff --git a/test/image/baselines/gl2d_annotations.png b/test/image/baselines/gl2d_annotations.png index 8700ec20796..ac8f996bda2 100644 Binary files a/test/image/baselines/gl2d_annotations.png and b/test/image/baselines/gl2d_annotations.png differ diff --git a/test/image/baselines/gl2d_axes_booleans.png b/test/image/baselines/gl2d_axes_booleans.png index 99ae8531d00..1dc8c480f0f 100644 Binary files a/test/image/baselines/gl2d_axes_booleans.png and b/test/image/baselines/gl2d_axes_booleans.png differ diff --git a/test/image/baselines/gl2d_axes_labels.png b/test/image/baselines/gl2d_axes_labels.png index de5a0db3a4b..c056e5b0772 100644 Binary files a/test/image/baselines/gl2d_axes_labels.png and b/test/image/baselines/gl2d_axes_labels.png differ diff --git a/test/image/baselines/gl2d_axes_labels2.png b/test/image/baselines/gl2d_axes_labels2.png index 41408c7bc2b..d656812f86d 100644 Binary files a/test/image/baselines/gl2d_axes_labels2.png and b/test/image/baselines/gl2d_axes_labels2.png differ diff --git a/test/image/baselines/gl2d_axes_lines.png b/test/image/baselines/gl2d_axes_lines.png index c29322d35d1..357d66f1144 100644 Binary files a/test/image/baselines/gl2d_axes_lines.png and b/test/image/baselines/gl2d_axes_lines.png differ diff --git a/test/image/baselines/gl2d_axes_range_manual.png b/test/image/baselines/gl2d_axes_range_manual.png index 9043299b823..c222820ece0 100644 Binary files a/test/image/baselines/gl2d_axes_range_manual.png and b/test/image/baselines/gl2d_axes_range_manual.png differ diff --git a/test/image/baselines/gl2d_axes_range_mode.png b/test/image/baselines/gl2d_axes_range_mode.png index 0076fb99f3c..34b0e883170 100644 Binary files a/test/image/baselines/gl2d_axes_range_mode.png and b/test/image/baselines/gl2d_axes_range_mode.png differ diff --git a/test/image/baselines/gl2d_axes_range_type.png b/test/image/baselines/gl2d_axes_range_type.png index 094efb6b855..b1cac2a1bcf 100644 Binary files a/test/image/baselines/gl2d_axes_range_type.png and b/test/image/baselines/gl2d_axes_range_type.png differ diff --git a/test/image/baselines/gl2d_clean-number.png b/test/image/baselines/gl2d_clean-number.png index c667316952b..cc5f2491cb9 100644 Binary files a/test/image/baselines/gl2d_clean-number.png and b/test/image/baselines/gl2d_clean-number.png differ diff --git a/test/image/baselines/gl2d_connect_gaps.png b/test/image/baselines/gl2d_connect_gaps.png index dba70d4dc06..a585e6d3e75 100644 Binary files a/test/image/baselines/gl2d_connect_gaps.png and b/test/image/baselines/gl2d_connect_gaps.png differ diff --git a/test/image/baselines/gl2d_date_axes.png b/test/image/baselines/gl2d_date_axes.png index 58819220d69..337bfc91edc 100644 Binary files a/test/image/baselines/gl2d_date_axes.png and b/test/image/baselines/gl2d_date_axes.png differ diff --git a/test/image/baselines/gl2d_error_bars.png b/test/image/baselines/gl2d_error_bars.png index b48fcb35bba..e03a8eab327 100644 Binary files a/test/image/baselines/gl2d_error_bars.png and b/test/image/baselines/gl2d_error_bars.png differ diff --git a/test/image/baselines/gl2d_error_bars_log.png b/test/image/baselines/gl2d_error_bars_log.png index 26cc4c4c472..b534e5625ae 100644 Binary files a/test/image/baselines/gl2d_error_bars_log.png and b/test/image/baselines/gl2d_error_bars_log.png differ diff --git a/test/image/baselines/gl2d_fonts.png b/test/image/baselines/gl2d_fonts.png index f71fd65374b..042ceeeee13 100644 Binary files a/test/image/baselines/gl2d_fonts.png and b/test/image/baselines/gl2d_fonts.png differ diff --git a/test/image/baselines/gl2d_heatmapgl.png b/test/image/baselines/gl2d_heatmapgl.png index df8694bf2fd..e13075a97db 100644 Binary files a/test/image/baselines/gl2d_heatmapgl.png and b/test/image/baselines/gl2d_heatmapgl.png differ diff --git a/test/image/baselines/gl2d_horiz-lines.png b/test/image/baselines/gl2d_horiz-lines.png index a76fa114d50..f75d5849790 100644 Binary files a/test/image/baselines/gl2d_horiz-lines.png and b/test/image/baselines/gl2d_horiz-lines.png differ diff --git a/test/image/baselines/gl2d_layout_image.png b/test/image/baselines/gl2d_layout_image.png index 14a21a818f5..fd374229f88 100644 Binary files a/test/image/baselines/gl2d_layout_image.png and b/test/image/baselines/gl2d_layout_image.png differ diff --git a/test/image/baselines/gl2d_line_aligned.png b/test/image/baselines/gl2d_line_aligned.png index c6bf4ee8d3b..4628a560da4 100644 Binary files a/test/image/baselines/gl2d_line_aligned.png and b/test/image/baselines/gl2d_line_aligned.png differ diff --git a/test/image/baselines/gl2d_line_dash.png b/test/image/baselines/gl2d_line_dash.png index e4a2a59af79..13aae37a66c 100644 Binary files a/test/image/baselines/gl2d_line_dash.png and b/test/image/baselines/gl2d_line_dash.png differ diff --git a/test/image/baselines/gl2d_line_limit.png b/test/image/baselines/gl2d_line_limit.png index e69cc60fa89..7f0d90b7ff5 100644 Binary files a/test/image/baselines/gl2d_line_limit.png and b/test/image/baselines/gl2d_line_limit.png differ diff --git a/test/image/baselines/gl2d_line_select.png b/test/image/baselines/gl2d_line_select.png index 150c00b55a2..156fccfd829 100644 Binary files a/test/image/baselines/gl2d_line_select.png and b/test/image/baselines/gl2d_line_select.png differ diff --git a/test/image/baselines/gl2d_marker_line_width.png b/test/image/baselines/gl2d_marker_line_width.png index 3ceaa69dce0..690c18f992b 100644 Binary files a/test/image/baselines/gl2d_marker_line_width.png and b/test/image/baselines/gl2d_marker_line_width.png differ diff --git a/test/image/baselines/gl2d_marker_size.png b/test/image/baselines/gl2d_marker_size.png index 563f0272edd..d5aa32eaa51 100644 Binary files a/test/image/baselines/gl2d_marker_size.png and b/test/image/baselines/gl2d_marker_size.png differ diff --git a/test/image/baselines/gl2d_marker_symbols.png b/test/image/baselines/gl2d_marker_symbols.png index 954265506ed..a80a8d068ae 100644 Binary files a/test/image/baselines/gl2d_marker_symbols.png and b/test/image/baselines/gl2d_marker_symbols.png differ diff --git a/test/image/baselines/gl2d_multiple-traces-axes-labels.png b/test/image/baselines/gl2d_multiple-traces-axes-labels.png index d23f9db1664..8c1f1b94ca2 100644 Binary files a/test/image/baselines/gl2d_multiple-traces-axes-labels.png and b/test/image/baselines/gl2d_multiple-traces-axes-labels.png differ diff --git a/test/image/baselines/gl2d_multiple-traces-axes.png b/test/image/baselines/gl2d_multiple-traces-axes.png index 348920d37ef..28d4934f39f 100644 Binary files a/test/image/baselines/gl2d_multiple-traces-axes.png and b/test/image/baselines/gl2d_multiple-traces-axes.png differ diff --git a/test/image/baselines/gl2d_multiple_subplots.png b/test/image/baselines/gl2d_multiple_subplots.png index 71f1520007e..c3bd737e93e 100644 Binary files a/test/image/baselines/gl2d_multiple_subplots.png and b/test/image/baselines/gl2d_multiple_subplots.png differ diff --git a/test/image/baselines/gl2d_open_marker_line_width.png b/test/image/baselines/gl2d_open_marker_line_width.png index b8519424f4d..c6ac38d678d 100644 Binary files a/test/image/baselines/gl2d_open_marker_line_width.png and b/test/image/baselines/gl2d_open_marker_line_width.png differ diff --git a/test/image/baselines/gl2d_parcoords.png b/test/image/baselines/gl2d_parcoords.png index 0d56d0d358c..3762130d7d3 100644 Binary files a/test/image/baselines/gl2d_parcoords.png and b/test/image/baselines/gl2d_parcoords.png differ diff --git a/test/image/baselines/gl2d_parcoords_1.png b/test/image/baselines/gl2d_parcoords_1.png index 0d24cf48e80..b3af3fe8da6 100644 Binary files a/test/image/baselines/gl2d_parcoords_1.png and b/test/image/baselines/gl2d_parcoords_1.png differ diff --git a/test/image/baselines/gl2d_parcoords_2.png b/test/image/baselines/gl2d_parcoords_2.png index 921a5f5bd64..95890ccd13d 100644 Binary files a/test/image/baselines/gl2d_parcoords_2.png and b/test/image/baselines/gl2d_parcoords_2.png differ diff --git a/test/image/baselines/gl2d_parcoords_blocks.png b/test/image/baselines/gl2d_parcoords_blocks.png index c802e871fc5..50f2b292dc9 100644 Binary files a/test/image/baselines/gl2d_parcoords_blocks.png and b/test/image/baselines/gl2d_parcoords_blocks.png differ diff --git a/test/image/baselines/gl2d_parcoords_constraints.png b/test/image/baselines/gl2d_parcoords_constraints.png index 3225b29460a..e220671e4e0 100644 Binary files a/test/image/baselines/gl2d_parcoords_constraints.png and b/test/image/baselines/gl2d_parcoords_constraints.png differ diff --git a/test/image/baselines/gl2d_parcoords_large.png b/test/image/baselines/gl2d_parcoords_large.png index 883e627569b..7b60f826680 100644 Binary files a/test/image/baselines/gl2d_parcoords_large.png and b/test/image/baselines/gl2d_parcoords_large.png differ diff --git a/test/image/baselines/gl2d_pointcloud-basic.png b/test/image/baselines/gl2d_pointcloud-basic.png index 13e73650e51..35b89381cfe 100644 Binary files a/test/image/baselines/gl2d_pointcloud-basic.png and b/test/image/baselines/gl2d_pointcloud-basic.png differ diff --git a/test/image/baselines/gl2d_scatter-color-clustering.png b/test/image/baselines/gl2d_scatter-color-clustering.png index bf509a9bbb2..42ff68829e9 100644 Binary files a/test/image/baselines/gl2d_scatter-color-clustering.png and b/test/image/baselines/gl2d_scatter-color-clustering.png differ diff --git a/test/image/baselines/gl2d_scatter-colorscale-colorbar.png b/test/image/baselines/gl2d_scatter-colorscale-colorbar.png index 999a5bf0848..77fb7937f88 100644 Binary files a/test/image/baselines/gl2d_scatter-colorscale-colorbar.png and b/test/image/baselines/gl2d_scatter-colorscale-colorbar.png differ diff --git a/test/image/baselines/gl2d_scatter-colorscale-points.png b/test/image/baselines/gl2d_scatter-colorscale-points.png index fcf0124e714..157b2ff4e2e 100644 Binary files a/test/image/baselines/gl2d_scatter-colorscale-points.png and b/test/image/baselines/gl2d_scatter-colorscale-points.png differ diff --git a/test/image/baselines/gl2d_scatter-continuous-clustering.png b/test/image/baselines/gl2d_scatter-continuous-clustering.png index 1c86e0898cd..99d38e50257 100644 Binary files a/test/image/baselines/gl2d_scatter-continuous-clustering.png and b/test/image/baselines/gl2d_scatter-continuous-clustering.png differ diff --git a/test/image/baselines/gl2d_scatter-marker-line-colorscales.png b/test/image/baselines/gl2d_scatter-marker-line-colorscales.png index ca93022e7c3..2127246d862 100644 Binary files a/test/image/baselines/gl2d_scatter-marker-line-colorscales.png and b/test/image/baselines/gl2d_scatter-marker-line-colorscales.png differ diff --git a/test/image/baselines/gl2d_scatter-subplot-panel.png b/test/image/baselines/gl2d_scatter-subplot-panel.png index b09f97c49fa..e8c3d2af217 100644 Binary files a/test/image/baselines/gl2d_scatter-subplot-panel.png and b/test/image/baselines/gl2d_scatter-subplot-panel.png differ diff --git a/test/image/baselines/gl2d_scatter_fill_self_next.png b/test/image/baselines/gl2d_scatter_fill_self_next.png index 9ba9dd84185..669d08c7387 100644 Binary files a/test/image/baselines/gl2d_scatter_fill_self_next.png and b/test/image/baselines/gl2d_scatter_fill_self_next.png differ diff --git a/test/image/baselines/gl2d_selectedpoints.png b/test/image/baselines/gl2d_selectedpoints.png index 00f8f43aede..dabf0ad390e 100644 Binary files a/test/image/baselines/gl2d_selectedpoints.png and b/test/image/baselines/gl2d_selectedpoints.png differ diff --git a/test/image/baselines/gl2d_shapes_below_traces.png b/test/image/baselines/gl2d_shapes_below_traces.png index 2f7be675d32..00e4088fb0d 100644 Binary files a/test/image/baselines/gl2d_shapes_below_traces.png and b/test/image/baselines/gl2d_shapes_below_traces.png differ diff --git a/test/image/baselines/gl2d_simple_inset.png b/test/image/baselines/gl2d_simple_inset.png index 14e28351f39..984425dbc16 100644 Binary files a/test/image/baselines/gl2d_simple_inset.png and b/test/image/baselines/gl2d_simple_inset.png differ diff --git a/test/image/baselines/gl2d_size_margins.png b/test/image/baselines/gl2d_size_margins.png index 75d4abfc5c8..09693a31e99 100644 Binary files a/test/image/baselines/gl2d_size_margins.png and b/test/image/baselines/gl2d_size_margins.png differ diff --git a/test/image/baselines/gl2d_stacked_coupled_subplots.png b/test/image/baselines/gl2d_stacked_coupled_subplots.png index 503308a69d7..38317546943 100644 Binary files a/test/image/baselines/gl2d_stacked_coupled_subplots.png and b/test/image/baselines/gl2d_stacked_coupled_subplots.png differ diff --git a/test/image/baselines/gl2d_stacked_subplots.png b/test/image/baselines/gl2d_stacked_subplots.png index 3490921751c..fc12a95f0fc 100644 Binary files a/test/image/baselines/gl2d_stacked_subplots.png and b/test/image/baselines/gl2d_stacked_subplots.png differ diff --git a/test/image/baselines/gl2d_subplots_anchor.png b/test/image/baselines/gl2d_subplots_anchor.png index 341f440ab3b..79d001ebe9f 100644 Binary files a/test/image/baselines/gl2d_subplots_anchor.png and b/test/image/baselines/gl2d_subplots_anchor.png differ diff --git a/test/image/baselines/gl2d_tick-labels.png b/test/image/baselines/gl2d_tick-labels.png index 90dd0b73832..8a6c89097f0 100644 Binary files a/test/image/baselines/gl2d_tick-labels.png and b/test/image/baselines/gl2d_tick-labels.png differ diff --git a/test/image/baselines/gl2d_ultra_zoom.png b/test/image/baselines/gl2d_ultra_zoom.png index 63d2efa81db..80d74df8db2 100644 Binary files a/test/image/baselines/gl2d_ultra_zoom.png and b/test/image/baselines/gl2d_ultra_zoom.png differ diff --git a/test/image/baselines/gl3d_annotations.png b/test/image/baselines/gl3d_annotations.png index 691ee233841..196fefebdd9 100644 Binary files a/test/image/baselines/gl3d_annotations.png and b/test/image/baselines/gl3d_annotations.png differ diff --git a/test/image/baselines/gl3d_autocolorscale.png b/test/image/baselines/gl3d_autocolorscale.png index 22601bd3c50..34f484773ce 100644 Binary files a/test/image/baselines/gl3d_autocolorscale.png and b/test/image/baselines/gl3d_autocolorscale.png differ diff --git a/test/image/baselines/gl3d_autorange-zero.png b/test/image/baselines/gl3d_autorange-zero.png index 47340e055a3..365a8e40dd9 100644 Binary files a/test/image/baselines/gl3d_autorange-zero.png and b/test/image/baselines/gl3d_autorange-zero.png differ diff --git a/test/image/baselines/gl3d_axes-visible-false.png b/test/image/baselines/gl3d_axes-visible-false.png index dab999eeddb..52002b06131 100644 Binary files a/test/image/baselines/gl3d_axes-visible-false.png and b/test/image/baselines/gl3d_axes-visible-false.png differ diff --git a/test/image/baselines/gl3d_bunny-hull.png b/test/image/baselines/gl3d_bunny-hull.png index 17acf19c946..ec62a32e150 100644 Binary files a/test/image/baselines/gl3d_bunny-hull.png and b/test/image/baselines/gl3d_bunny-hull.png differ diff --git a/test/image/baselines/gl3d_bunny.png b/test/image/baselines/gl3d_bunny.png index 50516e002a9..c7cf036b5af 100644 Binary files a/test/image/baselines/gl3d_bunny.png and b/test/image/baselines/gl3d_bunny.png differ diff --git a/test/image/baselines/gl3d_chrisp-nan-1.png b/test/image/baselines/gl3d_chrisp-nan-1.png index 5f4606ca222..7f863bd1660 100644 Binary files a/test/image/baselines/gl3d_chrisp-nan-1.png and b/test/image/baselines/gl3d_chrisp-nan-1.png differ diff --git a/test/image/baselines/gl3d_contour-lines.png b/test/image/baselines/gl3d_contour-lines.png index d9019b311e3..f125a88c75f 100644 Binary files a/test/image/baselines/gl3d_contour-lines.png and b/test/image/baselines/gl3d_contour-lines.png differ diff --git a/test/image/baselines/gl3d_convex-hull.png b/test/image/baselines/gl3d_convex-hull.png index 50516e002a9..c7cf036b5af 100644 Binary files a/test/image/baselines/gl3d_convex-hull.png and b/test/image/baselines/gl3d_convex-hull.png differ diff --git a/test/image/baselines/gl3d_cube.png b/test/image/baselines/gl3d_cube.png index 7dcd976113a..d14a922fa83 100644 Binary files a/test/image/baselines/gl3d_cube.png and b/test/image/baselines/gl3d_cube.png differ diff --git a/test/image/baselines/gl3d_cufflinks.png b/test/image/baselines/gl3d_cufflinks.png index 9568022f2a5..041c619820e 100644 Binary files a/test/image/baselines/gl3d_cufflinks.png and b/test/image/baselines/gl3d_cufflinks.png differ diff --git a/test/image/baselines/gl3d_delaunay.png b/test/image/baselines/gl3d_delaunay.png index 4fbd349c230..9b7f2d44e2c 100644 Binary files a/test/image/baselines/gl3d_delaunay.png and b/test/image/baselines/gl3d_delaunay.png differ diff --git a/test/image/baselines/gl3d_errorbars_sqrt.png b/test/image/baselines/gl3d_errorbars_sqrt.png index 7bc5cbd90e3..68045c6a208 100644 Binary files a/test/image/baselines/gl3d_errorbars_sqrt.png and b/test/image/baselines/gl3d_errorbars_sqrt.png differ diff --git a/test/image/baselines/gl3d_errorbars_zx.png b/test/image/baselines/gl3d_errorbars_zx.png index a2dfeb22621..6fba1bfc841 100644 Binary files a/test/image/baselines/gl3d_errorbars_zx.png and b/test/image/baselines/gl3d_errorbars_zx.png differ diff --git a/test/image/baselines/gl3d_errorbars_zy.png b/test/image/baselines/gl3d_errorbars_zy.png index dbd1a347c7c..2397d4312e4 100644 Binary files a/test/image/baselines/gl3d_errorbars_zy.png and b/test/image/baselines/gl3d_errorbars_zy.png differ diff --git a/test/image/baselines/gl3d_ibm-plot.png b/test/image/baselines/gl3d_ibm-plot.png index 7ee9d3a6045..ca80a55892e 100644 Binary files a/test/image/baselines/gl3d_ibm-plot.png and b/test/image/baselines/gl3d_ibm-plot.png differ diff --git a/test/image/baselines/gl3d_log-axis-big.png b/test/image/baselines/gl3d_log-axis-big.png index 7ebf8f9bac6..c4974b1fbfe 100644 Binary files a/test/image/baselines/gl3d_log-axis-big.png and b/test/image/baselines/gl3d_log-axis-big.png differ diff --git a/test/image/baselines/gl3d_log-axis.png b/test/image/baselines/gl3d_log-axis.png index 320c3ef1234..51a004ce200 100644 Binary files a/test/image/baselines/gl3d_log-axis.png and b/test/image/baselines/gl3d_log-axis.png differ diff --git a/test/image/baselines/gl3d_marker-arrays.png b/test/image/baselines/gl3d_marker-arrays.png index 4c9f244e107..057fde443ea 100644 Binary files a/test/image/baselines/gl3d_marker-arrays.png and b/test/image/baselines/gl3d_marker-arrays.png differ diff --git a/test/image/baselines/gl3d_marker-color.png b/test/image/baselines/gl3d_marker-color.png index a3e754340aa..270ccc667f6 100644 Binary files a/test/image/baselines/gl3d_marker-color.png and b/test/image/baselines/gl3d_marker-color.png differ diff --git a/test/image/baselines/gl3d_marker_symbols.png b/test/image/baselines/gl3d_marker_symbols.png index e80deb94182..a5f977122b0 100644 Binary files a/test/image/baselines/gl3d_marker_symbols.png and b/test/image/baselines/gl3d_marker_symbols.png differ diff --git a/test/image/baselines/gl3d_mirror-ticks.png b/test/image/baselines/gl3d_mirror-ticks.png index 8ad8963efab..43cabc53304 100644 Binary files a/test/image/baselines/gl3d_mirror-ticks.png and b/test/image/baselines/gl3d_mirror-ticks.png differ diff --git a/test/image/baselines/gl3d_multi-scene.png b/test/image/baselines/gl3d_multi-scene.png index 60c16a28cfb..2f2eb75509e 100644 Binary files a/test/image/baselines/gl3d_multi-scene.png and b/test/image/baselines/gl3d_multi-scene.png differ diff --git a/test/image/baselines/gl3d_nan-holes.png b/test/image/baselines/gl3d_nan-holes.png index 16a9193fa5f..55e25988ae0 100644 Binary files a/test/image/baselines/gl3d_nan-holes.png and b/test/image/baselines/gl3d_nan-holes.png differ diff --git a/test/image/baselines/gl3d_opacity-scaling-spikes.png b/test/image/baselines/gl3d_opacity-scaling-spikes.png index 433d49e74e1..c70b4811f15 100644 Binary files a/test/image/baselines/gl3d_opacity-scaling-spikes.png and b/test/image/baselines/gl3d_opacity-scaling-spikes.png differ diff --git a/test/image/baselines/gl3d_opacity-surface.png b/test/image/baselines/gl3d_opacity-surface.png index b0ae82b5ad7..72bcddf755c 100644 Binary files a/test/image/baselines/gl3d_opacity-surface.png and b/test/image/baselines/gl3d_opacity-surface.png differ diff --git a/test/image/baselines/gl3d_projection-traces.png b/test/image/baselines/gl3d_projection-traces.png index 1de40e957a8..1703ce0757e 100644 Binary files a/test/image/baselines/gl3d_projection-traces.png and b/test/image/baselines/gl3d_projection-traces.png differ diff --git a/test/image/baselines/gl3d_ribbons.png b/test/image/baselines/gl3d_ribbons.png index 7af7e756adb..ee4dd4a808d 100644 Binary files a/test/image/baselines/gl3d_ribbons.png and b/test/image/baselines/gl3d_ribbons.png differ diff --git a/test/image/baselines/gl3d_scatter-color-array.png b/test/image/baselines/gl3d_scatter-color-array.png index b0c2847bda7..ae779584880 100644 Binary files a/test/image/baselines/gl3d_scatter-color-array.png and b/test/image/baselines/gl3d_scatter-color-array.png differ diff --git a/test/image/baselines/gl3d_scatter-color-line-gradient.png b/test/image/baselines/gl3d_scatter-color-line-gradient.png index d09a868ea5c..f9e22eb1878 100644 Binary files a/test/image/baselines/gl3d_scatter-color-line-gradient.png and b/test/image/baselines/gl3d_scatter-color-line-gradient.png differ diff --git a/test/image/baselines/gl3d_scatter-color-mono-and-palette.png b/test/image/baselines/gl3d_scatter-color-mono-and-palette.png index b0c269c9ca0..3e299278677 100644 Binary files a/test/image/baselines/gl3d_scatter-color-mono-and-palette.png and b/test/image/baselines/gl3d_scatter-color-mono-and-palette.png differ diff --git a/test/image/baselines/gl3d_scatter-colorscale-marker.png b/test/image/baselines/gl3d_scatter-colorscale-marker.png index f3b29555313..0cfdd1cca56 100644 Binary files a/test/image/baselines/gl3d_scatter-colorscale-marker.png and b/test/image/baselines/gl3d_scatter-colorscale-marker.png differ diff --git a/test/image/baselines/gl3d_scatter3d-colorscale.png b/test/image/baselines/gl3d_scatter3d-colorscale.png index 7fccb43ac81..7b95d917f24 100644 Binary files a/test/image/baselines/gl3d_scatter3d-colorscale.png and b/test/image/baselines/gl3d_scatter3d-colorscale.png differ diff --git a/test/image/baselines/gl3d_scatter3d-connectgaps.png b/test/image/baselines/gl3d_scatter3d-connectgaps.png index a8c61187f56..b63cc042ff8 100644 Binary files a/test/image/baselines/gl3d_scatter3d-connectgaps.png and b/test/image/baselines/gl3d_scatter3d-connectgaps.png differ diff --git a/test/image/baselines/gl3d_set-ranges.png b/test/image/baselines/gl3d_set-ranges.png index 0a90ad42129..59ceeb7303b 100644 Binary files a/test/image/baselines/gl3d_set-ranges.png and b/test/image/baselines/gl3d_set-ranges.png differ diff --git a/test/image/baselines/gl3d_snowden.png b/test/image/baselines/gl3d_snowden.png index a1d15ad3eac..bb8a123a8fc 100644 Binary files a/test/image/baselines/gl3d_snowden.png and b/test/image/baselines/gl3d_snowden.png differ diff --git a/test/image/baselines/gl3d_snowden_altered.png b/test/image/baselines/gl3d_snowden_altered.png index c4a30fea97a..1985901af7c 100644 Binary files a/test/image/baselines/gl3d_snowden_altered.png and b/test/image/baselines/gl3d_snowden_altered.png differ diff --git a/test/image/baselines/gl3d_surface-circular-colorscale.png b/test/image/baselines/gl3d_surface-circular-colorscale.png index f329298b4cd..a2b019ed9c8 100644 Binary files a/test/image/baselines/gl3d_surface-circular-colorscale.png and b/test/image/baselines/gl3d_surface-circular-colorscale.png differ diff --git a/test/image/baselines/gl3d_surface-lighting.png b/test/image/baselines/gl3d_surface-lighting.png index f7274fad5b8..28679902274 100644 Binary files a/test/image/baselines/gl3d_surface-lighting.png and b/test/image/baselines/gl3d_surface-lighting.png differ diff --git a/test/image/baselines/gl3d_surface_intensity.png b/test/image/baselines/gl3d_surface_intensity.png index 3f7641c9211..3ae70728003 100644 Binary files a/test/image/baselines/gl3d_surface_intensity.png and b/test/image/baselines/gl3d_surface_intensity.png differ diff --git a/test/image/baselines/gl3d_tetrahedra.png b/test/image/baselines/gl3d_tetrahedra.png index 2cb8166778d..f001b36d720 100644 Binary files a/test/image/baselines/gl3d_tetrahedra.png and b/test/image/baselines/gl3d_tetrahedra.png differ diff --git a/test/image/baselines/gl3d_text-weirdness.png b/test/image/baselines/gl3d_text-weirdness.png index aa5ff8cb4aa..79ebf4991e1 100644 Binary files a/test/image/baselines/gl3d_text-weirdness.png and b/test/image/baselines/gl3d_text-weirdness.png differ diff --git a/test/image/baselines/gl3d_triangle.png b/test/image/baselines/gl3d_triangle.png index c6411b2704d..a84d5fcbb92 100644 Binary files a/test/image/baselines/gl3d_triangle.png and b/test/image/baselines/gl3d_triangle.png differ diff --git a/test/image/baselines/gl3d_wire-surface.png b/test/image/baselines/gl3d_wire-surface.png index 4666ab34c74..07f2695ea19 100644 Binary files a/test/image/baselines/gl3d_wire-surface.png and b/test/image/baselines/gl3d_wire-surface.png differ diff --git a/test/image/baselines/gl3d_world-cals.png b/test/image/baselines/gl3d_world-cals.png index f451f9795e7..045c41e2d9a 100644 Binary files a/test/image/baselines/gl3d_world-cals.png and b/test/image/baselines/gl3d_world-cals.png differ diff --git a/test/image/baselines/gl3d_xy-defined-ticks.png b/test/image/baselines/gl3d_xy-defined-ticks.png index c8dca015801..b4fe03995ba 100644 Binary files a/test/image/baselines/gl3d_xy-defined-ticks.png and b/test/image/baselines/gl3d_xy-defined-ticks.png differ diff --git a/test/image/baselines/gl3d_z-range.png b/test/image/baselines/gl3d_z-range.png index 1fd1d5ecbbd..8649fe29206 100644 Binary files a/test/image/baselines/gl3d_z-range.png and b/test/image/baselines/gl3d_z-range.png differ diff --git a/test/image/baselines/global_font.png b/test/image/baselines/global_font.png index 67e89da9600..ab93bac54e3 100644 Binary files a/test/image/baselines/global_font.png and b/test/image/baselines/global_font.png differ diff --git a/test/image/baselines/glpolar_scatter.png b/test/image/baselines/glpolar_scatter.png index d278a1bd29e..f1f21842795 100644 Binary files a/test/image/baselines/glpolar_scatter.png and b/test/image/baselines/glpolar_scatter.png differ diff --git a/test/image/baselines/glpolar_style.png b/test/image/baselines/glpolar_style.png index ed27de1ca04..5e00cd474f3 100644 Binary files a/test/image/baselines/glpolar_style.png and b/test/image/baselines/glpolar_style.png differ diff --git a/test/image/baselines/greens_heatmap.png b/test/image/baselines/greens_heatmap.png index bad2f220379..5fd930593da 100644 Binary files a/test/image/baselines/greens_heatmap.png and b/test/image/baselines/greens_heatmap.png differ diff --git a/test/image/baselines/greys_heatmap.png b/test/image/baselines/greys_heatmap.png index 9bf513496ff..d1768cdabfe 100644 Binary files a/test/image/baselines/greys_heatmap.png and b/test/image/baselines/greys_heatmap.png differ diff --git a/test/image/baselines/grid_subplot_types.png b/test/image/baselines/grid_subplot_types.png index 0864d7dc0c9..dcd01dec460 100644 Binary files a/test/image/baselines/grid_subplot_types.png and b/test/image/baselines/grid_subplot_types.png differ diff --git a/test/image/baselines/grouped_bar.png b/test/image/baselines/grouped_bar.png index e9140ee454d..60842a72e32 100644 Binary files a/test/image/baselines/grouped_bar.png and b/test/image/baselines/grouped_bar.png differ diff --git a/test/image/baselines/heatmap-reverse-autocolorscale.png b/test/image/baselines/heatmap-reverse-autocolorscale.png index c7dee07c4ac..b0e20c1ac01 100644 Binary files a/test/image/baselines/heatmap-reverse-autocolorscale.png and b/test/image/baselines/heatmap-reverse-autocolorscale.png differ diff --git a/test/image/baselines/heatmap_autocolor_negative.png b/test/image/baselines/heatmap_autocolor_negative.png index fab5d5bc8fa..32fa8e36b19 100644 Binary files a/test/image/baselines/heatmap_autocolor_negative.png and b/test/image/baselines/heatmap_autocolor_negative.png differ diff --git a/test/image/baselines/heatmap_autocolor_positive.png b/test/image/baselines/heatmap_autocolor_positive.png index edac6745845..1ea442d9cde 100644 Binary files a/test/image/baselines/heatmap_autocolor_positive.png and b/test/image/baselines/heatmap_autocolor_positive.png differ diff --git a/test/image/baselines/heatmap_brick_padding.png b/test/image/baselines/heatmap_brick_padding.png index d7e9f6e1549..0c4fb24b0dc 100644 Binary files a/test/image/baselines/heatmap_brick_padding.png and b/test/image/baselines/heatmap_brick_padding.png differ diff --git a/test/image/baselines/heatmap_contour_irregular_bricks.png b/test/image/baselines/heatmap_contour_irregular_bricks.png index 84a3a9ccb85..f5edaa27885 100644 Binary files a/test/image/baselines/heatmap_contour_irregular_bricks.png and b/test/image/baselines/heatmap_contour_irregular_bricks.png differ diff --git a/test/image/baselines/heatmap_multi-trace.png b/test/image/baselines/heatmap_multi-trace.png index 11693e76b76..3bc701bf9f7 100644 Binary files a/test/image/baselines/heatmap_multi-trace.png and b/test/image/baselines/heatmap_multi-trace.png differ diff --git a/test/image/baselines/heatmap_xyz-dates-and-categories.png b/test/image/baselines/heatmap_xyz-dates-and-categories.png index aaf59fd6ff6..b98a96dadb9 100644 Binary files a/test/image/baselines/heatmap_xyz-dates-and-categories.png and b/test/image/baselines/heatmap_xyz-dates-and-categories.png differ diff --git a/test/image/baselines/heatmap_xyz-gaps-on-sides.png b/test/image/baselines/heatmap_xyz-gaps-on-sides.png index c75a17cb44f..10f609a12bf 100644 Binary files a/test/image/baselines/heatmap_xyz-gaps-on-sides.png and b/test/image/baselines/heatmap_xyz-gaps-on-sides.png differ diff --git a/test/image/baselines/hist2d_summed.png b/test/image/baselines/hist2d_summed.png index c8a24409300..d23322aa86a 100644 Binary files a/test/image/baselines/hist2d_summed.png and b/test/image/baselines/hist2d_summed.png differ diff --git a/test/image/baselines/hist_003_to_093.png b/test/image/baselines/hist_003_to_093.png index 462f1cc64e3..60b3094ec4b 100644 Binary files a/test/image/baselines/hist_003_to_093.png and b/test/image/baselines/hist_003_to_093.png differ diff --git a/test/image/baselines/hist_003_to_1.png b/test/image/baselines/hist_003_to_1.png index 5e5b094a2dd..87e79647409 100644 Binary files a/test/image/baselines/hist_003_to_1.png and b/test/image/baselines/hist_003_to_1.png differ diff --git a/test/image/baselines/hist_0_to_093.png b/test/image/baselines/hist_0_to_093.png index 4715469f776..2afadf288ed 100644 Binary files a/test/image/baselines/hist_0_to_093.png and b/test/image/baselines/hist_0_to_093.png differ diff --git a/test/image/baselines/hist_0_to_1_midpoints.png b/test/image/baselines/hist_0_to_1_midpoints.png index 5ce60859f17..12cccbfed4a 100644 Binary files a/test/image/baselines/hist_0_to_1_midpoints.png and b/test/image/baselines/hist_0_to_1_midpoints.png differ diff --git a/test/image/baselines/hist_all_integer.png b/test/image/baselines/hist_all_integer.png index 6a995b6b7fc..2e803b54a13 100644 Binary files a/test/image/baselines/hist_all_integer.png and b/test/image/baselines/hist_all_integer.png differ diff --git a/test/image/baselines/hist_all_integer_n50.png b/test/image/baselines/hist_all_integer_n50.png index 50c27c9349f..09f0dea858e 100644 Binary files a/test/image/baselines/hist_all_integer_n50.png and b/test/image/baselines/hist_all_integer_n50.png differ diff --git a/test/image/baselines/hist_almost_integer.png b/test/image/baselines/hist_almost_integer.png index 0d360d10788..47999472dcb 100644 Binary files a/test/image/baselines/hist_almost_integer.png and b/test/image/baselines/hist_almost_integer.png differ diff --git a/test/image/baselines/hist_category.png b/test/image/baselines/hist_category.png index 7c6a03da963..a57a33b2741 100644 Binary files a/test/image/baselines/hist_category.png and b/test/image/baselines/hist_category.png differ diff --git a/test/image/baselines/hist_cum_stacked.png b/test/image/baselines/hist_cum_stacked.png index 29702797e23..626dc10231a 100644 Binary files a/test/image/baselines/hist_cum_stacked.png and b/test/image/baselines/hist_cum_stacked.png differ diff --git a/test/image/baselines/hist_grouped.png b/test/image/baselines/hist_grouped.png index a5d9e71a794..dc070206ca1 100644 Binary files a/test/image/baselines/hist_grouped.png and b/test/image/baselines/hist_grouped.png differ diff --git a/test/image/baselines/hist_stacked.png b/test/image/baselines/hist_stacked.png index 72cb9a5ec04..abc8dedcb5f 100644 Binary files a/test/image/baselines/hist_stacked.png and b/test/image/baselines/hist_stacked.png differ diff --git a/test/image/baselines/hist_summed.png b/test/image/baselines/hist_summed.png index 9f7a7cb5d15..757ce742070 100644 Binary files a/test/image/baselines/hist_summed.png and b/test/image/baselines/hist_summed.png differ diff --git a/test/image/baselines/hist_valid_ses.png b/test/image/baselines/hist_valid_ses.png index 8e71146a3fd..d176abc14d2 100644 Binary files a/test/image/baselines/hist_valid_ses.png and b/test/image/baselines/hist_valid_ses.png differ diff --git a/test/image/baselines/hist_valid_ses_y.png b/test/image/baselines/hist_valid_ses_y.png index 717588940d9..c4addb85e78 100644 Binary files a/test/image/baselines/hist_valid_ses_y.png and b/test/image/baselines/hist_valid_ses_y.png differ diff --git a/test/image/baselines/histogram_colorscale.png b/test/image/baselines/histogram_colorscale.png index 7dda32cbf18..8926d1ee861 100644 Binary files a/test/image/baselines/histogram_colorscale.png and b/test/image/baselines/histogram_colorscale.png differ diff --git a/test/image/baselines/hot_heatmap.png b/test/image/baselines/hot_heatmap.png index 584435ca57e..5b9bd210f17 100644 Binary files a/test/image/baselines/hot_heatmap.png and b/test/image/baselines/hot_heatmap.png differ diff --git a/test/image/baselines/japanese.png b/test/image/baselines/japanese.png index 3594fa47be8..4c5bdd0ffc1 100644 Binary files a/test/image/baselines/japanese.png and b/test/image/baselines/japanese.png differ diff --git a/test/image/baselines/jet_heatmap.png b/test/image/baselines/jet_heatmap.png index 885b29c8eaa..e7b399226f0 100644 Binary files a/test/image/baselines/jet_heatmap.png and b/test/image/baselines/jet_heatmap.png differ diff --git a/test/image/baselines/labelled_heatmap.png b/test/image/baselines/labelled_heatmap.png index f39c6852bcb..e50f33d2c95 100644 Binary files a/test/image/baselines/labelled_heatmap.png and b/test/image/baselines/labelled_heatmap.png differ diff --git a/test/image/baselines/layout-colorway.png b/test/image/baselines/layout-colorway.png index 87f397d1041..ce1930e59b1 100644 Binary files a/test/image/baselines/layout-colorway.png and b/test/image/baselines/layout-colorway.png differ diff --git a/test/image/baselines/layout_image.png b/test/image/baselines/layout_image.png index f09ebdccb2a..d1c31197e98 100644 Binary files a/test/image/baselines/layout_image.png and b/test/image/baselines/layout_image.png differ diff --git a/test/image/baselines/legend_horizontal.png b/test/image/baselines/legend_horizontal.png index 403ff3053fa..4b5f210deb1 100644 Binary files a/test/image/baselines/legend_horizontal.png and b/test/image/baselines/legend_horizontal.png differ diff --git a/test/image/baselines/legend_horizontal_autowrap.png b/test/image/baselines/legend_horizontal_autowrap.png index d3d284bf01a..ab000fa7e7d 100644 Binary files a/test/image/baselines/legend_horizontal_autowrap.png and b/test/image/baselines/legend_horizontal_autowrap.png differ diff --git a/test/image/baselines/legend_horizontal_groups.png b/test/image/baselines/legend_horizontal_groups.png index 29536dc9b0f..6638d00631d 100644 Binary files a/test/image/baselines/legend_horizontal_groups.png and b/test/image/baselines/legend_horizontal_groups.png differ diff --git a/test/image/baselines/legend_horizontal_one_row.png b/test/image/baselines/legend_horizontal_one_row.png index 4916fc09b63..7dcc605c439 100644 Binary files a/test/image/baselines/legend_horizontal_one_row.png and b/test/image/baselines/legend_horizontal_one_row.png differ diff --git a/test/image/baselines/legend_inside.png b/test/image/baselines/legend_inside.png index 7484b34e1be..6116a480c79 100644 Binary files a/test/image/baselines/legend_inside.png and b/test/image/baselines/legend_inside.png differ diff --git a/test/image/baselines/legend_labels.png b/test/image/baselines/legend_labels.png index 42cf8be2adc..210721e9a1e 100644 Binary files a/test/image/baselines/legend_labels.png and b/test/image/baselines/legend_labels.png differ diff --git a/test/image/baselines/legend_negative_y.png b/test/image/baselines/legend_negative_y.png index a7517cfeaf9..789ac607c11 100644 Binary files a/test/image/baselines/legend_negative_y.png and b/test/image/baselines/legend_negative_y.png differ diff --git a/test/image/baselines/legend_outside.png b/test/image/baselines/legend_outside.png index f6aa26a33d1..fe24956ee3e 100644 Binary files a/test/image/baselines/legend_outside.png and b/test/image/baselines/legend_outside.png differ diff --git a/test/image/baselines/legend_scroll.png b/test/image/baselines/legend_scroll.png index f072e5b5de5..44cb563dc82 100644 Binary files a/test/image/baselines/legend_scroll.png and b/test/image/baselines/legend_scroll.png differ diff --git a/test/image/baselines/legend_style.png b/test/image/baselines/legend_style.png index c3a4dbf6c8e..20efe36d91b 100644 Binary files a/test/image/baselines/legend_style.png and b/test/image/baselines/legend_style.png differ diff --git a/test/image/baselines/legend_visibility.png b/test/image/baselines/legend_visibility.png index 5f1e636add9..f6989d3009e 100644 Binary files a/test/image/baselines/legend_visibility.png and b/test/image/baselines/legend_visibility.png differ diff --git a/test/image/baselines/legendgroup.png b/test/image/baselines/legendgroup.png index ff8c3062c59..6f47bd0ea51 100644 Binary files a/test/image/baselines/legendgroup.png and b/test/image/baselines/legendgroup.png differ diff --git a/test/image/baselines/legendgroup_bar-stack.png b/test/image/baselines/legendgroup_bar-stack.png index 450334f264e..5c0031777bb 100644 Binary files a/test/image/baselines/legendgroup_bar-stack.png and b/test/image/baselines/legendgroup_bar-stack.png differ diff --git a/test/image/baselines/line_grid_color.png b/test/image/baselines/line_grid_color.png index d38e8b39c78..07cad5740c5 100644 Binary files a/test/image/baselines/line_grid_color.png and b/test/image/baselines/line_grid_color.png differ diff --git a/test/image/baselines/line_grid_width.png b/test/image/baselines/line_grid_width.png index da67496c1a9..13109d8ea26 100644 Binary files a/test/image/baselines/line_grid_width.png and b/test/image/baselines/line_grid_width.png differ diff --git a/test/image/baselines/line_scatter.png b/test/image/baselines/line_scatter.png index adeb1143d83..09b3cc1f210 100644 Binary files a/test/image/baselines/line_scatter.png and b/test/image/baselines/line_scatter.png differ diff --git a/test/image/baselines/line_style.png b/test/image/baselines/line_style.png index 1ca745a9632..af2636ff011 100644 Binary files a/test/image/baselines/line_style.png and b/test/image/baselines/line_style.png differ diff --git a/test/image/baselines/long_axis_labels.png b/test/image/baselines/long_axis_labels.png index 77ba28cc14a..d04d47ac9c4 100644 Binary files a/test/image/baselines/long_axis_labels.png and b/test/image/baselines/long_axis_labels.png differ diff --git a/test/image/baselines/mapbox_0.png b/test/image/baselines/mapbox_0.png index 68b8dee4b15..caad668f792 100644 Binary files a/test/image/baselines/mapbox_0.png and b/test/image/baselines/mapbox_0.png differ diff --git a/test/image/baselines/mapbox_angles.png b/test/image/baselines/mapbox_angles.png index 0fabd18879c..40f4672652b 100644 Binary files a/test/image/baselines/mapbox_angles.png and b/test/image/baselines/mapbox_angles.png differ diff --git a/test/image/baselines/mapbox_bubbles-text.png b/test/image/baselines/mapbox_bubbles-text.png index a36d9aba981..547557a1797 100644 Binary files a/test/image/baselines/mapbox_bubbles-text.png and b/test/image/baselines/mapbox_bubbles-text.png differ diff --git a/test/image/baselines/mapbox_bubbles.png b/test/image/baselines/mapbox_bubbles.png index 0fe4978231d..d1bf0073a46 100644 Binary files a/test/image/baselines/mapbox_bubbles.png and b/test/image/baselines/mapbox_bubbles.png differ diff --git a/test/image/baselines/mapbox_connectgaps.png b/test/image/baselines/mapbox_connectgaps.png index cb6e1eec4cc..406509db1f4 100644 Binary files a/test/image/baselines/mapbox_connectgaps.png and b/test/image/baselines/mapbox_connectgaps.png differ diff --git a/test/image/baselines/mapbox_custom-style.png b/test/image/baselines/mapbox_custom-style.png index dca5187424e..9e4999f9c32 100644 Binary files a/test/image/baselines/mapbox_custom-style.png and b/test/image/baselines/mapbox_custom-style.png differ diff --git a/test/image/baselines/mapbox_fill.png b/test/image/baselines/mapbox_fill.png index 0291fcc60e9..404ea6ccff6 100644 Binary files a/test/image/baselines/mapbox_fill.png and b/test/image/baselines/mapbox_fill.png differ diff --git a/test/image/baselines/mapbox_layers.png b/test/image/baselines/mapbox_layers.png index edfa60da6eb..045749ea4f1 100644 Binary files a/test/image/baselines/mapbox_layers.png and b/test/image/baselines/mapbox_layers.png differ diff --git a/test/image/baselines/mapbox_symbol-text.png b/test/image/baselines/mapbox_symbol-text.png index d7f3ddf8233..206b80bbec7 100644 Binary files a/test/image/baselines/mapbox_symbol-text.png and b/test/image/baselines/mapbox_symbol-text.png differ diff --git a/test/image/baselines/marker_line_width.png b/test/image/baselines/marker_line_width.png index 77f6bb59ee0..ecef916d890 100644 Binary files a/test/image/baselines/marker_line_width.png and b/test/image/baselines/marker_line_width.png differ diff --git a/test/image/baselines/marker_symbols.png b/test/image/baselines/marker_symbols.png index 527a3fa66df..416b91f7f5f 100644 Binary files a/test/image/baselines/marker_symbols.png and b/test/image/baselines/marker_symbols.png differ diff --git a/test/image/baselines/mathjax.png b/test/image/baselines/mathjax.png index 95f086468c5..0bef7b16154 100644 Binary files a/test/image/baselines/mathjax.png and b/test/image/baselines/mathjax.png differ diff --git a/test/image/baselines/multiple_axes_double.png b/test/image/baselines/multiple_axes_double.png index 881054c41fc..ae6bbf6c4a9 100644 Binary files a/test/image/baselines/multiple_axes_double.png and b/test/image/baselines/multiple_axes_double.png differ diff --git a/test/image/baselines/multiple_axes_multiple.png b/test/image/baselines/multiple_axes_multiple.png index d079a9c597d..65ee3a6b0d3 100644 Binary files a/test/image/baselines/multiple_axes_multiple.png and b/test/image/baselines/multiple_axes_multiple.png differ diff --git a/test/image/baselines/multiple_subplots.png b/test/image/baselines/multiple_subplots.png index 758c5a99ff2..e27aea15408 100644 Binary files a/test/image/baselines/multiple_subplots.png and b/test/image/baselines/multiple_subplots.png differ diff --git a/test/image/baselines/ohlc_first.png b/test/image/baselines/ohlc_first.png index 8615422ad20..23c6783f745 100644 Binary files a/test/image/baselines/ohlc_first.png and b/test/image/baselines/ohlc_first.png differ diff --git a/test/image/baselines/overlaying-axis-lines.png b/test/image/baselines/overlaying-axis-lines.png index 1f9bb7017ac..ffbcd5a33a9 100644 Binary files a/test/image/baselines/overlaying-axis-lines.png and b/test/image/baselines/overlaying-axis-lines.png differ diff --git a/test/image/baselines/percent_error_bar.png b/test/image/baselines/percent_error_bar.png index 93c9fb3760c..92192a0e50f 100644 Binary files a/test/image/baselines/percent_error_bar.png and b/test/image/baselines/percent_error_bar.png differ diff --git a/test/image/baselines/picnic_heatmap.png b/test/image/baselines/picnic_heatmap.png index 7f954f5cfb9..f30ab646807 100644 Binary files a/test/image/baselines/picnic_heatmap.png and b/test/image/baselines/picnic_heatmap.png differ diff --git a/test/image/baselines/pie_aggregated.png b/test/image/baselines/pie_aggregated.png index 576ae7dd8c6..0b1ddeb6f39 100644 Binary files a/test/image/baselines/pie_aggregated.png and b/test/image/baselines/pie_aggregated.png differ diff --git a/test/image/baselines/pie_fonts.png b/test/image/baselines/pie_fonts.png index 604622b3ad0..b23f0064fbc 100644 Binary files a/test/image/baselines/pie_fonts.png and b/test/image/baselines/pie_fonts.png differ diff --git a/test/image/baselines/pie_label0_dlabel.png b/test/image/baselines/pie_label0_dlabel.png index c894b985d75..7a6c168adfa 100644 Binary files a/test/image/baselines/pie_label0_dlabel.png and b/test/image/baselines/pie_label0_dlabel.png differ diff --git a/test/image/baselines/pie_labels_colors_text.png b/test/image/baselines/pie_labels_colors_text.png index 15862a61eb9..1975b5e0629 100644 Binary files a/test/image/baselines/pie_labels_colors_text.png and b/test/image/baselines/pie_labels_colors_text.png differ diff --git a/test/image/baselines/pie_scale_textpos_hideslices.png b/test/image/baselines/pie_scale_textpos_hideslices.png index 72e8241f847..d225865c690 100644 Binary files a/test/image/baselines/pie_scale_textpos_hideslices.png and b/test/image/baselines/pie_scale_textpos_hideslices.png differ diff --git a/test/image/baselines/pie_simple.png b/test/image/baselines/pie_simple.png index 516515244a7..dfe155deb03 100644 Binary files a/test/image/baselines/pie_simple.png and b/test/image/baselines/pie_simple.png differ diff --git a/test/image/baselines/pie_sort_direction.png b/test/image/baselines/pie_sort_direction.png index 49b6212bc9f..8db2d2a0497 100644 Binary files a/test/image/baselines/pie_sort_direction.png and b/test/image/baselines/pie_sort_direction.png differ diff --git a/test/image/baselines/pie_style.png b/test/image/baselines/pie_style.png index 14a7aca811d..ccd2da3fbf3 100644 Binary files a/test/image/baselines/pie_style.png and b/test/image/baselines/pie_style.png differ diff --git a/test/image/baselines/pie_style_arrays.png b/test/image/baselines/pie_style_arrays.png index 17f06ef2218..ad0537b564c 100644 Binary files a/test/image/baselines/pie_style_arrays.png and b/test/image/baselines/pie_style_arrays.png differ diff --git a/test/image/baselines/plot_types.png b/test/image/baselines/plot_types.png index 765645e7924..af8aed6e3c5 100644 Binary files a/test/image/baselines/plot_types.png and b/test/image/baselines/plot_types.png differ diff --git a/test/image/baselines/point-selection.png b/test/image/baselines/point-selection.png index 396cf75cad1..9b27473f7ac 100644 Binary files a/test/image/baselines/point-selection.png and b/test/image/baselines/point-selection.png differ diff --git a/test/image/baselines/point-selection2.png b/test/image/baselines/point-selection2.png index 8a898869141..00f2e2306cd 100644 Binary files a/test/image/baselines/point-selection2.png and b/test/image/baselines/point-selection2.png differ diff --git a/test/image/baselines/polar_area_chart.png b/test/image/baselines/polar_area_chart.png index 948febef78e..e7fe1dc6416 100644 Binary files a/test/image/baselines/polar_area_chart.png and b/test/image/baselines/polar_area_chart.png differ diff --git a/test/image/baselines/polar_blank.png b/test/image/baselines/polar_blank.png index d5c9b75dd63..984bab49b6c 100644 Binary files a/test/image/baselines/polar_blank.png and b/test/image/baselines/polar_blank.png differ diff --git a/test/image/baselines/polar_categories.png b/test/image/baselines/polar_categories.png index 36e92602dc3..603318d8c29 100644 Binary files a/test/image/baselines/polar_categories.png and b/test/image/baselines/polar_categories.png differ diff --git a/test/image/baselines/polar_dates.png b/test/image/baselines/polar_dates.png index 5ae17bc9f23..90255ba8e74 100644 Binary files a/test/image/baselines/polar_dates.png and b/test/image/baselines/polar_dates.png differ diff --git a/test/image/baselines/polar_direction.png b/test/image/baselines/polar_direction.png index 967aead4abc..81784a31612 100644 Binary files a/test/image/baselines/polar_direction.png and b/test/image/baselines/polar_direction.png differ diff --git a/test/image/baselines/polar_fills.png b/test/image/baselines/polar_fills.png index efd3df8448b..6aaea20f42f 100644 Binary files a/test/image/baselines/polar_fills.png and b/test/image/baselines/polar_fills.png differ diff --git a/test/image/baselines/polar_line.png b/test/image/baselines/polar_line.png index 8b5849a3303..ad8883c4830 100644 Binary files a/test/image/baselines/polar_line.png and b/test/image/baselines/polar_line.png differ diff --git a/test/image/baselines/polar_radial-range.png b/test/image/baselines/polar_radial-range.png index 56e6f4a853c..8bdf8639639 100644 Binary files a/test/image/baselines/polar_radial-range.png and b/test/image/baselines/polar_radial-range.png differ diff --git a/test/image/baselines/polar_scatter.png b/test/image/baselines/polar_scatter.png index 2a94c6851c4..da4a1aace2f 100644 Binary files a/test/image/baselines/polar_scatter.png and b/test/image/baselines/polar_scatter.png differ diff --git a/test/image/baselines/polar_sector.png b/test/image/baselines/polar_sector.png index 78e5585892a..ad31a0ee77d 100644 Binary files a/test/image/baselines/polar_sector.png and b/test/image/baselines/polar_sector.png differ diff --git a/test/image/baselines/polar_subplots.png b/test/image/baselines/polar_subplots.png index ad3d762b395..de5d56905d9 100644 Binary files a/test/image/baselines/polar_subplots.png and b/test/image/baselines/polar_subplots.png differ diff --git a/test/image/baselines/polar_ticks.png b/test/image/baselines/polar_ticks.png index 2cb629b084a..f96e1ed3b25 100644 Binary files a/test/image/baselines/polar_ticks.png and b/test/image/baselines/polar_ticks.png differ diff --git a/test/image/baselines/portland_heatmap.png b/test/image/baselines/portland_heatmap.png index 62f9fec2572..e45777e8f98 100644 Binary files a/test/image/baselines/portland_heatmap.png and b/test/image/baselines/portland_heatmap.png differ diff --git a/test/image/baselines/pseudo_html.png b/test/image/baselines/pseudo_html.png index a3b74e18888..c485438f6c5 100644 Binary files a/test/image/baselines/pseudo_html.png and b/test/image/baselines/pseudo_html.png differ diff --git a/test/image/baselines/range_selector.png b/test/image/baselines/range_selector.png index 523dc5d3ffe..8dd2c75e735 100644 Binary files a/test/image/baselines/range_selector.png and b/test/image/baselines/range_selector.png differ diff --git a/test/image/baselines/range_selector_style.png b/test/image/baselines/range_selector_style.png index 7bc630a406e..c38c89466b0 100644 Binary files a/test/image/baselines/range_selector_style.png and b/test/image/baselines/range_selector_style.png differ diff --git a/test/image/baselines/range_slider.png b/test/image/baselines/range_slider.png index 29e44cb026a..e54c5100ec8 100644 Binary files a/test/image/baselines/range_slider.png and b/test/image/baselines/range_slider.png differ diff --git a/test/image/baselines/range_slider_axes_double.png b/test/image/baselines/range_slider_axes_double.png index e229362757a..52ac7724164 100644 Binary files a/test/image/baselines/range_slider_axes_double.png and b/test/image/baselines/range_slider_axes_double.png differ diff --git a/test/image/baselines/range_slider_axes_stacked.png b/test/image/baselines/range_slider_axes_stacked.png index fcf3de9e668..ed8869badd5 100644 Binary files a/test/image/baselines/range_slider_axes_stacked.png and b/test/image/baselines/range_slider_axes_stacked.png differ diff --git a/test/image/baselines/range_slider_box.png b/test/image/baselines/range_slider_box.png index ab16195a328..e94cb690829 100644 Binary files a/test/image/baselines/range_slider_box.png and b/test/image/baselines/range_slider_box.png differ diff --git a/test/image/baselines/range_slider_initial_expanded.png b/test/image/baselines/range_slider_initial_expanded.png index cd4639e40b9..538ef78ec5f 100644 Binary files a/test/image/baselines/range_slider_initial_expanded.png and b/test/image/baselines/range_slider_initial_expanded.png differ diff --git a/test/image/baselines/range_slider_initial_valid.png b/test/image/baselines/range_slider_initial_valid.png index ae79d9e748a..baf48e2dcff 100644 Binary files a/test/image/baselines/range_slider_initial_valid.png and b/test/image/baselines/range_slider_initial_valid.png differ diff --git a/test/image/baselines/range_slider_multiple.png b/test/image/baselines/range_slider_multiple.png index 5761b38161d..fc7e304213a 100644 Binary files a/test/image/baselines/range_slider_multiple.png and b/test/image/baselines/range_slider_multiple.png differ diff --git a/test/image/baselines/range_slider_rangemode.png b/test/image/baselines/range_slider_rangemode.png index 0915d37b06d..8856c259be7 100644 Binary files a/test/image/baselines/range_slider_rangemode.png and b/test/image/baselines/range_slider_rangemode.png differ diff --git a/test/image/baselines/rdbu_heatmap.png b/test/image/baselines/rdbu_heatmap.png index 41c11ed27cf..45e4192e237 100644 Binary files a/test/image/baselines/rdbu_heatmap.png and b/test/image/baselines/rdbu_heatmap.png differ diff --git a/test/image/baselines/sankey_energy.png b/test/image/baselines/sankey_energy.png index 0e059234f0b..9707e211bbd 100644 Binary files a/test/image/baselines/sankey_energy.png and b/test/image/baselines/sankey_energy.png differ diff --git a/test/image/baselines/sankey_energy_dark.png b/test/image/baselines/sankey_energy_dark.png index b2feea2325f..47515ada5e4 100644 Binary files a/test/image/baselines/sankey_energy_dark.png and b/test/image/baselines/sankey_energy_dark.png differ diff --git a/test/image/baselines/scatter-colorscale-colorbar.png b/test/image/baselines/scatter-colorscale-colorbar.png index 2ddf0dd7334..c70aa79e749 100644 Binary files a/test/image/baselines/scatter-colorscale-colorbar.png and b/test/image/baselines/scatter-colorscale-colorbar.png differ diff --git a/test/image/baselines/scatter-marker-line-colorscales.png b/test/image/baselines/scatter-marker-line-colorscales.png index 21fd18d8fe5..5ebef5096fc 100644 Binary files a/test/image/baselines/scatter-marker-line-colorscales.png and b/test/image/baselines/scatter-marker-line-colorscales.png differ diff --git a/test/image/baselines/scatter_fill_corner_cases.png b/test/image/baselines/scatter_fill_corner_cases.png index a1a0f823451..2028b5a64b1 100644 Binary files a/test/image/baselines/scatter_fill_corner_cases.png and b/test/image/baselines/scatter_fill_corner_cases.png differ diff --git a/test/image/baselines/scatter_fill_no_opacity.png b/test/image/baselines/scatter_fill_no_opacity.png index 4bf8cd022a0..6d2de4703a6 100644 Binary files a/test/image/baselines/scatter_fill_no_opacity.png and b/test/image/baselines/scatter_fill_no_opacity.png differ diff --git a/test/image/baselines/scatter_fill_self_next.png b/test/image/baselines/scatter_fill_self_next.png index d3f7d725e63..00173535945 100644 Binary files a/test/image/baselines/scatter_fill_self_next.png and b/test/image/baselines/scatter_fill_self_next.png differ diff --git a/test/image/baselines/scatter_fill_self_opacity.png b/test/image/baselines/scatter_fill_self_opacity.png index 98909f7d68d..f62d6b869ce 100644 Binary files a/test/image/baselines/scatter_fill_self_opacity.png and b/test/image/baselines/scatter_fill_self_opacity.png differ diff --git a/test/image/baselines/scattercarpet.png b/test/image/baselines/scattercarpet.png index 3280b772845..1b801b324db 100644 Binary files a/test/image/baselines/scattercarpet.png and b/test/image/baselines/scattercarpet.png differ diff --git a/test/image/baselines/shapes.png b/test/image/baselines/shapes.png index 0e15050b950..aeae53fb7ca 100644 Binary files a/test/image/baselines/shapes.png and b/test/image/baselines/shapes.png differ diff --git a/test/image/baselines/shapes_below_traces.png b/test/image/baselines/shapes_below_traces.png index 73d260a5075..4e5ff7b992e 100644 Binary files a/test/image/baselines/shapes_below_traces.png and b/test/image/baselines/shapes_below_traces.png differ diff --git a/test/image/baselines/shared_axes_subplots.png b/test/image/baselines/shared_axes_subplots.png index 2085aca7e59..fa38833a8e6 100644 Binary files a/test/image/baselines/shared_axes_subplots.png and b/test/image/baselines/shared_axes_subplots.png differ diff --git a/test/image/baselines/show_legend.png b/test/image/baselines/show_legend.png index b6f58199b47..d3f48fdbf65 100644 Binary files a/test/image/baselines/show_legend.png and b/test/image/baselines/show_legend.png differ diff --git a/test/image/baselines/simple_annotation.png b/test/image/baselines/simple_annotation.png index 4b53beff143..2f959fac656 100644 Binary files a/test/image/baselines/simple_annotation.png and b/test/image/baselines/simple_annotation.png differ diff --git a/test/image/baselines/simple_contour.png b/test/image/baselines/simple_contour.png index cb82364e1ff..eef3f6012a8 100644 Binary files a/test/image/baselines/simple_contour.png and b/test/image/baselines/simple_contour.png differ diff --git a/test/image/baselines/simple_inset.png b/test/image/baselines/simple_inset.png index fc65db8d341..a9364a1227c 100644 Binary files a/test/image/baselines/simple_inset.png and b/test/image/baselines/simple_inset.png differ diff --git a/test/image/baselines/simple_subplot.png b/test/image/baselines/simple_subplot.png index 7d31e4c8232..7c48f8af953 100644 Binary files a/test/image/baselines/simple_subplot.png and b/test/image/baselines/simple_subplot.png differ diff --git a/test/image/baselines/size_margins.png b/test/image/baselines/size_margins.png index 4f5561a79ee..004c9efd86a 100644 Binary files a/test/image/baselines/size_margins.png and b/test/image/baselines/size_margins.png differ diff --git a/test/image/baselines/sliders.png b/test/image/baselines/sliders.png index 9f1ecd2338c..53764f96f60 100644 Binary files a/test/image/baselines/sliders.png and b/test/image/baselines/sliders.png differ diff --git a/test/image/baselines/splom_0.png b/test/image/baselines/splom_0.png index e4729fe2691..49b2eadc671 100644 Binary files a/test/image/baselines/splom_0.png and b/test/image/baselines/splom_0.png differ diff --git a/test/image/baselines/splom_array-styles.png b/test/image/baselines/splom_array-styles.png index d608b2f9d40..f0d09526c31 100644 Binary files a/test/image/baselines/splom_array-styles.png and b/test/image/baselines/splom_array-styles.png differ diff --git a/test/image/baselines/splom_dates.png b/test/image/baselines/splom_dates.png index fa6cfc8aa57..1959edca1e2 100644 Binary files a/test/image/baselines/splom_dates.png and b/test/image/baselines/splom_dates.png differ diff --git a/test/image/baselines/splom_iris.png b/test/image/baselines/splom_iris.png index a97f4c5b85a..cf86f14a7e4 100644 Binary files a/test/image/baselines/splom_iris.png and b/test/image/baselines/splom_iris.png differ diff --git a/test/image/baselines/splom_large.png b/test/image/baselines/splom_large.png index 1fcf729c532..5ec199360f7 100644 Binary files a/test/image/baselines/splom_large.png and b/test/image/baselines/splom_large.png differ diff --git a/test/image/baselines/splom_log.png b/test/image/baselines/splom_log.png index e32063f9f3e..ef4920d90ee 100644 Binary files a/test/image/baselines/splom_log.png and b/test/image/baselines/splom_log.png differ diff --git a/test/image/baselines/splom_lower-nodiag.png b/test/image/baselines/splom_lower-nodiag.png index 1a4f8f587ac..2c06d6b2e75 100644 Binary files a/test/image/baselines/splom_lower-nodiag.png and b/test/image/baselines/splom_lower-nodiag.png differ diff --git a/test/image/baselines/splom_lower.png b/test/image/baselines/splom_lower.png index d3a4518a7bf..59e04bff73a 100644 Binary files a/test/image/baselines/splom_lower.png and b/test/image/baselines/splom_lower.png differ diff --git a/test/image/baselines/splom_ragged-via-axes.png b/test/image/baselines/splom_ragged-via-axes.png index b3a54479fa2..533d847dda5 100644 Binary files a/test/image/baselines/splom_ragged-via-axes.png and b/test/image/baselines/splom_ragged-via-axes.png differ diff --git a/test/image/baselines/splom_ragged-via-visible-false.png b/test/image/baselines/splom_ragged-via-visible-false.png index 8b95fff9ffb..2a21169e29f 100644 Binary files a/test/image/baselines/splom_ragged-via-visible-false.png and b/test/image/baselines/splom_ragged-via-visible-false.png differ diff --git a/test/image/baselines/splom_upper-nodiag.png b/test/image/baselines/splom_upper-nodiag.png index 9398120da17..005d1d5ef7b 100644 Binary files a/test/image/baselines/splom_upper-nodiag.png and b/test/image/baselines/splom_upper-nodiag.png differ diff --git a/test/image/baselines/splom_upper.png b/test/image/baselines/splom_upper.png index 2d955d8643d..11014747d2d 100644 Binary files a/test/image/baselines/splom_upper.png and b/test/image/baselines/splom_upper.png differ diff --git a/test/image/baselines/splom_with-cartesian.png b/test/image/baselines/splom_with-cartesian.png index db20b630af7..558c938be16 100644 Binary files a/test/image/baselines/splom_with-cartesian.png and b/test/image/baselines/splom_with-cartesian.png differ diff --git a/test/image/baselines/stacked_bar.png b/test/image/baselines/stacked_bar.png index bfc13442208..8450337bca0 100644 Binary files a/test/image/baselines/stacked_bar.png and b/test/image/baselines/stacked_bar.png differ diff --git a/test/image/baselines/stacked_coupled_subplots.png b/test/image/baselines/stacked_coupled_subplots.png index c93292fe44c..9170de80b00 100644 Binary files a/test/image/baselines/stacked_coupled_subplots.png and b/test/image/baselines/stacked_coupled_subplots.png differ diff --git a/test/image/baselines/stacked_subplots.png b/test/image/baselines/stacked_subplots.png index 6dc0e46a2da..d53b8fc3907 100644 Binary files a/test/image/baselines/stacked_subplots.png and b/test/image/baselines/stacked_subplots.png differ diff --git a/test/image/baselines/stacked_subplots_shared_yaxis.png b/test/image/baselines/stacked_subplots_shared_yaxis.png index 5e3f6461feb..2eb5d97ebc0 100644 Binary files a/test/image/baselines/stacked_subplots_shared_yaxis.png and b/test/image/baselines/stacked_subplots_shared_yaxis.png differ diff --git a/test/image/baselines/style_bar.png b/test/image/baselines/style_bar.png index 20a8623d492..e9cd34166af 100644 Binary files a/test/image/baselines/style_bar.png and b/test/image/baselines/style_bar.png differ diff --git a/test/image/baselines/styling_names.png b/test/image/baselines/styling_names.png index f78f6679339..bbad5e93313 100644 Binary files a/test/image/baselines/styling_names.png and b/test/image/baselines/styling_names.png differ diff --git a/test/image/baselines/table_latex_multitrace_scatter.png b/test/image/baselines/table_latex_multitrace_scatter.png index ff39013e729..57046e34202 100644 Binary files a/test/image/baselines/table_latex_multitrace_scatter.png and b/test/image/baselines/table_latex_multitrace_scatter.png differ diff --git a/test/image/baselines/table_plain_birds.png b/test/image/baselines/table_plain_birds.png index 7e697a7e6b8..e0e33eeaa06 100644 Binary files a/test/image/baselines/table_plain_birds.png and b/test/image/baselines/table_plain_birds.png differ diff --git a/test/image/baselines/table_ragged.png b/test/image/baselines/table_ragged.png index bb1b7b4f5da..4c3d9e9407c 100644 Binary files a/test/image/baselines/table_ragged.png and b/test/image/baselines/table_ragged.png differ diff --git a/test/image/baselines/table_wrapped_birds.png b/test/image/baselines/table_wrapped_birds.png index e62e2a0b792..1f08d11bdaa 100644 Binary files a/test/image/baselines/table_wrapped_birds.png and b/test/image/baselines/table_wrapped_birds.png differ diff --git a/test/image/baselines/ternary_array_styles.png b/test/image/baselines/ternary_array_styles.png index 2ed0c033b92..5401e7ecb41 100644 Binary files a/test/image/baselines/ternary_array_styles.png and b/test/image/baselines/ternary_array_styles.png differ diff --git a/test/image/baselines/ternary_axis_layers.png b/test/image/baselines/ternary_axis_layers.png index 36daec4b21d..19af9cf43ce 100644 Binary files a/test/image/baselines/ternary_axis_layers.png and b/test/image/baselines/ternary_axis_layers.png differ diff --git a/test/image/baselines/ternary_fill.png b/test/image/baselines/ternary_fill.png index b7e6f58998d..3c5eff2744f 100644 Binary files a/test/image/baselines/ternary_fill.png and b/test/image/baselines/ternary_fill.png differ diff --git a/test/image/baselines/ternary_lines.png b/test/image/baselines/ternary_lines.png index 7299fedff74..c8f0514245f 100644 Binary files a/test/image/baselines/ternary_lines.png and b/test/image/baselines/ternary_lines.png differ diff --git a/test/image/baselines/ternary_markers.png b/test/image/baselines/ternary_markers.png index 84ce180097b..61b1fe8fc3c 100644 Binary files a/test/image/baselines/ternary_markers.png and b/test/image/baselines/ternary_markers.png differ diff --git a/test/image/baselines/ternary_multiple.png b/test/image/baselines/ternary_multiple.png index 68045c78cd7..257986d8e40 100644 Binary files a/test/image/baselines/ternary_multiple.png and b/test/image/baselines/ternary_multiple.png differ diff --git a/test/image/baselines/ternary_simple.png b/test/image/baselines/ternary_simple.png index 29486ca35bb..33b2ec5783b 100644 Binary files a/test/image/baselines/ternary_simple.png and b/test/image/baselines/ternary_simple.png differ diff --git a/test/image/baselines/text_chart_arrays.png b/test/image/baselines/text_chart_arrays.png index 35aeedc3843..a7540f19fc8 100644 Binary files a/test/image/baselines/text_chart_arrays.png and b/test/image/baselines/text_chart_arrays.png differ diff --git a/test/image/baselines/text_chart_basic.png b/test/image/baselines/text_chart_basic.png index 0e542d274a7..58c254f3568 100644 Binary files a/test/image/baselines/text_chart_basic.png and b/test/image/baselines/text_chart_basic.png differ diff --git a/test/image/baselines/text_chart_invalid-arrays.png b/test/image/baselines/text_chart_invalid-arrays.png index b639e31f0d4..f7bd5e77812 100644 Binary files a/test/image/baselines/text_chart_invalid-arrays.png and b/test/image/baselines/text_chart_invalid-arrays.png differ diff --git a/test/image/baselines/text_chart_single-string.png b/test/image/baselines/text_chart_single-string.png index 809ed3df2e9..904100f46f6 100644 Binary files a/test/image/baselines/text_chart_single-string.png and b/test/image/baselines/text_chart_single-string.png differ diff --git a/test/image/baselines/text_chart_styling.png b/test/image/baselines/text_chart_styling.png index fcfcd89fe4a..2c533f37242 100644 Binary files a/test/image/baselines/text_chart_styling.png and b/test/image/baselines/text_chart_styling.png differ diff --git a/test/image/baselines/text_export.png b/test/image/baselines/text_export.png index 199caa079a7..0dafaeca98e 100644 Binary files a/test/image/baselines/text_export.png and b/test/image/baselines/text_export.png differ diff --git a/test/image/baselines/tick-datafn.png b/test/image/baselines/tick-datafn.png index 581cceee7d8..6107d7f1309 100644 Binary files a/test/image/baselines/tick-datafn.png and b/test/image/baselines/tick-datafn.png differ diff --git a/test/image/baselines/tick_attributes.png b/test/image/baselines/tick_attributes.png index b61495409d9..eb87d173194 100644 Binary files a/test/image/baselines/tick_attributes.png and b/test/image/baselines/tick_attributes.png differ diff --git a/test/image/baselines/tick_prefix_suffix.png b/test/image/baselines/tick_prefix_suffix.png index 16678317b9a..9fa60d29249 100644 Binary files a/test/image/baselines/tick_prefix_suffix.png and b/test/image/baselines/tick_prefix_suffix.png differ diff --git a/test/image/baselines/tick_prefix_suffix_exponent.png b/test/image/baselines/tick_prefix_suffix_exponent.png index 63ad56e0800..68e1c2472a1 100644 Binary files a/test/image/baselines/tick_prefix_suffix_exponent.png and b/test/image/baselines/tick_prefix_suffix_exponent.png differ diff --git a/test/image/baselines/tickformat.png b/test/image/baselines/tickformat.png index 971418b83a5..8d4277d410b 100644 Binary files a/test/image/baselines/tickformat.png and b/test/image/baselines/tickformat.png differ diff --git a/test/image/baselines/tickformatstops.png b/test/image/baselines/tickformatstops.png index 3f0e66f942d..eeb6712590e 100644 Binary files a/test/image/baselines/tickformatstops.png and b/test/image/baselines/tickformatstops.png differ diff --git a/test/image/baselines/titles-avoid-labels.png b/test/image/baselines/titles-avoid-labels.png index 35166b37985..b037a853082 100644 Binary files a/test/image/baselines/titles-avoid-labels.png and b/test/image/baselines/titles-avoid-labels.png differ diff --git a/test/image/baselines/transforms.png b/test/image/baselines/transforms.png index b07f1ca235a..b80ded64fee 100644 Binary files a/test/image/baselines/transforms.png and b/test/image/baselines/transforms.png differ diff --git a/test/image/baselines/ultra_zoom.png b/test/image/baselines/ultra_zoom.png index bdeab353df4..1feeaaee1a8 100644 Binary files a/test/image/baselines/ultra_zoom.png and b/test/image/baselines/ultra_zoom.png differ diff --git a/test/image/baselines/updatemenus.png b/test/image/baselines/updatemenus.png index bc97f9a1a10..c08a191d3e4 100644 Binary files a/test/image/baselines/updatemenus.png and b/test/image/baselines/updatemenus.png differ diff --git a/test/image/baselines/updatemenus_positioning.png b/test/image/baselines/updatemenus_positioning.png index 4536dc78f99..40ca6cb6984 100644 Binary files a/test/image/baselines/updatemenus_positioning.png and b/test/image/baselines/updatemenus_positioning.png differ diff --git a/test/image/baselines/violin_box_overlay.png b/test/image/baselines/violin_box_overlay.png index bf60201ef43..2e595756997 100644 Binary files a/test/image/baselines/violin_box_overlay.png and b/test/image/baselines/violin_box_overlay.png differ diff --git a/test/image/baselines/violin_grouped.png b/test/image/baselines/violin_grouped.png index 30de14adb18..713e0ce5b87 100644 Binary files a/test/image/baselines/violin_grouped.png and b/test/image/baselines/violin_grouped.png differ diff --git a/test/image/baselines/violin_non-linear.png b/test/image/baselines/violin_non-linear.png index 3609f3890e7..5eaac13f2e8 100644 Binary files a/test/image/baselines/violin_non-linear.png and b/test/image/baselines/violin_non-linear.png differ diff --git a/test/image/baselines/violin_old-faithful.png b/test/image/baselines/violin_old-faithful.png index 26d9b81943a..086413991e5 100644 Binary files a/test/image/baselines/violin_old-faithful.png and b/test/image/baselines/violin_old-faithful.png differ diff --git a/test/image/baselines/violin_side-by-side.png b/test/image/baselines/violin_side-by-side.png index 591ff342f6c..d181c2b5f6b 100644 Binary files a/test/image/baselines/violin_side-by-side.png and b/test/image/baselines/violin_side-by-side.png differ diff --git a/test/image/baselines/violin_style.png b/test/image/baselines/violin_style.png index 60e47221c55..e1fd381ec85 100644 Binary files a/test/image/baselines/violin_style.png and b/test/image/baselines/violin_style.png differ diff --git a/test/image/baselines/viridis_heatmap.png b/test/image/baselines/viridis_heatmap.png index 3524a0bccc2..bd4d254e348 100644 Binary files a/test/image/baselines/viridis_heatmap.png and b/test/image/baselines/viridis_heatmap.png differ diff --git a/test/image/baselines/world-cals.png b/test/image/baselines/world-cals.png index dd263b2c21e..a5e1aa64e23 100644 Binary files a/test/image/baselines/world-cals.png and b/test/image/baselines/world-cals.png differ diff --git a/test/image/baselines/yignbu_heatmap.png b/test/image/baselines/yignbu_heatmap.png index 1f07b1fbcd7..5fcdc488f60 100644 Binary files a/test/image/baselines/yignbu_heatmap.png and b/test/image/baselines/yignbu_heatmap.png differ diff --git a/test/image/baselines/yiorrd_heatmap.png b/test/image/baselines/yiorrd_heatmap.png index 04e5c8a825b..ef33812d941 100644 Binary files a/test/image/baselines/yiorrd_heatmap.png and b/test/image/baselines/yiorrd_heatmap.png differ diff --git a/test/image/baselines/zsmooth_methods.png b/test/image/baselines/zsmooth_methods.png index baf8c7e3da8..c142527e542 100644 Binary files a/test/image/baselines/zsmooth_methods.png and b/test/image/baselines/zsmooth_methods.png differ diff --git a/test/image/compare_pixels_test.js b/test/image/compare_pixels_test.js index 1094eb7b6c2..c4d5de79b1f 100644 --- a/test/image/compare_pixels_test.js +++ b/test/image/compare_pixels_test.js @@ -1,71 +1,68 @@ var fs = require('fs'); +var PNG = require('pngjs').PNG; +var pixelmatch = require('pixelmatch'); +var parallel = require('run-parallel'); -var common = require('../../tasks/util/common'); +var run = require('./assets/run'); var getMockList = require('./assets/get_mock_list'); -var getRequestOpts = require('./assets/get_image_request_options'); var getImagePaths = require('./assets/get_image_paths'); -// packages inside the image server docker -var test = require('tape'); -var request = require('request'); -var gm = require('gm'); - -// pixel comparison tolerance -var TOLERANCE = 1e-6; - -// wait time between each test batch -var BATCH_WAIT = 500; - -// number of tests in each test batch -var BATCH_SIZE = 5; - -// wait time between each test in test queue -var QUEUE_WAIT = 10; - -/** - * Image pixel comparison test script. - * - * Called by `tasks/test_image.sh in `npm run test-image`. - * - * CLI arguments: - * - * 1. 'pattern' : glob determining which mock(s) are to be tested - * 2. --queue : if sent, the image will be run in queue instead of in batch. - * Makes the test run significantly longer, but is recommended on weak hardware. - * - * Examples: - * - * Run all tests in batch: - * - * npm run test-image - * - * Run the 'contour_nolines' test: - * - * npm run test-image -- contour_nolines - * - * Run all gl3d image test in queue: - * - * npm run test-image -- gl3d_* --queue - */ - -var pattern = process.argv[2]; -var mockList = getMockList(pattern); -var isInQueue = (process.argv[3] === '--queue'); - -if(mockList.length === 0) { - throw new Error('No mocks found with pattern ' + pattern); +var argv = require('minimist')(process.argv.slice(2), { + 'boolean': ['queue', 'help', 'debug'], + 'string': ['parallel-limit', 'threshold'], + 'alias': { + help: ['h', 'info'] + }, + 'default': { + threshold: 0.1, + 'parallel-limit': 4 + } +}); + +if(argv.help) { + console.log([ + 'Image pixel comparison test script.', + '', + 'CLI arguments:', + '', + '1. \'pattern\' : glob(s) determining which mock(s) are to be tested', + '2. --queue : if sent, the image will be run in queue instead of in batch.', + ' Makes the test run significantly longer, but is recommended on weak hardware.', + '', + 'Examples:', + '', + 'Run all tests in batch:', + '', + ' npm run test-image', + '', + 'Run the \'contour_nolines\' test:', + '', + ' npm run test-image -- contour_nolines', + '', + 'Run all gl3d image test in queue:', + '', + ' npm run test-image -- gl3d_* --queue', + '', + 'Run all image tests except gl3d and pie (N.B. need to escape special characters):', + '', + ' npm run baseline -- "\!\(gl3d_*\|pie_*\)"', + '' + ].join('\n')); + process.exit(0); } -// filter out untestable mocks if no pattern is specified -if(!pattern) { +var mockList = getMockList(argv._); + +// filter out untestable mocks if no input is specified +if(argv._.length === 0) { console.log('Filtering out untestable mocks:'); mockList = mockList.filter(untestableFilter); console.log('\n'); } // gl2d have limited image-test support -if(pattern === 'gl2d_*') { - if(!isInQueue) { +if(argv._.indexOf('gl2d_*') !== -1) { + if(!argv.queue) { console.log('WARN: Running gl2d image tests in batch may lead to unwanted results\n'); } console.log('\nSorting gl2d mocks to avoid gl-shader conflicts'); @@ -73,13 +70,50 @@ if(pattern === 'gl2d_*') { console.log(''); } -// main -if(isInQueue) { - runInQueue(mockList); -} -else { - runInBatch(mockList); -} +var input = mockList.map(function(m) { return getImagePaths(m).mock; }); + +run(mockList, input, argv, function write(info, done) { + var mockName = mockList[info.itemIndex]; + var paths = getImagePaths(mockName); + var imgData = info.body; + + if(!fs.existsSync(paths.baseline)) { + return done('baseline image for ' + mockName + ' does not exist'); + } + + parallel([ + function(cb) { + var img = fs.createReadStream(paths.baseline).pipe(new PNG()); + img.on('parsed', function() { return cb(null, img); }); + img.on('error', function(err) { return cb(err); }); + }, + function(cb) { (new PNG()).parse(imgData, cb); }, + function(cb) { fs.writeFile(paths.test, imgData, cb); }, + ], function(err, results) { + if(err) done(err); + + var baseline = results[0]; + var width = baseline.width; + var height = baseline.height; + var test = results[1]; + var diff = new PNG({width: width, height: height}); + + var numDiffPixels = pixelmatch( + baseline.data, test.data, diff.data, + width, height, + {threshold: argv.threshold} + ); + + if(numDiffPixels) { + var diffStream = fs.createWriteStream(paths.diff).on('finish', function() { + done('(' + numDiffPixels + ' pixels differ with threshold ' + argv.threshold + ')'); + }); + diff.pack().pipe(diffStream); + } else { + done(); + } + }); +}); /* Test cases: * @@ -130,137 +164,3 @@ function sortGl2dMockList(mockList) { pos++; }); } - -function runInBatch(mockList) { - var running = 0; - - test('testing mocks in batch', function(t) { - t.plan(mockList.length); - - for(var i = 0; i < mockList.length; i++) { - run(mockList[i], t); - } - }); - - function run(mockName, t) { - if(running >= BATCH_SIZE) { - setTimeout(function() { - run(mockName, t); - }, BATCH_WAIT); - return; - } - running++; - - // throttle the number of tests running concurrently - - comparePixels(mockName, function(isEqual, mockName) { - running--; - t.ok(isEqual, mockName + ' should be pixel perfect'); - }); - } -} - -function runInQueue(mockList) { - var index = 0; - - test('testing mocks in queue', function(t) { - t.plan(mockList.length); - - run(mockList[index], t); - }); - - function run(mockName, t) { - comparePixels(mockName, function(isEqual, mockName) { - t.ok(isEqual, mockName + ' should be pixel perfect'); - - index++; - if(index < mockList.length) { - setTimeout(function() { - run(mockList[index], t); - }, QUEUE_WAIT); - } - }); - } -} - -function comparePixels(mockName, cb) { - var requestOpts = getRequestOpts({ mockName: mockName }), - imagePaths = getImagePaths(mockName), - saveImageStream = fs.createWriteStream(imagePaths.test); - - function log(msg) { - process.stdout.write('Error for', mockName + ':', msg); - } - - function checkImage() { - - // baseline image must be generated first - if(!common.doesFileExist(imagePaths.baseline)) { - var err = new Error('baseline image not found'); - return onEqualityCheck(err, false); - } - - /* - * N.B. The non-zero tolerance was added in - * https://github.com/plotly/plotly.js/pull/243 - * where some legend mocks started generating different png outputs - * on `npm run test-image` and `npm run test-image -- mock.json`. - * - * Note that the svg outputs for the problematic mocks were the same - * and playing around with the batch size and timeout durations - * did not seem to affect the results. - * - * With the above tolerance individual `npm run test-image` and - * `npm run test-image -- mock.json` give the same result. - * - * Further investigation is needed. - */ - - var gmOpts = { - file: imagePaths.diff, - highlightColor: 'purple', - tolerance: TOLERANCE - }; - - gm.compare( - imagePaths.test, - imagePaths.baseline, - gmOpts, - onEqualityCheck - ); - } - - function onEqualityCheck(err, isEqual) { - if(err) { - common.touch(imagePaths.diff); - log(err); - return cb(false, mockName); - } - if(isEqual) { - fs.unlinkSync(imagePaths.diff); - } - - cb(isEqual, mockName); - } - - // 525 means a plotly.js error - function onResponse(response) { - if(+response.statusCode === 525) { - log('plotly.js error'); - return cb(false, mockName); - } - } - - // this catches connection errors - // e.g. when the image server blows up - function onError(err) { - log(err); - return cb(false, mockName); - } - - request(requestOpts) - .on('error', onError) - .on('response', onResponse) - .pipe(saveImageStream) - .on('close', checkImage); -} diff --git a/test/image/export_test.js b/test/image/export_test.js index 69ac40d3a01..222a9ce628f 100644 --- a/test/image/export_test.js +++ b/test/image/export_test.js @@ -1,21 +1,23 @@ var fs = require('fs'); var sizeOf = require('image-size'); +var run = require('./assets/run'); var getMockList = require('./assets/get_mock_list'); -var getRequestOpts = require('./assets/get_image_request_options'); var getImagePaths = require('./assets/get_image_paths'); -// packages inside the image server docker -var request = require('request'); -var test = require('tape'); +var argv = require('minimist')(process.argv.slice(2), { + 'boolean': ['help', 'debug'], + 'alias': { + help: ['h', 'info'] + }, + 'default': { + help: false, + debug: false + } +}); -// image formats to test -// -// N.B. 'png' is tested in `npm run test-image, no need to duplicate here -// -// 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']; +// no 'png' as it is tested in `compare_pixels_test.js` +var FORMATS = ['jpeg', 'webp', 'svg', 'pdf', 'eps']; // non-exhaustive list of mocks to test var DEFAULT_LIST = [ @@ -30,109 +32,73 @@ var HEIGHT = 500; // minimum satisfactory file size [in bytes] var MIN_SIZE = 100; -// wait time between each test batch -var BATCH_WAIT = 500; - -// number of tests in each test batch -var BATCH_SIZE = 5; - -/** - * Image export test script. - * - * Called by `tasks/test_export.sh in `npm run test-export`. - * - * CLI arguments: - * - * 1. 'pattern' : glob determining which mock(s) are to be tested - * - * Examples: - * - * Run the export test on the default mock list (in batch): - * - * npm run test-image - * - * Run the export on the 'contour_nolines' mock: - * - * npm run test-image -- contour_nolines - * - * Run the export test on all gl3d mocks (in batch): - * - * npm run test-image -- gl3d_* - */ - -var pattern = process.argv[2]; -var mockList = pattern ? getMockList(pattern) : DEFAULT_LIST; - -if(mockList.length === 0) { - throw new Error('No mocks found with pattern ' + pattern); +if(argv.help) { + console.log([ + 'Image export test script.', + '', + 'The tests below determine whether the images are properly', + 'exported by (only) checking the file size of the generated images.', + '', + 'CLI arguments:', + '', + '1. \'pattern\' : glob determining which mock(s) are to be tested', + '', + 'Examples:', + '', + 'Run the export test on the default mock list (in batch):', + '', + ' npm run test-export', + '', + 'Run the export on the \'contour_nolines\' mock:', + '', + ' npm run test-export -- contour_nolines', + '', + 'Run the export test on all gl3d mocks (in batch):', + '', + ' npm run test-export -- gl3d_*', + '', + 'Run the export test on all mocks expect gl3d and pie:', + '', + ' npm run test-export -- "\!\(gl3d_*\|pie_*\)"', + '' + ].join('\n')); + process.exit(0); } -// main -runInBatch(mockList); - -function runInBatch(mockList) { - var running = 0; - - test('testing image export formats', function(t) { - t.plan(mockList.length * FORMATS.length); - - for(var i = 0; i < mockList.length; i++) { - for(var j = 0; j < FORMATS.length; j++) { - run(mockList[i], FORMATS[j], t); - } - } - }); - - function run(mockName, format, t) { - if(running >= BATCH_SIZE) { - setTimeout(function() { - run(mockName, format, t); - }, BATCH_WAIT); - return; - } - running++; - - // throttle the number of tests running concurrently - - testExport(mockName, format, function(didExport, mockName, format) { - running--; - t.ok(didExport, mockName + ' should be properly exported as a ' + format); +var _mockList = argv._.length > 0 ? getMockList(argv._) : DEFAULT_LIST; +var mockList = []; +var input = []; + +_mockList.forEach(function(mockName) { + FORMATS.forEach(function(format) { + mockList.push(mockName + '.' + format); + input.push({ + figure: getImagePaths(mockName).mock, + format: format, + width: WIDTH, + height: HEIGHT }); - } -} - -// The tests below determine whether the images are properly -// exported by (only) checking the file size of the generated images. -function testExport(mockName, format, cb) { - var specs = { - mockName: mockName, - format: format, - width: WIDTH, - height: HEIGHT - }; + }); +}); - var requestOpts = getRequestOpts(specs), - imagePaths = getImagePaths(mockName, format), - saveImageStream = fs.createWriteStream(imagePaths.test); +run(mockList, input, argv, function write(info, done) { + var mockName = mockList[info.itemIndex]; + var format = info.format; + var paths = getImagePaths(mockName, format); - function checkExport(err) { - if(err) throw err; + fs.writeFile(paths.test, info.body, function(err) { + if(err) return done(err); var didExport; - if(format === 'svg') { - var dims = sizeOf(imagePaths.test); - didExport = (dims.width === WIDTH) && (dims.height === HEIGHT); - } - else { - var stats = fs.statSync(imagePaths.test); + if(format === 'pdf' || format === 'eps') { + var stats = fs.statSync(paths.test); didExport = stats.size > MIN_SIZE; + } else { + var dims = sizeOf(paths.test); + didExport = (dims.width === WIDTH) && (dims.height === HEIGHT); } - cb(didExport, mockName, format); - } - - request(requestOpts) - .pipe(saveImageStream) - .on('close', checkExport); -} + done(didExport ? '' : format); + }); +}); diff --git a/test/image/make_baseline.js b/test/image/make_baseline.js index fea40dfc082..9ba1e5ae370 100644 --- a/test/image/make_baseline.js +++ b/test/image/make_baseline.js @@ -1,81 +1,63 @@ var fs = require('fs'); +var run = require('./assets/run'); var getMockList = require('./assets/get_mock_list'); -var getRequestOpts = require('./assets/get_image_request_options'); var getImagePaths = require('./assets/get_image_paths'); -// packages inside the image server docker -var request = require('request'); - -// wait time between each baseline generation -var QUEUE_WAIT = 10; - -/** - * Baseline image generation script. - * - * Called by `tasks/baseline.sh in `npm run baseline`. - * - * CLI arguments: - * - * 1. 'pattern' : glob determining the baseline(s) to be generated - * - * Examples: - * - * Generate or (re-generate) all baselines (in queue): - * - * npm run baseline - * - * Generate or (re-generate) the 'contour_nolines' baseline: - * - * npm run baseline -- contour_nolines - * - * Generate or (re-generate) all gl3d baseline (in queue): - * - * npm run baseline -- gl3d_* - * - */ -var pattern = process.argv[2]; -var mockList = getMockList(pattern); - -if(mockList.length === 0) { - throw new Error('No mocks found with pattern ' + pattern); -} - -// main -runInQueue(mockList); - -function runInQueue(mockList) { - var index = 0; - - run(mockList[index]); - - function run(mockName) { - makeBaseline(mockName, function() { - console.log('generated ' + mockName + ' successfully'); - - index++; - if(index < mockList.length) { - setTimeout(function() { - run(mockList[index]); - }, QUEUE_WAIT); - } - }); +var argv = require('minimist')(process.argv.slice(2), { + 'boolean': ['queue', 'help', 'debug'], + 'string': ['parallel-limit'], + 'alias': { + help: ['h', 'info'] + }, + 'default': { + 'parallel-limit': '1' } +}); + +if(argv.help) { + console.log([ + 'Baseline image generation script.', + '', + ' CLI arguments:', + '', + ' 1. \'pattern\' : glob determining the baseline(s) to be generated', + '', + 'Examples:', + '', + 'Generate or (re-generate) all baselines (in queue):', + '', + ' npm run baseline', + '', + 'Generate or (re-generate) the \'contour_nolines\' baseline:', + '', + ' npm run baseline -- contour_nolines', + '', + 'Generate or (re-generate) all gl3d baseline (in queue):', + '', + ' npm run baseline -- gl3d_*', + '', + 'Generate all baselines except gl3d and pie (N.B. need to escape special characters):', + '', + ' npm run baseline -- "\!\(gl3d_*\|pie_*\)"', + '' + ].join('\n')); + process.exit(0); } -function makeBaseline(mockName, cb) { - var requestOpts = getRequestOpts({ mockName: mockName }), - imagePaths = getImagePaths(mockName), - saveImageStream = fs.createWriteStream(imagePaths.baseline); +var mockList = getMockList(argv._); +var input = mockList.map(function(m) { return getImagePaths(m).mock; }); - function checkFormat(err, res) { - if(err) throw err; - if(res.headers['content-type'] !== 'image/png') { - throw new Error('Generated image is not a valid png'); - } - } +run(mockList, input, argv, function write(info, done) { + var mockName = mockList[info.itemIndex]; + var imgData = info.body; + var paths = getImagePaths(mockName); - request(requestOpts, checkFormat) - .pipe(saveImageStream) - .on('close', cb); -} + fs.writeFile(paths.baseline, imgData, function(err) { + if(err) { + done('error while saving ' + mockName + ' test image'); + } else { + done(); + } + }); +});