diff options
Diffstat (limited to 'fxjs')
-rw-r--r-- | fxjs/cjs_publicmethods.cpp | 2 | ||||
-rw-r--r-- | fxjs/cjs_publicmethods_embeddertest.cpp | 36 |
2 files changed, 37 insertions, 1 deletions
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp index 30927beac2..74428c3724 100644 --- a/fxjs/cjs_publicmethods.cpp +++ b/fxjs/cjs_publicmethods.cpp @@ -1587,7 +1587,7 @@ CJS_Return CJS_PublicMethods::AFSimple_Calculate( double dValue = wcscmp(sFunction.c_str(), L"PRD") == 0 ? 1.0 : 0.0; v8::Local<v8::Array> FieldNameArray = - AF_MakeArrayFromList(pRuntime, params[0]); + AF_MakeArrayFromList(pRuntime, params[1]); int nFieldsCount = 0; for (size_t i = 0; i < pRuntime->GetArrayLength(FieldNameArray); ++i) { WideString wsFieldName = diff --git a/fxjs/cjs_publicmethods_embeddertest.cpp b/fxjs/cjs_publicmethods_embeddertest.cpp index dbab0817ce..874f59f5ae 100644 --- a/fxjs/cjs_publicmethods_embeddertest.cpp +++ b/fxjs/cjs_publicmethods_embeddertest.cpp @@ -3,8 +3,10 @@ // found in the LICENSE file. #include <cmath> +#include <vector> #include "core/fxcrt/fx_string.h" +#include "fxjs/cjs_event_context.h" #include "fxjs/cjs_publicmethods.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/js_embedder_test.h" @@ -160,3 +162,37 @@ TEST_F(CJS_PublicMethodsEmbedderTest, MakeFormatDate) { CJS_PublicMethods::MakeFormatDate(3947356800000.0, L"mmddyyyy"); EXPECT_STREQ(L"02012095", formatted_date.c_str()); } + +TEST_F(CJS_PublicMethodsEmbedderTest, AFSimple_CalculateSum) { + v8::Isolate::Scope isolate_scope(isolate()); + v8::HandleScope handle_scope(isolate()); + v8::Context::Scope context_scope(GetV8Context()); + + EXPECT_TRUE(OpenDocument("calculate.pdf")); + auto* page = LoadPage(0); + ASSERT_TRUE(page); + + CJS_Runtime runtime(static_cast<CPDFSDK_FormFillEnvironment*>(form_handle())); + runtime.NewEventContext(); + + WideString result; + runtime.GetCurrentEventContext()->GetEventHandler()->m_pValue = &result; + + auto ary = runtime.NewArray(); + + runtime.PutArrayElement(ary, 0, runtime.NewString(L"Calc1_A")); + runtime.PutArrayElement(ary, 1, runtime.NewString(L"Calc1_B")); + + std::vector<v8::Local<v8::Value>> params; + params.push_back(runtime.NewString("SUM")); + params.push_back(ary); + + CJS_Return ret = CJS_PublicMethods::AFSimple_Calculate(&runtime, params); + UnloadPage(page); + + runtime.GetCurrentEventContext()->GetEventHandler()->m_pValue = nullptr; + + ASSERT_TRUE(!ret.HasError()); + ASSERT_TRUE(!ret.HasReturn()); + ASSERT_EQ(L"7", result); +} |