Text widget annotations: implement comb support
This commit is contained in:
parent
c0e82dbc38
commit
6100ab4b18
7 changed files with 113 additions and 4 deletions
|
@ -1,7 +1,7 @@
|
|||
/* globals expect, it, describe, Dict, Name, Annotation, AnnotationBorderStyle,
|
||||
AnnotationBorderStyleType, AnnotationType, AnnotationFlag, PDFJS,
|
||||
beforeEach, afterEach, stringToBytes, AnnotationFactory, Ref, isRef,
|
||||
beforeAll, afterAll */
|
||||
beforeAll, afterAll, AnnotationFieldFlag */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -481,6 +481,7 @@ describe('Annotation layer', function() {
|
|||
expect(textWidgetAnnotation.data.maxLen).toEqual(null);
|
||||
expect(textWidgetAnnotation.data.readOnly).toEqual(false);
|
||||
expect(textWidgetAnnotation.data.multiLine).toEqual(false);
|
||||
expect(textWidgetAnnotation.data.comb).toEqual(false);
|
||||
});
|
||||
|
||||
it('should not set invalid text alignment, maximum length and flags',
|
||||
|
@ -499,13 +500,18 @@ describe('Annotation layer', function() {
|
|||
expect(textWidgetAnnotation.data.maxLen).toEqual(null);
|
||||
expect(textWidgetAnnotation.data.readOnly).toEqual(false);
|
||||
expect(textWidgetAnnotation.data.multiLine).toEqual(false);
|
||||
expect(textWidgetAnnotation.data.comb).toEqual(false);
|
||||
});
|
||||
|
||||
it('should set valid text alignment, maximum length and flags',
|
||||
function() {
|
||||
var flags = 0;
|
||||
flags |= 1 << (AnnotationFieldFlag.READONLY - 1);
|
||||
flags |= 1 << (AnnotationFieldFlag.MULTILINE - 1);
|
||||
|
||||
textWidgetDict.set('Q', 1);
|
||||
textWidgetDict.set('MaxLen', 20);
|
||||
textWidgetDict.set('Ff', 4097);
|
||||
textWidgetDict.set('Ff', flags);
|
||||
|
||||
var textWidgetRef = new Ref(84, 0);
|
||||
var xref = new XRefMock([
|
||||
|
@ -518,6 +524,74 @@ describe('Annotation layer', function() {
|
|||
expect(textWidgetAnnotation.data.readOnly).toEqual(true);
|
||||
expect(textWidgetAnnotation.data.multiLine).toEqual(true);
|
||||
});
|
||||
|
||||
it('should reject comb fields without a maximum length', function() {
|
||||
var flags = 0;
|
||||
flags |= 1 << (AnnotationFieldFlag.COMB - 1);
|
||||
|
||||
textWidgetDict.set('Ff', flags);
|
||||
|
||||
var textWidgetRef = new Ref(46, 0);
|
||||
var xref = new XRefMock([
|
||||
{ ref: textWidgetRef, data: textWidgetDict, }
|
||||
]);
|
||||
|
||||
var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef);
|
||||
expect(textWidgetAnnotation.data.comb).toEqual(false);
|
||||
});
|
||||
|
||||
it('should accept comb fields with a maximum length', function() {
|
||||
var flags = 0;
|
||||
flags |= 1 << (AnnotationFieldFlag.COMB - 1);
|
||||
|
||||
textWidgetDict.set('MaxLen', 20);
|
||||
textWidgetDict.set('Ff', flags);
|
||||
|
||||
var textWidgetRef = new Ref(46, 0);
|
||||
var xref = new XRefMock([
|
||||
{ ref: textWidgetRef, data: textWidgetDict, }
|
||||
]);
|
||||
|
||||
var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef);
|
||||
expect(textWidgetAnnotation.data.comb).toEqual(true);
|
||||
});
|
||||
|
||||
it('should only accept comb fields when the flags are valid', function() {
|
||||
var invalidFieldFlags = [
|
||||
AnnotationFieldFlag.MULTILINE,
|
||||
AnnotationFieldFlag.PASSWORD,
|
||||
AnnotationFieldFlag.FILESELECT
|
||||
];
|
||||
|
||||
// The field may not use combs until all invalid flags are unset.
|
||||
for (var i = 0, ii = invalidFieldFlags.length; i <= ii; i++) {
|
||||
var flags = 0;
|
||||
flags |= 1 << (AnnotationFieldFlag.COMB - 1);
|
||||
|
||||
for (var j = 0, jj = invalidFieldFlags.length; j < jj; j++) {
|
||||
flags |= 1 << (invalidFieldFlags[j] - 1);
|
||||
}
|
||||
|
||||
textWidgetDict.set('MaxLen', 20);
|
||||
textWidgetDict.set('Ff', flags);
|
||||
|
||||
var textWidgetRef = new Ref(93, 0);
|
||||
var xref = new XRefMock([
|
||||
{ ref: textWidgetRef, data: textWidgetDict, }
|
||||
]);
|
||||
|
||||
var textWidgetAnnotation = annotationFactory.create(xref,
|
||||
textWidgetRef);
|
||||
|
||||
var valid = (invalidFieldFlags.length === 0);
|
||||
expect(textWidgetAnnotation.data.comb).toEqual(valid);
|
||||
|
||||
// Remove the last invalid flag for the next iteration.
|
||||
if (!valid) {
|
||||
invalidFieldFlags.splice(-1, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('FileAttachmentAnnotation', function() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue