/*eslint strict:0*/ var fs = require('fs'); var server = require('webserver').create(); var service = server.listen(8094, function(request, response) { response.statusCode = 200; response.headers = { 'Content-Language': 'en', 'Content-Type': 'application/pdf', 'Content-Disposition': 'attachment;filename=fake.pdf', //'Content-Disposition': 'inline', 'Date': new Date().toUTCString() }; response.write(['', '', ' ', ' ', ' CasperJS test popup', ' ', ' ', ' new window', ' close', ' ', ' ', ''].join("\n") ); response.close(); }); casper.test.begin('fileDownload events tests', 1, function(test) { var browserCanDownload = false; if (phantom.casperEngine === 'slimerjs' && utils.gteVersion(slimer.version, '0.10.0')) { browserCanDownload = true; } casper.setFilter("fileDownload", function toto(url, data) { return data.filename; }); casper.on('fileDownloadError', function(message) { if (!browserCanDownload) { test.pass('fileDownloadError() occurs because browser can\'t manage Content-Disposition'); } else { test.fail('fileDownloadError() occurs : ' + message); } }); casper.start('http://localhost:8094/'); casper.then(function() { if (browserCanDownload) { this.waitFor(function() { return fs.exists("fake.pdf"); }, function(){ test.pass('fileDownload event occurs with browser that can manage Content-Disposition'); // fs.remove("fake.pdf"); }); } }); casper.run(function() { this.removeAllListeners('fileDownloadError'); this.removeAllFilters('fileDownload'); test.done(); }); }); casper.test.begin('fileDownload events tests with path error', 1, function(test) { var error = false; casper.setFilter("fileDownload", function toto(url, data) { return fs.separator; }); casper.on('fileDownloadError', function(message) { test.pass('fileDownloadError() occurs : ' + message ); error = true; }); casper.start('http://localhost:8094/'); casper.then(function() { casper.waitFor(function() { return error === true; },function(){},function(){ test.fail('fileDownloadError() never occurs' ); }); }); casper.run(function() { server.close(); test.done(); }); });