Beef up CFXJSE_FormCalcContextEmbedderTest.Substr Just accept the current behavior as passing. - Test wrong number of arguments. - Test null arguments. - Test boundary conditions. Change-Id: I6b444ccd82e12e66e6176c3cfd38c9d592b7291d Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/53652 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp index 6fb58bf..ff2c47d 100644 --- a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp +++ b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
@@ -8,7 +8,16 @@ #include "testing/xfa_js_embedder_test.h" #include "xfa/fxfa/cxfa_eventparam.h" -class CFXJSE_FormCalcContextEmbedderTest : public XFAJSEmbedderTest {}; +class CFXJSE_FormCalcContextEmbedderTest : public XFAJSEmbedderTest { + public: + CFXJSE_FormCalcContextEmbedderTest() = default; + ~CFXJSE_FormCalcContextEmbedderTest() override = default; + + protected: + bool ExecuteExpectNull(ByteStringView input) { + return Execute(input) && GetValue()->IsNull(); + } +}; // TODO(dsinclair): Comment out tests are broken and need to be fixed. @@ -1375,21 +1384,46 @@ TEST_F(CFXJSE_FormCalcContextEmbedderTest, Substr) { ASSERT_TRUE(OpenDocument("simple_xfa.pdf")); + // Test wrong number of parameters. + EXPECT_FALSE(Execute("Substr()")); + EXPECT_FALSE(Execute("Substr(1)")); + EXPECT_FALSE(Execute("Substr(1, 2)")); + EXPECT_FALSE(Execute("Substr(1, 2, 3, 4)")); + + // Test null input. + EXPECT_TRUE(ExecuteExpectNull("Substr(null, 0, 4)")); + EXPECT_TRUE(ExecuteExpectNull("Substr(\"ABCDEFG\", null, 4)")); + EXPECT_TRUE(ExecuteExpectNull("Substr(\"ABCDEFG\", 0, null)")); + EXPECT_TRUE(ExecuteExpectNull("Substr(null, null, 4)")); + EXPECT_TRUE(ExecuteExpectNull("Substr(null, 0, null)")); + EXPECT_TRUE(ExecuteExpectNull("Substr(\"ABCDEFG\", null, null)")); + EXPECT_TRUE(ExecuteExpectNull("Substr(null, null, null)")); + struct { const char* program; const char* result; - } tests[] = {{"Substr(\"ABCDEFG\", 3, 4)", "CDEF"}, - {"Substr(3214, 2, 1)", "2"}, - {"Substr(\"ABCDEFG\", 5, 0)", ""}, - {"Substr(\"21 Waterloo St.\", 4, 5)", "Water"}}; + } static const kTests[] = {{"Substr(\"ABCDEFG\", -1, 4)", ""}, + {"Substr(\"ABCDEFG\", 0, 4)", ""}, + {"Substr(\"ABCDEFG\", 3, 4)", "CDEF"}, + {"Substr(\"ABCDEFG\", 4, 4)", "DEFG"}, + {"Substr(\"ABCDEFG\", 5, 4)", ""}, + {"Substr(\"ABCDEFG\", 6, 4)", ""}, + {"Substr(\"ABCDEFG\", 7, 4)", ""}, + {"Substr(\"ABCDEFG\", 8, 4)", ""}, + {"Substr(\"ABCDEFG\", 5, -1)", ""}, + {"Substr(\"ABCDEFG\", 5, 0)", ""}, + {"Substr(\"ABCDEFG\", 5, 1)", "E"}, + {"Substr(\"abcdefghi\", 5, 3)", "efg"}, + {"Substr(3214, 2, 1)", "2"}, + {"Substr(\"21 Waterloo St.\", 4, 5)", "Water"}}; - for (size_t i = 0; i < FX_ArraySize(tests); ++i) { - EXPECT_TRUE(Execute(tests[i].program)); + for (const auto& test : kTests) { + EXPECT_TRUE(Execute(test.program)); CFXJSE_Value* value = GetValue(); EXPECT_TRUE(value->IsString()); - EXPECT_STREQ(tests[i].result, value->ToString().c_str()) - << "Program: " << tests[i].program << " Result: '" << value->ToString() + EXPECT_STREQ(test.result, value->ToString().c_str()) + << "Program: " << test.program << " Result: '" << value->ToString() << "'"; } }