* Copyright (c) 2026 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 "gtest/gtest.h"
#include "core/interfaces/arkoala/arkoala_api.h"
#include "interfaces/native/native_type.h"
using namespace testing;
using namespace testing::ext;
namespace OHOS::Ace {
namespace {
constexpr int32_t SINGLE_ELEMENT_SIZE = 1;
constexpr int32_t ARRAY_SIZE = 3;
}
class CapiTextPickerOptionTest : public testing::Test {
public:
static void SetUpTestCase() {}
static void TearDownTestCase() {}
};
* @tc.name: TextPickerRangeContentArrayCreateTestInvalidLength
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Create with invalid length
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayCreateTestInvalidLength, TestSize.Level1)
{
EXPECT_EQ(OH_ArkUI_TextPickerRangeContentArray_Create(0), nullptr);
EXPECT_EQ(OH_ArkUI_TextPickerRangeContentArray_Create(-1), nullptr);
}
* @tc.name: TextPickerRangeContentArrayDestroyTestNullHandle
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Destroy with null handle
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayDestroyTestNullHandle, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextPickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
EXPECT_EQ(handle->rangeContentArraySize, SINGLE_ELEMENT_SIZE);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
OH_ArkUI_TextPickerRangeContentArray_Destroy(nullptr);
}
* @tc.name: TextPickerRangeContentArrayDestroyTestNullRangeContent
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Destroy when rangeContent is null
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayDestroyTestNullRangeContent, TestSize.Level1)
{
auto* handle = new ArkUI_TextPickerRangeContentArray;
ASSERT_NE(handle, nullptr);
handle->rangeContent = nullptr;
handle->rangeContentArraySize = ARRAY_SIZE;
EXPECT_EQ(handle->rangeContent, nullptr);
EXPECT_EQ(handle->rangeContentArraySize, ARRAY_SIZE);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextPickerRangeContentArrayDestroyTestEmptyContent
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Destroy when icon and text are null
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayDestroyTestEmptyContent, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextPickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
EXPECT_EQ(handle->rangeContent[0].icon, nullptr);
EXPECT_EQ(handle->rangeContent[0].text, nullptr);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextPickerRangeContentArrayDestroyTestIconOnly
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Destroy when only icon is set
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayDestroyTestIconOnly, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextPickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
char icon[] = "icon";
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, icon, 0);
EXPECT_STREQ(handle->rangeContent[0].icon, icon);
EXPECT_EQ(handle->rangeContent[0].text, nullptr);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextPickerRangeContentArrayDestroyTestTextOnly
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Destroy when only text is set
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayDestroyTestTextOnly, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextPickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
char text[] = "text";
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(handle, text, 0);
EXPECT_EQ(handle->rangeContent[0].icon, nullptr);
EXPECT_STREQ(handle->rangeContent[0].text, text);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextPickerRangeContentArrayDestroyTestMultiElement
* @tc.desc: Test OH_ArkUI_TextPickerRangeContentArray_Destroy frees all elements
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArrayDestroyTestMultiElement, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextPickerRangeContentArray_Create(ARRAY_SIZE);
ASSERT_NE(handle, nullptr);
EXPECT_EQ(handle->rangeContentArraySize, ARRAY_SIZE);
char icon0[] = "icon0";
char icon1[] = "icon1";
char icon2[] = "icon2";
char text0[] = "text0";
char text1[] = "text1";
char text2[] = "text2";
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, icon0, 0);
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, icon1, 1);
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, icon2, 2);
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(handle, text0, 0);
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(handle, text1, 1);
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(handle, text2, 2);
EXPECT_STREQ(handle->rangeContent[0].icon, icon0);
EXPECT_STREQ(handle->rangeContent[1].icon, icon1);
EXPECT_STREQ(handle->rangeContent[2].icon, icon2);
EXPECT_STREQ(handle->rangeContent[0].text, text0);
EXPECT_STREQ(handle->rangeContent[1].text, text1);
EXPECT_STREQ(handle->rangeContent[2].text, text2);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextPickerRangeContentArraySetTestInvalidParams
* @tc.desc: Test SetIconAtIndex and SetTextAtIndex with invalid parameters
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextPickerRangeContentArraySetTestInvalidParams, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextPickerRangeContentArray_Create(ARRAY_SIZE);
ASSERT_NE(handle, nullptr);
char icon[] = "icon";
char text[] = "text";
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(nullptr, icon, 0);
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(nullptr, text, 0);
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, nullptr, 0);
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(handle, nullptr, 0);
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, icon, -1);
OH_ArkUI_TextPickerRangeContentArray_SetTextAtIndex(handle, text, ARRAY_SIZE);
OH_ArkUI_TextPickerRangeContentArray_SetIconAtIndex(handle, icon, ARRAY_SIZE);
EXPECT_EQ(handle->rangeContent[0].icon, nullptr);
EXPECT_EQ(handle->rangeContent[0].text, nullptr);
OH_ArkUI_TextPickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestNullHandle
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy with null handle
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestNullHandle, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
EXPECT_EQ(handle->rangeContentArraySize, SINGLE_ELEMENT_SIZE);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(handle);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(nullptr);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestEmptyElement
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy when text and children are null
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestEmptyElement, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
EXPECT_EQ(handle[0].text, nullptr);
EXPECT_EQ(handle[0].children, nullptr);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestTextOnly
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy when only text is set
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestTextOnly, TestSize.Level1)
{
auto* handle = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(handle, nullptr);
char text[] = "text";
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(handle, text, 0);
EXPECT_STREQ(handle[0].text, text);
EXPECT_EQ(handle[0].children, nullptr);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(handle);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestChildrenOnly
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy when only children is set
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestChildrenOnly, TestSize.Level1)
{
auto* parent = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
auto* child = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(parent, nullptr);
ASSERT_NE(child, nullptr);
char childText[] = "child";
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child, childText, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(parent, child, 0);
EXPECT_EQ(parent[0].text, nullptr);
EXPECT_NE(parent[0].children, nullptr);
EXPECT_STREQ(parent[0].children[0].text, childText);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(parent);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestWithChildren
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy with nested children
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestWithChildren, TestSize.Level1)
{
auto* parent = OH_ArkUI_TextCascadePickerRangeContentArray_Create(ARRAY_SIZE);
ASSERT_NE(parent, nullptr);
auto* child = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(child, nullptr);
char text[] = "parent";
char childText[] = "child";
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(parent, text, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child, childText, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(parent, child, 0);
EXPECT_STREQ(parent[0].text, text);
EXPECT_STREQ(parent[0].children[0].text, childText);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(parent);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestMultiElement
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy frees all elements
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestMultiElement, TestSize.Level1)
{
auto* parent = OH_ArkUI_TextCascadePickerRangeContentArray_Create(ARRAY_SIZE);
ASSERT_NE(parent, nullptr);
auto* child0 = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
auto* child1 = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
auto* child2 = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(child0, nullptr);
ASSERT_NE(child1, nullptr);
ASSERT_NE(child2, nullptr);
char text0[] = "text0";
char text1[] = "text1";
char text2[] = "text2";
char childText0[] = "child0";
char childText1[] = "child1";
char childText2[] = "child2";
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(parent, text0, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(parent, text1, 1);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(parent, text2, 2);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child0, childText0, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child1, childText1, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child2, childText2, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(parent, child0, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(parent, child1, 1);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(parent, child2, 2);
EXPECT_STREQ(parent[0].text, text0);
EXPECT_STREQ(parent[1].text, text1);
EXPECT_STREQ(parent[2].text, text2);
EXPECT_STREQ(parent[0].children[0].text, childText0);
EXPECT_STREQ(parent[1].children[0].text, childText1);
EXPECT_STREQ(parent[2].children[0].text, childText2);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(parent);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestDeepNested
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy with multi-level children
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestDeepNested, TestSize.Level1)
{
auto* root = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
auto* child = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
auto* grandchild = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(root, nullptr);
ASSERT_NE(child, nullptr);
ASSERT_NE(grandchild, nullptr);
char rootText[] = "root";
char childText[] = "child";
char grandchildText[] = "grandchild";
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(root, rootText, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child, childText, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(grandchild, grandchildText, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(child, grandchild, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(root, child, 0);
EXPECT_STREQ(root[0].text, rootText);
EXPECT_STREQ(root[0].children[0].text, childText);
EXPECT_STREQ(root[0].children[0].children[0].text, grandchildText);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(root);
}
* @tc.name: TextCascadePickerRangeContentArrayDestroyTestMixedElements
* @tc.desc: Test OH_ArkUI_TextCascadePickerRangeContentArray_Destroy with mixed text and children
* @tc.type: FUNC
*/
HWTEST_F(CapiTextPickerOptionTest, TextCascadePickerRangeContentArrayDestroyTestMixedElements, TestSize.Level1)
{
auto* parent = OH_ArkUI_TextCascadePickerRangeContentArray_Create(ARRAY_SIZE);
auto* child = OH_ArkUI_TextCascadePickerRangeContentArray_Create(SINGLE_ELEMENT_SIZE);
ASSERT_NE(parent, nullptr);
ASSERT_NE(child, nullptr);
char textOnly[] = "textOnly";
char textWithChild[] = "textWithChild";
char childText[] = "child";
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(parent, textOnly, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(parent, textWithChild, 1);
OH_ArkUI_TextCascadePickerRangeContentArray_SetTextAtIndex(child, childText, 0);
OH_ArkUI_TextCascadePickerRangeContentArray_SetChildAtIndex(parent, child, 1);
EXPECT_STREQ(parent[0].text, textOnly);
EXPECT_EQ(parent[0].children, nullptr);
EXPECT_STREQ(parent[1].text, textWithChild);
EXPECT_STREQ(parent[1].children[0].text, childText);
EXPECT_EQ(parent[2].text, nullptr);
EXPECT_EQ(parent[2].children, nullptr);
OH_ArkUI_TextCascadePickerRangeContentArray_Destroy(parent);
}
}