Merge pull request #6540 from Snuffleupagus/getDocument-onPassword-onProgress-unittests

Add unit-tests for the `onPassword/onProgress` callbacks of the API
This commit is contained in:
Yury Delendik 2015-10-21 09:05:55 -04:00
commit f12d692c78

View File

@ -3,7 +3,7 @@
/* globals PDFJS, expect, it, describe, Promise, combineUrl, waitsFor,
InvalidPDFException, MissingPDFException, StreamType, FontType,
PDFDocumentProxy, PasswordException, PasswordResponses,
PDFPageProxy */
PDFPageProxy, createPromiseCapability */
'use strict';
@ -38,12 +38,31 @@ describe('api', function() {
return data !== undefined;
}, 20000);
}
describe('PDFJS', function() {
describe('getDocument', function() {
it('creates pdf doc from URL', function() {
var promise = PDFJS.getDocument(basicApiUrl);
waitsForPromiseResolved(promise, function(data) {
expect(data instanceof PDFDocumentProxy).toEqual(true);
var loadingTask = PDFJS.getDocument(basicApiUrl);
var isProgressReportedResolved = false;
var progressReportedCapability = createPromiseCapability();
// Attach the callback that is used to report loading progress;
// similarly to how viewer.js works.
loadingTask.onProgress = function (progressData) {
if (!isProgressReportedResolved) {
isProgressReportedResolved = true;
progressReportedCapability.resolve(progressData);
}
};
var promises = [
progressReportedCapability.promise,
loadingTask.promise
];
waitsForPromiseResolved(Promise.all(promises), function (data) {
expect((data[0].loaded / data[0].total) > 0).toEqual(true);
expect(data[1] instanceof PDFDocumentProxy).toEqual(true);
});
});
it('creates pdf doc from typed array', function() {
@ -101,28 +120,43 @@ describe('api', function() {
it('creates pdf doc from PDF file protected with user and owner password',
function () {
var url = combineUrl(window.location.href, '../pdfs/pr6531_1.pdf');
var loadingTask = PDFJS.getDocument(url);
var passwordNeededPromise = PDFJS.getDocument({
url: url, password: '',
});
waitsForPromiseRejected(passwordNeededPromise, function (data) {
expect(data instanceof PasswordException).toEqual(true);
expect(data.code).toEqual(PasswordResponses.NEED_PASSWORD);
});
var isPasswordNeededResolved = false;
var passwordNeededCapability = createPromiseCapability();
var isPasswordIncorrectResolved = false;
var passwordIncorrectCapability = createPromiseCapability();
var passwordIncorrectPromise = PDFJS.getDocument({
url: url, password: 'qwerty',
});
waitsForPromiseRejected(passwordIncorrectPromise, function (data) {
expect(data instanceof PasswordException).toEqual(true);
expect(data.code).toEqual(PasswordResponses.INCORRECT_PASSWORD);
});
// Attach the callback that is used to request a password;
// similarly to how viewer.js handles passwords.
loadingTask.onPassword = function (updatePassword, reason) {
if (reason === PasswordResponses.NEED_PASSWORD &&
!isPasswordNeededResolved) {
isPasswordNeededResolved = true;
passwordNeededCapability.resolve();
var passwordAcceptedPromise = PDFJS.getDocument({
url: url, password: 'asdfasdf',
});
waitsForPromiseResolved(passwordAcceptedPromise, function (data) {
expect(data instanceof PDFDocumentProxy).toEqual(true);
updatePassword('qwerty'); // Provide an incorrect password.
return;
}
if (reason === PasswordResponses.INCORRECT_PASSWORD &&
!isPasswordIncorrectResolved) {
isPasswordIncorrectResolved = true;
passwordIncorrectCapability.resolve();
updatePassword('asdfasdf'); // Provide the correct password.
return;
}
// Shouldn't get here.
expect(false).toEqual(true);
};
var promises = [
passwordNeededCapability.promise,
passwordIncorrectCapability.promise,
loadingTask.promise
];
waitsForPromiseResolved(Promise.all(promises), function (data) {
expect(data[2] instanceof PDFDocumentProxy).toEqual(true);
});
});
it('creates pdf doc from PDF file protected with only a user password',