mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-26 10:08:06 +02:00
Updates Jasmine version.
This commit is contained in:
parent
df7afcf004
commit
0a700fa29d
25 changed files with 876 additions and 3803 deletions
|
@ -1,25 +1,10 @@
|
|||
/* globals expect, it, describe, Dict, Name, Annotation, AnnotationBorderStyle,
|
||||
AnnotationBorderStyleType, AnnotationFlag, PDFJS, combineUrl,
|
||||
waitsFor, beforeEach, afterEach, stringToBytes */
|
||||
beforeEach, afterEach, stringToBytes */
|
||||
|
||||
'use strict';
|
||||
|
||||
describe('Annotation layer', function() {
|
||||
function waitsForPromiseResolved(promise, successCallback) {
|
||||
var resolved = false;
|
||||
promise.then(function(val) {
|
||||
resolved = true;
|
||||
successCallback(val);
|
||||
},
|
||||
function(error) {
|
||||
// Shouldn't get here.
|
||||
expect(error).toEqual('the promise should not have been rejected');
|
||||
});
|
||||
waitsFor(function() {
|
||||
return resolved;
|
||||
}, 20000);
|
||||
}
|
||||
|
||||
describe('Annotation', function() {
|
||||
it('should set and get flags', function() {
|
||||
var dict = new Dict();
|
||||
|
@ -66,7 +51,7 @@ describe('Annotation layer', function() {
|
|||
var annotation = new Annotation({ dict: dict, ref: 0 });
|
||||
annotation.setColor('red');
|
||||
|
||||
expect(annotation.color).toEqual([0, 0, 0]);
|
||||
expect(annotation.color).toEqual(new Uint8Array([0, 0, 0]));
|
||||
});
|
||||
|
||||
it('should set and get a transparent color', function() {
|
||||
|
@ -84,7 +69,7 @@ describe('Annotation layer', function() {
|
|||
var annotation = new Annotation({ dict: dict, ref: 0 });
|
||||
annotation.setColor([0.4]);
|
||||
|
||||
expect(annotation.color).toEqual([102, 102, 102]);
|
||||
expect(annotation.color).toEqual(new Uint8Array([102, 102, 102]));
|
||||
});
|
||||
|
||||
it('should set and get an RGB color', function() {
|
||||
|
@ -93,7 +78,7 @@ describe('Annotation layer', function() {
|
|||
var annotation = new Annotation({ dict: dict, ref: 0 });
|
||||
annotation.setColor([0, 0, 1]);
|
||||
|
||||
expect(annotation.color).toEqual([0, 0, 255]);
|
||||
expect(annotation.color).toEqual(new Uint8Array([0, 0, 255]));
|
||||
});
|
||||
|
||||
it('should set and get a CMYK color', function() {
|
||||
|
@ -102,7 +87,7 @@ describe('Annotation layer', function() {
|
|||
var annotation = new Annotation({ dict: dict, ref: 0 });
|
||||
annotation.setColor([0.1, 0.92, 0.84, 0.02]);
|
||||
|
||||
expect(annotation.color).toEqual([233, 59, 47]);
|
||||
expect(annotation.color).toEqual(new Uint8Array([233, 59, 47]));
|
||||
});
|
||||
|
||||
it('should not set and get an invalid color', function() {
|
||||
|
@ -111,7 +96,7 @@ describe('Annotation layer', function() {
|
|||
var annotation = new Annotation({ dict: dict, ref: 0 });
|
||||
annotation.setColor([0.4, 0.6]);
|
||||
|
||||
expect(annotation.color).toEqual([0, 0, 0]);
|
||||
expect(annotation.color).toEqual(new Uint8Array([0, 0, 0]));
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -193,17 +178,19 @@ describe('Annotation layer', function() {
|
|||
var loadingTask;
|
||||
var annotations;
|
||||
|
||||
beforeEach(function() {
|
||||
beforeEach(function(done) {
|
||||
var pdfUrl = combineUrl(window.location.href,
|
||||
'../pdfs/annotation-fileattachment.pdf');
|
||||
loadingTask = PDFJS.getDocument(pdfUrl);
|
||||
waitsForPromiseResolved(loadingTask.promise, function(pdfDocument) {
|
||||
waitsForPromiseResolved(pdfDocument.getPage(1), function(pdfPage) {
|
||||
waitsForPromiseResolved(pdfPage.getAnnotations(),
|
||||
function (pdfAnnotations) {
|
||||
loadingTask.promise.then(function(pdfDocument) {
|
||||
return pdfDocument.getPage(1).then(function(pdfPage) {
|
||||
return pdfPage.getAnnotations().then(function (pdfAnnotations) {
|
||||
annotations = pdfAnnotations;
|
||||
done();
|
||||
});
|
||||
});
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* globals PDFJS, expect, it, describe, Promise, combineUrl, waitsFor,
|
||||
/* globals PDFJS, expect, it, describe, Promise, combineUrl,
|
||||
InvalidPDFException, MissingPDFException, StreamType, FontType,
|
||||
PDFDocumentProxy, PasswordException, PasswordResponses,
|
||||
PDFPageProxy, createPromiseCapability, beforeEach, afterEach */
|
||||
|
@ -8,35 +8,7 @@
|
|||
describe('api', function() {
|
||||
var basicApiUrl = combineUrl(window.location.href, '../pdfs/basicapi.pdf');
|
||||
var basicApiFileLength = 105779; // bytes
|
||||
var TEST_TIMEOUT = 20000;
|
||||
function waitsForPromiseResolved(promise, successCallback) {
|
||||
var resolved = false;
|
||||
promise.then(function(val) {
|
||||
resolved = true;
|
||||
successCallback(val);
|
||||
},
|
||||
function(error) {
|
||||
// Shouldn't get here.
|
||||
expect(error).toEqual('the promise should not have been rejected');
|
||||
});
|
||||
waitsFor(function() {
|
||||
return resolved;
|
||||
}, TEST_TIMEOUT);
|
||||
}
|
||||
function waitsForPromiseRejected(promise, failureCallback) {
|
||||
var rejected = false;
|
||||
promise.then(function(val) {
|
||||
// Shouldn't get here.
|
||||
expect(false).toEqual(true);
|
||||
},
|
||||
function(error) {
|
||||
rejected = true;
|
||||
failureCallback(error);
|
||||
});
|
||||
waitsFor(function() {
|
||||
return rejected;
|
||||
}, TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
function waitSome(callback) {
|
||||
var WAIT_TIMEOUT = 10;
|
||||
setTimeout(function () {
|
||||
|
@ -46,7 +18,7 @@ describe('api', function() {
|
|||
|
||||
describe('PDFJS', function() {
|
||||
describe('getDocument', function() {
|
||||
it('creates pdf doc from URL', function() {
|
||||
it('creates pdf doc from URL', function(done) {
|
||||
var loadingTask = PDFJS.getDocument(basicApiUrl);
|
||||
|
||||
var isProgressReportedResolved = false;
|
||||
|
@ -65,34 +37,43 @@ describe('api', function() {
|
|||
progressReportedCapability.promise,
|
||||
loadingTask.promise
|
||||
];
|
||||
waitsForPromiseResolved(Promise.all(promises), function (data) {
|
||||
Promise.all(promises).then(function (data) {
|
||||
expect((data[0].loaded / data[0].total) > 0).toEqual(true);
|
||||
expect(data[1] instanceof PDFDocumentProxy).toEqual(true);
|
||||
expect(loadingTask).toEqual(data[1].loadingTask);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from URL and aborts before worker initialized',
|
||||
function() {
|
||||
function(done) {
|
||||
var loadingTask = PDFJS.getDocument(basicApiUrl);
|
||||
loadingTask.destroy();
|
||||
waitsForPromiseRejected(loadingTask.promise, function(reason) {
|
||||
loadingTask.promise.then(function(reason) {
|
||||
done.fail('shall fail loading');
|
||||
}).catch(function (reason) {
|
||||
expect(true).toEqual(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from URL and aborts loading after worker initialized',
|
||||
function() {
|
||||
function(done) {
|
||||
var loadingTask = PDFJS.getDocument(basicApiUrl);
|
||||
// This can be somewhat random -- we cannot guarantee perfect
|
||||
// 'Terminate' message to the worker before/after setting up pdfManager.
|
||||
var destroyed = loadingTask._worker.promise.then(function () {
|
||||
return loadingTask.destroy();
|
||||
});
|
||||
waitsForPromiseResolved(destroyed, function (data) {
|
||||
destroyed.then(function (data) {
|
||||
expect(true).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from typed array', function() {
|
||||
it('creates pdf doc from typed array', function(done) {
|
||||
var nonBinaryRequest = PDFJS.disableWorker;
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('GET', basicApiUrl, false);
|
||||
|
@ -123,32 +104,41 @@ describe('api', function() {
|
|||
expect(typedArrayPdf.length).toEqual(basicApiFileLength);
|
||||
|
||||
var loadingTask = PDFJS.getDocument(typedArrayPdf);
|
||||
waitsForPromiseResolved(loadingTask.promise, function(data) {
|
||||
loadingTask.promise.then(function(data) {
|
||||
expect(data instanceof PDFDocumentProxy).toEqual(true);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from invalid PDF file', function() {
|
||||
it('creates pdf doc from invalid PDF file', function(done) {
|
||||
// A severely corrupt PDF file (even Adobe Reader fails to open it).
|
||||
var url = combineUrl(window.location.href, '../pdfs/bug1020226.pdf');
|
||||
|
||||
var loadingTask = PDFJS.getDocument(url);
|
||||
waitsForPromiseRejected(loadingTask.promise, function (error) {
|
||||
loadingTask.promise.then(function () {
|
||||
done.fail('shall fail loading');
|
||||
}).catch(function (error) {
|
||||
expect(error instanceof InvalidPDFException).toEqual(true);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from non-existent URL', function() {
|
||||
it('creates pdf doc from non-existent URL', function(done) {
|
||||
var nonExistentUrl = combineUrl(window.location.href,
|
||||
'../pdfs/non-existent.pdf');
|
||||
var loadingTask = PDFJS.getDocument(nonExistentUrl);
|
||||
waitsForPromiseRejected(loadingTask.promise, function(error) {
|
||||
loadingTask.promise.then(function(error) {
|
||||
done.fail('shall fail loading');
|
||||
}).catch(function (error) {
|
||||
expect(error instanceof MissingPDFException).toEqual(true);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from PDF file protected with user and owner password',
|
||||
function () {
|
||||
function (done) {
|
||||
var url = combineUrl(window.location.href, '../pdfs/pr6531_1.pdf');
|
||||
var loadingTask = PDFJS.getDocument(url);
|
||||
|
||||
|
@ -185,50 +175,62 @@ describe('api', function() {
|
|||
passwordIncorrectCapability.promise,
|
||||
loadingTask.promise
|
||||
];
|
||||
waitsForPromiseResolved(Promise.all(promises), function (data) {
|
||||
Promise.all(promises).then(function (data) {
|
||||
expect(data[2] instanceof PDFDocumentProxy).toEqual(true);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('creates pdf doc from PDF file protected with only a user password',
|
||||
function () {
|
||||
function (done) {
|
||||
var url = combineUrl(window.location.href, '../pdfs/pr6531_2.pdf');
|
||||
|
||||
var passwordNeededLoadingTask = PDFJS.getDocument({
|
||||
url: url, password: '',
|
||||
});
|
||||
waitsForPromiseRejected(passwordNeededLoadingTask.promise,
|
||||
function (data) {
|
||||
var result1 = passwordNeededLoadingTask.promise.then(function () {
|
||||
done.fail('shall fail with no password');
|
||||
return passwordNeededLoadingTask.destroy();
|
||||
}, function (data) {
|
||||
expect(data instanceof PasswordException).toEqual(true);
|
||||
expect(data.code).toEqual(PasswordResponses.NEED_PASSWORD);
|
||||
passwordNeededLoadingTask.destroy();
|
||||
return passwordNeededLoadingTask.destroy();
|
||||
});
|
||||
|
||||
var passwordIncorrectLoadingTask = PDFJS.getDocument({
|
||||
url: url, password: 'qwerty',
|
||||
});
|
||||
waitsForPromiseRejected(passwordIncorrectLoadingTask.promise,
|
||||
function (data) {
|
||||
var result2 = passwordIncorrectLoadingTask.promise.then(function () {
|
||||
done.fail('shall fail with wrong password');
|
||||
return passwordNeededLoadingTask.destroy();
|
||||
}, function (data) {
|
||||
expect(data instanceof PasswordException).toEqual(true);
|
||||
expect(data.code).toEqual(PasswordResponses.INCORRECT_PASSWORD);
|
||||
passwordIncorrectLoadingTask.destroy();
|
||||
return passwordIncorrectLoadingTask.destroy();
|
||||
});
|
||||
|
||||
var passwordAcceptedLoadingTask = PDFJS.getDocument({
|
||||
url: url, password: 'asdfasdf',
|
||||
});
|
||||
waitsForPromiseResolved(passwordAcceptedLoadingTask.promise,
|
||||
function (data) {
|
||||
|
||||
var result3 = passwordAcceptedLoadingTask.promise.then(function (data) {
|
||||
expect(data instanceof PDFDocumentProxy).toEqual(true);
|
||||
passwordAcceptedLoadingTask.destroy();
|
||||
return passwordAcceptedLoadingTask.destroy();
|
||||
});
|
||||
Promise.all([result1, result2, result3]).then(function () {
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('PDFWorker', function() {
|
||||
it('worker created or destroyed', function () {
|
||||
it('worker created or destroyed', function (done) {
|
||||
var worker = new PDFJS.PDFWorker('test1');
|
||||
waitsForPromiseResolved(worker.promise, function () {
|
||||
worker.promise.then(function () {
|
||||
expect(worker.name).toEqual('test1');
|
||||
expect(!!worker.port).toEqual(true);
|
||||
expect(worker.destroyed).toEqual(false);
|
||||
|
@ -238,12 +240,15 @@ describe('api', function() {
|
|||
worker.destroy();
|
||||
expect(!!worker.port).toEqual(false);
|
||||
expect(worker.destroyed).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('worker created or destroyed by getDocument', function () {
|
||||
it('worker created or destroyed by getDocument', function (done) {
|
||||
var loadingTask = PDFJS.getDocument(basicApiUrl);
|
||||
var worker;
|
||||
waitsForPromiseResolved(loadingTask.promise, function () {
|
||||
loadingTask.promise.then(function () {
|
||||
worker = loadingTask._worker;
|
||||
expect(!!worker).toEqual(true);
|
||||
});
|
||||
|
@ -251,16 +256,19 @@ describe('api', function() {
|
|||
var destroyPromise = loadingTask.promise.then(function () {
|
||||
return loadingTask.destroy();
|
||||
});
|
||||
waitsForPromiseResolved(destroyPromise, function () {
|
||||
destroyPromise.then(function () {
|
||||
var destroyedWorker = loadingTask._worker;
|
||||
expect(!!destroyedWorker).toEqual(false);
|
||||
expect(worker.destroyed).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('worker created and can be used in getDocument', function () {
|
||||
it('worker created and can be used in getDocument', function (done) {
|
||||
var worker = new PDFJS.PDFWorker('test1');
|
||||
var loadingTask = PDFJS.getDocument({url: basicApiUrl, worker: worker});
|
||||
waitsForPromiseResolved(loadingTask.promise, function () {
|
||||
loadingTask.promise.then(function () {
|
||||
var docWorker = loadingTask._worker;
|
||||
expect(!!docWorker).toEqual(false);
|
||||
// checking is the same port is used in the MessageHandler
|
||||
|
@ -271,24 +279,30 @@ describe('api', function() {
|
|||
var destroyPromise = loadingTask.promise.then(function () {
|
||||
return loadingTask.destroy();
|
||||
});
|
||||
waitsForPromiseResolved(destroyPromise, function () {
|
||||
destroyPromise.then(function () {
|
||||
expect(worker.destroyed).toEqual(false);
|
||||
worker.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('creates more than one worker', function () {
|
||||
it('creates more than one worker', function (done) {
|
||||
var worker1 = new PDFJS.PDFWorker('test1');
|
||||
var worker2 = new PDFJS.PDFWorker('test2');
|
||||
var worker3 = new PDFJS.PDFWorker('test3');
|
||||
var ready = Promise.all([worker1.promise, worker2.promise,
|
||||
worker3.promise]);
|
||||
waitsForPromiseResolved(ready, function () {
|
||||
ready.then(function () {
|
||||
expect(worker1.port !== worker2.port &&
|
||||
worker1.port !== worker3.port &&
|
||||
worker2.port !== worker3.port).toEqual(true);
|
||||
worker1.destroy();
|
||||
worker2.destroy();
|
||||
worker3.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -296,10 +310,11 @@ describe('api', function() {
|
|||
var loadingTask;
|
||||
var doc;
|
||||
|
||||
beforeEach(function() {
|
||||
beforeEach(function(done) {
|
||||
loadingTask = PDFJS.getDocument(basicApiUrl);
|
||||
waitsForPromiseResolved(loadingTask.promise, function(data) {
|
||||
loadingTask.promise.then(function(data) {
|
||||
doc = data;
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -315,54 +330,75 @@ describe('api', function() {
|
|||
expect(typeof fingerprint).toEqual('string');
|
||||
expect(fingerprint.length > 0).toEqual(true);
|
||||
});
|
||||
it('gets page', function() {
|
||||
it('gets page', function(done) {
|
||||
var promise = doc.getPage(1);
|
||||
waitsForPromiseResolved(promise, function(data) {
|
||||
promise.then(function(data) {
|
||||
expect(data instanceof PDFPageProxy).toEqual(true);
|
||||
expect(data.pageIndex).toEqual(0);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets non-existent page', function() {
|
||||
it('gets non-existent page', function(done) {
|
||||
var promise = doc.getPage(100);
|
||||
waitsForPromiseRejected(promise, function(data) {
|
||||
promise.then(function () {
|
||||
done.fail('shall fail for non-existent page');
|
||||
}, function(data) {
|
||||
expect(data instanceof Error).toEqual(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('gets page index', function() {
|
||||
it('gets page index', function(done) {
|
||||
// reference to second page
|
||||
var ref = {num: 17, gen: 0};
|
||||
var promise = doc.getPageIndex(ref);
|
||||
waitsForPromiseResolved(promise, function(pageIndex) {
|
||||
promise.then(function(pageIndex) {
|
||||
expect(pageIndex).toEqual(1);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets destinations', function() {
|
||||
it('gets destinations', function(done) {
|
||||
var promise = doc.getDestinations();
|
||||
waitsForPromiseResolved(promise, function(data) {
|
||||
promise.then(function(data) {
|
||||
expect(data).toEqual({ chapter1: [{ gen: 0, num: 17 }, { name: 'XYZ' },
|
||||
0, 841.89, null] });
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets a destination', function() {
|
||||
it('gets a destination', function(done) {
|
||||
var promise = doc.getDestination('chapter1');
|
||||
waitsForPromiseResolved(promise, function(data) {
|
||||
promise.then(function(data) {
|
||||
expect(data).toEqual([{ gen: 0, num: 17 }, { name: 'XYZ' },
|
||||
0, 841.89, null]);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets a non-existent destination', function() {
|
||||
it('gets a non-existent destination', function(done) {
|
||||
var promise = doc.getDestination('non-existent-named-destination');
|
||||
waitsForPromiseResolved(promise, function(data) {
|
||||
promise.then(function(data) {
|
||||
expect(data).toEqual(null);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets non-existent page labels', function () {
|
||||
it('gets non-existent page labels', function (done) {
|
||||
var promise = doc.getPageLabels();
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data).toEqual(null);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets page labels', function () {
|
||||
it('gets page labels', function (done) {
|
||||
// PageLabels with Roman/Arabic numerals.
|
||||
var url0 = combineUrl(window.location.href, '../pdfs/bug793632.pdf');
|
||||
var loadingTask0 = PDFJS.getDocument(url0);
|
||||
|
@ -384,8 +420,7 @@ describe('api', function() {
|
|||
return pdfDoc.getPageLabels();
|
||||
});
|
||||
|
||||
waitsForPromiseResolved(Promise.all([promise0, promise1, promise2]),
|
||||
function (pageLabels) {
|
||||
Promise.all([promise0, promise1, promise2]).then(function (pageLabels) {
|
||||
expect(pageLabels[0]).toEqual(['i', 'ii', 'iii', '1']);
|
||||
expect(pageLabels[1]).toEqual(['Front Page1']);
|
||||
expect(pageLabels[2]).toEqual(['1', '2']);
|
||||
|
@ -393,66 +428,86 @@ describe('api', function() {
|
|||
loadingTask0.destroy();
|
||||
loadingTask1.destroy();
|
||||
loadingTask2.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets attachments', function() {
|
||||
it('gets attachments', function(done) {
|
||||
var promise = doc.getAttachments();
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data).toEqual(null);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets javascript', function() {
|
||||
it('gets javascript', function(done) {
|
||||
var promise = doc.getJavaScript();
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data).toEqual([]);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
// Keep this in sync with the pattern in viewer.js. The pattern is used to
|
||||
// detect whether or not to automatically start printing.
|
||||
var viewerPrintRegExp = /\bprint\s*\(/;
|
||||
it('gets javascript with printing instructions (Print action)', function() {
|
||||
it('gets javascript with printing instructions (Print action)',
|
||||
function(done) {
|
||||
// PDF document with "Print" Named action in OpenAction
|
||||
var pdfUrl = combineUrl(window.location.href, '../pdfs/bug1001080.pdf');
|
||||
var loadingTask = PDFJS.getDocument(pdfUrl);
|
||||
var promise = loadingTask.promise.then(function(doc) {
|
||||
return doc.getJavaScript();
|
||||
});
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data).toEqual(['print({});']);
|
||||
expect(data[0]).toMatch(viewerPrintRegExp);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets javascript with printing instructions (JS action)', function() {
|
||||
it('gets javascript with printing instructions (JS action)',
|
||||
function(done) {
|
||||
// PDF document with "JavaScript" action in OpenAction
|
||||
var pdfUrl = combineUrl(window.location.href, '../pdfs/issue6106.pdf');
|
||||
var loadingTask = PDFJS.getDocument(pdfUrl);
|
||||
var promise = loadingTask.promise.then(function(doc) {
|
||||
return doc.getJavaScript();
|
||||
});
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data).toEqual(
|
||||
['this.print({bUI:true,bSilent:false,bShrinkToFit:true});']);
|
||||
expect(data[0]).toMatch(viewerPrintRegExp);
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets non-existent outline', function() {
|
||||
it('gets non-existent outline', function(done) {
|
||||
var url = combineUrl(window.location.href, '../pdfs/tracemonkey.pdf');
|
||||
var loadingTask = PDFJS.getDocument(url);
|
||||
|
||||
var promise = loadingTask.promise.then(function (pdfDocument) {
|
||||
return pdfDocument.getOutline();
|
||||
});
|
||||
waitsForPromiseResolved(promise, function (outline) {
|
||||
promise.then(function (outline) {
|
||||
expect(outline).toEqual(null);
|
||||
|
||||
loadingTask.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets outline', function() {
|
||||
it('gets outline', function(done) {
|
||||
var promise = doc.getOutline();
|
||||
waitsForPromiseResolved(promise, function(outline) {
|
||||
promise.then(function(outline) {
|
||||
// Two top level entries.
|
||||
expect(outline instanceof Array).toEqual(true);
|
||||
expect(outline.length).toEqual(2);
|
||||
|
@ -468,9 +523,12 @@ describe('api', function() {
|
|||
|
||||
expect(outlineItem.items.length).toEqual(1);
|
||||
expect(outlineItem.items[0].title).toEqual('Paragraph 1.1');
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets outline containing a url', function() {
|
||||
it('gets outline containing a url', function(done) {
|
||||
var pdfUrl = combineUrl(window.location.href, '../pdfs/issue3214.pdf');
|
||||
var loadingTask = PDFJS.getDocument(pdfUrl);
|
||||
|
||||
|
@ -490,38 +548,53 @@ describe('api', function() {
|
|||
expect(outlineItemOne.color).toEqual(new Uint8Array([0, 0, 0]));
|
||||
|
||||
loadingTask.destroy(); // Cleanup the worker.
|
||||
done();
|
||||
});
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets metadata', function() {
|
||||
it('gets metadata', function(done) {
|
||||
var promise = doc.getMetadata();
|
||||
waitsForPromiseResolved(promise, function(metadata) {
|
||||
promise.then(function(metadata) {
|
||||
expect(metadata.info['Title']).toEqual('Basic API Test');
|
||||
expect(metadata.info['PDFFormatVersion']).toEqual('1.7');
|
||||
expect(metadata.metadata.get('dc:title')).toEqual('Basic API Test');
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets data', function() {
|
||||
it('gets data', function(done) {
|
||||
var promise = doc.getData();
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data instanceof Uint8Array).toEqual(true);
|
||||
expect(data.length).toEqual(basicApiFileLength);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets download info', function() {
|
||||
it('gets download info', function(done) {
|
||||
var promise = doc.getDownloadInfo();
|
||||
waitsForPromiseResolved(promise, function (data) {
|
||||
promise.then(function (data) {
|
||||
expect(data).toEqual({ length: basicApiFileLength });
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets stats', function() {
|
||||
it('gets stats', function(done) {
|
||||
var promise = doc.getStats();
|
||||
waitsForPromiseResolved(promise, function (stats) {
|
||||
promise.then(function (stats) {
|
||||
expect(stats).toEqual({ streamTypes: [], fontTypes: [] });
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
|
||||
it('checks that fingerprints are unique', function() {
|
||||
it('checks that fingerprints are unique', function(done) {
|
||||
var url1 = combineUrl(window.location.href, '../pdfs/issue4436r.pdf');
|
||||
var loadingTask1 = PDFJS.getDocument(url1);
|
||||
|
||||
|
@ -530,7 +603,7 @@ describe('api', function() {
|
|||
|
||||
var promises = [loadingTask1.promise,
|
||||
loadingTask2.promise];
|
||||
waitsForPromiseResolved(Promise.all(promises), function (data) {
|
||||
Promise.all(promises).then(function (data) {
|
||||
var fingerprint1 = data[0].fingerprint;
|
||||
expect(typeof fingerprint1).toEqual('string');
|
||||
expect(fingerprint1.length > 0).toEqual(true);
|
||||
|
@ -543,6 +616,9 @@ describe('api', function() {
|
|||
|
||||
loadingTask1.destroy();
|
||||
loadingTask2.destroy();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -550,13 +626,16 @@ describe('api', function() {
|
|||
var loadingTask;
|
||||
var pdfDocument, page;
|
||||
|
||||
beforeEach(function() {
|
||||
beforeEach(function(done) {
|
||||
loadingTask = PDFJS.getDocument(basicApiUrl);
|
||||
waitsForPromiseResolved(loadingTask.promise, function(doc) {
|
||||
loadingTask.promise.then(function(doc) {
|
||||
pdfDocument = doc;
|
||||
waitsForPromiseResolved(pdfDocument.getPage(1), function(data) {
|
||||
pdfDocument.getPage(1).then(function(data) {
|
||||
page = data;
|
||||
done();
|
||||
});
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -585,23 +664,28 @@ describe('api', function() {
|
|||
expect(viewport.width).toEqual(1262.835);
|
||||
expect(viewport.height).toEqual(892.92);
|
||||
});
|
||||
it('gets annotations', function () {
|
||||
var defaultPromise = page.getAnnotations();
|
||||
waitsForPromiseResolved(defaultPromise, function (data) {
|
||||
it('gets annotations', function (done) {
|
||||
var defaultPromise = page.getAnnotations().then(function (data) {
|
||||
expect(data.length).toEqual(4);
|
||||
});
|
||||
|
||||
var displayPromise = page.getAnnotations({ intent: 'display' });
|
||||
waitsForPromiseResolved(displayPromise, function (data) {
|
||||
var displayPromise = page.getAnnotations({ intent: 'display' }).then(
|
||||
function (data) {
|
||||
expect(data.length).toEqual(4);
|
||||
});
|
||||
|
||||
var printPromise = page.getAnnotations({ intent: 'print' });
|
||||
waitsForPromiseResolved(printPromise, function (data) {
|
||||
var printPromise = page.getAnnotations({ intent: 'print' }).then(
|
||||
function (data) {
|
||||
expect(data.length).toEqual(4);
|
||||
});
|
||||
Promise.all([defaultPromise, displayPromise, printPromise]).then(
|
||||
function () {
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets text content', function () {
|
||||
it('gets text content', function (done) {
|
||||
var defaultPromise = page.getTextContent();
|
||||
var normalizeWhitespacePromise = page.getTextContent({
|
||||
normalizeWhitespace: true });
|
||||
|
@ -610,24 +694,30 @@ describe('api', function() {
|
|||
defaultPromise,
|
||||
normalizeWhitespacePromise
|
||||
];
|
||||
waitsForPromiseResolved(Promise.all(promises), function (data) {
|
||||
Promise.all(promises).then(function (data) {
|
||||
expect(!!data[0].items).toEqual(true);
|
||||
expect(data[0].items.length).toEqual(7);
|
||||
expect(!!data[0].styles).toEqual(true);
|
||||
|
||||
// A simple check that ensures the two `textContent` object match.
|
||||
expect(JSON.stringify(data[0])).toEqual(JSON.stringify(data[1]));
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets operator list', function() {
|
||||
it('gets operator list', function(done) {
|
||||
var promise = page.getOperatorList();
|
||||
waitsForPromiseResolved(promise, function (oplist) {
|
||||
promise.then(function (oplist) {
|
||||
expect(!!oplist.fnArray).toEqual(true);
|
||||
expect(!!oplist.argsArray).toEqual(true);
|
||||
expect(oplist.lastChunk).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('gets stats after parsing page', function () {
|
||||
it('gets stats after parsing page', function (done) {
|
||||
var promise = page.getOperatorList().then(function () {
|
||||
return pdfDocument.getStats();
|
||||
});
|
||||
|
@ -637,9 +727,12 @@ describe('api', function() {
|
|||
expectedFontTypes[FontType.TYPE1] = true;
|
||||
expectedFontTypes[FontType.CIDFONTTYPE2] = true;
|
||||
|
||||
waitsForPromiseResolved(promise, function (stats) {
|
||||
promise.then(function (stats) {
|
||||
expect(stats).toEqual({ streamTypes: expectedStreamTypes,
|
||||
fontTypes: expectedFontTypes });
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -677,23 +770,25 @@ describe('api', function() {
|
|||
});
|
||||
}
|
||||
|
||||
afterEach(function() {
|
||||
afterEach(function(done) {
|
||||
// Issue 6205 reported an issue with font rendering, so clear the loaded
|
||||
// fonts so that we can see whether loading PDFs in parallel does not
|
||||
// cause any issues with the rendered fonts.
|
||||
var destroyPromises = pdfDocuments.map(function(pdfDocument) {
|
||||
return pdfDocument.destroy();
|
||||
});
|
||||
waitsForPromiseResolved(Promise.all(destroyPromises), function() {});
|
||||
|
||||
// Destroy the workers.
|
||||
destroyPromises = loadingTasks.map(function(loadingTask) {
|
||||
var destroyPromises2 = loadingTasks.map(function(loadingTask) {
|
||||
return loadingTask.destroy();
|
||||
});
|
||||
waitsForPromiseResolved(Promise.all(destroyPromises), function() {});
|
||||
|
||||
Promise.all(destroyPromises.concat(destroyPromises2)).then(function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly render PDFs in parallel', function() {
|
||||
it('should correctly render PDFs in parallel', function(done) {
|
||||
var baseline1, baseline2, baseline3;
|
||||
var promiseDone = renderPDF(pdf1).then(function(data1) {
|
||||
baseline1 = data1;
|
||||
|
@ -714,7 +809,11 @@ describe('api', function() {
|
|||
expect(dataUrls[2]).toEqual(baseline3);
|
||||
return true;
|
||||
});
|
||||
waitsForPromiseResolved(promiseDone, function() {});
|
||||
promiseDone.then(function() {
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('PDFDataRangeTransport', function () {
|
||||
|
@ -734,7 +833,7 @@ describe('api', function() {
|
|||
});
|
||||
return loadPromise;
|
||||
}
|
||||
it('should fetch document info and page using ranges', function () {
|
||||
it('should fetch document info and page using ranges', function (done) {
|
||||
var transport;
|
||||
var initialDataLength = 4000;
|
||||
var fetches = 0;
|
||||
|
@ -758,14 +857,17 @@ describe('api', function() {
|
|||
return pagePromise;
|
||||
});
|
||||
|
||||
waitsForPromiseResolved(getPagePromise, function (page) {
|
||||
getPagePromise.then(function (page) {
|
||||
expect(pdfDocument.numPages).toEqual(14);
|
||||
expect(page.rotate).toEqual(0);
|
||||
expect(fetches).toBeGreaterThan(2);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('should fetch document info and page using range and streaming',
|
||||
function () {
|
||||
function (done) {
|
||||
var transport;
|
||||
var initialDataLength = 4000;
|
||||
var fetches = 0;
|
||||
|
@ -792,10 +894,13 @@ describe('api', function() {
|
|||
return pagePromise;
|
||||
});
|
||||
|
||||
waitsForPromiseResolved(getPagePromise, function (page) {
|
||||
getPagePromise.then(function (page) {
|
||||
expect(pdfDocument.numPages).toEqual(14);
|
||||
expect(page.rotate).toEqual(0);
|
||||
expect(fetches).toEqual(1);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* globals expect, it, describe, StringStream, CMapFactory, Name, CMap,
|
||||
IdentityCMap, waitsFor */
|
||||
IdentityCMap */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -7,93 +7,92 @@ var cMapUrl = '../../external/bcmaps/';
|
|||
var cMapPacked = true;
|
||||
|
||||
describe('cmap', function() {
|
||||
var TEST_TIMEOUT = 20000;
|
||||
function waitsForPromiseResolved(promise, successCallback) {
|
||||
var resolved = false;
|
||||
promise.then(function(val) {
|
||||
resolved = true;
|
||||
successCallback(val);
|
||||
},
|
||||
function(error) {
|
||||
// Shouldn't get here.
|
||||
expect(error).toEqual('the promise should not have been rejected');
|
||||
});
|
||||
waitsFor(function() {
|
||||
return resolved;
|
||||
}, TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
it('parses beginbfchar', function() {
|
||||
it('parses beginbfchar', function(done) {
|
||||
var str = '2 beginbfchar\n' +
|
||||
'<03> <00>\n' +
|
||||
'<04> <01>\n' +
|
||||
'endbfchar\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.lookup(0x03)).toEqual(String.fromCharCode(0x00));
|
||||
expect(cmap.lookup(0x04)).toEqual(String.fromCharCode(0x01));
|
||||
expect(cmap.lookup(0x05)).toBeUndefined();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('parses beginbfrange with range', function() {
|
||||
it('parses beginbfrange with range', function(done) {
|
||||
var str = '1 beginbfrange\n' +
|
||||
'<06> <0B> 0\n' +
|
||||
'endbfrange\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.lookup(0x05)).toBeUndefined();
|
||||
expect(cmap.lookup(0x06)).toEqual(String.fromCharCode(0x00));
|
||||
expect(cmap.lookup(0x0B)).toEqual(String.fromCharCode(0x05));
|
||||
expect(cmap.lookup(0x0C)).toBeUndefined();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('parses beginbfrange with array', function() {
|
||||
it('parses beginbfrange with array', function(done) {
|
||||
var str = '1 beginbfrange\n' +
|
||||
'<0D> <12> [ 0 1 2 3 4 5 ]\n' +
|
||||
'endbfrange\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.lookup(0x0C)).toBeUndefined();
|
||||
expect(cmap.lookup(0x0D)).toEqual(0x00);
|
||||
expect(cmap.lookup(0x12)).toEqual(0x05);
|
||||
expect(cmap.lookup(0x13)).toBeUndefined();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('parses begincidchar', function() {
|
||||
it('parses begincidchar', function(done) {
|
||||
var str = '1 begincidchar\n' +
|
||||
'<14> 0\n' +
|
||||
'endcidchar\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.lookup(0x14)).toEqual(0x00);
|
||||
expect(cmap.lookup(0x15)).toBeUndefined();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('parses begincidrange', function() {
|
||||
it('parses begincidrange', function(done) {
|
||||
var str = '1 begincidrange\n' +
|
||||
'<0016> <001B> 0\n' +
|
||||
'endcidrange\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.lookup(0x15)).toBeUndefined();
|
||||
expect(cmap.lookup(0x16)).toEqual(0x00);
|
||||
expect(cmap.lookup(0x1B)).toEqual(0x05);
|
||||
expect(cmap.lookup(0x1C)).toBeUndefined();
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('decodes codespace ranges', function() {
|
||||
it('decodes codespace ranges', function(done) {
|
||||
var str = '1 begincodespacerange\n' +
|
||||
'<01> <02>\n' +
|
||||
'<00000003> <00000004>\n' +
|
||||
'endcodespacerange\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
var c = {};
|
||||
cmap.readCharCode(String.fromCharCode(1), 0, c);
|
||||
expect(c.charcode).toEqual(1);
|
||||
|
@ -101,70 +100,91 @@ describe('cmap', function() {
|
|||
cmap.readCharCode(String.fromCharCode(0, 0, 0, 3), 0, c);
|
||||
expect(c.charcode).toEqual(3);
|
||||
expect(c.length).toEqual(4);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('decodes 4 byte codespace ranges', function() {
|
||||
it('decodes 4 byte codespace ranges', function(done) {
|
||||
var str = '1 begincodespacerange\n' +
|
||||
'<8EA1A1A1> <8EA1FEFE>\n' +
|
||||
'endcodespacerange\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
var c = {};
|
||||
cmap.readCharCode(String.fromCharCode(0x8E, 0xA1, 0xA1, 0xA1), 0, c);
|
||||
expect(c.charcode).toEqual(0x8EA1A1A1);
|
||||
expect(c.length).toEqual(4);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('read usecmap', function() {
|
||||
it('read usecmap', function(done) {
|
||||
var str = '/Adobe-Japan1-1 usecmap\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream,
|
||||
{ url: cMapUrl, packed: cMapPacked }, null);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap instanceof CMap).toEqual(true);
|
||||
expect(cmap.useCMap).not.toBeNull();
|
||||
expect(cmap.builtInCMap).toBeFalsy();
|
||||
expect(cmap.length).toEqual(0x20A7);
|
||||
expect(cmap.isIdentityCMap).toEqual(false);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('parses cmapname', function() {
|
||||
it('parses cmapname', function(done) {
|
||||
var str = '/CMapName /Identity-H def\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.name).toEqual('Identity-H');
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('parses wmode', function() {
|
||||
it('parses wmode', function(done) {
|
||||
var str = '/WMode 1 def\n';
|
||||
var stream = new StringStream(str);
|
||||
var cmapPromise = CMapFactory.create(stream);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap.vertical).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('loads built in cmap', function() {
|
||||
it('loads built in cmap', function(done) {
|
||||
var cmapPromise = CMapFactory.create(new Name('Adobe-Japan1-1'),
|
||||
{ url: cMapUrl, packed: cMapPacked }, null);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap instanceof CMap).toEqual(true);
|
||||
expect(cmap.useCMap).toBeNull();
|
||||
expect(cmap.builtInCMap).toBeTruthy();
|
||||
expect(cmap.length).toEqual(0x20A7);
|
||||
expect(cmap.isIdentityCMap).toEqual(false);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
it('loads built in identity cmap', function() {
|
||||
it('loads built in identity cmap', function(done) {
|
||||
var cmapPromise = CMapFactory.create(new Name('Identity-H'),
|
||||
{ url: cMapUrl, packed: cMapPacked }, null);
|
||||
waitsForPromiseResolved(cmapPromise, function (cmap) {
|
||||
cmapPromise.then(function (cmap) {
|
||||
expect(cmap instanceof IdentityCMap).toEqual(true);
|
||||
expect(cmap.vertical).toEqual(false);
|
||||
expect(cmap.length).toEqual(0x10000);
|
||||
expect(function() { return cmap.isIdentityCMap; }).toThrow(
|
||||
new Error('should not access .isIdentityCMap'));
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -599,16 +599,20 @@ describe('CipherTransformFactory', function() {
|
|||
describe('AES256 Revision 5', function () {
|
||||
it('should accept user password', function () {
|
||||
new CipherTransformFactory(new DictMock(aes256Map), fileID1, 'user');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
it('should accept owner password', function () {
|
||||
new CipherTransformFactory(new DictMock(aes256Map), fileID1, 'owner');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
it('should not accept wrong password', function () {
|
||||
ensureCipherTransformFactoryPasswordIncorrect(
|
||||
new DictMock(aes256Map), fileID1, 'wrong');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
it('should accept blank password', function () {
|
||||
new CipherTransformFactory(new DictMock(aes256BlankMap), fileID1);
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -616,34 +620,42 @@ describe('CipherTransformFactory', function() {
|
|||
it('should accept user password', function () {
|
||||
new CipherTransformFactory(new DictMock(aes256IsoMap), fileID1,
|
||||
'user');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
it('should accept owner password', function () {
|
||||
new CipherTransformFactory(new DictMock(aes256IsoMap), fileID1,
|
||||
'owner');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
it('should not accept wrong password', function () {
|
||||
ensureCipherTransformFactoryPasswordIncorrect(
|
||||
new DictMock(aes256IsoMap), fileID1, 'wrong');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
it('should accept blank password', function () {
|
||||
new CipherTransformFactory(new DictMock(aes256IBlankMap), fileID1);
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
});
|
||||
it('should accept user password', function() {
|
||||
new CipherTransformFactory(new DictMock(map1), fileID1, '123456');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
|
||||
it('should accept owner password', function() {
|
||||
new CipherTransformFactory(new DictMock(map1), fileID1, '654321');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
|
||||
it('should not accept wrong password', function() {
|
||||
ensureCipherTransformFactoryPasswordIncorrect(
|
||||
new DictMock(map1), fileID1, 'wrong');
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
|
||||
it('should accept no password', function() {
|
||||
new CipherTransformFactory(new DictMock(map2), fileID2);
|
||||
expect(true).toEqual(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* globals expect, it, describe, PartialEvaluator, StringStream, OPS,
|
||||
OperatorList, waitsFor, runs, Dict, Name, Stream, WorkerTask */
|
||||
OperatorList, Dict, Name, Stream, WorkerTask */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -29,24 +29,17 @@ describe('evaluator', function() {
|
|||
|
||||
function PdfManagerMock() { }
|
||||
|
||||
function runOperatorListCheck(evaluator, stream, resources, check) {
|
||||
var done = false;
|
||||
runs(function () {
|
||||
var result = new OperatorList();
|
||||
var task = new WorkerTask('OperatorListCheck');
|
||||
evaluator.getOperatorList(stream, task, resources, result).then(
|
||||
function () {
|
||||
check(result);
|
||||
done = true;
|
||||
});
|
||||
});
|
||||
waitsFor(function () {
|
||||
return done;
|
||||
function runOperatorListCheck(evaluator, stream, resources, callback) {
|
||||
var result = new OperatorList();
|
||||
var task = new WorkerTask('OperatorListCheck');
|
||||
evaluator.getOperatorList(stream, task, resources, result).then(
|
||||
function () {
|
||||
callback(result);
|
||||
});
|
||||
}
|
||||
|
||||
describe('splitCombinedOperations', function() {
|
||||
it('should reject unknown operations', function() {
|
||||
it('should reject unknown operations', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -58,10 +51,11 @@ describe('evaluator', function() {
|
|||
expect(result.fnArray.length).toEqual(1);
|
||||
expect(result.fnArray[0]).toEqual(OPS.fill);
|
||||
expect(result.argsArray[0]).toEqual(null);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle one operations', function() {
|
||||
it('should handle one operations', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -71,10 +65,11 @@ describe('evaluator', function() {
|
|||
expect(!!result.fnArray && !!result.argsArray).toEqual(true);
|
||||
expect(result.fnArray.length).toEqual(1);
|
||||
expect(result.fnArray[0]).toEqual(OPS.restore);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle two glued operations', function() {
|
||||
it('should handle two glued operations', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -86,10 +81,11 @@ describe('evaluator', function() {
|
|||
expect(result.fnArray.length).toEqual(2);
|
||||
expect(result.fnArray[0]).toEqual(OPS.paintXObject);
|
||||
expect(result.fnArray[1]).toEqual(OPS.restore);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle tree glued operations', function() {
|
||||
it('should handle tree glued operations', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -101,10 +97,11 @@ describe('evaluator', function() {
|
|||
expect(result.fnArray[0]).toEqual(OPS.fill);
|
||||
expect(result.fnArray[1]).toEqual(OPS.fill);
|
||||
expect(result.fnArray[2]).toEqual(OPS.fill);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle three glued operations #2', function() {
|
||||
it('should handle three glued operations #2', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -117,10 +114,11 @@ describe('evaluator', function() {
|
|||
expect(result.fnArray[0]).toEqual(OPS.eoFillStroke);
|
||||
expect(result.fnArray[1]).toEqual(OPS.fillStroke);
|
||||
expect(result.fnArray[2]).toEqual(OPS.eoFill);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle glued operations and operands', function() {
|
||||
it('should handle glued operations and operands', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -134,10 +132,11 @@ describe('evaluator', function() {
|
|||
expect(result.argsArray.length).toEqual(2);
|
||||
expect(result.argsArray[1].length).toEqual(1);
|
||||
expect(result.argsArray[1][0]).toEqual(5);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle glued operations and literals', function() {
|
||||
it('should handle glued operations and literals', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -155,12 +154,13 @@ describe('evaluator', function() {
|
|||
expect(result.argsArray[1].length).toEqual(1);
|
||||
expect(result.argsArray[1][0]).toEqual(false);
|
||||
expect(result.argsArray[2]).toEqual(null);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('validateNumberOfArgs', function() {
|
||||
it('should execute if correct number of arguments', function() {
|
||||
it('should execute if correct number of arguments', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -170,9 +170,10 @@ describe('evaluator', function() {
|
|||
expect(result.argsArray[0][0]).toEqual(5);
|
||||
expect(result.argsArray[0][1]).toEqual(1);
|
||||
expect(result.fnArray[0]).toEqual(OPS.setCharWidth);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should execute if too many arguments', function() {
|
||||
it('should execute if too many arguments', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -182,9 +183,10 @@ describe('evaluator', function() {
|
|||
expect(result.argsArray[0][0]).toEqual(1);
|
||||
expect(result.argsArray[0][1]).toEqual(4);
|
||||
expect(result.fnArray[0]).toEqual(OPS.setCharWidth);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should execute if nested commands', function() {
|
||||
it('should execute if nested commands', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -199,9 +201,10 @@ describe('evaluator', function() {
|
|||
expect(result.argsArray[0].length).toEqual(1);
|
||||
expect(result.argsArray[1].length).toEqual(1);
|
||||
expect(result.argsArray[2].length).toEqual(2);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should skip if too few arguments', function() {
|
||||
it('should skip if too few arguments', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -210,9 +213,10 @@ describe('evaluator', function() {
|
|||
function (result) {
|
||||
expect(result.argsArray).toEqual([]);
|
||||
expect(result.fnArray).toEqual([]);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should close opened saves', function() {
|
||||
it('should close opened saves', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -225,9 +229,10 @@ describe('evaluator', function() {
|
|||
expect(result.fnArray[1]).toEqual(OPS.save);
|
||||
expect(result.fnArray[2]).toEqual(OPS.restore);
|
||||
expect(result.fnArray[3]).toEqual(OPS.restore);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should skip paintXObject if name is missing', function() {
|
||||
it('should skip paintXObject if name is missing', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -236,9 +241,10 @@ describe('evaluator', function() {
|
|||
function (result) {
|
||||
expect(result.argsArray).toEqual([]);
|
||||
expect(result.fnArray).toEqual([]);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should skip paintXObject if subtype is PS', function() {
|
||||
it('should skip paintXObject if subtype is PS', function(done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
|
@ -256,51 +262,41 @@ describe('evaluator', function() {
|
|||
runOperatorListCheck(evaluator, stream, resources, function (result) {
|
||||
expect(result.argsArray).toEqual([]);
|
||||
expect(result.fnArray).toEqual([]);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('thread control', function() {
|
||||
it('should abort operator list parsing', function () {
|
||||
it('should abort operator list parsing', function (done) {
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
var stream = new StringStream('qqQQ');
|
||||
var resources = new ResourcesMock();
|
||||
var done = false;
|
||||
runs(function () {
|
||||
var result = new OperatorList();
|
||||
var task = new WorkerTask('OperatorListAbort');
|
||||
task.terminate();
|
||||
evaluator.getOperatorList(stream, task, resources, result).catch(
|
||||
function () {
|
||||
done = true;
|
||||
expect(!!result.fnArray && !!result.argsArray).toEqual(true);
|
||||
expect(result.fnArray.length).toEqual(0);
|
||||
});
|
||||
});
|
||||
waitsFor(function () {
|
||||
return done;
|
||||
});
|
||||
var result = new OperatorList();
|
||||
var task = new WorkerTask('OperatorListAbort');
|
||||
task.terminate();
|
||||
evaluator.getOperatorList(stream, task, resources, result).catch(
|
||||
function () {
|
||||
expect(!!result.fnArray && !!result.argsArray).toEqual(true);
|
||||
expect(result.fnArray.length).toEqual(0);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('should abort text parsing parsing', function () {
|
||||
it('should abort text parsing parsing', function (done) {
|
||||
var resources = new ResourcesMock();
|
||||
var evaluator = new PartialEvaluator(new PdfManagerMock(),
|
||||
new XrefMock(), new HandlerMock(),
|
||||
'prefix');
|
||||
var stream = new StringStream('qqQQ');
|
||||
var done = false;
|
||||
runs(function () {
|
||||
var task = new WorkerTask('TextContentAbort');
|
||||
task.terminate();
|
||||
evaluator.getTextContent(stream, task, resources).catch(
|
||||
function () {
|
||||
done = true;
|
||||
});
|
||||
});
|
||||
waitsFor(function () {
|
||||
return done;
|
||||
});
|
||||
var task = new WorkerTask('TextContentAbort');
|
||||
task.terminate();
|
||||
evaluator.getTextContent(stream, task, resources).catch(
|
||||
function () {
|
||||
expect(true).toEqual(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -29,6 +29,14 @@ describe('font', function() {
|
|||
}
|
||||
};
|
||||
|
||||
function createWithNullProto(obj) {
|
||||
var result = Object.create(null);
|
||||
for (var i in obj) {
|
||||
result[i] = obj[i];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
describe('CFFParser', function() {
|
||||
var parser = new CFFParser(fontData, {});
|
||||
var cff = parser.parse();
|
||||
|
@ -226,7 +234,7 @@ describe('font', function() {
|
|||
]);
|
||||
parser.bytes = bytes;
|
||||
var encoding = parser.parseEncoding(2, {}, new CFFStrings(), null);
|
||||
expect(encoding.encoding).toEqual({0x8: 1});
|
||||
expect(encoding.encoding).toEqual(createWithNullProto({0x8: 1}));
|
||||
});
|
||||
|
||||
it('parses encoding format 1', function() {
|
||||
|
@ -239,7 +247,8 @@ describe('font', function() {
|
|||
]);
|
||||
parser.bytes = bytes;
|
||||
var encoding = parser.parseEncoding(2, {}, new CFFStrings(), null);
|
||||
expect(encoding.encoding).toEqual({0x7: 0x01, 0x08: 0x02});
|
||||
expect(encoding.encoding).toEqual(
|
||||
createWithNullProto({0x7: 0x01, 0x08: 0x02}));
|
||||
});
|
||||
|
||||
it('parses fdselect format 0', function() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* globals expect, it, describe, beforeEach, isArray, StringStream,
|
||||
/* globals jasmine, expect, it, describe, beforeEach, isArray, StringStream,
|
||||
PostScriptParser, PostScriptLexer, PostScriptEvaluator,
|
||||
PostScriptCompiler*/
|
||||
|
||||
|
@ -6,31 +6,42 @@
|
|||
|
||||
describe('function', function() {
|
||||
beforeEach(function() {
|
||||
this.addMatchers({
|
||||
toMatchArray: function(expected) {
|
||||
var actual = this.actual;
|
||||
if (actual.length !== expected.length) {
|
||||
return false;
|
||||
}
|
||||
for (var i = 0; i < expected.length; i++) {
|
||||
var a = actual[i], b = expected[i];
|
||||
if (isArray(b)) {
|
||||
if (a.length !== b.length) {
|
||||
return false;
|
||||
jasmine.addMatchers({
|
||||
toMatchArray: function(util, customEqualityTesters) {
|
||||
return {
|
||||
compare: function (actual, expected) {
|
||||
var result = {};
|
||||
if (actual.length !== expected.length) {
|
||||
result.pass = false;
|
||||
result.message = 'Array length: ' + actual.length +
|
||||
', expected: ' + expected.length;
|
||||
return result;
|
||||
}
|
||||
for (var j = 0; j < a.length; j++) {
|
||||
var suba = a[j], subb = b[j];
|
||||
if (suba !== subb) {
|
||||
return false;
|
||||
result.pass = true;
|
||||
for (var i = 0; i < expected.length; i++) {
|
||||
var a = actual[i], b = expected[i];
|
||||
if (isArray(b)) {
|
||||
if (a.length !== b.length) {
|
||||
result.pass = false;
|
||||
break;
|
||||
}
|
||||
for (var j = 0; j < a.length; j++) {
|
||||
var suba = a[j], subb = b[j];
|
||||
if (suba !== subb) {
|
||||
result.pass = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (a !== b) {
|
||||
result.pass = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (a !== b) {
|
||||
return false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
208
test/unit/jasmine-boot.js
Normal file
208
test/unit/jasmine-boot.js
Normal file
|
@ -0,0 +1,208 @@
|
|||
/* Copyright 2016 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
Copyright (c) 2008-2016 Pivotal Labs
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
/*globals jasmineRequire, jasmine, TestReporter */
|
||||
|
||||
// Modified jasmine's boot.js file to load PDF.js libraries async.
|
||||
|
||||
'use strict';
|
||||
|
||||
var pdfjsLibs;
|
||||
|
||||
function initializePDFJS(callback) {
|
||||
require.config({paths: {'pdfjs': '../../src'}});
|
||||
require(['pdfjs/shared/util', 'pdfjs/display/global', 'pdfjs/core/primitives',
|
||||
'pdfjs/core/annotation', 'pdfjs/core/crypto', 'pdfjs/core/stream',
|
||||
'pdfjs/core/fonts', 'pdfjs/core/ps_parser', 'pdfjs/core/function',
|
||||
'pdfjs/core/parser', 'pdfjs/core/evaluator', 'pdfjs/core/cmap',
|
||||
'pdfjs/core/worker', 'pdfjs/core/network', 'pdfjs/display/api',
|
||||
'pdfjs/display/metadata', 'pdfjs/display/dom_utils'],
|
||||
function (sharedUtil, displayGlobal, corePrimitives, coreAnnotation,
|
||||
coreCrypto, coreStream, coreFonts, corePsParser, coreFunction,
|
||||
coreParser, coreEvaluator, coreCMap, coreWorker, coreNetwork,
|
||||
displayAPI, displayMetadata, displayDOMUtils) {
|
||||
|
||||
pdfjsLibs = {
|
||||
sharedUtil: sharedUtil,
|
||||
displayGlobal: displayGlobal,
|
||||
corePrimitives: corePrimitives,
|
||||
coreAnnotation: coreAnnotation,
|
||||
coreCrypto: coreCrypto,
|
||||
coreStream: coreStream,
|
||||
coreFonts: coreFonts,
|
||||
corePsParser: corePsParser,
|
||||
coreFunction: coreFunction,
|
||||
coreParser: coreParser,
|
||||
coreEvaluator: coreEvaluator,
|
||||
coreCMap: coreCMap,
|
||||
coreWorker: coreWorker,
|
||||
coreNetwork: coreNetwork,
|
||||
displayAPI: displayAPI,
|
||||
displayMetadata: displayMetadata,
|
||||
displayDOMUtils: displayDOMUtils
|
||||
};
|
||||
|
||||
// Expose all loaded internal exported members to global scope.
|
||||
Object.keys(pdfjsLibs).forEach(function (libName) {
|
||||
var lib = pdfjsLibs[libName];
|
||||
Object.keys(lib).forEach(function (name) {
|
||||
if (Object.getOwnPropertyDescriptor(window, name)) {
|
||||
return; // ignoring if already set
|
||||
}
|
||||
window[name] = lib[name];
|
||||
});
|
||||
});
|
||||
|
||||
// Configure the worker.
|
||||
displayGlobal.PDFJS.workerSrc = '../../src/worker_loader.js';
|
||||
|
||||
// Release describe() calls.
|
||||
window.describe = oldDescribe;
|
||||
describeQueue.forEach(function (args) {
|
||||
oldDescribe.apply(window, args);
|
||||
});
|
||||
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
(function() {
|
||||
window.jasmine = jasmineRequire.core(jasmineRequire);
|
||||
|
||||
jasmineRequire.html(jasmine);
|
||||
|
||||
var env = jasmine.getEnv();
|
||||
|
||||
var jasmineInterface = jasmineRequire.interface(jasmine, env);
|
||||
extend(window, jasmineInterface);
|
||||
|
||||
// Runner Parameters
|
||||
var queryString = new jasmine.QueryString({
|
||||
getWindowLocation: function() { return window.location; }
|
||||
});
|
||||
|
||||
var catchingExceptions = queryString.getParam('catch');
|
||||
env.catchExceptions(typeof catchingExceptions === 'undefined' ?
|
||||
true : catchingExceptions);
|
||||
|
||||
var throwingExpectationFailures = queryString.getParam('throwFailures');
|
||||
env.throwOnExpectationFailure(throwingExpectationFailures);
|
||||
|
||||
var random = queryString.getParam('random');
|
||||
env.randomizeTests(random);
|
||||
|
||||
var seed = queryString.getParam('seed');
|
||||
if (seed) {
|
||||
env.seed(seed);
|
||||
}
|
||||
|
||||
// Reporters
|
||||
var htmlReporter = new jasmine.HtmlReporter({
|
||||
env: env,
|
||||
onRaiseExceptionsClick: function() {
|
||||
queryString.navigateWithNewParam('catch', !env.catchingExceptions());
|
||||
},
|
||||
onThrowExpectationsClick: function() {
|
||||
queryString.navigateWithNewParam('throwFailures',
|
||||
!env.throwingExpectationFailures());
|
||||
},
|
||||
onRandomClick: function() {
|
||||
queryString.navigateWithNewParam('random', !env.randomTests());
|
||||
},
|
||||
addToExistingQueryString: function(key, value) {
|
||||
return queryString.fullStringWithNewParam(key, value);
|
||||
},
|
||||
getContainer: function() { return document.body; },
|
||||
createElement: function() {
|
||||
return document.createElement.apply(document, arguments);
|
||||
},
|
||||
createTextNode: function() {
|
||||
return document.createTextNode.apply(document, arguments);
|
||||
},
|
||||
timer: new jasmine.Timer()
|
||||
});
|
||||
|
||||
env.addReporter(htmlReporter);
|
||||
|
||||
if (queryString.getParam('browser')) {
|
||||
var testReporter = new TestReporter(queryString.getParam('browser'),
|
||||
queryString.getParam('path'));
|
||||
env.addReporter(testReporter);
|
||||
}
|
||||
|
||||
// Filter which specs will be run by matching the start of the full name
|
||||
// against the `spec` query param.
|
||||
var specFilter = new jasmine.HtmlSpecFilter({
|
||||
filterString: function() { return queryString.getParam('spec'); }
|
||||
});
|
||||
|
||||
env.specFilter = function(spec) {
|
||||
return specFilter.matches(spec.getFullName());
|
||||
};
|
||||
|
||||
// Sets longer timeout.
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
|
||||
|
||||
// Replace the browser window's `onload`, ensure it's called, and then run
|
||||
// all of the loaded specs. This includes initializing the `HtmlReporter`
|
||||
// instance and then executing the loaded Jasmine environment.
|
||||
var currentWindowOnload = window.onload;
|
||||
|
||||
window.onload = function() {
|
||||
if (currentWindowOnload) {
|
||||
currentWindowOnload();
|
||||
}
|
||||
|
||||
initializePDFJS(function () {
|
||||
htmlReporter.initialize();
|
||||
env.execute();
|
||||
});
|
||||
};
|
||||
|
||||
function extend(destination, source) {
|
||||
for (var property in source) {
|
||||
destination[property] = source[property];
|
||||
}
|
||||
return destination;
|
||||
}
|
||||
}());
|
||||
|
||||
// Hacking describe() to wait for PDFJS to be loaded, since Jasmine executes
|
||||
// it without waiting for libs to be loaded and fails to use PDFJS members.
|
||||
var oldDescribe = window.describe, describeQueue = [];
|
||||
window.describe = function () {
|
||||
describeQueue.push(Array.prototype.slice.call(arguments, 0));
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
/* globals expect, it, describe, waitsFor, combineUrl, PDFNetworkStream */
|
||||
/* globals expect, it, describe, combineUrl, PDFNetworkStream */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -8,23 +8,7 @@ describe('network', function() {
|
|||
var pdf2 = combineUrl(window.location.href, '../pdfs/pdf.pdf');
|
||||
var pdf2Length = 32472771;
|
||||
|
||||
function waitsForPromiseResolved(promise, successCallback) {
|
||||
var TEST_TIMEOUT = 20000;
|
||||
var resolved = false;
|
||||
promise.then(function(val) {
|
||||
resolved = true;
|
||||
successCallback(val);
|
||||
},
|
||||
function(error) {
|
||||
// Shouldn't get here.
|
||||
expect(error).toEqual('the promise should not have been rejected');
|
||||
});
|
||||
waitsFor(function() {
|
||||
return resolved;
|
||||
}, TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
it('read without stream and range', function() {
|
||||
it('read without stream and range', function(done) {
|
||||
var stream = new PDFNetworkStream({
|
||||
source: {
|
||||
url: pdf1,
|
||||
|
@ -56,21 +40,26 @@ describe('network', function() {
|
|||
|
||||
var readPromise = read();
|
||||
|
||||
waitsForPromiseResolved(readPromise, function (page) {
|
||||
readPromise.then(function (page) {
|
||||
expect(len).toEqual(pdf1Length);
|
||||
expect(count).toEqual(1);
|
||||
expect(isStreamingSupported).toEqual(false);
|
||||
expect(isRangeSupported).toEqual(false);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
|
||||
it('read with streaming', function() {
|
||||
it('read with streaming', function(done) {
|
||||
var userAgent = window.navigator.userAgent;
|
||||
// The test is valid for FF only: the XHR has support of the
|
||||
// 'moz-chunked-array' response type.
|
||||
// TODO enable for other browsers, e.g. when fetch/streams API is supported.
|
||||
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
|
||||
if (!m || m[1] < 9) {
|
||||
expect(true).toEqual(true);
|
||||
done();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -105,14 +94,17 @@ describe('network', function() {
|
|||
|
||||
var readPromise = read();
|
||||
|
||||
waitsForPromiseResolved(readPromise, function (page) {
|
||||
readPromise.then(function () {
|
||||
expect(len).toEqual(pdf2Length);
|
||||
expect(count).toBeGreaterThan(1);
|
||||
expect(isStreamingSupported).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
|
||||
it('read custom ranges', function () {
|
||||
it('read custom ranges', function (done) {
|
||||
// We don't test on browsers that don't support range request, so
|
||||
// requiring this test to pass.
|
||||
var rangeSize = 32768;
|
||||
|
@ -159,11 +151,14 @@ describe('network', function() {
|
|||
read(range2Reader, result2),
|
||||
promise]);
|
||||
|
||||
waitsForPromiseResolved(readPromises, function (page) {
|
||||
readPromises.then(function () {
|
||||
expect(result1.value).toEqual(rangeSize);
|
||||
expect(result2.value).toEqual(tailSize);
|
||||
expect(isRangeSupported).toEqual(true);
|
||||
expect(fullReaderCancelled).toEqual(true);
|
||||
done();
|
||||
}).catch(function (reason) {
|
||||
done.fail(reason);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -110,11 +110,12 @@ describe('primitives', function() {
|
|||
|
||||
dictWithManyKeys.forEach(callbackSpy);
|
||||
|
||||
expect(callbackSpy).wasCalled();
|
||||
expect(callbackSpy.argsForCall[0]).toEqual(['FontFile', testFontFile]);
|
||||
expect(callbackSpy.argsForCall[1]).toEqual(['FontFile2', testFontFile2]);
|
||||
expect(callbackSpy.argsForCall[2]).toEqual(['FontFile3', testFontFile3]);
|
||||
expect(callbackSpy.callCount).toEqual(3);
|
||||
expect(callbackSpy).toHaveBeenCalled();
|
||||
var callbackSpyCalls = callbackSpy.calls;
|
||||
expect(callbackSpyCalls.argsFor(0)).toEqual(['FontFile', testFontFile]);
|
||||
expect(callbackSpyCalls.argsFor(1)).toEqual(['FontFile2', testFontFile2]);
|
||||
expect(callbackSpyCalls.argsFor(2)).toEqual(['FontFile3', testFontFile3]);
|
||||
expect(callbackSpyCalls.count()).toEqual(3);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -1,22 +1,32 @@
|
|||
/* globals expect, it, describe, beforeEach, Stream, PredictorStream, Dict */
|
||||
/* globals jasmine, expect, it, describe, beforeEach, Stream, PredictorStream,
|
||||
Dict */
|
||||
|
||||
'use strict';
|
||||
|
||||
describe('stream', function() {
|
||||
beforeEach(function() {
|
||||
this.addMatchers({
|
||||
toMatchTypedArray: function(expected) {
|
||||
var actual = this.actual;
|
||||
if (actual.length !== expected.length) {
|
||||
return false;
|
||||
}
|
||||
for (var i = 0, ii = expected.length; i < ii; i++) {
|
||||
var a = actual[i], b = expected[i];
|
||||
if (a !== b) {
|
||||
return false;
|
||||
jasmine.addMatchers({
|
||||
toMatchTypedArray: function(util, customEqualityTesters) {
|
||||
return {
|
||||
compare: function (actual, expected) {
|
||||
var result = {};
|
||||
if (actual.length !== expected.length) {
|
||||
result.pass = false;
|
||||
result.message = 'Array length: ' + actual.length +
|
||||
', expected: ' + expected.length;
|
||||
return result;
|
||||
}
|
||||
result.pass = true;
|
||||
for (var i = 0, ii = expected.length; i < ii; i++) {
|
||||
var a = actual[i], b = expected[i];
|
||||
if (a !== b) {
|
||||
result.pass = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -46,34 +46,31 @@ var TestReporter = function(browser, appPath) {
|
|||
return new Date().getTime();
|
||||
};
|
||||
|
||||
this.reportRunnerStarting = function() {
|
||||
this.jasmineStarted = function(suiteInfo) {
|
||||
this.runnerStartTime = this.now();
|
||||
sendInfo('Started unit tests for ' + browser + '.');
|
||||
};
|
||||
|
||||
this.reportSpecStarting = function() { };
|
||||
this.suiteStarted = function(result) { };
|
||||
|
||||
this.reportSpecResults = function(spec) {
|
||||
var results = spec.results();
|
||||
if (results.skipped) {
|
||||
sendResult('TEST-SKIPPED', results.description);
|
||||
} else if (results.passed()) {
|
||||
sendResult('TEST-PASSED', results.description);
|
||||
this.specStarted = function(result) { };
|
||||
|
||||
this.specDone = function(result) {
|
||||
if (result.failedExpectations.length === 0) {
|
||||
sendResult('TEST-PASSED', result.description);
|
||||
} else {
|
||||
var failedMessages = '';
|
||||
var items = results.getItems();
|
||||
var items = result.failedExpectations;
|
||||
for (var i = 0, ii = items.length; i < ii; i++) {
|
||||
if (!items[i].passed()) {
|
||||
failedMessages += items[i].message + ' ';
|
||||
}
|
||||
failedMessages += items[i].message + ' ';
|
||||
}
|
||||
sendResult('TEST-UNEXPECTED-FAIL', results.description, failedMessages);
|
||||
sendResult('TEST-UNEXPECTED-FAIL', result.description, failedMessages);
|
||||
}
|
||||
};
|
||||
|
||||
this.reportSuiteResults = function(suite) { };
|
||||
this.suiteDone = function(result) { };
|
||||
|
||||
this.reportRunnerResults = function(runner) {
|
||||
this.jasmineDone = function() {
|
||||
// Give the test.py some time process any queued up requests
|
||||
setTimeout(sendQuitRequest, 500);
|
||||
};
|
||||
|
|
|
@ -3,25 +3,16 @@
|
|||
<head>
|
||||
<title>pdf.js unit test</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/png" href="../../external/jasmine/jasmine_favicon.png">
|
||||
<link rel="stylesheet" type="text/css" href="../../external/jasmine/jasmine.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.css">
|
||||
|
||||
<script src="../../node_modules/requirejs/require.js"></script>
|
||||
<script src="../../external/jasmine/jasmine.js"></script>
|
||||
<script src="../../external/jasmine/jasmine-html.js"></script>
|
||||
<script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script>
|
||||
<script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script>
|
||||
<script src="testreporter.js"></script>
|
||||
<script src="jasmine-boot.js"></script>
|
||||
|
||||
<script src="../../web/ui_utils.js"></script>
|
||||
|
||||
<script>
|
||||
// Hacking describe() to wait for PDFJS to be loaded, since Jasmine executes
|
||||
// it without waiting for libs to be loaded and fails to use PDFJS members.
|
||||
var oldDescribe = window.describe, describeQueue = [];
|
||||
window.describe = function () {
|
||||
describeQueue.push(Array.prototype.slice.call(arguments, 0));
|
||||
};
|
||||
</script>
|
||||
|
||||
<!-- include spec files here... -->
|
||||
<script src="primitives_spec.js"></script>
|
||||
<script src="font_spec.js"></script>
|
||||
|
@ -38,112 +29,6 @@
|
|||
<script src="annotation_layer_spec.js"></script>
|
||||
<script src="network_spec.js"></script>
|
||||
<script src="dom_utils_spec.js"></script>
|
||||
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
var pdfjsLibs;
|
||||
|
||||
function initializePDFJS(callback) {
|
||||
require.config({paths: {'pdfjs': '../../src'}});
|
||||
require(['pdfjs/shared/util', 'pdfjs/display/global', 'pdfjs/core/primitives',
|
||||
'pdfjs/core/annotation', 'pdfjs/core/crypto', 'pdfjs/core/stream',
|
||||
'pdfjs/core/fonts', 'pdfjs/core/ps_parser', 'pdfjs/core/function',
|
||||
'pdfjs/core/parser', 'pdfjs/core/evaluator', 'pdfjs/core/cmap',
|
||||
'pdfjs/core/worker', 'pdfjs/core/network', 'pdfjs/display/api',
|
||||
'pdfjs/display/metadata', 'pdfjs/display/dom_utils'],
|
||||
function (sharedUtil, displayGlobal, corePrimitives, coreAnnotation,
|
||||
coreCrypto, coreStream, coreFonts, corePsParser, coreFunction,
|
||||
coreParser, coreEvaluator, coreCMap, coreWorker, coreNetwork,
|
||||
displayAPI, displayMetadata, displayDOMUtils) {
|
||||
|
||||
pdfjsLibs = {
|
||||
sharedUtil: sharedUtil,
|
||||
displayGlobal: displayGlobal,
|
||||
corePrimitives: corePrimitives,
|
||||
coreAnnotation: coreAnnotation,
|
||||
coreCrypto: coreCrypto,
|
||||
coreStream: coreStream,
|
||||
coreFonts: coreFonts,
|
||||
corePsParser: corePsParser,
|
||||
coreFunction: coreFunction,
|
||||
coreParser: coreParser,
|
||||
coreEvaluator: coreEvaluator,
|
||||
coreCMap: coreCMap,
|
||||
coreWorker: coreWorker,
|
||||
coreNetwork: coreNetwork,
|
||||
displayAPI: displayAPI,
|
||||
displayMetadata: displayMetadata,
|
||||
displayDOMUtils: displayDOMUtils
|
||||
};
|
||||
|
||||
// Expose all loaded internal exported members to global scope.
|
||||
Object.keys(pdfjsLibs).forEach(function (libName) {
|
||||
var lib = pdfjsLibs[libName];
|
||||
Object.keys(lib).forEach(function (name) {
|
||||
if (Object.getOwnPropertyDescriptor(window, name)) {
|
||||
return; // ignoring if already set
|
||||
}
|
||||
window[name] = lib[name];
|
||||
});
|
||||
});
|
||||
|
||||
// Configure the worker.
|
||||
PDFJS.workerSrc = '../../src/worker_loader.js';
|
||||
|
||||
// Release describe() calls.
|
||||
window.describe = oldDescribe;
|
||||
describeQueue.forEach(function (args) {
|
||||
oldDescribe.apply(window, args);
|
||||
});
|
||||
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
(function pdfJsUnitTest() {
|
||||
function queryParams() {
|
||||
var qs = window.location.search.substring(1);
|
||||
var kvs = qs.split('&');
|
||||
var params = { };
|
||||
for (var i = 0; i < kvs.length; ++i) {
|
||||
var kv = kvs[i].split('=');
|
||||
params[unescape(kv[0])] = unescape(kv[1]);
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
var jasmineEnv = jasmine.getEnv();
|
||||
jasmineEnv.updateInterval = 1000;
|
||||
|
||||
var trivialReporter = new jasmine.TrivialReporter();
|
||||
|
||||
jasmineEnv.addReporter(trivialReporter);
|
||||
|
||||
var params = queryParams();
|
||||
if (params['browser']) {
|
||||
var testReporter = new TestReporter(params['browser'], params['path']);
|
||||
jasmineEnv.addReporter(testReporter);
|
||||
}
|
||||
|
||||
jasmineEnv.specFilter = function pdfJsUnitTestSpecFilter(spec) {
|
||||
return trivialReporter.specFilter(spec);
|
||||
};
|
||||
|
||||
var currentWindowOnload = window.onload;
|
||||
|
||||
window.onload = function pdfJsUnitTestOnload() {
|
||||
if (currentWindowOnload) {
|
||||
currentWindowOnload();
|
||||
}
|
||||
initializePDFJS(execJasmine);
|
||||
};
|
||||
|
||||
function execJasmine() {
|
||||
jasmineEnv.execute();
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue