Skip to content

Commit ecf3ac7

Browse files
committed
add test for isSafari downloadImag logic
1 parent 47a25a2 commit ecf3ac7

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

src/snapshot/filesaver.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ function fileSaver(url, name, format) {
3838
// Safari doesn't allow downloading of blob urls
3939
if(Lib.isSafari()) {
4040
var prefix = format === 'svg' ? ',' : ';base64,';
41-
document.location.href = 'data:application/octet-stream' + prefix + encodeURIComponent(url);
42-
return resolve();
41+
helpers.octetStream(prefix + encodeURIComponent(url));
42+
return resolve(name);
4343
}
4444

4545
// IE 10+ (native saveAs)

src/snapshot/helpers.js

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ exports.createBlob = function(url, format) {
5555
}
5656
};
5757

58+
exports.octetStream = function(s) {
59+
document.location.href = 'data:application/octet-stream' + s;
60+
};
61+
5862
// Taken from https://bl.ocks.org/nolanlawson/0eac306e4dac2114c752
5963
function fixBinary(b) {
6064
var len = b.length;

test/jasmine/tests/download_test.js

+25-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
var Plotly = require('@lib/index');
2+
var Lib = require('@src/lib');
3+
4+
var helpers = require('@src/snapshot/helpers');
5+
26
var createGraphDiv = require('../assets/create_graph_div');
37
var destroyGraphDiv = require('../assets/destroy_graph_div');
4-
var textchartMock = require('@mocks/text_chart_arrays.json');
58
var failTest = require('../assets/fail_test');
69

7-
var Lib = require('@src/lib');
8-
10+
var textchartMock = require('@mocks/text_chart_arrays.json');
911
var LONG_TIMEOUT_INTERVAL = 2 * jasmine.DEFAULT_TIMEOUT_INTERVAL;
1012

1113
describe('Plotly.downloadImage', function() {
@@ -136,6 +138,26 @@ describe('Plotly.downloadImage', function() {
136138
.catch(failTest)
137139
.then(done);
138140
}, LONG_TIMEOUT_INTERVAL);
141+
142+
it('should produce right output in Safari', function(done) {
143+
spyOn(Lib, 'isSafari').and.callFake(function() { return true; });
144+
spyOn(helpers, 'octetStream');
145+
146+
Plotly.plot(gd, textchartMock.data, textchartMock.layout)
147+
.then(function() { return Plotly.downloadImage(gd, {format: 'svg'}); })
148+
.then(function() { return Plotly.downloadImage(gd, {format: 'png'}); })
149+
.then(function() { return Plotly.downloadImage(gd, {format: 'jpeg'}); })
150+
.then(function() { return Plotly.downloadImage(gd, {format: 'webp'}); })
151+
.then(function() {
152+
var args = helpers.octetStream.calls.allArgs();
153+
expect(args[0][0].slice(0, 15)).toBe(',%3Csvg%20class', 'format:svg');
154+
expect(args[1][0].slice(0, 8)).toBe(';base64,', 'format:png');
155+
expect(args[2][0].slice(0, 8)).toBe(';base64,', 'format:jpeg');
156+
expect(args[3][0].slice(0, 8)).toBe(';base64,', 'format:webp');
157+
})
158+
.catch(failTest)
159+
.then(done);
160+
});
139161
});
140162

141163
function downloadTest(gd, format) {

0 commit comments

Comments
 (0)