mirror of
https://github.com/openharmony/ark_js_runtime.git
synced 2026-07-21 23:25:24 -04:00
86cfe52253
Signed-off-by: wanyanglan <wanyanglan1@huawei.com> Change-Id: Iac7851492f10c0ef1303c621febb65e5fdd22e41
140 lines
4.8 KiB
C++
140 lines
4.8 KiB
C++
/*
|
|
* Copyright (c) 2021 Huawei Device Co., Ltd.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <cstdint>
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include <iostream>
|
|
#include <memory>
|
|
|
|
// those head files is in ace_engine
|
|
#include "ark_js_runtime.h"
|
|
#include "js_value.h"
|
|
|
|
using OHOS::Ace::Framework::ArkJSRuntime;
|
|
using OHOS::Ace::Framework::JsRuntime;
|
|
using OHOS::Ace::Framework::JsValue;
|
|
using OHOS::Ace::Framework::RegisterFunctionType;
|
|
using std::shared_ptr;
|
|
|
|
std::string GetLogContent(const shared_ptr<JsRuntime> &runtime, const std::vector<shared_ptr<JsValue>> &argument)
|
|
{
|
|
std::string context;
|
|
for (const auto &value : argument) {
|
|
context += value->ToString(runtime);
|
|
}
|
|
return context;
|
|
}
|
|
|
|
shared_ptr<JsValue> AppDebugLogPrint(const shared_ptr<JsRuntime> &runtime, const shared_ptr<JsValue> &,
|
|
const std::vector<shared_ptr<JsValue>> &argument, int32_t)
|
|
{
|
|
std::string context = GetLogContent(runtime, argument);
|
|
std::cout << context.c_str() << std::endl;
|
|
return runtime->NewObject();
|
|
}
|
|
|
|
shared_ptr<JsValue> Setter(const shared_ptr<JsRuntime> &runtime, const shared_ptr<JsValue> &,
|
|
const std::vector<shared_ptr<JsValue>> &argument, int32_t)
|
|
{
|
|
std::string context = GetLogContent(runtime, argument);
|
|
std::cout << context.c_str() << std::endl;
|
|
return runtime->NewObject();
|
|
}
|
|
|
|
shared_ptr<JsValue> Getter(const shared_ptr<JsRuntime> &runtime, const shared_ptr<JsValue> &,
|
|
const std::vector<shared_ptr<JsValue>> &argument, int32_t)
|
|
{
|
|
std::string context = GetLogContent(runtime, argument);
|
|
std::cout << "Getter" << std::endl;
|
|
return runtime->NewObject();
|
|
}
|
|
|
|
int PrintLog([[maybe_unused]] int id, [[maybe_unused]] int level, const char *tag, [[maybe_unused]] const char *fmt,
|
|
const char *message)
|
|
{
|
|
std::cout << tag << "::" << message;
|
|
return 0;
|
|
}
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions, hicpp-special-member-functions)
|
|
class TestRuntime {
|
|
public:
|
|
TestRuntime()
|
|
{
|
|
runtime_ = ArkJSRuntime::GetInstance();
|
|
runtime_->SetLogPrint(PrintLog);
|
|
runtime_->Initialize("");
|
|
}
|
|
~TestRuntime()
|
|
{
|
|
runtime_->Reset();
|
|
}
|
|
inline const shared_ptr<JsRuntime> &operator*() const
|
|
{
|
|
return runtime_;
|
|
}
|
|
inline const shared_ptr<JsRuntime> &operator->() const
|
|
{
|
|
return runtime_;
|
|
}
|
|
|
|
private:
|
|
shared_ptr<JsRuntime> runtime_;
|
|
};
|
|
|
|
int main()
|
|
{
|
|
TestRuntime runtime;
|
|
RegisterFunctionType func = AppDebugLogPrint;
|
|
shared_ptr<JsValue> global = runtime->GetGlobal();
|
|
shared_ptr<JsValue> logFunc = runtime->NewFunction(func);
|
|
shared_ptr<JsValue> consoleObj = runtime->NewObject();
|
|
global->SetProperty(*runtime, "console", consoleObj);
|
|
consoleObj->SetProperty(*runtime, "log", logFunc);
|
|
consoleObj->SetProperty(*runtime, "info", logFunc);
|
|
|
|
shared_ptr<JsValue> getSetTest = runtime->NewObject();
|
|
shared_ptr<JsValue> setter = runtime->NewFunction(Setter);
|
|
shared_ptr<JsValue> getter = runtime->NewFunction(Getter);
|
|
bool getset = getSetTest->SetAccessorProperty(*runtime, "GetSetTest", getter, setter);
|
|
std::cout << "SetAccessorProperty result: " << getset << std::endl;
|
|
global->SetProperty(*runtime, "GetSet", getSetTest);
|
|
|
|
std::vector<shared_ptr<JsValue>> arguments;
|
|
arguments.emplace_back(runtime->NewString("Hello world"));
|
|
|
|
consoleObj = global->GetProperty(*runtime, "console");
|
|
logFunc = consoleObj->GetProperty(*runtime, "log");
|
|
shared_ptr<JsValue> testObj = logFunc->Call(*runtime, runtime->NewUndefined(), arguments, 1);
|
|
|
|
shared_ptr<JsValue> testArrayValue = runtime->NewString("1");
|
|
shared_ptr<JsValue> testValue = runtime->NewArray();
|
|
testValue->SetProperty(*runtime, "0", testArrayValue);
|
|
testValue->SetProperty(*runtime, "1", testArrayValue);
|
|
std::cout << "GetProperty test: " << testValue->GetArrayLength(*runtime) << std::endl;
|
|
|
|
testObj->SetProperty(*runtime, "test", testValue);
|
|
|
|
shared_ptr<JsValue> result = testObj->GetProperty(*runtime, "test");
|
|
std::cout << "GetProperty test: " << result->IsArray(*runtime) << ";" << result->GetArrayLength(*runtime)
|
|
<< std::endl;
|
|
|
|
std::vector<std::string> argument;
|
|
runtime->ExecuteJsBin("native.aex");
|
|
|
|
return 0;
|
|
}
|