* Copyright (c) 2024 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 "frameworks/bridge/declarative_frontend/engine/jsi/jsi_custom_env_view_white_list.h"
#include "frameworks/base/error/error_code.h"
#include "gtest/gtest.h"
#include "napi/napi_runtime.cpp"
#include "native_interface.h"
#include "native_node_napi.h"
#include "native_type.h"
#include "node_model.h"
#include "node_model_safely.h"
using namespace testing;
using namespace testing::ext;
class NativeNodeNapiTest : public testing::Test {
public:
static void SetUpTestCase() {};
static void TearDownTestCase() {};
};
void CallBack(uint64_t nanoTimestamp, uint32_t frameCount, void* userData)
{
printf("nanoTimestamp = %llu\n", nanoTimestamp);
printf("frameCount = %d\n", frameCount);
if (userData) {
int* myData = (int*)userData;
printf("User data = %d\n", *myData);
}
}
* @tc.name: NativeNodeNapiTest001
* @tc.desc: Test OH_ArkUI_GetContextFromNapiValue function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest001, TestSize.Level1)
{
napi_env__* env = nullptr;
napi_value__* value = nullptr;
ArkUI_ContextHandle* context = nullptr;
int32_t code = OH_ArkUI_GetContextFromNapiValue(env, value, context);
EXPECT_EQ(code, 401);
}
* @tc.name: NativeNodeNapiTest002
* @tc.desc: Test OH_ArkUI_GetNodeContentFromNapiValue function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest002, TestSize.Level1)
{
napi_env__* env = nullptr;
napi_value__* value = nullptr;
ArkUI_NodeContentHandle* context = nullptr;
int32_t code = OH_ArkUI_GetNodeContentFromNapiValue(env, value, context);
EXPECT_EQ(code, 401);
}
* @tc.name: NativeNodeNapiTest003
* @tc.desc: Test OH_ArkUI_GetNodeHandleFromNapiValue function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest003, TestSize.Level1)
{
napi_env__* env = nullptr;
napi_value__* value = nullptr;
ArkUI_NodeHandle* context = nullptr;
int32_t code = OH_ArkUI_GetNodeHandleFromNapiValue(env, value, context);
EXPECT_EQ(code, 401);
}
* @tc.name: NativeNodeNapiTest004
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest004, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(static_cast<ArkUI_NativeAPIVariantKind>(-1), "");
EXPECT_EQ(object, nullptr);
}
* @tc.name: NativeNodeNapiTest005
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest005, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "");
EXPECT_EQ(object, nullptr);
}
* @tc.name: NativeNodeNapiTest006
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest006, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_DIALOG, "");
EXPECT_EQ(object, nullptr);
}
* @tc.name: NativeNodeNapiTest007
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest007, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_GESTURE, "");
EXPECT_EQ(object, nullptr);
}
* @tc.name: NativeNodeNapiTest008
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest008, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_ANIMATE, "");
EXPECT_EQ(object, nullptr);
}
* @tc.name: NativeNodeNapiTest009
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest009, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(
static_cast<ArkUI_NativeAPIVariantKind>(ARKUI_NATIVE_GESTURE + 1), "");
EXPECT_EQ(object, nullptr);
}
* @tc.name: NativeNodeNapiTest010
* @tc.desc: Test OH_ArkUI_QueryModuleInterfaceByName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest010, TestSize.Level1)
{
void* object = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_MULTI_THREAD_NATIVE_NODE, "");
EXPECT_EQ(object, nullptr);
object = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_MULTI_THREAD_NATIVE_NODE, "ArkUI_NativeNodeAPI_1");
EXPECT_NE(object, nullptr);
}
* @tc.name: NavigationAPITest001
* @tc.desc: Test OH_ArkUI_GetNavigationId function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest001, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavigationId(nullptr, nullptr, 0, nullptr);
const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavigationId"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest002
* @tc.desc: Test OH_ArkUI_GetNavDestinationName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest002, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavDestinationName(nullptr, nullptr, 0, nullptr);
const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavDestinationName"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest003
* @tc.desc: Test OH_ArkUI_GetNavStackLength function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest003, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavStackLength(nullptr, nullptr);
const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavStackLength"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest004
* @tc.desc: Test OH_ArkUI_GetNavDestinationNameByIndex function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest004, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavDestinationNameByIndex(nullptr, 0, nullptr, 0, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavDestinationNameByIndex"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest005
* @tc.desc: Test OH_ArkUI_GetNavDestinationId function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest005, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavDestinationId(nullptr, nullptr, 0, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavDestinationId"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest006
* @tc.desc: Test OH_ArkUI_GetNavDestinationState function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest006, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavDestinationState(nullptr, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavDestinationState"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest007
* @tc.desc: Test OH_ArkUI_GetNavDestinationIndex function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest007, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavDestinationIndex(nullptr, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetNavDestinationIndex"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest008
* @tc.desc: Test OH_ArkUI_GetNavDestinationParam function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest008, TestSize.Level1)
{
auto ret = OH_ArkUI_GetNavDestinationParam(nullptr);
EXPECT_EQ(ret, nullptr);
}
* @tc.name: NavigationAPITest009
* @tc.desc: Test OH_ArkUI_GetRouterPageIndex function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest009, TestSize.Level1)
{
auto ret = OH_ArkUI_GetRouterPageIndex(nullptr, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetRouterPageIndex"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest010
* @tc.desc: Test OH_ArkUI_GetRouterPageName function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest010, TestSize.Level1)
{
auto ret = OH_ArkUI_GetRouterPageName(nullptr, nullptr, 0, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetRouterPageName"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest011
* @tc.desc: Test OH_ArkUI_GetRouterPagePath function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest011, TestSize.Level1)
{
auto ret = OH_ArkUI_GetRouterPagePath(nullptr, nullptr, 0, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetRouterPagePath"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest012
* @tc.desc: Test OH_ArkUI_GetRouterPageState function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest012, TestSize.Level1)
{
auto ret = OH_ArkUI_GetRouterPageState(nullptr, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetRouterPageState"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NavigationAPITest013
* @tc.desc: Test OH_ArkUI_GetRouterPageId function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NavigationAPITest013, TestSize.Level1)
{
auto ret = OH_ArkUI_GetRouterPageId(nullptr, nullptr, 0, nullptr);
const char *errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
ASSERT_NE(errorMessage, nullptr);
std::string errorMessageStr(errorMessage);
EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(ret)), std::string::npos);
EXPECT_NE(errorMessageStr.find("functionName: OH_ArkUI_GetRouterPageId"), std::string::npos);
EXPECT_NE(errorMessageStr.find("errorMessage: Node is null"), std::string::npos);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: InitModuleForArkTSEnvAPITest001
* @tc.desc: Test OH_ArkUI_InitModuleForArkTSEnv function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, InitModuleForArkTSEnvAPITest001, TestSize.Level1)
{
NativeEngineMock engine;
* @tc.steps: step1. Call OH_ArkUI_InitModuleForArkTSEnv with a null environment.
* @tc.expected: The return value should be ARKUI_ERROR_CODE_PARAM_INVALID.
*/
auto ret = OH_ArkUI_InitModuleForArkTSEnv(nullptr);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
* @tc.steps: step2. Call OH_ArkUI_InitModuleForArkTSEnv with a valid environment.
* @tc.expected: The return value should be ARKUI_ERROR_CODE_NO_ERROR.
*/
ret = OH_ArkUI_InitModuleForArkTSEnv(napi_env(engine));
EXPECT_EQ(ret, ARKUI_ERROR_CODE_NO_ERROR);
* @tc.steps: step3. Call OH_ArkUI_InitModuleForArkTSEnv again with the same environment.
* @tc.expected: The return value should be ARKUI_ERROR_CODE_NO_ERROR.
*/
ret = OH_ArkUI_InitModuleForArkTSEnv(napi_env(engine));
EXPECT_EQ(ret, ARKUI_ERROR_CODE_NO_ERROR);
* @tc.steps: step4. Call OH_ArkUI_NotifyArkTSEnvDestroy.
*/
OH_ArkUI_NotifyArkTSEnvDestroy(napi_env(engine));
OH_ArkUI_NotifyArkTSEnvDestroy(nullptr);
}
* @tc.name: WhiteListInCustomEnvTest001
* @tc.desc: In custom env, white list check.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, WhiteListInCustomEnvTest001, TestSize.Level1)
{
std::unordered_set<std::string> supportedTargetsInCustomEnvTest = {
"Flex",
"TextController",
"Text",
"Animator",
"SpringProp",
"SpringMotion",
"ScrollMotion",
"Span",
"NativeCustomSpan",
"SpanString",
"MutableSpanString",
"TextStyle",
"DecorationStyle",
"BaselineOffsetStyle",
"LetterSpacingStyle",
"UrlStyle",
"NativeGestureStyle",
"TextShadowSpan",
"BackgroundColorStyle",
"ImageAttachment",
"ParagraphStyleSpan",
"LineHeightSpan",
"TextLayout",
"Button",
"Canvas",
"LazyForEach",
"LazyVGridLayout",
"List",
"ListItem",
"ListItemGroup",
"LoadingProgress",
"Image",
"ImageAnimator",
"Counter",
"Progress",
"Column",
"Row",
"Grid",
"GridItem",
"GridContainer",
"Slider",
"Stack",
"ForEach",
"Divider",
"Swiper",
"Indicator",
"Panel",
"RepeatNative",
"RepeatVirtualScrollNative",
"RepeatVirtualScroll2Native",
"NativeNavPathStack",
"If",
"Scroll",
"ScrollBar",
"GridRow",
"GridCol",
"Stepper",
"StepperItem",
"Toggle",
"ToolBarItem",
"Blank",
"Calendar",
"Rect",
"Shape",
"Path",
"Circle",
"Line",
"Polygon",
"Polyline",
"Ellipse",
"Tabs",
"TabContent",
"TextPicker",
"TimePicker",
"DatePicker",
"PageTransitionEnter",
"PageTransitionExit",
"RowSplit",
"ColumnSplit",
"AlphabetIndexer",
"Hyperlink",
"Radio",
"ActionSheet",
"AlertDialog",
"ContextMenu",
"Particle",
"__KeyboardAvoid__",
"TextMenu",
"TextArea",
"TextInput",
"TextClock",
"SideBarContainer",
"DataPanel",
"Badge",
"Gauge",
"Marquee",
"Menu",
"MenuItem",
"MenuItemGroup",
"Gesture",
"TapGesture",
"LongPressGesture",
"PanGesture",
"SwipeGesture",
"PinchGesture",
"RotationGesture",
"GestureGroup",
"PanGestureOption",
"PanGestureOptions",
"NativeCustomDialogController",
"Scroller",
"ListScroller",
"SwiperController",
"IndicatorController",
"TabsController",
"CalendarController",
"CanvasRenderingContext2D",
"OffscreenCanvasRenderingContext2D",
"CanvasGradient",
"ImageData",
"Path2D",
"RenderingContextSettings",
"Matrix2D",
"CanvasPattern",
"DrawingRenderingContext",
"Search",
"Select",
"SearchController",
"TextClockController",
"Sheet",
"JSClipboard",
"PatternLock",
"PatternLockController",
"TextTimer",
"TextAreaController",
"TextInputController",
"TextTimerController",
"Checkbox",
"CheckboxGroup",
"Refresh",
"WaterFlow",
"FlowItem",
"RelativeContainer",
"__Common__",
"__Recycle__",
"LinearGradient",
"ImageSpan",
"RichEditor",
"RichEditorController",
"RichEditorStyledStringController",
"LayoutManager",
"NodeContainer",
"__JSBaseNode__",
"SymbolGlyph",
"SymbolSpan",
"ContainerSpan",
"__RectShape__",
"__CircleShape__",
"__EllipseShape__",
"__PathShape__",
"ContentSlot",
"ArkUINativeNodeContent",
"GestureRecognizer",
"EventTargetInfo",
"ScrollableTargetInfo",
"PanRecognizer",
"LinearIndicator",
"LinearIndicatorController",
"TapRecognizer",
"LongPressRecognizer",
"SwipeRecognizer",
"PinchRecognizer",
"RotationRecognizer",
"TouchRecognizer",
};
for (const auto& target : supportedTargetsInCustomEnvTest) {
EXPECT_NE(OHOS::Ace::Framework::supportedTargetsInCustomEnv.find(target),
OHOS::Ace::Framework::supportedTargetsInCustomEnv.end());
}
}
* @tc.name: PostFrameCallbackAPITest001
* @tc.desc: Test OH_ArkUI_PostFrameCallback function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, PostFrameCallbackAPITest001, TestSize.Level1)
{
ArkUI_ContextHandle uiContext = new ArkUI_Context({.id=10000});
int userdata = 5;
auto ret = OH_ArkUI_PostFrameCallback(uiContext, &userdata, CallBack);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_UI_CONTEXT_INVALID);
}
* @tc.name: PostFrameCallbackAPITest002
* @tc.desc: Test OH_ArkUI_PostFrameCallback function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, PostFrameCallbackAPITest002, TestSize.Level1)
{
ArkUI_ContextHandle uiContext = new ArkUI_Context({.id=10000});
int userdata = 6;
auto ret = OH_ArkUI_PostFrameCallback(uiContext, &userdata, nullptr);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_CALLBACK_INVALID);
}
* @tc.name: PostFrameCallbackAPITest003
* @tc.desc: Test OH_ArkUI_PostFrameCallback function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, PostFrameCallbackAPITest003, TestSize.Level1)
{
int userdata = 7;
auto ret = OH_ArkUI_PostFrameCallback(nullptr, &userdata, CallBack);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_UI_CONTEXT_INVALID);
}
* @tc.name: GreatOrEqualTargetAPIVersion001
* @tc.desc: Test GreatOrEqualTargetAPIVersion function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, GreatOrEqualTargetAPIVersion001, TestSize.Level1)
{
ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
auto ret = OHOS::Ace::AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(
OHOS::Ace::PlatformVersion::VERSION_TWELVE);
auto ret1 = OHOS::Ace::NodeModel::GreatOrEqualTargetAPIVersion(OHOS::Ace::PlatformVersion::VERSION_TWELVE);
EXPECT_EQ(ret, ret1);
}
* @tc.name: OH_ArkUI_PostAsyncUITaskAPITest001
* @tc.desc: Test OH_ArkUI_PostAsyncUITask function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, OH_ArkUI_PostAsyncUITaskAPITest001, TestSize.Level1)
{
ArkUI_ContextHandle uiContext = new ArkUI_Context({.id=10000});
auto ret = OH_ArkUI_PostAsyncUITask(uiContext, nullptr, [](void* asyncUITaskData){}, [](void* asyncUITaskData){});
EXPECT_NE(ret, ARKUI_ERROR_CODE_NO_ERROR);
}
* @tc.name: OH_ArkUI_PostUITaskAPITest001
* @tc.desc: Test OH_ArkUI_PostUITask function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, OH_ArkUI_PostUITaskAPITest001, TestSize.Level1)
{
ArkUI_ContextHandle uiContext = new ArkUI_Context({.id=10000});
auto ret = OH_ArkUI_PostUITask(uiContext, nullptr, [](void* asyncUITaskData){});
EXPECT_NE(ret, ARKUI_ERROR_CODE_NO_ERROR);
}
* @tc.name: OH_ArkUI_PostUITaskAndWaitAPITest001
* @tc.desc: Test OH_ArkUI_PostUITaskAndWait function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, OH_ArkUI_PostUITaskAndWaitAPITest001, TestSize.Level1)
{
ArkUI_ContextHandle uiContext = new ArkUI_Context({.id=10000});
auto ret = OH_ArkUI_PostUITaskAndWait(uiContext, nullptr, [](void* asyncUITaskData){});
EXPECT_NE(ret, ARKUI_ERROR_CODE_NO_ERROR);
}
* @tc.name: NativeBackgroundImagePositionTest001
* @tc.desc: Test NativeBackgroundImagePositon
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeBackgroundImagePositionTest001, TestSize.Level1)
{
* @tc.steps: step1. create node
*/
auto nodeAPI = reinterpret_cast<ArkUI_NativeNodeAPI_1*>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "ArkUI_NativeNodeAPI_1"));
ASSERT_NE(nodeAPI, nullptr);
auto column = nodeAPI->createNode(ARKUI_NODE_COLUMN);
auto row = nodeAPI->createNode(ARKUI_NODE_STACK);
ASSERT_NE(column, nullptr);
ASSERT_NE(row, nullptr);
nodeAPI->addChild(column, row);
EXPECT_EQ(nodeAPI->getTotalChildCount(column), 1);
* @tc.steps: step2. test backgroundImagePositon params error
*/
ArkUI_NumberValue value[] = { { .f32 = 100.0 }, { .f32 = 100.0 } };
ArkUI_AttributeItem backgroundImagePosition = { .value = value, .size = 0 };
auto ret = nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition);
EXPECT_EQ(ret, ARKUI_ERROR_CODE_PARAM_INVALID);
ArkUI_AttributeItem backgroundImagePosition2 = { .value = value, .size = 5 };
auto ret2 = nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition2);
EXPECT_EQ(ret2, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NativeBackgroundImagePositionTest002
* @tc.desc: Test NativeBackgroundImagePositon
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeBackgroundImagePositionTest002, TestSize.Level1)
{
* @tc.steps: step1. create node
*/
auto nodeAPI = reinterpret_cast<ArkUI_NativeNodeAPI_1*>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "ArkUI_NativeNodeAPI_1"));
ASSERT_NE(nodeAPI, nullptr);
auto column = nodeAPI->createNode(ARKUI_NODE_COLUMN);
auto row = nodeAPI->createNode(ARKUI_NODE_STACK);
ASSERT_NE(column, nullptr);
ASSERT_NE(row, nullptr);
nodeAPI->addChild(column, row);
EXPECT_EQ(nodeAPI->getTotalChildCount(column), 1);
* @tc.steps: step2. test backgroundImagePositon with position
*/
ArkUI_NumberValue value[] = { { .f32 = 100.0 }, { .f32 = 100.0 } };
ArkUI_AttributeItem backgroundImagePosition = { .value = value, .size = 2 };
nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition);
auto ret = nodeAPI->getAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
EXPECT_NEAR(ret->value[0].f32, 100.0f, 0.01f);
EXPECT_NEAR(ret->value[1].f32, 100.0f, 0.01f);
}
* @tc.name: NativeBackgroundImagePositionTest003
* @tc.desc: Test NativeBackgroundImagePositon
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeBackgroundImagePositionTest003, TestSize.Level1)
{
* @tc.steps: step1. create not thread safe native node
*/
auto nodeAPI = reinterpret_cast<ArkUI_NativeNodeAPI_1*>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "ArkUI_NativeNodeAPI_1"));
ASSERT_NE(nodeAPI, nullptr);
auto column = nodeAPI->createNode(ARKUI_NODE_COLUMN);
auto row = nodeAPI->createNode(ARKUI_NODE_STACK);
ArkUI_NumberValue widthValue3[] = { 300 };
ArkUI_AttributeItem widthItem3 = { widthValue3, 1 };
ArkUI_NumberValue heightValue3[] = { 300 };
ArkUI_AttributeItem heightItem3 = { heightValue3, 1 };
ArkUI_NumberValue bgSizeVal[] = { { .f32 = 100 }, { .f32 = 100 } };
ArkUI_AttributeItem bgSize = { bgSizeVal, 2 };
nodeAPI->setLengthMetricUnit(row, ArkUI_LengthMetricUnit::ARKUI_LENGTH_METRIC_UNIT_PX);
nodeAPI->setAttribute(row, NODE_WIDTH, &widthItem3);
nodeAPI->setAttribute(row, NODE_HEIGHT, &heightItem3);
nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_SIZE, &bgSize);
ASSERT_NE(column, nullptr);
ASSERT_NE(row, nullptr);
nodeAPI->addChild(column, row);
EXPECT_EQ(nodeAPI->getTotalChildCount(column), 1);
* @tc.steps: step2. test backgroundImagePositon with position and alignment
*/
ArkUI_NumberValue value[] = { { .f32 = 100.0 }, { .f32 = 100.0 }, { .i32 = 4 }, { .i32 = 0 } };
ArkUI_AttributeItem backgroundImagePosition = { .value = value, .size = 3 };
nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition);
auto ret = nodeAPI->getAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
EXPECT_NEAR(ret->value[0].f32, 100.0f, 0.01f);
EXPECT_NEAR(ret->value[1].f32, 100.0f, 0.01f);
EXPECT_EQ(ret->value[2].i32, 4);
EXPECT_EQ(ret->value[3].i32, 3);
* @tc.steps: step3. test align and direction default
*/
nodeAPI->resetAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
value[2].i32 = -1;
ArkUI_AttributeItem backgroundImagePosition2 = { .value = value, .size = 3 };
auto ret2 = nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition2);
EXPECT_EQ(ret2, ARKUI_ERROR_CODE_PARAM_INVALID);
nodeAPI->resetAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
value[2].i32 = 9;
ArkUI_AttributeItem backgroundImagePosition3 = { .value = value, .size = 3 };
auto ret3 = nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition3);
EXPECT_EQ(ret3, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NativeBackgroundImagePositionTest004
* @tc.desc: Test NativeBackgroundImagePositon
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeBackgroundImagePositionTest004, TestSize.Level1)
{
* @tc.steps: step1. create not thread safe native node
*/
auto nodeAPI = reinterpret_cast<ArkUI_NativeNodeAPI_1*>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "ArkUI_NativeNodeAPI_1"));
ASSERT_NE(nodeAPI, nullptr);
auto column = nodeAPI->createNode(ARKUI_NODE_COLUMN);
auto row = nodeAPI->createNode(ARKUI_NODE_STACK);
ArkUI_NumberValue widthValue3[] = { 300 };
ArkUI_AttributeItem widthItem3 = { widthValue3, 1 };
ArkUI_NumberValue heightValue3[] = { 300 };
ArkUI_AttributeItem heightItem3 = { heightValue3, 1 };
ArkUI_NumberValue bgSizeVal[] = { { .f32 = 100 }, { .f32 = 100 } };
ArkUI_AttributeItem bgSize = {bgSizeVal, 2};
nodeAPI->setLengthMetricUnit(row, ArkUI_LengthMetricUnit::ARKUI_LENGTH_METRIC_UNIT_PX);
nodeAPI->setAttribute(row, NODE_WIDTH, &widthItem3);
nodeAPI->setAttribute(row, NODE_HEIGHT, &heightItem3);
nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_SIZE, &bgSize);
ASSERT_NE(column, nullptr);
ASSERT_NE(row, nullptr);
nodeAPI->addChild(column, row);
EXPECT_EQ(nodeAPI->getTotalChildCount(column), 1);
* @tc.steps: step2. test backgroundImagePositon with position alignment and direction
*/
ArkUI_NumberValue value[] = { { .f32 = 100.0 }, { .f32 = 100.0 }, { .i32 = 0 }, { .i32 = 0 } };
ArkUI_AttributeItem backgroundImagePosition = { .value = value, .size = 4 };
nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition);
auto ret = nodeAPI->getAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
EXPECT_NEAR(ret->value[0].f32, 100.0f, 0.01f);
EXPECT_NEAR(ret->value[1].f32, 100.0f, 0.01f);
EXPECT_EQ(ret->value[2].i32, 0);
EXPECT_EQ(ret->value[3].i32, 0);
* @tc.steps: step3. test align and direction default
*/
nodeAPI->resetAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
value[3].i32 = -1;
ArkUI_AttributeItem backgroundImagePosition2 = { .value = value, .size = 4 };
auto ret2 = nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition2);
EXPECT_EQ(ret2, ARKUI_ERROR_CODE_PARAM_INVALID);
nodeAPI->resetAttribute(row, NODE_BACKGROUND_IMAGE_POSITION);
value[3].i32 = 2;
ArkUI_AttributeItem backgroundImagePosition3 = { .value = value, .size = 4 };
auto ret3 = nodeAPI->setAttribute(row, NODE_BACKGROUND_IMAGE_POSITION, &backgroundImagePosition3);
EXPECT_EQ(ret3, ARKUI_ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NativeNodeNapiTest011
* @tc.desc: Test OH_ArkUI_GetNodeHandleFromNapiValue function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest011, TestSize.Level1)
{
napi_env__* env = nullptr;
napi_value__* value = nullptr;
ArkUI_NodeHandle* context = nullptr;
int32_t code = OH_ArkUI_GetNodeHandleFromNapiValue(env, value, context);
EXPECT_EQ(code, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}
* @tc.name: NativeNodeNapiTest012
* @tc.desc: Test OH_ArkUI_EnableEventPassthrough function.
* @tc.type: FUNC
*/
HWTEST_F(NativeNodeNapiTest, NativeNodeNapiTest012, TestSize.Level1)
{
ArkUI_ContextHandle uiContext = new ArkUI_Context({ .id = 10000 });
bool enable = true;
ArkUI_RawInputEventType eventType = ArkUI_RawInputEventType::ARKUI_RAW_INPUT_EVENT_TYPE_MOUSE;
auto code = OH_ArkUI_EnableEventPassthrough(uiContext, enable, eventType);
EXPECT_EQ(code, ARKUI_ERROR_CODE_PARAM_INVALID);
}