add async/require/stack tdd test

Signed-off-by: wuhy_irobot2013 <wuhuayang@huawei.com>
Change-Id: I1503fb8ff4267697318731b452efc071600802d2
This commit is contained in:
wuhy_irobot2013
2021-08-17 15:12:29 +08:00
parent ccab89df93
commit d6fe4144ec
12 changed files with 1108 additions and 0 deletions
@@ -0,0 +1,27 @@
#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.
import("//build/lite/config/test.gni")
import("//foundation/ace/ace_engine_lite/test/ace_test_config.gni")
unittest("js_frameworks_test_require_module") {
output_extension = "bin"
output_dir = test_output_root
configs = [ "$ace_lite_root/test:test_common_config" ]
sources = [ "common/require_module_tdd_test.cpp" ]
deps = ace_test_deps
}
group("module_manager_unittest") {
deps = [ ":js_frameworks_test_require_module" ]
}
@@ -0,0 +1,288 @@
/*
* 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 "require_module_tdd_test.h"
#include "internal/jsi_internal.h"
#include "jerryscript.h"
#include "jsi.h"
#include "module_manager.h"
namespace OHOS {
namespace ACELite {
RequireModuleTddTest::RequireModuleTddTest() : moduleManager_(nullptr) {}
void RequireModuleTddTest::SetUp()
{
jerry_init(JERRY_INIT_EMPTY);
moduleManager_ = ModuleManager::GetInstance();
}
void RequireModuleTddTest::TearDown()
{
moduleManager_->CleanUpModule();
moduleManager_->OnTerminate();
jerry_cleanup();
}
void RequireModuleTddTest::RequireModuleTest001()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require a module with module name registered
*/
constexpr char *moduleName = "system.app";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
JSI::ReleaseValue(moduleRequired);
TDD_CASE_END();
}
void RequireModuleTddTest::RequireModuleTest002()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require a module with module name unregistered
*/
constexpr char *moduleName = "system.unregistered";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is undefined
*/
EXPECT_TRUE(JSI::ValueIsUndefined(moduleRequired));
JSI::ReleaseValue(moduleRequired);
TDD_CASE_END();
}
void RequireModuleTddTest::RequireModuleTest003()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require a module with incorrect category
*/
constexpr char *moduleName = "service.app";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is undefined
*/
EXPECT_TRUE(JSI::ValueIsUndefined(moduleRequired));
JSI::ReleaseValue(moduleRequired);
TDD_CASE_END();
}
void RequireModuleTddTest::RequireModuleTest004()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require a module with illegal module name
*/
constexpr char *moduleName = "illegal";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is undefined
*/
EXPECT_TRUE(JSI::ValueIsUndefined(moduleRequired));
JSI::ReleaseValue(moduleRequired);
TDD_CASE_END();
}
void RequireModuleTddTest::RequireModuleTest005()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require app module
*/
constexpr char *moduleName = "system.app";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
/**
* @tc.steps: step2. get "getInfo" property of moduleRequired
*/
constexpr char *funcName = "getInfo";
JSIValue jFunc = JSI::GetNamedProperty(moduleRequired, funcName);
/**
* @tc.expected: step2. jFunc is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(jFunc));
/**
* @tc.steps: step3. call jFunc and the value returned is undefined
*/
jerry_value_t jResult = jerry_call_function(AS_JERRY_VALUE(jFunc), AS_JERRY_VALUE(moduleRequired), nullptr, 0);
JSIValue result = AS_JSI_VALUE(jResult);
/**
* @tc.expected: step3. AppModule native function will be called an result is undefined
*/
EXPECT_TRUE(JSI::ValueIsUndefined(result));
JSI::ReleaseValueList(moduleRequired, jFunc, result);
TDD_CASE_END();
}
void RequireModuleTddTest::RequireModuleTest006()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require app module
*/
constexpr char *moduleName = "system.app";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
/**
* @tc.steps: step2. get "terminate" property of moduleRequired
*/
constexpr char *funcName = "terminate";
JSIValue jFunc = JSI::GetNamedProperty(moduleRequired, funcName);
/**
* @tc.expected: step2. jFunc is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(jFunc));
/**
* @tc.steps: step3. call jFunc
*/
jerry_value_t jResult = jerry_call_function(AS_JERRY_VALUE(jFunc), AS_JERRY_VALUE(moduleRequired), nullptr, 0);
JSIValue result = AS_JSI_VALUE(jResult);
/**
* @tc.expected: step3. AppModule native function will be called an result is undefined
*/
EXPECT_TRUE(JSI::ValueIsUndefined(result));
JSI::ReleaseValueList(moduleRequired, jFunc, result);
TDD_CASE_END();
}
void RequireModuleTddTest::RequireModuleTest007()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. require router module
*/
constexpr char *moduleName = "system.router";
JSIValue moduleRequired = moduleManager_->RequireModule(moduleName);
/**
* @tc.expected: step1. moduleRequired is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(moduleRequired));
/**
* @tc.steps: step2. get "replace" property of moduleRequired
*/
constexpr char *funcName = "replace";
JSIValue jFunc = JSI::GetNamedProperty(moduleRequired, funcName);
/**
* @tc.expected: step2. jFunc is not undefined
*/
EXPECT_FALSE(JSI::ValueIsUndefined(jFunc));
/**
* @tc.steps: step3. call jFunc
*/
jerry_value_t jResult = jerry_call_function(AS_JERRY_VALUE(jFunc), AS_JERRY_VALUE(moduleRequired), nullptr, 0);
JSIValue result = AS_JSI_VALUE(jResult);
/**
* @tc.expected: step3. RouterModule native function will be called an result is undefined
*/
EXPECT_TRUE(JSI::ValueIsError(result));
JSI::ReleaseValueList(moduleRequired, jFunc, result);
TDD_CASE_END();
}
void RequireModuleTddTest::RunTests()
{
RequireModuleTest001();
RequireModuleTest002();
RequireModuleTest003();
RequireModuleTest004();
RequireModuleTest005();
RequireModuleTest006();
RequireModuleTest007();
}
#ifdef TDD_ASSERTIONS
/**
* @tc.name: RequireModuleTest001
* @tc.desc: Verify require a registered module.
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test001, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest001();
}
/**
* @tc.name: RequireModuleTest002
* @tc.desc: Verify require an unregistered module.
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test002, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest002();
}
/**
* @tc.name: RequireModuleTest003
* @tc.desc: Verify require a module with incorrect category.
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test003, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest003();
}
/**
* @tc.name: RequireModuleTest004
* @tc.desc: Verify require a module with illegal module name.
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test004, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest004();
}
/**
* @tc.name: RequireModuleTest005
* @tc.desc: Verify require app module, and call it's getInfo().
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test005, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest005();
}
/**
* @tc.name: RequireModuleTest006
* @tc.desc: Verify require app module, and call it's terminate().
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test006, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest006();
}
/**
* @tc.name: RequireModuleTest007
* @tc.desc: Verify require router module, and call it's replace().
* @tc.require: AR000DSEHC
*/
HWTEST_F(RequireModuleTddTest, test007, TestSize.Level1)
{
RequireModuleTddTest::RequireModuleTest007();
}
#endif
} // namespace ACELite
} // namespace OHOS
@@ -0,0 +1,57 @@
/*
* 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.
*/
#ifndef OHOS_ACELITE_REQUIRE_MODULE_TDD_TEST_H
#define OHOS_ACELITE_REQUIRE_MODULE_TDD_TEST_H
#ifdef TDD_ASSERTIONS
#include <climits>
#include <gtest/gtest.h>
#endif
#include "acelite_config.h"
#include "module_manager.h"
#include "test_common.h"
namespace OHOS {
namespace ACELite {
#ifdef TDD_ASSERTIONS
using namespace std;
using namespace testing::ext;
class RequireModuleTddTest : public testing::Test {
#else
class RequireModuleTddTest {
#endif
public:
RequireModuleTddTest();
~RequireModuleTddTest(){};
void SetUp();
void TearDown();
void RequireModuleTest001();
void RequireModuleTest002();
void RequireModuleTest003();
void RequireModuleTest004();
void RequireModuleTest005();
void RequireModuleTest006();
void RequireModuleTest007();
void RunTests();
private:
ModuleManager *moduleManager_;
};
} // namespace ACELite
} // namespace OHOS
#endif // OHOS_ACELITE_REQUIRE_MODULE_TDD_TEST_H
@@ -0,0 +1,27 @@
#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.
import("//build/lite/config/test.gni")
import("//foundation/ace/ace_engine_lite/test/ace_test_config.gni")
unittest("js_frameworks_test_js_async_work") {
output_extension = "bin"
output_dir = test_output_root
configs = [ "$ace_lite_root/test:test_common_config" ]
sources = [ "common/js_async_work_tdd_test.cpp" ]
deps = ace_test_deps
}
group("async_unittest") {
deps = [ ":js_frameworks_test_js_async_work" ]
}
@@ -0,0 +1,207 @@
/*
* 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 "js_async_work_tdd_test.h"
#include "js_async_work.h"
namespace OHOS {
namespace ACELite {
static int8_t g_statusCode = 0;
void JsAsyncWorkTddTest::SetUp()
{
g_statusCode = -1;
}
static void Execute(void *data)
{
(void)data;
}
static void ExecuteWithCode(void *data, int8_t statusCode)
{
(void)data;
g_statusCode = statusCode;
}
void JsAsyncWorkTddTest::JsAsyncWorkTest001()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. call DispatchAsyncWork with valid parameters
*/
bool res = JsAsyncWork::DispatchAsyncWork(Execute, nullptr);
/**
* @tc.expected: step1. res is false due to null AceAbility instance
*/
EXPECT_FALSE(res);
/**
* @tc.steps: step2. call overloaded DispatchAsyncWork with valid parameters
*/
res = JsAsyncWork::DispatchAsyncWork(ExecuteWithCode, nullptr);
/**
* @tc.expected: step2. res is false due to null AceAbility instance
*/
EXPECT_FALSE(res);
TDD_CASE_END();
}
void JsAsyncWorkTddTest::JsAsyncWorkTest002()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. call DispatchAsyncWork with invalid parameters
*/
AsyncWorkHandler handler1 = nullptr;
bool res = JsAsyncWork::DispatchAsyncWork(handler1, nullptr);
/**
* @tc.expected: step1. res is false due to invalid parameters, and error log can be checked
*/
EXPECT_FALSE(res);
/**
* @tc.steps: step2. call overloaded DispatchAsyncWork with invalid parameters
*/
AsyncHandler handler2 = nullptr;
res = JsAsyncWork::DispatchAsyncWork(handler2, nullptr);
/**
* @tc.expected: step2. res is false due to invalid parameters, and error log can be checked
*/
EXPECT_FALSE(res);
TDD_CASE_END();
}
void JsAsyncWorkTddTest::JsAsyncWorkTest003()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. call ExecuteAsyncWork with valid parameters
*/
AsyncWork *asyncWork = new AsyncWork();
EXPECT_TRUE(asyncWork != nullptr);
asyncWork->workHandler = Execute;
asyncWork->handler = ExecuteWithCode;
JsAsyncWork::ExecuteAsyncWork(asyncWork);
JsAsyncWork::ExecuteAsyncWork(asyncWork, JsAsyncWork::ERR_OK);
/**
* @tc.expected: step1. log can be checked and g_statusCode = JsAsyncWork::ERR_OK
*/
EXPECT_TRUE(g_statusCode == JsAsyncWork::ERR_OK);
if (asyncWork != nullptr) {
delete asyncWork;
asyncWork = nullptr;
}
TDD_CASE_END();
}
void JsAsyncWorkTddTest::JsAsyncWorkTest004()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. call ExecuteAsyncWork with null asyncWork
*/
AsyncWork *asyncWork = nullptr;
JsAsyncWork::ExecuteAsyncWork(asyncWork);
JsAsyncWork::ExecuteAsyncWork(asyncWork, JsAsyncWork::ERR_OK);
/**
* @tc.expected: step1. error log can be checked and g_statusCode != JsAsyncWork::ERR_OK
*/
EXPECT_TRUE(g_statusCode != JsAsyncWork::ERR_OK);
TDD_CASE_END();
}
void JsAsyncWorkTddTest::JsAsyncWorkTest005()
{
TDD_CASE_BEGIN();
/**
* @tc.steps: step1. call ExecuteAsyncWork with null workHandler
*/
AsyncWork *asyncWork = new AsyncWork();
EXPECT_TRUE(asyncWork != nullptr);
JsAsyncWork::ExecuteAsyncWork(asyncWork);
JsAsyncWork::ExecuteAsyncWork(asyncWork, JsAsyncWork::ERR_OK);
/**
* @tc.expected: step1. error log can be checked and g_statusCode != JsAsyncWork::ERR_OK
*/
EXPECT_TRUE(g_statusCode != JsAsyncWork::ERR_OK);
if (asyncWork != nullptr) {
delete asyncWork;
asyncWork = nullptr;
}
TDD_CASE_END();
}
void JsAsyncWorkTddTest::RunTests()
{
JsAsyncWorkTest001();
JsAsyncWorkTest002();
JsAsyncWorkTest003();
JsAsyncWorkTest004();
JsAsyncWorkTest005();
}
#ifdef TDD_ASSERTIONS
/**
* @tc.name: JsAsyncWorkTest001
* @tc.desc: Verify DispatchAsyncWork with valid parameters.
* @tc.require: AR000DSEHQ
*/
HWTEST_F(JsAsyncWorkTddTest, test001, TestSize.Level1)
{
JsAsyncWorkTddTest::JsAsyncWorkTest001();
}
/**
* @tc.name: JsAsyncWorkTest002
* @tc.desc: Verify DispatchAsyncWork with invalid parameters.
* @tc.require: AR000DSEHQ
*/
HWTEST_F(JsAsyncWorkTddTest, test002, TestSize.Level1)
{
JsAsyncWorkTddTest::JsAsyncWorkTest002();
}
/**
* @tc.name: JsAsyncWorkTest003
* @tc.desc: Verify ExcuteAsyncWork with valid parameters.
* @tc.require: AR000DSEHQ
*/
HWTEST_F(JsAsyncWorkTddTest, test003, TestSize.Level1)
{
JsAsyncWorkTddTest::JsAsyncWorkTest003();
}
/**
* @tc.name: JsAsyncWorkTest004
* @tc.desc: Verify ExcuteAsyncWork with invalid parameters.
* @tc.require: AR000DSEHQ
*/
HWTEST_F(JsAsyncWorkTddTest, test004, TestSize.Level1)
{
JsAsyncWorkTddTest::JsAsyncWorkTest004();
}
/**
* @tc.name: JsAsyncWorkTest005
* @tc.desc: Verify ExcuteAsyncWork with invalid parameters.
* @tc.require: AR000DSEHQ
*/
HWTEST_F(JsAsyncWorkTddTest, test005, TestSize.Level1)
{
JsAsyncWorkTddTest::JsAsyncWorkTest005();
}
#endif
} // namespace ACELite
} // namespace OHOS
@@ -0,0 +1,51 @@
/*
* 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.
*/
#ifndef OHOS_ACELITE_JS_ASYNC_WORK_TDD_TEST_H
#define OHOS_ACELITE_JS_ASYNC_WORK_TDD_TEST_H
#ifdef TDD_ASSERTIONS
#include <climits>
#include <gtest/gtest.h>
#endif
#include "acelite_config.h"
#include "test_common.h"
namespace OHOS {
namespace ACELite {
#ifdef TDD_ASSERTIONS
using namespace std;
using namespace testing::ext;
class JsAsyncWorkTddTest : public testing::Test {
#else
class JsAsyncWorkTddTest {
#endif
public:
JsAsyncWorkTddTest(){};
~JsAsyncWorkTddTest(){};
void SetUp();
void TearDown(){};
void JsAsyncWorkTest001();
void JsAsyncWorkTest002();
void JsAsyncWorkTest003();
void JsAsyncWorkTest004();
void JsAsyncWorkTest005();
void RunTests();
};
} // namespace ACELite
} // namespace OHOS
#endif // OHOS_ACELITE_JS_ASYNC_WORK_TDD_TEST_H
@@ -32,6 +32,7 @@ group("components_unittest") {
"common:js_frameworks_test_pickerview",
"common:js_frameworks_test_radio_switch_width",
"common:js_frameworks_test_slider",
"common:js_frameworks_test_stack",
"common:js_frameworks_test_swiper",
"common:js_frameworks_test_switch",
"common:js_frameworks_test_text",
@@ -267,3 +267,14 @@ unittest("js_frameworks_test_input_event") {
]
deps = ace_test_deps
}
unittest("js_frameworks_test_stack") {
output_extension = "bin"
output_dir = test_output_root
configs = [ "$ace_lite_root/test:test_common_config" ]
sources = [
"root_component_mock.cpp",
"stack_tdd_test.cpp",
]
deps = ace_test_deps
}
@@ -0,0 +1,369 @@
/*
* 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 "stack_tdd_test.h"
#include "js_app_context.h"
#include "js_debugger_config.h"
#include "stack_component.h"
namespace OHOS {
namespace ACELite {
StackTddTest::StackTddTest() : optionsObj_(UNDEFINED), attrsObj_(UNDEFINED), styleObj_(UNDEFINED)
{
componentNameId_ = KeyParser::ParseKeyId("stack");
}
void StackTddTest::SetUp()
{
Debugger::GetInstance().SetupJSContext();
jerry_init(JERRY_INIT_EMPTY);
optionsObj_ = jerry_get_global_object();
attrsObj_ = jerry_create_object();
JerrySetNamedProperty(optionsObj_, "attrs", attrsObj_);
styleObj_ = jerry_create_object();
JerrySetNamedProperty(optionsObj_, "staticStyle", styleObj_);
rootComponentMock_.PrepareRootContainer();
}
void StackTddTest::TearDown()
{
JsAppContext::GetInstance()->ReleaseStyles();
ReleaseJerryValue(attrsObj_, styleObj_, optionsObj_, VA_ARG_END_FLAG);
jerry_cleanup();
Debugger::GetInstance().ReleaseJSContext();
}
Component *StackTddTest::GetRenderedComponent(uint16_t componentKeyId, jerry_value_t children) const
{
Component *component = ComponentFactory::CreateComponent(componentKeyId, optionsObj_, children);
rootComponentMock_.RenderComponent(*component);
return component;
}
Component *StackTddTest::CreateChildComponent(jerry_value_t childOptions) const
{
jerry_value_t children = jerry_create_null();
Component *stack = ComponentFactory::CreateComponent(KeyParser::ParseKeyId("stack"), childOptions, children);
stack->Render();
jerry_release_value(children);
return stack;
}
void StackTddTest::ReleaseComponent(Component *&component) const
{
if (component != nullptr) {
component->Release();
delete component;
component = nullptr;
}
}
void StackTddTest::ComponentStackTest001()
{
TDD_CASE_BEGIN();
/* *
* @tc.steps: step1. set style
*/
jerry_value_t children = jerry_create_null();
Component *component = GetRenderedComponent(componentNameId_, children);
EXPECT_TRUE(component != nullptr);
UIViewGroup *stackView = reinterpret_cast<UIViewGroup *>(component->GetComponentRootView());
/* *
* @tc.expected: step1. check childView = nullptr
*/
EXPECT_TRUE((stackView != nullptr) && (stackView->GetChildrenHead() == nullptr));
ReleaseComponent(component);
jerry_release_value(children);
TDD_CASE_END();
}
void StackTddTest::ComponentStackTest002()
{
TDD_CASE_BEGIN();
/* *
* @tc.steps: step1. create child component
*/
jerry_value_t childOptions = jerry_create_null();
Component *child = CreateChildComponent(childOptions);
EXPECT_TRUE(child != nullptr);
/* *
* @tc.steps: step2. set children object
*/
const uint32_t childrenNum = 1;
jerry_value_t children = jerry_create_array(childrenNum);
jerry_release_value(jerry_set_property_by_index(children, 0, child->GetNativeElement()));
/* *
* @tc.steps: step3. create stack component
*/
Component *component = GetRenderedComponent(componentNameId_, children);
EXPECT_TRUE(component != nullptr);
UIViewGroup *stackView = reinterpret_cast<UIViewGroup *>(component->GetComponentRootView());
/* *
* @tc.expected: step3. check stackView != nullptr && childView != nullptr
*/
EXPECT_TRUE((stackView != nullptr) && (stackView->GetChildrenHead() != nullptr));
ReleaseComponent(child);
ReleaseComponent(component);
ReleaseJerryValue(childOptions, children, VA_ARG_END_FLAG);
TDD_CASE_END();
}
void StackTddTest::ComponentStackTest003()
{
TDD_CASE_BEGIN();
/* *
* @tc.steps: step1. create two children components
*/
jerry_value_t childOptions = jerry_create_null();
Component *child1 = CreateChildComponent(childOptions);
EXPECT_TRUE(child1 != nullptr);
Component *child2 = CreateChildComponent(childOptions);
EXPECT_TRUE(child2 != nullptr);
/* *
* @tc.steps: step2. set children object
*/
const uint32_t childrenNum = 2;
jerry_value_t children = jerry_create_array(childrenNum);
jerry_release_value(jerry_set_property_by_index(children, 0, child1->GetNativeElement()));
jerry_release_value(jerry_set_property_by_index(children, 1, child2->GetNativeElement()));
/* *
* @tc.steps: step3. create stack component
*/
Component *component = GetRenderedComponent(componentNameId_, children);
EXPECT_TRUE(component != nullptr);
UIViewGroup *stackView = reinterpret_cast<UIViewGroup *>(component->GetComponentRootView());
EXPECT_TRUE(stackView != nullptr);
/* *
* @tc.steps: step4. get children views
*/
UIView *childView1 = stackView->GetChildrenHead();
EXPECT_TRUE(childView1 != nullptr);
UIView *childView2 = childView1->GetNextSibling();
/* *
* @tc.expected: step4. check two children views
*/
EXPECT_TRUE((childView2 != nullptr) && (childView1 != childView2));
ReleaseComponent(child1);
ReleaseComponent(child2);
ReleaseComponent(component);
ReleaseJerryValue(childOptions, children, VA_ARG_END_FLAG);
TDD_CASE_END();
}
void StackTddTest::ComponentStackTest004()
{
TDD_CASE_BEGIN();
/* *
* @tc.steps: step1. create child attributes object
*/
jerry_value_t childAttrsObj = jerry_create_object();
JerrySetStringProperty(childAttrsObj, "id", "child01");
jerry_value_t childOptions = jerry_create_object();
JerrySetNamedProperty(childOptions, "attrs", childAttrsObj);
Component *child = CreateChildComponent(childOptions);
EXPECT_TRUE(child != nullptr);
/* *
* @tc.steps: step2. set child to children object
*/
const uint32_t childrenNum = 1;
jerry_value_t children = jerry_create_array(childrenNum);
jerry_release_value(jerry_set_property_by_index(children, 0, child->GetNativeElement()));
/* *
* @tc.steps: step3. create stack component
*/
Component *component = GetRenderedComponent(componentNameId_, children);
EXPECT_TRUE(component != nullptr);
UIViewGroup *stackView = reinterpret_cast<UIViewGroup *>(component->GetComponentRootView());
EXPECT_TRUE(stackView != nullptr);
/* *
* @tc.steps: step4. get child view
*/
UIView *childView = stackView->GetChildrenHead();
EXPECT_TRUE(childView != nullptr);
/* *
* @tc.expected: step4. check the child view attribute
*/
EXPECT_STREQ(childView->GetViewId(), "child01");
ReleaseComponent(child);
ReleaseComponent(component);
ReleaseJerryValue(childAttrsObj, childOptions, children, VA_ARG_END_FLAG);
TDD_CASE_END();
}
void StackTddTest::ComponentStackTest005()
{
TDD_CASE_BEGIN();
/* *
* @tc.steps: step1. create child styles object, left = 5, top = 10
*/
jerry_value_t childStylesObj = jerry_create_object();
int16_t left = 5;
int16_t top = 10;
JerrySetNumberProperty(childStylesObj, "left", left);
JerrySetNumberProperty(childStylesObj, "top", top);
jerry_value_t childOptions = jerry_create_object();
JerrySetNamedProperty(childOptions, "staticStyle", childStylesObj);
Component *child = CreateChildComponent(childOptions);
EXPECT_TRUE(child != nullptr);
/* *
* @tc.steps: step2. set child to children object
*/
const uint32_t childrenNum = 1;
jerry_value_t children = jerry_create_array(childrenNum);
jerry_release_value(jerry_set_property_by_index(children, 0, child->GetNativeElement()));
/* *
* @tc.steps: step3. create stack component
*/
Component *component = GetRenderedComponent(componentNameId_, children);
EXPECT_TRUE(component != nullptr);
UIViewGroup *stackView = reinterpret_cast<UIViewGroup *>(component->GetComponentRootView());
EXPECT_TRUE(stackView != nullptr);
/* *
* @tc.steps: step4. get child view
*/
UIView *childView = stackView->GetChildrenHead();
EXPECT_TRUE(childView != nullptr);
/* *
* @tc.expected: step4. check the child view styles
*/
EXPECT_TRUE((childView->GetX() == left) && (childView->GetY() == top));
ReleaseComponent(child);
ReleaseComponent(component);
ReleaseJerryValue(childStylesObj, childOptions, children, VA_ARG_END_FLAG);
TDD_CASE_END();
}
void StackTddTest::ComponentStackTest006()
{
TDD_CASE_BEGIN();
/* *
* @tc.steps: step1. create child styles object, width = 100, height = 50
*/
jerry_value_t childStylesObj = jerry_create_object();
int16_t width = 100;
int16_t height = 50;
JerrySetNumberProperty(childStylesObj, "width", width);
JerrySetNumberProperty(childStylesObj, "height", height);
jerry_value_t childOptions = jerry_create_object();
JerrySetNamedProperty(childOptions, "staticStyle", childStylesObj);
Component *child = CreateChildComponent(childOptions);
EXPECT_TRUE(child != nullptr);
/* *
* @tc.steps: step2. set child to children object
*/
const uint32_t childrenNum = 1;
jerry_value_t children = jerry_create_array(childrenNum);
jerry_release_value(jerry_set_property_by_index(children, 0, child->GetNativeElement()));
/* *
* @tc.steps: step3. create stack component
*/
Component *component = GetRenderedComponent(componentNameId_, children);
EXPECT_TRUE(component != nullptr);
UIViewGroup *stackView = reinterpret_cast<UIViewGroup *>(component->GetComponentRootView());
EXPECT_TRUE(stackView != nullptr);
/* *
* @tc.steps: step4. get child view
*/
UIView *childView = stackView->GetChildrenHead();
EXPECT_TRUE(childView != nullptr);
/* *
* @tc.expected: step4. check the child view styles
*/
EXPECT_TRUE((childView->GetWidth() == width) && (childView->GetHeight() == height));
ReleaseComponent(child);
ReleaseComponent(component);
ReleaseJerryValue(childStylesObj, childOptions, children, VA_ARG_END_FLAG);
TDD_CASE_END();
}
void StackTddTest::RunTests()
{
ComponentStackTest001();
ComponentStackTest002();
ComponentStackTest003();
ComponentStackTest004();
ComponentStackTest005();
ComponentStackTest006();
}
#ifdef TDD_ASSERTIONS
/* *
* @tc.name: ComponentStackTest001
* @tc.desc: Verify no child component set.
* @tc.require: AR000DSEF9
*/
HWTEST_F(StackTddTest, test001, TestSize.Level1)
{
StackTddTest::ComponentStackTest001();
}
/* *
* @tc.name: ComponentStackTest002
* @tc.desc: Verify child component can be set.
* @tc.require: AR000DSEF9
*/
HWTEST_F(StackTddTest, test002, TestSize.Level0)
{
StackTddTest::ComponentStackTest002();
}
/* *
* @tc.name: ComponentStackTest003
* @tc.desc: Verify multiple children components can be set.
* @tc.require: AR000DSEF9
*/
HWTEST_F(StackTddTest, test003, TestSize.Level0)
{
StackTddTest::ComponentStackTest003();
}
/* *
* @tc.name: ComponentStackTest004
* @tc.desc: Verify attribute of child component can be set correctly.
* @tc.require: AR000DSEF9
*/
HWTEST_F(StackTddTest, test004, TestSize.Level1)
{
StackTddTest::ComponentStackTest004();
}
/* *
* @tc.name: ComponentStackTest005
* @tc.desc: Verify left and top styles of child component can be set correctly.
* @tc.require: AR000DSEF9
*/
HWTEST_F(StackTddTest, test005, TestSize.Level1)
{
StackTddTest::ComponentStackTest005();
}
/* *
* @tc.name: ComponentStackTest006
* @tc.desc: Verify width and height styles of child component can be set correctly.
* @tc.require: AR000DSEF9
*/
HWTEST_F(StackTddTest, test006, TestSize.Level1)
{
StackTddTest::ComponentStackTest006();
}
#endif
} // namespace ACELite
} // namespace OHOS
@@ -0,0 +1,63 @@
/*
* 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.
*/
#ifndef OHOS_ACELITE_STACK_TDD_TEST_H
#define OHOS_ACELITE_STACK_TDD_TEST_H
#ifdef TDD_ASSERTIONS
#include <climits>
#include <gtest/gtest.h>
#endif
#include "component_factory.h"
#include "root_component_mock.h"
#include "test_common.h"
namespace OHOS {
namespace ACELite {
#ifdef TDD_ASSERTIONS
using namespace std;
using namespace testing::ext;
class StackTddTest : public testing::Test {
#else
class StackTddTest {
#endif
public:
StackTddTest();
~StackTddTest(){};
void SetUp();
void TearDown();
void ComponentStackTest001();
void ComponentStackTest002();
void ComponentStackTest003();
void ComponentStackTest004();
void ComponentStackTest005();
void ComponentStackTest006();
void RunTests();
private:
Component *GetRenderedComponent(uint16_t componentKeyId, jerry_value_t children) const;
Component *CreateChildComponent(jerry_value_t childOptions) const;
void ReleaseComponent(Component *&component) const;
jerry_value_t optionsObj_;
jerry_value_t attrsObj_;
jerry_value_t styleObj_;
RootComponentMock rootComponentMock_;
uint16_t componentNameId_;
};
} // namespace ACELite
} // namespace OHOS
#endif // OHOS_ACELITE_STACK_TDD_TEST_H
+4
View File
@@ -19,7 +19,9 @@ components_unittest_root =
"$ace_lite_root/frameworks/src/core/components/test/unittest"
context_unittest_root =
"$ace_lite_root/frameworks/src/core/context/test/unittest"
async_unittest_root = "$NATIVE_ENGINE_PATH/async/test/unittest"
jsi_unittest_root = "$NATIVE_ENGINE_PATH/jsi/test/unittest"
module_manager_unittest_root = "$MODULE_MANAGER_PATH/test/unittest"
modules_unittest_root =
"$ace_lite_root/frameworks/src/core/modules/test/unittest"
stylemgr_unittest_root =
@@ -43,10 +45,12 @@ config("test_whole_archive_config") {
group("unittest") {
deps = [
"$ace_lite_root/test/moduletest/common:door_unittest",
"$async_unittest_root:async_unittest",
"$cache_manager_unittest_root:cache_manager_unittest",
"$components_unittest_root:components_unittest",
"$context_unittest_root:js_frameworks_unittest",
"$jsi_unittest_root:jsi_unittest",
"$module_manager_unittest_root:module_manager_unittest",
"$modules_unittest_root:modules_unittest",
"$router_unittest_root:router_module_unittest",
"$stylemgr_unittest_root:stylemgr_unittest",
+3
View File
@@ -25,6 +25,8 @@ unittest("js_frameworks_tdd_door") {
sources = all_acelite_source_files
sources += [
"$ACE_LITE_COMMON_PATH/memory/cache/test/unittest/common/cache_manager_tdd_test.cpp",
"$MODULE_MANAGER_PATH/test/unittest/common/require_module_tdd_test.cpp",
"$NATIVE_ENGINE_PATH/async/test/unittest/common/js_async_work_tdd_test.cpp",
"$NATIVE_ENGINE_PATH/jsi/test/unittest/common/jsi_interface_tdd_test.cpp",
"$ace_lite_root/frameworks/src/core/components/test/unittest/common/root_component_mock.cpp",
"$ace_lite_root/test/moduletest/common/base_test.cpp",
@@ -40,6 +42,7 @@ unittest("js_frameworks_tdd_door") {
"$ace_lite_src_core/components/test/unittest/common/percent_tdd_test.cpp",
"$ace_lite_src_core/components/test/unittest/common/radio_switch_tdd_test.cpp",
"$ace_lite_src_core/components/test/unittest/common/slider_tdd_test.cpp",
"$ace_lite_src_core/components/test/unittest/common/stack_tdd_test.cpp",
"$ace_lite_src_core/components/test/unittest/common/switch_tdd_test.cpp",
"$ace_lite_src_core/components/test/unittest/common/text_tdd_exception_test.cpp",
"$ace_lite_src_core/components/test/unittest/common/text_tdd_test.cpp",