Improve tests for CJX_LayoutPseudoModel.
Check return from GetUnitFromString() to avoid tripping ASSERT()
later on as uncovered by tests.
Change-Id: I73881e792c48f1f1faae104078d5be4c73e1a5e7
Reviewed-on: https://pdfium-review.googlesource.com/c/50510
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index 401daa0..f7a07e7 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -127,8 +127,11 @@
break;
}
- float fValue =
- measure.ToUnit(CXFA_Measurement::GetUnitFromString(unit.AsStringView()));
+ XFA_Unit eUnit = CXFA_Measurement::GetUnitFromString(unit.AsStringView());
+ if (eUnit == XFA_Unit::Unknown)
+ return CJS_Result::Failure(JSMessage::kValueError);
+
+ float fValue = measure.ToUnit(eUnit);
return CJS_Result::Success(
runtime->NewNumber(FXSYS_round(fValue * 1000) / 1000.0f));
}
diff --git a/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel.in b/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel.in
index 45d19d8..ea3a23b 100644
--- a/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel.in
+++ b/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel.in
@@ -21,32 +21,89 @@
</pageSet>
<event activity="docReady" ref="$host">
<script contentType="application/x-javascript">
+ {{include ../expect.js}}
{{include ../property_test_helpers.js}}
testROProperty(xfa.layout, "ready", true);
- try {
- xfa.layout.absPage(1);
- xfa.layout.absPageCount();
- xfa.layout.absPageCountInBatch();
- xfa.layout.absPageInBatch(1);
- xfa.layout.absPageSpan(1);
- xfa.layout.h(100, 'pt');
- xfa.layout.page(1);
- xfa.layout.pageContent(1);
- xfa.layout.pageCount();
- xfa.layout.pageSpan(1);
- xfa.layout.relayout();
- xfa.layout.relayoutPageArea();
- xfa.layout.sheet(1);
- xfa.layout.sheetCount();
- xfa.layout.sheetCountInBatch();
- xfa.layout.sheetInBatch(1);
- xfa.layout.w(100, 'px');
- xfa.layout.x(100, 'mm');
- xfa.layout.y(100, 'bogus');
- app.alert("finished testing methods");
- } catch (e) {
- app.alert("error testing methods: " + e);
- }
+
+ expectError("xfa.layout.absPage()");
+ expectError("xfa.layout.absPage(1, 2)");
+ expect("xfa.layout.absPage(1)", 0);
+
+ expect("xfa.layout.absPageCount()", 2);
+ expect("xfa.layout.absPageCount('args', [42], 'ignored')", 2);
+
+ expect("xfa.layout.absPageCountInBatch()", 0);
+ expect("xfa.layout.absPageCountInBatch('args', [42], 'ignored')", 0);
+
+ expectError("xfa.layout.absPageInBatch()");
+ expectError("xfa.layout.absPageInBatch(1, 2)");
+ expect("xfa.layout.absPageInBatch(1)", 0);
+
+ expectError("xfa.layout.absPageSpan()");
+ expectError("xfa.layout.absPageSpan(1, 2)");
+ expect("xfa.layout.absPageSpan(1)");
+
+ expectError("xfa.layout.h()");
+ expectError("xfa.layout.h(4, 'is', 'toomany', 'args')");
+ expectError("xfa.layout.h(my_doc, 'bogounits')", 0);
+ expect("xfa.layout.h(my_doc, 'cm')", 0);
+ expect("xfa.layout.h(my_doc, 'in', 2)", 0);
+
+ expectError("xfa.layout.page()");
+ expectError("xfa.layout.page(1, 2)");
+ expect("xfa.layout.page(my_doc)", 1);
+
+ expectError("xfa.layout.pageContent()");
+ expectError("xfa.layout.pageContent(4, 'is', 'too', 'many')");
+ expect("xfa.layout.pageContent(1)", "[object XFAObject]");
+ expect("xfa.layout.pageContent(1).length", 2);
+
+ expect("xfa.layout.pageCount()", 2);
+ expect("xfa.layout.pageCount('all', 'args', ['ignored'])", 2);
+
+ expectError("xfa.layout.pageSpan()");
+ expectError("xfa.layout.pageSpan(2, 'toomany')");
+ expect("xfa.layout.pageSpan(my_doc)", 1);
+
+ expect("xfa.layout.relayout()");
+ expect("xfa.layout.relayout('args', ['ignored'], 42)");
+
+ expect("xfa.layout.relayoutPageArea()");
+ expect("xfa.layout.relayoutPageArea('args', ['ignored'], 42)");
+
+ expectError("xfa.layout.sheet()");
+ expectError("xfa.layout.sheet(1, 2)");
+ expect("xfa.layout.sheet(my_doc)", 0);
+
+ expect("xfa.layout.sheetCount()", 2);
+ expect("xfa.layout.sheetCount('args', ['ignored'], 42)", 2);
+
+ expect("xfa.layout.sheetCountInBatch()", 0);
+ expect("xfa.layout.sheetCountInBatch('args', ['ignored'], 42)", 0);
+
+ expectError("xfa.layout.sheetInBatch()");
+ expectError("xfa.layout.sheetInBatch(2, 'toomany')");
+ expect("xfa.layout.sheetInBatch(1)", 0);
+
+ expectError("xfa.layout.w()");
+ expectError("xfa.layout.w(4, 'is', 'toomany', 'args')");
+ expectError("xfa.layout.w(my_doc, 'bogounits')", 0);
+ expect("xfa.layout.w(my_doc, 'cm')", 0);
+ expect("xfa.layout.w(my_doc, 'in', 2)", 0);
+
+ expectError("xfa.layout.x()");
+ expectError("xfa.layout.x(4, 'is', 'toomany', 'args')");
+ expectError("xfa.layout.x(my_doc, 'bogounits')", 0);
+ expect("xfa.layout.x(my_doc, 'cm')", 0);
+ expect("xfa.layout.x(my_doc, 'in', 2)", 0);
+
+ expectError("xfa.layout.y()");
+ expectError("xfa.layout.y(4, 'is', 'toomany', 'args')");
+ expectError("xfa.layout.y(my_doc, 'bogounits')", 0);
+ expect("xfa.layout.y(my_doc, 'cm')", 0);
+ expect("xfa.layout.y(my_doc, 'in', 2)", 0);
+
+ app.alert("finished testing methods");
</script>
</event>
</subform>
diff --git a/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel_expected.txt b/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel_expected.txt
index 249ad1d..fb2708f 100644
--- a/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel_expected.txt
+++ b/testing/resources/javascript/xfa_specific/xfa_layout_pseudomodel_expected.txt
@@ -1,3 +1,62 @@
Alert: PASS: ready = true
Alert: PASS: ready threw Error: Unable to set ready value.
+Alert: PASS: xfa.layout.absPage() threw XFAObject.absPage: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.absPage(1, 2) threw XFAObject.absPage: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.absPage(1) = 0
+Alert: PASS: xfa.layout.absPageCount() = 2
+Alert: PASS: xfa.layout.absPageCount('args', [42], 'ignored') = 2
+Alert: PASS: xfa.layout.absPageCountInBatch() = 0
+Alert: PASS: xfa.layout.absPageCountInBatch('args', [42], 'ignored') = 0
+Alert: PASS: xfa.layout.absPageInBatch() threw XFAObject.absPageInBatch: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.absPageInBatch(1, 2) threw XFAObject.absPageInBatch: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.absPageInBatch(1) = 0
+Alert: PASS: xfa.layout.absPageSpan() threw XFAObject.absPageSpan: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.absPageSpan(1, 2) threw XFAObject.absPageSpan: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.absPageSpan(1) = undefined
+Alert: PASS: xfa.layout.h() threw XFAObject.h: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.h(4, 'is', 'toomany', 'args') threw XFAObject.h: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.h(my_doc, 'bogounits') threw XFAObject.h: Incorrect parameter value.
+Alert: PASS: xfa.layout.h(my_doc, 'cm') = 0
+Alert: PASS: xfa.layout.h(my_doc, 'in', 2) = 0
+Alert: PASS: xfa.layout.page() threw XFAObject.page: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.page(1, 2) threw XFAObject.page: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.page(my_doc) = 1
+Alert: PASS: xfa.layout.pageContent() threw XFAObject.pageContent: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.pageContent(4, 'is', 'too', 'many') threw XFAObject.pageContent: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.pageContent(1) = [object XFAObject]
+Alert: PASS: xfa.layout.pageContent(1).length = 2
+Alert: PASS: xfa.layout.pageCount() = 2
+Alert: PASS: xfa.layout.pageCount('all', 'args', ['ignored']) = 2
+Alert: PASS: xfa.layout.pageSpan() threw XFAObject.pageSpan: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.pageSpan(2, 'toomany') threw XFAObject.pageSpan: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.pageSpan(my_doc) = 1
+Alert: PASS: xfa.layout.relayout() = undefined
+Alert: PASS: xfa.layout.relayout('args', ['ignored'], 42) = undefined
+Alert: PASS: xfa.layout.relayoutPageArea() = undefined
+Alert: PASS: xfa.layout.relayoutPageArea('args', ['ignored'], 42) = undefined
+Alert: PASS: xfa.layout.sheet() threw XFAObject.sheet: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.sheet(1, 2) threw XFAObject.sheet: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.sheet(my_doc) = 0
+Alert: PASS: xfa.layout.sheetCount() = 2
+Alert: PASS: xfa.layout.sheetCount('args', ['ignored'], 42) = 2
+Alert: PASS: xfa.layout.sheetCountInBatch() = 0
+Alert: PASS: xfa.layout.sheetCountInBatch('args', ['ignored'], 42) = 0
+Alert: PASS: xfa.layout.sheetInBatch() threw XFAObject.sheetInBatch: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.sheetInBatch(2, 'toomany') threw XFAObject.sheetInBatch: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.sheetInBatch(1) = 0
+Alert: PASS: xfa.layout.w() threw XFAObject.w: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.w(4, 'is', 'toomany', 'args') threw XFAObject.w: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.w(my_doc, 'bogounits') threw XFAObject.w: Incorrect parameter value.
+Alert: PASS: xfa.layout.w(my_doc, 'cm') = 0
+Alert: PASS: xfa.layout.w(my_doc, 'in', 2) = 0
+Alert: PASS: xfa.layout.x() threw XFAObject.x: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.x(4, 'is', 'toomany', 'args') threw XFAObject.x: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.x(my_doc, 'bogounits') threw XFAObject.x: Incorrect parameter value.
+Alert: PASS: xfa.layout.x(my_doc, 'cm') = 0
+Alert: PASS: xfa.layout.x(my_doc, 'in', 2) = 0
+Alert: PASS: xfa.layout.y() threw XFAObject.y: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.y(4, 'is', 'toomany', 'args') threw XFAObject.y: Incorrect number of parameters passed to function.
+Alert: PASS: xfa.layout.y(my_doc, 'bogounits') threw XFAObject.y: Incorrect parameter value.
+Alert: PASS: xfa.layout.y(my_doc, 'cm') = 0
+Alert: PASS: xfa.layout.y(my_doc, 'in', 2) = 0
Alert: finished testing methods