Merge pull request #7629 from timvandermeij/interactive-form-unit-tests

Text widget annotations: implement unit testing and sanitize data values
This commit is contained in:
Jonas Jenwald 2016-09-13 16:52:30 +02:00 committed by GitHub
commit a7c35025fe
3 changed files with 71 additions and 5 deletions

View File

@ -671,8 +671,19 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
function TextWidgetAnnotation(params) {
WidgetAnnotation.call(this, params);
this.data.textAlignment = Util.getInheritableProperty(params.dict, 'Q');
this.data.maxLen = Util.getInheritableProperty(params.dict, 'MaxLen');
// Determine the alignment of text in the field.
var alignment = Util.getInheritableProperty(params.dict, 'Q');
if (!isInt(alignment) || alignment < 0 || alignment > 2) {
alignment = null;
}
this.data.textAlignment = alignment;
// Determine the maximum length of text in the field.
var maximumLength = Util.getInheritableProperty(params.dict, 'MaxLen');
if (!isInt(maximumLength) || maximumLength < 0) {
maximumLength = null;
}
this.data.maxLen = maximumLength;
}
Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {

View File

@ -29,7 +29,6 @@
var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType;
var AnnotationType = sharedUtil.AnnotationType;
var isInt = sharedUtil.isInt;
var Util = sharedUtil.Util;
var addLinkAttributes = displayDOMUtils.addLinkAttributes;
var LinkTarget = displayDOMUtils.LinkTarget;
@ -451,7 +450,7 @@ var TextWidgetAnnotationElement = (
element.type = 'text';
element.value = this.data.fieldValue;
if (isInt(this.data.maxLen)) {
if (this.data.maxLen !== null) {
element.maxLength = this.data.maxLen;
}
} else {
@ -467,7 +466,7 @@ var TextWidgetAnnotationElement = (
this._setTextStyle(element, font);
}
if (isInt(this.data.textAlignment)) {
if (this.data.textAlignment !== null) {
element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
}

View File

@ -453,6 +453,62 @@ describe('Annotation layer', function() {
});
});
describe('TextWidgetAnnotation', function() {
var textWidgetDict;
beforeEach(function (done) {
textWidgetDict = new Dict();
textWidgetDict.set('Type', Name.get('Annot'));
textWidgetDict.set('Subtype', Name.get('Widget'));
textWidgetDict.set('FT', Name.get('Tx'));
done();
});
afterEach(function () {
textWidgetDict = null;
});
it('should handle unknown text alignment and maximum length', function() {
var textWidgetRef = new Ref(124, 0);
var xref = new XRefMock([
{ ref: textWidgetRef, data: textWidgetDict, }
]);
var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef);
expect(textWidgetAnnotation.data.textAlignment).toEqual(null);
expect(textWidgetAnnotation.data.maxLen).toEqual(null);
});
it('should not set invalid text alignment and maximum length', function() {
textWidgetDict.set('Q', 'center');
textWidgetDict.set('MaxLen', 'five');
var textWidgetRef = new Ref(43, 0);
var xref = new XRefMock([
{ ref: textWidgetRef, data: textWidgetDict, }
]);
var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef);
expect(textWidgetAnnotation.data.textAlignment).toEqual(null);
expect(textWidgetAnnotation.data.maxLen).toEqual(null);
});
it('should set valid text alignment and maximum length', function() {
textWidgetDict.set('Q', 1);
textWidgetDict.set('MaxLen', 20);
var textWidgetRef = new Ref(84, 0);
var xref = new XRefMock([
{ ref: textWidgetRef, data: textWidgetDict, }
]);
var textWidgetAnnotation = annotationFactory.create(xref, textWidgetRef);
expect(textWidgetAnnotation.data.textAlignment).toEqual(1);
expect(textWidgetAnnotation.data.maxLen).toEqual(20);
});
});
describe('FileAttachmentAnnotation', function() {
var loadingTask;
var annotations;