Merge pull request #7900 from Snuffleupagus/choiceWidget-Opt-indirect-objects

Ensure that we handle indirect objects in all types of `Opt` entries in `ChoiceWidget` annotation dictionaries
This commit is contained in:
Tim van der Meij 2016-12-17 20:29:43 +01:00 committed by GitHub
commit d0893b0c48
2 changed files with 21 additions and 8 deletions

View File

@ -779,14 +779,16 @@ var ChoiceWidgetAnnotation = (function ChoiceWidgetAnnotationClosure() {
// it to an array of arrays as well for convenience in the display layer.
this.data.options = [];
var options = params.dict.getArray('Opt');
var options = params.dict.get('Opt');
if (isArray(options)) {
var xref = params.xref;
for (var i = 0, ii = options.length; i < ii; i++) {
var option = options[i];
var option = xref.fetchIfRef(options[i]);
var isOptionArray = isArray(option);
this.data.options[i] = {
exportValue: isArray(option) ? option[0] : option,
displayValue: isArray(option) ? option[1] : option,
exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option,
displayValue: isOptionArray ? xref.fetchIfRef(option[1]) : option,
};
}
}

View File

@ -900,7 +900,12 @@ describe('Annotation layer', function() {
});
it('should handle option arrays with array elements', function() {
var options = [['foo_export', 'Foo'], ['bar_export', 'Bar']];
var optionBarRef = new Ref(20, 0);
var optionBarStr = 'Bar';
var optionOneRef = new Ref(10, 0);
var optionOneArr = ['bar_export', optionBarRef];
var options = [['foo_export', 'Foo'], optionOneRef];
var expected = [
{
exportValue: 'foo_export',
@ -916,7 +921,9 @@ describe('Annotation layer', function() {
var choiceWidgetRef = new Ref(123, 0);
var xref = new XRefMock([
{ ref: choiceWidgetRef, data: choiceWidgetDict, }
{ ref: choiceWidgetRef, data: choiceWidgetDict, },
{ ref: optionBarRef, data: optionBarStr, },
{ ref: optionOneRef, data: optionOneArr, },
]);
var choiceWidgetAnnotation = annotationFactory.create(xref,
@ -928,7 +935,10 @@ describe('Annotation layer', function() {
});
it('should handle option arrays with string elements', function() {
var options = ['Foo', 'Bar'];
var optionBarRef = new Ref(10, 0);
var optionBarStr = 'Bar';
var options = ['Foo', optionBarRef];
var expected = [
{
exportValue: 'Foo',
@ -944,7 +954,8 @@ describe('Annotation layer', function() {
var choiceWidgetRef = new Ref(981, 0);
var xref = new XRefMock([
{ ref: choiceWidgetRef, data: choiceWidgetDict, }
{ ref: choiceWidgetRef, data: choiceWidgetDict, },
{ ref: optionBarRef, data: optionBarStr, }
]);
var choiceWidgetAnnotation = annotationFactory.create(xref,