mirror of
https://github.com/openharmony/ace_engine_lite.git
synced 2026-07-18 18:34:29 -04:00
build: ace_engine_lite 支持 LiteOS-M,并且可以通过产品配置开关
Signed-off-by: SimonLi <likailong@huawei.com>
This commit is contained in:
@@ -113,6 +113,7 @@ public:
|
||||
static void InitNativeMemPoolHook(NativeMemInfoGetter getter);
|
||||
static void InitExtraModulesGetter(ProductModulesGetter productModuleGetter,
|
||||
PrivateModulesGetter privateModuleGetter);
|
||||
static void InitDeviceInfo(const char *deviceType);
|
||||
static void RegTerminatingHandler(TerminateAbilityHandler handler);
|
||||
static void RegTEHandlers(const TEHandlingHooks &teHandlingHooks);
|
||||
static TEDispatchingResult DispatchTEMessage();
|
||||
@@ -135,6 +136,7 @@ public:
|
||||
static uint8_t GetDefaultFontSize();
|
||||
static void UpdateRenderTickAcceptable(bool acceptable);
|
||||
static void GetScreenSize(uint16_t &width, uint16_t &height);
|
||||
static const char *GetDeviceType();
|
||||
static bool SetScreenOnVisible(bool visible);
|
||||
static void LoadExtraPresetModules();
|
||||
static void UnloadExtraPresetModules();
|
||||
|
||||
@@ -64,6 +64,12 @@ static uint16_t g_screenHeight = 454;
|
||||
const static char *DEFAULT_APP_DATA_PATH = "user/ace/data/";
|
||||
static const char *g_defaultDataRootPath = DEFAULT_APP_DATA_PATH;
|
||||
|
||||
// default device info
|
||||
const static uint8_t DEVICE_TYPE_STR_LEN = 24;
|
||||
const static char *DEFAULT_DEVICE_TYPE_NAME = "smartVision";
|
||||
// smartVision as default
|
||||
static const char *g_deviceType = DEFAULT_DEVICE_TYPE_NAME;
|
||||
|
||||
// indicating if the ace application is on forground
|
||||
static bool g_isRenderTickAcceptable = false;
|
||||
|
||||
@@ -275,5 +281,18 @@ const char *ProductAdapter::GetPrivateDataRootPath()
|
||||
{
|
||||
return g_defaultDataRootPath;
|
||||
}
|
||||
|
||||
void ProductAdapter::InitDeviceInfo(const char *deviceType)
|
||||
{
|
||||
if (deviceType == nullptr || (strlen(deviceType) == 0) || strlen(deviceType) >= DEVICE_TYPE_STR_LEN) {
|
||||
return;
|
||||
}
|
||||
g_deviceType = deviceType;
|
||||
}
|
||||
|
||||
const char *ProductAdapter::GetDeviceType()
|
||||
{
|
||||
return g_deviceType;
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* 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_SCOPE_JS_VALUE_H
|
||||
#define OHOS_ACELITE_SCOPE_JS_VALUE_H
|
||||
|
||||
#include "jerryscript.h"
|
||||
#include "non_copyable.h"
|
||||
|
||||
#include "stdlib.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
// Local scope JS value, which can be released (decrease the ref count) automaticly
|
||||
// when leaving its scope, do not transfer one ScopeJSValue out of its outtest scope.
|
||||
class ScopeJSValue final {
|
||||
public:
|
||||
ACE_DISALLOW_COPY_AND_MOVE(ScopeJSValue);
|
||||
ScopeJSValue(jerry_value_t value) : value_(value) {}
|
||||
~ScopeJSValue()
|
||||
{
|
||||
if (value_ == 0) {
|
||||
return;
|
||||
}
|
||||
jerry_release_value(value_);
|
||||
value_ = 0;
|
||||
}
|
||||
|
||||
jerry_value_t Obain() const
|
||||
{
|
||||
return value_;
|
||||
}
|
||||
|
||||
private:
|
||||
// disallow create the object on the heap, only can use on the stack
|
||||
void *operator new(size_t size)
|
||||
{
|
||||
(void)(size);
|
||||
// return buffer to dismiss the compolier warning,
|
||||
// actually no-fact as this function never be used
|
||||
const size_t bufferLen = 4;
|
||||
return malloc(bufferLen);
|
||||
}
|
||||
void operator delete(void *ptr)
|
||||
{
|
||||
(void)(ptr);
|
||||
}
|
||||
|
||||
jerry_value_t value_ = 0;
|
||||
};
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
#endif // OHOS_ACELITE_SCOPE_JS_VALUE_H
|
||||
@@ -14,6 +14,7 @@
|
||||
*/
|
||||
|
||||
#include "ace_mem_base.h"
|
||||
#include "ctype.h"
|
||||
#include "js_config.h"
|
||||
#include "securec.h"
|
||||
#include "string_util.h"
|
||||
@@ -92,5 +93,34 @@ bool StringUtil::StartsWith(const char *sequence, const char *subsequence)
|
||||
}
|
||||
return strncmp(sequence, subsequence, strlen(subsequence)) == 0;
|
||||
}
|
||||
|
||||
char *StringUtil::Trim(char *sequence)
|
||||
{
|
||||
if (sequence == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (strlen(sequence) == 0) {
|
||||
return sequence;
|
||||
}
|
||||
char *leftP = sequence;
|
||||
char *rightP = sequence;
|
||||
char *endP = sequence;
|
||||
// find the first no-space position
|
||||
while (*leftP != '\0' && isspace(*leftP)) {
|
||||
leftP++;
|
||||
}
|
||||
// copy all charaters one by one from the first no-space position to the start of the buffer
|
||||
while (*leftP != '\0') {
|
||||
*rightP = *leftP;
|
||||
if (!isspace(*rightP)) {
|
||||
// record the next position of the last no-space character
|
||||
endP = rightP + 1;
|
||||
}
|
||||
leftP++;
|
||||
rightP++;
|
||||
}
|
||||
*endP = '\0';
|
||||
return sequence;
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -28,6 +28,7 @@ public:
|
||||
static char *Slice(const char *sequence, const int32_t start);
|
||||
static char *Slice(const char *sequence, const int32_t start, const int32_t end);
|
||||
static bool StartsWith(const char *sequence, const char *subsequence);
|
||||
static char *Trim(char *sequence);
|
||||
};
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* 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 "system_info.h"
|
||||
|
||||
#include "ace_log.h"
|
||||
#include "product_adapter.h"
|
||||
#include "screen.h"
|
||||
#include "securec.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
SystemInfo &SystemInfo::GetInstance()
|
||||
{
|
||||
static SystemInfo systemInfo;
|
||||
return systemInfo;
|
||||
}
|
||||
|
||||
void SystemInfo::Initialize()
|
||||
{
|
||||
// reset
|
||||
screenWidth_ = screenHeight_ = 0;
|
||||
ProductAdapter::GetScreenSize(screenWidth_, screenHeight_);
|
||||
if (screenWidth_ != 0 && screenHeight_ != 0) {
|
||||
aspectRatio_ = (float)screenWidth_ / (float)screenHeight_;
|
||||
} else {
|
||||
aspectRatio_ = 0;
|
||||
}
|
||||
isRoundScreen_ = (Screen::GetInstance().GetScreenShape() == ScreenShape::CIRCLE);
|
||||
deviceType_ = ProductAdapter::GetDeviceType();
|
||||
}
|
||||
|
||||
float SystemInfo::GetAspectRatio() const
|
||||
{
|
||||
return aspectRatio_;
|
||||
}
|
||||
|
||||
uint16_t SystemInfo::GetScreenHeight() const
|
||||
{
|
||||
return screenHeight_;
|
||||
}
|
||||
|
||||
uint16_t SystemInfo::GetScreenWidth() const
|
||||
{
|
||||
return screenWidth_;
|
||||
}
|
||||
|
||||
const char *SystemInfo::GetDeviceType() const
|
||||
{
|
||||
return deviceType_;
|
||||
}
|
||||
|
||||
bool SystemInfo::IsRoundScreen() const
|
||||
{
|
||||
return isRoundScreen_;
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* 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_BASE_SYSTEM_INFO_H
|
||||
#define OHOS_ACELITE_BASE_SYSTEM_INFO_H
|
||||
|
||||
#include "acelite_config.h"
|
||||
#include "memory_heap.h"
|
||||
#include "non_copyable.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
class SystemInfo final : public MemoryHeap {
|
||||
public:
|
||||
ACE_DISALLOW_COPY_AND_MOVE(SystemInfo);
|
||||
static SystemInfo &GetInstance();
|
||||
void Initialize();
|
||||
|
||||
/**
|
||||
* @brief get the value of width/height
|
||||
* @return the width/height value
|
||||
*/
|
||||
float GetAspectRatio() const;
|
||||
|
||||
/**
|
||||
* @brief get the device type, support liteWearable and smartVision now
|
||||
* @return the device type
|
||||
*/
|
||||
const char *GetDeviceType() const;
|
||||
|
||||
/**
|
||||
* @brief charge the device is round screen or not
|
||||
* @return the device is round scrren or not
|
||||
*/
|
||||
bool IsRoundScreen() const;
|
||||
|
||||
uint16_t GetScreenHeight() const;
|
||||
|
||||
uint16_t GetScreenWidth() const;
|
||||
|
||||
private:
|
||||
SystemInfo() : screenWidth_(0), screenHeight_(0), aspectRatio_(0.0), deviceType_(nullptr), isRoundScreen_(false) {}
|
||||
~SystemInfo() {}
|
||||
static const uint8_t DEVICE_TYPE_STR_LEN = 32;
|
||||
uint16_t screenWidth_;
|
||||
uint16_t screenHeight_;
|
||||
float aspectRatio_;
|
||||
const char *deviceType_;
|
||||
bool isRoundScreen_;
|
||||
};
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
#endif // OHOS_ACELITE_BASE_SYSTEM_INFO_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_system_info") {
|
||||
output_extension = "bin"
|
||||
output_dir = test_output_root
|
||||
configs = [ "$ace_lite_root/test:test_common_config" ]
|
||||
sources = [ "common/system_info_tdd_test.cpp" ]
|
||||
deps = ace_test_deps
|
||||
}
|
||||
|
||||
group("base_utils_unittest") {
|
||||
deps = [ ":js_frameworks_test_system_info" ]
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
/*
|
||||
* 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 "system_info_tdd_test.h"
|
||||
#include "product_adapter.h"
|
||||
#include "securec.h"
|
||||
#include "system_info.h"
|
||||
#include "test_common.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
constexpr static char DEVICE_TYPE_NAME_SMART_VISION[] = "smartVision";
|
||||
|
||||
/**
|
||||
* @tc.name: ACELite_System_Info_001
|
||||
* @tc.desc: test the default device value
|
||||
*/
|
||||
HWTEST_F(SystemInfoTddTest, SystemInfoTest001, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1.init the device info
|
||||
*/
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. get the device width, height and aspect-ratio
|
||||
* @tc.expected: step2. the device width is 454, height is 454, aspect-ratio is 1
|
||||
*/
|
||||
const uint16_t screenHeight = 454;
|
||||
const uint16_t screenWidth = 454;
|
||||
EXPECT_TRUE(SystemInfo::GetInstance().GetScreenHeight() == screenHeight);
|
||||
EXPECT_TRUE(SystemInfo::GetInstance().GetScreenWidth() == screenWidth);
|
||||
EXPECT_EQ(SystemInfo::GetInstance().GetAspectRatio(), 1);
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. get the device type and the round screen
|
||||
* @tc.expected: step3. the device type is liteWearable, the round screen is true
|
||||
*/
|
||||
const char *deviceType = SystemInfo::GetInstance().GetDeviceType();
|
||||
EXPECT_NE(deviceType, nullptr);
|
||||
if (deviceType != nullptr) {
|
||||
EXPECT_EQ(strcmp(deviceType, "smartVision"), 0);
|
||||
}
|
||||
EXPECT_FALSE(SystemInfo::GetInstance().IsRoundScreen());
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name ACELite_System_info_002
|
||||
* @tc.desc test width/height/aspect-ratio of device is saved or not
|
||||
*/
|
||||
HWTEST_F(SystemInfoTddTest, SystemInfoTest002, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
/**
|
||||
* @tc.steps: step1. set the device width 960px, height 480px
|
||||
*/
|
||||
const uint16_t screenWidth = 960;
|
||||
const uint16_t screenHeight = 480;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. get the device width
|
||||
* @tc.expected: step2. the device width is 960px
|
||||
*/
|
||||
uint16_t width = SystemInfo::GetInstance().GetScreenWidth();
|
||||
EXPECT_TRUE(width == screenWidth);
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. get the device height
|
||||
* @tc.expected: step3. the device height is 480px
|
||||
*/
|
||||
uint16_t height = SystemInfo::GetInstance().GetScreenHeight();
|
||||
EXPECT_TRUE(height == screenHeight);
|
||||
|
||||
/**
|
||||
* @tc.steps: step4. get the aspect-ratio value
|
||||
* @tc.expected: step4. the aspect-ratio value is 2
|
||||
*/
|
||||
const float aspectRatioValue = 2.0;
|
||||
float aspectRatio = SystemInfo::GetInstance().GetAspectRatio();
|
||||
EXPECT_EQ(aspectRatio, aspectRatioValue);
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: ACELite_System_Info_003
|
||||
* @tc.desc: test the device type and the round screen type
|
||||
*/
|
||||
HWTEST_F(SystemInfoTddTest, SystemInfoTest003, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
/**
|
||||
* @tc.steps: step1. set the device type smartVision, and the round screen false
|
||||
*/
|
||||
ProductAdapter::InitDeviceInfo(DEVICE_TYPE_NAME_SMART_VISION);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. get the screen type
|
||||
* @tc.expected: step2. the screen type is false
|
||||
*/
|
||||
EXPECT_FALSE(SystemInfo::GetInstance().IsRoundScreen());
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. get the device type
|
||||
* @tc.expected: step3. the device type is smartVision
|
||||
*/
|
||||
const char *deviceType = SystemInfo::GetInstance().GetDeviceType();
|
||||
EXPECT_NE(deviceType, nullptr);
|
||||
if (deviceType != nullptr) {
|
||||
EXPECT_EQ(strcmp(deviceType, "smartVision"), 0);
|
||||
}
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: ACELite_System_Info_004
|
||||
* @tc.desc: test the width or height is 0
|
||||
*/
|
||||
HWTEST_F(SystemInfoTddTest, SystemInfoTest004, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
/**
|
||||
* @tc.steps: step1. set the device width 0, device height 100
|
||||
*/
|
||||
uint16_t screenWidth = 0;
|
||||
uint16_t screenHeight = 100;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. get the device width, height and aspect-ratio
|
||||
* @tc.expected: step2. the device width is 0, the device height is 100, the aspect-ratio is 0
|
||||
*/
|
||||
uint16_t width = SystemInfo::GetInstance().GetScreenWidth();
|
||||
EXPECT_TRUE(width == screenWidth);
|
||||
uint16_t height = SystemInfo::GetInstance().GetScreenHeight();
|
||||
EXPECT_TRUE(height == screenHeight);
|
||||
float aspectRatio = SystemInfo::GetInstance().GetAspectRatio();
|
||||
EXPECT_EQ(aspectRatio, 0);
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the device width 100, height 0
|
||||
*/
|
||||
screenWidth = 100;
|
||||
screenHeight = 0;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
|
||||
/**
|
||||
* @tc.steps: step4. get the device width, hright and aspect-ratio
|
||||
* @tc.expected: step4. the device width is 100, height is 0, aspect-ratio is 0
|
||||
*/
|
||||
width = SystemInfo::GetInstance().GetScreenWidth();
|
||||
EXPECT_TRUE(width == screenWidth);
|
||||
height = SystemInfo::GetInstance().GetScreenHeight();
|
||||
EXPECT_TRUE(height == screenHeight);
|
||||
aspectRatio = SystemInfo::GetInstance().GetAspectRatio();
|
||||
EXPECT_EQ(aspectRatio, 0);
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
#ifndef TDD_ASSERTIONS
|
||||
void SystemInfoTddTest::RunTests()
|
||||
{
|
||||
SystemInfoTest001();
|
||||
SystemInfoTest002();
|
||||
SystemInfoTest003();
|
||||
SystemInfoTest004();
|
||||
}
|
||||
#endif
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* 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_SYSTEM_INFO_TDD_TEST
|
||||
#define OHOS_ACELITE_SYSTEM_INFO_TDD_TEST
|
||||
#ifdef TDD_ASSERTIONS
|
||||
#include <climits>
|
||||
#include <gtest/gtest.h>
|
||||
#else
|
||||
#include <typeinfo.h>
|
||||
#endif
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
#ifdef TDD_ASSERTIONS
|
||||
using namespace std;
|
||||
using namespace testing::ext;
|
||||
class SystemInfoTddTest : public testing::Test {
|
||||
#else
|
||||
class SystemInfoTddTest {
|
||||
#endif
|
||||
public:
|
||||
void SetUp() {}
|
||||
|
||||
void TearDown() {}
|
||||
|
||||
void SystemInfoTest001();
|
||||
|
||||
void SystemInfoTest002();
|
||||
|
||||
void SystemInfoTest003();
|
||||
|
||||
void SystemInfoTest004();
|
||||
|
||||
#ifndef TDD_ASSERTIONS
|
||||
void RunTests();
|
||||
#endif
|
||||
};
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -34,7 +34,9 @@
|
||||
#include "presets/timer_module.h"
|
||||
#include "presets/version_module.h"
|
||||
#include "product_adapter.h"
|
||||
#include "system_info.h"
|
||||
#if (JS_ENGINE_STATIC_MULTI_CONTEXTS_ENABLED == 1)
|
||||
|
||||
extern "C" {
|
||||
#include "generate-bytecode.h"
|
||||
}
|
||||
@@ -83,6 +85,7 @@ void JsAppEnvironment::InitJsFramework() const
|
||||
ProductAdapter::LoadExtraPresetModules();
|
||||
LoadFramework();
|
||||
LocalModule::Load();
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
STOP_TRACING();
|
||||
}
|
||||
|
||||
|
||||
@@ -326,5 +326,28 @@ AppStyle *AppStyle::GenerateFromJS(jerry_value_t styleKey, jerry_value_t styleVa
|
||||
|
||||
return newStyle;
|
||||
}
|
||||
|
||||
void AppStyle::CombineStyles(AppStyle &dest, const AppStyle &source, bool overwrite)
|
||||
{
|
||||
const AppStyleItem *styleItem = source.GetFirst();
|
||||
while (styleItem != nullptr) {
|
||||
const AppStyleItem *currentStyleItemInSource = styleItem;
|
||||
styleItem = styleItem->GetNext();
|
||||
const AppStyleItem *existOneInDest = dest.GetStyleItemByNameId(currentStyleItemInSource->GetPropNameId());
|
||||
|
||||
if (existOneInDest == nullptr) {
|
||||
dest.AddStyleItem(AppStyleItem::CopyFrom(currentStyleItemInSource));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!overwrite) {
|
||||
// exist one has higher priority
|
||||
continue;
|
||||
}
|
||||
|
||||
// the new one has higher priority, to over wirte exist one
|
||||
const_cast<AppStyleItem *>(existOneInDest)->UpdateValueFrom(*currentStyleItemInSource);
|
||||
}
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
Reset();
|
||||
}
|
||||
|
||||
const char* GetStyleName()
|
||||
const char* GetStyleName() const
|
||||
{
|
||||
return styleName_;
|
||||
}
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
next_ = nextStyle;
|
||||
}
|
||||
|
||||
const AppStyle* GetNext()
|
||||
const AppStyle* GetNext() const
|
||||
{
|
||||
return next_;
|
||||
}
|
||||
@@ -75,6 +75,7 @@ public:
|
||||
const AppStyleItem* GetStyleItemByName(const char * const stylePropName) const;
|
||||
const AppStyleItem* GetStyleItemByNameId(uint16_t stylePropNameId) const;
|
||||
static AppStyle* GenerateFromJS(jerry_value_t styleKey, jerry_value_t styleValue, bool isKeyFrames);
|
||||
static void CombineStyles(AppStyle &dest, const AppStyle &source, bool overwrite = false);
|
||||
|
||||
private:
|
||||
void SetStyleName(const char * const name, size_t nameLen);
|
||||
|
||||
@@ -161,33 +161,41 @@ AppStyleItem *AppStyleItem::CopyFrom(const AppStyleItem *from)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
styleItem->propNameId_ = from->propNameId_;
|
||||
styleItem->pseudoClassType_ = from->pseudoClassType_;
|
||||
switch (from->GetValueType()) {
|
||||
styleItem->UpdateValueFrom(*from);
|
||||
|
||||
return styleItem;
|
||||
}
|
||||
|
||||
void AppStyleItem::UpdateValueFrom(const AppStyleItem &from)
|
||||
{
|
||||
if (valueType_ == STYLE_PROP_VALUE_TYPE_STRING) {
|
||||
ACE_FREE(styleValue_.string);
|
||||
}
|
||||
propNameId_ = from.propNameId_;
|
||||
pseudoClassType_ = from.pseudoClassType_;
|
||||
switch (from.GetValueType()) {
|
||||
case STYLE_PROP_VALUE_TYPE_STRING: {
|
||||
const char *strValue = from->GetStrValue();
|
||||
const char *strValue = from.GetStrValue();
|
||||
if (strValue != nullptr) {
|
||||
styleItem->SetStringValue(strValue);
|
||||
SetStringValue(strValue);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case STYLE_PROP_VALUE_TYPE_BOOL:
|
||||
styleItem->SetBoolValue(from->GetBoolValue());
|
||||
SetBoolValue(from.GetBoolValue());
|
||||
break;
|
||||
case STYLE_PROP_VALUE_TYPE_NUMBER:
|
||||
styleItem->SetNumValue(from->GetNumValue());
|
||||
SetNumValue(from.GetNumValue());
|
||||
break;
|
||||
case STYLE_PROP_VALUE_TYPE_FLOATING:
|
||||
styleItem->SetFloatingValue(from->GetFloatingValue());
|
||||
SetFloatingValue(from.GetFloatingValue());
|
||||
break;
|
||||
case STYLE_PROP_VALUE_TYPE_PERCENT:
|
||||
styleItem->SetPercentValue(from->GetPercentValue());
|
||||
SetPercentValue(from.GetPercentValue());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return styleItem;
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -166,6 +166,7 @@ public:
|
||||
}
|
||||
|
||||
bool UpdateNumValToStr();
|
||||
void UpdateValueFrom(const AppStyleItem &from);
|
||||
static AppStyleItem *GenerateFromJSValue(jerry_value_t stylePropName, jerry_value_t stylePropValue);
|
||||
static AppStyleItem *CreateStyleItem(uint16_t keyId,
|
||||
const jerry_value_t stylePropValue,
|
||||
|
||||
@@ -29,20 +29,50 @@ void AppStyleList::Reset()
|
||||
lastStyle_ = nullptr;
|
||||
}
|
||||
|
||||
void AppStyleList::AddStyle(AppStyle* newStyle)
|
||||
void AppStyleList::AddStyle(AppStyle *newStyle)
|
||||
{
|
||||
if (newStyle == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
// the first one
|
||||
if (firstStyle_ == nullptr) {
|
||||
firstStyle_ = newStyle;
|
||||
lastStyle_ = newStyle;
|
||||
} else {
|
||||
newStyle->SetPre(lastStyle_);
|
||||
lastStyle_->SetNext(newStyle);
|
||||
lastStyle_ = newStyle;
|
||||
return;
|
||||
}
|
||||
|
||||
// fresh new one
|
||||
newStyle->SetPre(lastStyle_);
|
||||
lastStyle_->SetNext(newStyle);
|
||||
lastStyle_ = newStyle;
|
||||
}
|
||||
|
||||
AppStyle *AppStyleList::GetExistStyle(const char *name) const
|
||||
{
|
||||
if (firstStyle_ == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (name == nullptr || strlen(name) == 0) {
|
||||
return nullptr;
|
||||
}
|
||||
const AppStyle *current = firstStyle_;
|
||||
while (current != nullptr) {
|
||||
// point to next immediately
|
||||
const AppStyle *existCurrentStyle = current;
|
||||
current = existCurrentStyle->GetNext();
|
||||
const char *styleName = existCurrentStyle->GetStyleName();
|
||||
|
||||
if (styleName == nullptr || strlen(styleName) == 0) {
|
||||
continue;
|
||||
}
|
||||
if ((strlen(styleName) == strlen(name)) && strcmp(styleName, name) == 0) {
|
||||
// exist
|
||||
return const_cast<AppStyle *>(existCurrentStyle);
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -31,13 +31,15 @@ public:
|
||||
Reset();
|
||||
}
|
||||
|
||||
const AppStyle* GetFirst()
|
||||
const AppStyle* GetFirst() const
|
||||
{
|
||||
return firstStyle_;
|
||||
}
|
||||
|
||||
void Reset();
|
||||
void AddStyle(AppStyle* newStyle);
|
||||
bool IsStyleExist(const AppStyle &newStyle);
|
||||
AppStyle *GetExistStyle(const char *name) const;
|
||||
|
||||
private:
|
||||
AppStyle* firstStyle_;
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
*/
|
||||
|
||||
#include "stylemgr/app_style_sheet.h"
|
||||
#include "condition_arbitrator.h"
|
||||
#include "js_fwk_common.h"
|
||||
#include "scope_js_value.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
@@ -44,15 +47,84 @@ void AppStyleSheet::InitSheet(jerry_value_t styleSheetObj)
|
||||
return;
|
||||
}
|
||||
|
||||
// clear previous style sheet list
|
||||
Reset();
|
||||
|
||||
// initializa all media query selectors first, as all media query selectors have higher priority
|
||||
InitMediaSelectors(styleSheetObj);
|
||||
|
||||
// initialize all other normal selectors
|
||||
InitNormalSelectors(styleSheetObj);
|
||||
}
|
||||
|
||||
void AppStyleSheet::InitMediaSelectors(const jerry_value_t styleSheetObj)
|
||||
{
|
||||
// check if media query exists in style sheet
|
||||
const char * const mediaQueryArrayKeyName = "@media";
|
||||
jerry_value_t propNameV =
|
||||
jerry_create_string(reinterpret_cast<jerry_char_t *>(const_cast<char *>(mediaQueryArrayKeyName)));
|
||||
ScopeJSValue propNameP(propNameV);
|
||||
if (!HasOwnProperty(styleSheetObj, propNameV)) {
|
||||
// no media querry items
|
||||
return;
|
||||
}
|
||||
|
||||
ScopeJSValue mediaQueryArrayValue(jerry_get_property(styleSheetObj, propNameV));
|
||||
if (!jerry_value_is_array(mediaQueryArrayValue.Obain())) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t conditionCounts = jerry_get_array_length(mediaQueryArrayValue.Obain());
|
||||
const uint32_t maxConditionCount = 256;
|
||||
if (conditionCounts == 0 || conditionCounts > maxConditionCount) {
|
||||
return;
|
||||
}
|
||||
for (uint32_t index = 0; index < conditionCounts; index++) {
|
||||
// get the array item @ index position
|
||||
jerry_value_t mediaArrayItemV = jerry_get_property_by_index(mediaQueryArrayValue.Obain(), index);
|
||||
ScopeJSValue mediaArrayItemP(mediaArrayItemV);
|
||||
// handle single one
|
||||
HandleSingleMediaItem(mediaArrayItemV);
|
||||
}
|
||||
}
|
||||
|
||||
void AppStyleSheet::HandleSingleMediaItem(const jerry_value_t mediaItem)
|
||||
{
|
||||
const char * const conditionKeyName = "condition";
|
||||
jerry_value_t conditionKeyV = jerry_create_string(reinterpret_cast<const jerry_char_t *>(conditionKeyName));
|
||||
ScopeJSValue conditionKeyP(conditionKeyV);
|
||||
if (!JerryHasProperty(mediaItem, conditionKeyV)) {
|
||||
return;
|
||||
}
|
||||
// get condition string
|
||||
jerry_value_t conditionStrJSValue = jerry_get_property(mediaItem, conditionKeyV);
|
||||
ScopeJSValue autoReleaseV(conditionStrJSValue);
|
||||
char *conditionStr = MallocStringOf(conditionStrJSValue);
|
||||
if (conditionStr == nullptr) {
|
||||
return;
|
||||
}
|
||||
ConditionArbitrator arbitrator;
|
||||
bool isMatched = arbitrator.Decide(conditionStr);
|
||||
ace_free(conditionStr);
|
||||
conditionStr = nullptr;
|
||||
if (!isMatched) {
|
||||
// the current media item is not matching with current device environment
|
||||
return;
|
||||
}
|
||||
|
||||
// matched, parse the item through normal way
|
||||
InitNormalSelectors(mediaItem, true);
|
||||
}
|
||||
|
||||
void AppStyleSheet::InitNormalSelectors(const jerry_value_t styleSheetObj, bool overwrite)
|
||||
{
|
||||
// init all id selectors
|
||||
const char * const attrIdSelectors = "idSelectors";
|
||||
jerry_value_t propName = jerry_create_string(reinterpret_cast<jerry_char_t *>(const_cast<char *>(attrIdSelectors)));
|
||||
jerry_value_t propValue = UNDEFINED;
|
||||
if (HasOwnProperty(styleSheetObj, propName)) {
|
||||
propValue = jerry_get_property(styleSheetObj, propName);
|
||||
InitSelectors(&idSelectors_, propValue, false);
|
||||
InitSelectors(&idSelectors_, propValue, false, overwrite);
|
||||
jerry_release_value(propValue);
|
||||
}
|
||||
jerry_release_value(propName);
|
||||
@@ -62,7 +134,7 @@ void AppStyleSheet::InitSheet(jerry_value_t styleSheetObj)
|
||||
propName = jerry_create_string(reinterpret_cast<jerry_char_t *>(const_cast<char *>(attrClassSelectors)));
|
||||
if (HasOwnProperty(styleSheetObj, propName)) {
|
||||
propValue = jerry_get_property(styleSheetObj, propName);
|
||||
InitSelectors(&classSelectors_, propValue, false);
|
||||
InitSelectors(&classSelectors_, propValue, false, overwrite);
|
||||
jerry_release_value(propValue);
|
||||
}
|
||||
jerry_release_value(propName);
|
||||
@@ -72,13 +144,14 @@ void AppStyleSheet::InitSheet(jerry_value_t styleSheetObj)
|
||||
propName = jerry_create_string(reinterpret_cast<jerry_char_t *>(const_cast<char *>(keyFrames)));
|
||||
if (HasOwnProperty(styleSheetObj, propName)) {
|
||||
propValue = jerry_get_property(styleSheetObj, propName);
|
||||
InitSelectors(&keyFrameSelectors_, propValue, true);
|
||||
InitSelectors(&keyFrameSelectors_, propValue, true, overwrite);
|
||||
jerry_release_value(propValue);
|
||||
}
|
||||
jerry_release_value(propName);
|
||||
}
|
||||
|
||||
void AppStyleSheet::InitSelectors(AppStyleList** selectorsList, jerry_value_t selectorsObj, bool isKeyFrames)
|
||||
void AppStyleSheet::InitSelectors(AppStyleList **selectorsList, jerry_value_t selectorsObj,
|
||||
bool isKeyFrames, bool overwrite)
|
||||
{
|
||||
if (jerry_value_is_undefined(selectorsObj)) {
|
||||
return;
|
||||
@@ -98,9 +171,16 @@ void AppStyleSheet::InitSelectors(AppStyleList** selectorsList, jerry_value_t se
|
||||
/* convert style key into char */
|
||||
jerry_value_t styleKey = jerry_get_property_by_index(styleKeys, index);
|
||||
jerry_value_t styleValue = jerry_get_property(selectorsObj, styleKey);
|
||||
AppStyle* newStyle = AppStyle::GenerateFromJS(styleKey, styleValue, isKeyFrames);
|
||||
AppStyle *newStyle = AppStyle::GenerateFromJS(styleKey, styleValue, isKeyFrames);
|
||||
if (newStyle != nullptr) {
|
||||
(*selectorsList)->AddStyle(newStyle);
|
||||
AppStyle *existOne = (*selectorsList)->GetExistStyle(newStyle->GetStyleName());
|
||||
if (existOne != nullptr) {
|
||||
AppStyle::CombineStyles(*existOne, *newStyle, overwrite);
|
||||
delete newStyle; // combined to exist one, no used
|
||||
newStyle = nullptr;
|
||||
} else {
|
||||
(*selectorsList)->AddStyle(newStyle);
|
||||
}
|
||||
}
|
||||
ReleaseJerryValue(styleKey, styleValue, VA_ARG_END_FLAG);
|
||||
}
|
||||
@@ -108,28 +188,28 @@ void AppStyleSheet::InitSelectors(AppStyleList** selectorsList, jerry_value_t se
|
||||
jerry_release_value(styleKeys);
|
||||
}
|
||||
|
||||
AppStyle* AppStyleSheet::GetStyleFromIDSelectors(const char * const name) const
|
||||
AppStyle *AppStyleSheet::GetStyleFromIDSelectors(const char * const name) const
|
||||
{
|
||||
return GetStyleFromSelectors(idSelectors_, name);
|
||||
}
|
||||
|
||||
AppStyle* AppStyleSheet::GetStyleFromClassSelectors(const char * const name) const
|
||||
AppStyle *AppStyleSheet::GetStyleFromClassSelectors(const char * const name) const
|
||||
{
|
||||
return GetStyleFromSelectors(classSelectors_, name);
|
||||
}
|
||||
|
||||
AppStyle* AppStyleSheet::GetStyleFromKeyFramesSelectors(const char * const name) const
|
||||
AppStyle *AppStyleSheet::GetStyleFromKeyFramesSelectors(const char * const name) const
|
||||
{
|
||||
return GetStyleFromSelectors(keyFrameSelectors_, name);
|
||||
}
|
||||
|
||||
AppStyle* AppStyleSheet::GetStyleFromSelectors(AppStyleList* selectors, const char * const name) const
|
||||
AppStyle *AppStyleSheet::GetStyleFromSelectors(AppStyleList *selectors, const char * const name) const
|
||||
{
|
||||
if ((selectors == nullptr) || (name == nullptr) || strlen(name) == 0) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AppStyle* first = const_cast<AppStyle *>(selectors->GetFirst());
|
||||
AppStyle *first = const_cast<AppStyle *>(selectors->GetFirst());
|
||||
while (first != nullptr) {
|
||||
const char *styleName = first->GetStyleName();
|
||||
if (styleName != nullptr && !strcmp(name, styleName)) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#define OHOS_ACELITE_APP_STYLE_SHEET_H
|
||||
|
||||
#include "non_copyable.h"
|
||||
#include "scope_js_value.h"
|
||||
#include "stylemgr/app_style_item.h"
|
||||
#include "stylemgr/app_style_list.h"
|
||||
|
||||
@@ -41,7 +42,11 @@ public:
|
||||
AppStyleList* keyFrameSelectors_;
|
||||
|
||||
private:
|
||||
void InitSelectors(AppStyleList** selectorsList, jerry_value_t selectorsObj, bool isKeyFrames);
|
||||
void InitNormalSelectors(const jerry_value_t styleSheetObj, bool overwrite = false);
|
||||
void InitMediaSelectors(const jerry_value_t styleSheetObj);
|
||||
void HandleSingleMediaItem(const jerry_value_t mediaItem);
|
||||
void InitSelectors(AppStyleList** selectorsList, jerry_value_t selectorsObj,
|
||||
bool isKeyFrames, bool overwrite = false);
|
||||
};
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -0,0 +1,306 @@
|
||||
/*
|
||||
* 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 "condition_arbitrator.h"
|
||||
|
||||
#include "ace_log.h"
|
||||
#include "js_fwk_common.h"
|
||||
#include "securec.h"
|
||||
#include "stdlib.h"
|
||||
#include "string_util.h"
|
||||
#include "strings.h"
|
||||
#include "system_info.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
/**
|
||||
* @brief Absolute value of x.
|
||||
*/
|
||||
#define ABS_VALUE(x) ((x) > 0 ? (x) : (-(x)))
|
||||
|
||||
/**
|
||||
* @brief parse the whole condition string into single condition items, and check if it matchs the current device
|
||||
* environment, and gives the final result of the entire media query expression.
|
||||
* @param conditions the input media query condition string
|
||||
* @return the result representing if the media query matchs the current environment, true for positive result
|
||||
*
|
||||
* NOTE: only supports the pattern such as "screen and (device-type: liteWearable) and (width: 454)"
|
||||
*/
|
||||
bool ConditionArbitrator::Decide(const char *conditions) const
|
||||
{
|
||||
if (conditions == nullptr || strlen(conditions) == 0) {
|
||||
HILOG_ERROR(HILOG_MODULE_ACE, "the input condition str is invalid");
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *lastCondition = conditions;
|
||||
const char *remainCondition = lastCondition;
|
||||
char *singleCondition = nullptr;
|
||||
const uint8_t addedLen = 3;
|
||||
bool result = true;
|
||||
while (result && remainCondition) {
|
||||
lastCondition = remainCondition;
|
||||
remainCondition = strstr(remainCondition, "and");
|
||||
singleCondition = StringUtil::Slice(
|
||||
lastCondition, 0, strlen(lastCondition) - ((remainCondition == nullptr) ? 0 : strlen(remainCondition)));
|
||||
if (remainCondition != nullptr) {
|
||||
remainCondition = remainCondition + addedLen;
|
||||
}
|
||||
char *condition = StringUtil::Trim(singleCondition);
|
||||
if (condition == nullptr) {
|
||||
continue;
|
||||
}
|
||||
result = JudgeCondition(condition);
|
||||
ace_free(singleCondition);
|
||||
singleCondition = nullptr;
|
||||
}
|
||||
ACE_FREE(singleCondition);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::JudgeCondition(const char *condition) const
|
||||
{
|
||||
if (condition == nullptr || strlen(condition) == 0) {
|
||||
HILOG_ERROR(HILOG_MODULE_ACE, "the condition is invalid");
|
||||
return false;
|
||||
}
|
||||
|
||||
// treat screen as one single media query feature, and it always is true for any devices
|
||||
if (strcmp(condition, "screen") == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
uint8_t conditionLen = strlen(condition);
|
||||
// the condition must start with '(', end with ')'
|
||||
if (condition[0] != '(' || (conditionLen <= 1) || (condition[conditionLen - 1] != ')')) {
|
||||
HILOG_ERROR(HILOG_MODULE_ACE, "error format, condition is not properly packed with ( )");
|
||||
return false;
|
||||
}
|
||||
const uint8_t minTargetLen = 2;
|
||||
char *targetCondition = StringUtil::Slice(condition, 1, conditionLen - minTargetLen + 1);
|
||||
if (targetCondition == nullptr) {
|
||||
return false;
|
||||
}
|
||||
// devide the target condition into two parts : conditionName and value through ":"
|
||||
char *targetValue = nullptr;
|
||||
char *conditionNameStr = strtok_s(targetCondition, ":", &targetValue);
|
||||
// judge the condition is success or not
|
||||
ConditionName conditionId = GetConditionName(StringUtil::Trim(conditionNameStr));
|
||||
char *trimedTargetValue = StringUtil::Trim(targetValue);
|
||||
if (conditionId == ConditionName::UNKOWN || trimedTargetValue == nullptr) {
|
||||
ace_free(targetCondition);
|
||||
targetCondition = nullptr;
|
||||
return false;
|
||||
}
|
||||
bool result = JudgeConditionAction(conditionId, trimedTargetValue);
|
||||
ace_free(targetCondition);
|
||||
targetCondition = nullptr;
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::JudgeConditionAction(ConditionName conditionId, const char *trimedTargetValue) const
|
||||
{
|
||||
if (trimedTargetValue == nullptr || strlen(trimedTargetValue) == 0) {
|
||||
return false;
|
||||
}
|
||||
switch (conditionId) {
|
||||
case ConditionName::DEVICE_TYPE: // fall through
|
||||
case ConditionName::ROUND_SCREEN:
|
||||
return JudgeConditionByStrValue(conditionId, trimedTargetValue);
|
||||
case ConditionName::WIDTH: // fall through
|
||||
case ConditionName::MIN_WIDTH: // fall through
|
||||
case ConditionName::MAX_WIDTH: // fall through
|
||||
case ConditionName::HEIGHT: // fall through
|
||||
case ConditionName::MIN_HEIGHT: // fall through
|
||||
case ConditionName::MAX_HEIGHT: // fall through
|
||||
case ConditionName::ASPECT_RATIO: // fall through
|
||||
case ConditionName::MIN_ASPECT_RATIO: // fall through
|
||||
case ConditionName::MAX_ASPECT_RATIO: {
|
||||
return JudgeConditionByNumberValue(conditionId, trimedTargetValue);
|
||||
}
|
||||
default: {
|
||||
HILOG_ERROR(HILOG_MODULE_ACE, "not supported condition feature %{public}d", conditionId);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::JudgeConditionByStrValue(ConditionName conditionId, const char *trimedTargetValue) const
|
||||
{
|
||||
bool result = false;
|
||||
switch (conditionId) {
|
||||
case ConditionName::DEVICE_TYPE: {
|
||||
result = (strcmp(trimedTargetValue, SystemInfo::GetInstance().GetDeviceType()) == 0);
|
||||
break;
|
||||
}
|
||||
case ConditionName::ROUND_SCREEN: {
|
||||
if (!strcmp(trimedTargetValue, "TRUE") || !strcmp(trimedTargetValue, "true") ||
|
||||
!strcmp(trimedTargetValue, "1")) {
|
||||
result = (SystemInfo::GetInstance().IsRoundScreen() == true);
|
||||
} else if (!strcmp(trimedTargetValue, "FALSE") || !strcmp(trimedTargetValue, "false") ||
|
||||
!(strcmp(trimedTargetValue, "0"))) {
|
||||
result = (SystemInfo::GetInstance().IsRoundScreen() == false);
|
||||
} else {
|
||||
result = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::JudgeConditionByNumberValue(ConditionName conditionId, const char *targetValue) const
|
||||
{
|
||||
// must be started with number character
|
||||
if (!(targetValue[0] >= 48 && targetValue[0] <= 57)) {
|
||||
return false;
|
||||
}
|
||||
switch (conditionId) {
|
||||
case ConditionName::WIDTH: // fall through
|
||||
case ConditionName::MIN_WIDTH: // fall through
|
||||
case ConditionName::MAX_WIDTH: // fall through
|
||||
case ConditionName::HEIGHT: // fall through
|
||||
case ConditionName::MIN_HEIGHT: // fall through
|
||||
case ConditionName::MAX_HEIGHT: {
|
||||
return CompareIntDimension(conditionId, targetValue);
|
||||
}
|
||||
case ConditionName::ASPECT_RATIO: // fall through
|
||||
case ConditionName::MIN_ASPECT_RATIO: // fall through
|
||||
case ConditionName::MAX_ASPECT_RATIO: {
|
||||
return CompareFloatDimension(conditionId, targetValue);
|
||||
}
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::CompareIntDimension(ConditionName conditionId, const char *targetValue) const
|
||||
{
|
||||
int dimensionValue = atoi(targetValue);
|
||||
if (dimensionValue <= 0 || dimensionValue >= UINT16_MAX) {
|
||||
return false;
|
||||
}
|
||||
switch (conditionId) {
|
||||
case ConditionName::WIDTH: {
|
||||
return SystemInfo::GetInstance().GetScreenWidth() == dimensionValue;
|
||||
}
|
||||
case ConditionName::MIN_WIDTH: {
|
||||
// the device screen width must be larger than the requirement
|
||||
return SystemInfo::GetInstance().GetScreenWidth() >= dimensionValue;
|
||||
}
|
||||
case ConditionName::MAX_WIDTH: {
|
||||
// the device screen width must be smaller than the requirement
|
||||
return SystemInfo::GetInstance().GetScreenWidth() <= dimensionValue;
|
||||
}
|
||||
case ConditionName::HEIGHT: {
|
||||
return SystemInfo::GetInstance().GetScreenHeight() == dimensionValue;
|
||||
}
|
||||
case ConditionName::MIN_HEIGHT: {
|
||||
// the device screen height must be larger than the requirement
|
||||
return SystemInfo::GetInstance().GetScreenHeight() >= dimensionValue;
|
||||
}
|
||||
case ConditionName::MAX_HEIGHT: {
|
||||
// the device screen height must be smaller than the requirement
|
||||
return SystemInfo::GetInstance().GetScreenHeight() <= dimensionValue;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::IsFloatValueEqual(float left, float right, float precision) const
|
||||
{
|
||||
return (ABS_VALUE(left - right) < precision);
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::CompareFloatDimension(ConditionName conditionId, const char *targetValue) const
|
||||
{
|
||||
float floatValue = atof(targetValue);
|
||||
switch (conditionId) {
|
||||
case ConditionName::ASPECT_RATIO: // fall through
|
||||
case ConditionName::MIN_ASPECT_RATIO: // fall through
|
||||
case ConditionName::MAX_ASPECT_RATIO: {
|
||||
return CompareAspectRatio(conditionId, floatValue);
|
||||
}
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ConditionArbitrator::CompareAspectRatio(ConditionName conditionId, float targetRatioValue) const
|
||||
{
|
||||
float currentAspectRatio = SystemInfo::GetInstance().GetAspectRatio();
|
||||
bool isEqual = IsFloatValueEqual(targetRatioValue, currentAspectRatio, CONDITION_FLOAT_VALUE_EPRECISION);
|
||||
if (isEqual) {
|
||||
// the equal case matchs for all ASPECT_RATIO media feature types
|
||||
return true;
|
||||
}
|
||||
switch (conditionId) {
|
||||
case ConditionName::ASPECT_RATIO: {
|
||||
return isEqual;
|
||||
}
|
||||
case ConditionName::MIN_ASPECT_RATIO: {
|
||||
return currentAspectRatio > targetRatioValue;
|
||||
}
|
||||
case ConditionName::MAX_ASPECT_RATIO: {
|
||||
return currentAspectRatio < targetRatioValue;
|
||||
}
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ConditionName ConditionArbitrator::GetConditionName(const char *conditionName) const
|
||||
{
|
||||
if (conditionName == nullptr || strlen(conditionName) == 0) {
|
||||
return ConditionName::UNKOWN;
|
||||
}
|
||||
static const struct {
|
||||
const char *nameStr;
|
||||
ConditionName name;
|
||||
} conditionNamePair[ConditionName::MAX_COUNT] = {
|
||||
{"width", ConditionName::WIDTH},
|
||||
{"height", ConditionName::HEIGHT},
|
||||
{"min-width", ConditionName::MIN_WIDTH},
|
||||
{"max-width", ConditionName::MAX_WIDTH},
|
||||
{"min-height", ConditionName::MIN_HEIGHT},
|
||||
{"max-height", ConditionName::MAX_HEIGHT},
|
||||
{"aspect-ratio", ConditionName::ASPECT_RATIO},
|
||||
{"min-aspect-ratio", ConditionName::MIN_ASPECT_RATIO},
|
||||
{"max-aspect-ratio", ConditionName::MAX_ASPECT_RATIO},
|
||||
{"device-type", ConditionName::DEVICE_TYPE},
|
||||
{"round-screen", ConditionName::ROUND_SCREEN}
|
||||
};
|
||||
ConditionName targetName = ConditionName::UNKOWN;
|
||||
uint8_t index = 0;
|
||||
for (; index < ConditionName::UNKOWN; index++) {
|
||||
if (strcmp(conditionName, conditionNamePair[index].nameStr) == 0) {
|
||||
targetName = conditionNamePair[index].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index == ConditionName::UNKOWN) {
|
||||
HILOG_ERROR(HILOG_MODULE_ACE, "the condition name is not supported [%{public}s]", conditionName);
|
||||
}
|
||||
return targetName;
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* 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_STYLEMGR_CONDITION_ARBITRATOR
|
||||
#define OHOS_ACELITE_STYLEMGR_CONDITION_ARBITRATOR
|
||||
|
||||
#include "memory_heap.h"
|
||||
#include "non_copyable.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
enum ConditionName : uint8_t {
|
||||
WIDTH,
|
||||
MIN_WIDTH,
|
||||
MAX_WIDTH,
|
||||
HEIGHT,
|
||||
MIN_HEIGHT,
|
||||
MAX_HEIGHT,
|
||||
ASPECT_RATIO,
|
||||
MIN_ASPECT_RATIO,
|
||||
MAX_ASPECT_RATIO,
|
||||
ROUND_SCREEN,
|
||||
DEVICE_TYPE,
|
||||
UNKOWN,
|
||||
MAX_COUNT = UNKOWN
|
||||
};
|
||||
|
||||
class ConditionArbitrator final : public MemoryHeap {
|
||||
public:
|
||||
ACE_DISALLOW_COPY_AND_MOVE(ConditionArbitrator);
|
||||
ConditionArbitrator() = default;
|
||||
virtual ~ConditionArbitrator() = default;
|
||||
|
||||
/**
|
||||
* @brief determine whether the media query conditions are met based on
|
||||
* the current device environment
|
||||
* @return the result whether the condition is met
|
||||
*/
|
||||
bool Decide(const char *conditions) const;
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief judge the single condition is success or not
|
||||
*/
|
||||
bool JudgeCondition(const char *condition) const;
|
||||
bool JudgeConditionAction(ConditionName conditionId, const char *trimedTargetValue) const;
|
||||
bool JudgeConditionByStrValue(ConditionName conditionId, const char *trimedTargetValue) const;
|
||||
bool JudgeConditionByNumberValue(ConditionName conditionId, const char *targetValue) const;
|
||||
bool CompareIntDimension(ConditionName conditionId, const char *targetValue) const;
|
||||
bool CompareFloatDimension(ConditionName conditionId, const char *targetValue) const;
|
||||
bool CompareAspectRatio(ConditionName conditionId, float targetRatioValue) const;
|
||||
ConditionName GetConditionName(const char *conditionName) const;
|
||||
bool IsFloatValueEqual(float left, float right, float precision) const;
|
||||
static constexpr float CONDITION_FLOAT_VALUE_EPRECISION = 1E-5;
|
||||
};
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
#endif // OHOS_ACELITE_STYLEMGR_CONDITION_ARBITRATOR
|
||||
@@ -26,6 +26,26 @@ unittest("js_frameworks_test_stylemgr") {
|
||||
deps = ace_test_deps
|
||||
}
|
||||
|
||||
group("stylemgr_unittest") {
|
||||
deps = [ ":js_frameworks_test_stylemgr" ]
|
||||
unittest("js_frameworks_test_condition_arbitrator") {
|
||||
output_extension = "bin"
|
||||
output_dir = test_output_root
|
||||
configs = [ "$ace_lite_root/test:test_common_config" ]
|
||||
sources = [ "common/condition_arbitrator_test.cpp" ]
|
||||
deps = ace_test_deps
|
||||
}
|
||||
|
||||
unittest("js_frameworks_test_stylemgr_media_query") {
|
||||
output_extension = "bin"
|
||||
output_dir = test_output_root
|
||||
configs = [ "$ace_lite_root/test:test_common_config" ]
|
||||
sources = [ "common/stylemgr_media_query_tdd_test.cpp" ]
|
||||
deps = ace_test_deps
|
||||
}
|
||||
|
||||
group("stylemgr_unittest") {
|
||||
deps = [
|
||||
":js_frameworks_test_condition_arbitrator",
|
||||
":js_frameworks_test_stylemgr",
|
||||
":js_frameworks_test_stylemgr_media_query",
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,533 @@
|
||||
/*
|
||||
* 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 "condition_arbitrator_test.h"
|
||||
#include "condition_arbitrator.h"
|
||||
#include "product_adapter.h"
|
||||
#include "system_info.h"
|
||||
#include "test_common.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
void ConditionArbitratorTest::SetUp()
|
||||
{
|
||||
// set the device with 960px, height 480px
|
||||
const uint16_t screenHeight = 480;
|
||||
const uint16_t screenWidth = 960;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
ProductAdapter::InitDeviceInfo("smartVision");
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: MaxWidthTest001
|
||||
* @tc.desc: test the condition max-width
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, MaxWidthTest001, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition max-width is 980
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(max-width : 980)"));
|
||||
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("( max-width : 980px)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition max-width is 900
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(max-width : 900)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. the condition max-width is test
|
||||
* @tc.expected: step3. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(max-width : test"));
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.desc:MinWidthTest002
|
||||
* @tc.expected: test the min-width condition
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, MinWidthTest002, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition min-width is 980
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(min-width : 980)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. the condition min-width is 900
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(min-width: 900)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition min-width is test
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(min-width: test)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: WidthTest003
|
||||
* @tc.desc: test the condition width
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, WidthTest003, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. set the condition width is 980
|
||||
* @tc.expected: step2. the condition is false
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(width: 980)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition width is 900
|
||||
* @tc.steps: step2. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(width: 900)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition width is 960
|
||||
* @tc.expected: step3. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(width: 960)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step4. set the condition is test
|
||||
* @tc.expected: step4. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(width: test)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: maxHeightTest004
|
||||
* @tc.desc: test the condition max-width
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, MaxHeightTest004, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition max-height is 500
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(max-height : 500)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition max-width is 400
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(max-height : 400)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. the condition max-height is test
|
||||
* @tc.expected: step3. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(max-height : test"));
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.desc:MinHeightTest005
|
||||
* @tc.expected: test the min-height condition
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, MinHeightTest005, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition min-height is 480
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(min-height : 480)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. the condition min-height is 400
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(min-height: 400)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition min-height is test
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(min-height: test)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: HeightTest006
|
||||
* @tc.desc: test the condition height
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, HeightTest006, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. set the condition height is 500
|
||||
* @tc.expected: step2. the condition is false
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(height: 500)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition height is 400
|
||||
* @tc.steps: step2. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(height: 400)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition height is 480
|
||||
* @tc.expected: step3. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(height: 480)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step4. set the condition height is test
|
||||
* @tc.expected: step4. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(height: test)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: MaxAspectRatioTest007
|
||||
* @tc.desc: test the condition max-aspect-ratio
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, MaxAspectRatioTest007, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition max-aspect-ratio is 3
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(max-aspect-ratio : 3)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition max-aspect-ratio is 1
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(max-aspect-ratio : 1)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. the condition max-aspect-ratio is test
|
||||
* @tc.expected: step3. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(max-aspect-ratio : test"));
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.desc:MinAspectRatioTest008
|
||||
* @tc.expected: test the min-aspect-ratio condition
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, MinAspectRatioTest008, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition min-aspect-ratio is 980
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(min-aspect-ratio : 3)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. the condition min-aspect-ratio is 1
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(min-aspect-ratio: 1)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition min-aspect-ratio is test
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(min-aspect-ratio: test)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: AspectRatioTest009
|
||||
* @tc.desc: test the condition width
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, AspectRatioTest009, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. set the condition aspect-ratio is 3
|
||||
* @tc.expected: step2. the condition is false
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(aspect-ratio: 3)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition aspect-ratio is 1
|
||||
* @tc.steps: step2. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(aspect-ratio: 1)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition aspect-ratio is 2
|
||||
* @tc.expected: step3. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(aspect-ratio : 2)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step4. set the condition aspect-ratio is test
|
||||
* @tc.expected: step4. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(aspect-ratio: test)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.desc:AspectRatioTest010
|
||||
* @tc.expected: test the aspect-ratio condition checking base on float values
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, AspectRatioTest010, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the condition min-aspect-ratio is 980
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
// prepare one float screen aspect ratio, 0.6140350877192982
|
||||
uint16_t screenWidth = 280;
|
||||
uint16_t screenHeight = 456;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(min-aspect-ratio : 0.615)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. the condition min-aspect-ratio is 1
|
||||
* @tc.expected: step1. the condition check result is positive
|
||||
*/
|
||||
screenWidth = 456;
|
||||
screenHeight = 280;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize(); // aspect ratio: 1.628571428571429
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(max-aspect-ratio: 1.628566)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. the condition min-aspect-ratio is test
|
||||
* @tc.expected: step2. the condition check result is nagtive
|
||||
*/
|
||||
screenWidth = 300;
|
||||
screenHeight = 466;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize(); // aspect ratio: 0.6437768240343348
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(aspect-ratio: 0.6)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: DeviceTypeTest010
|
||||
* @tc.desc: test the device type
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, DeviceTypeTest011, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. test the device type value smartVision
|
||||
* @tc.expected: step1. the condition is success
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(device-type: smartVision)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition device-type is liteWearable
|
||||
* @tc.expected: step2. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(device-type: liteWearable)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition device-type is testDevice
|
||||
* @tc.expected: step3. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(device-type: testDevice)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: RoundScreenTest011
|
||||
* @tc.desc: test the round screen condition
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, RoundScreenTest012, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. set the condition round screen true
|
||||
* @tc.expected: step1. the condition is false
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(round-screen: true)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition round screen false
|
||||
* @tc.expected: step2. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(round-screen: false)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition round screen true
|
||||
* @tc.expected: step3. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(round-screen: TRUE)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step4. set the condition round screen false
|
||||
* @tc.expected: step4. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(round-screen: FALSE)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step5. set the condition round screen false
|
||||
* @tc.expected: step5. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("(round-screen: 0)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step6. set the condition round screen true
|
||||
* @tc.expected: step6. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(round-screen: 1)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step7. the condition round screen testDevice
|
||||
* @tc.expected: step7. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("(round-screen: testDevice)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: CombineConditionTest012
|
||||
* @tc.desc:test the combine condition
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, CombineConditionTest013, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. set the condition is screen and (width:960) and (min-height:480)
|
||||
* @tc.expected: step1. the condition is true
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_TRUE(conditionArbitrator.Decide("screen and (width: 960) and (min-height: 480)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition is screen and (max-width : 1028) and (height:480)
|
||||
* @tc.expected: step2. the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide(" (max-width: 1028) and (height: 480)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition is screen and (min-width : 480) and (max-height : 320)
|
||||
* @tc.expected: step3. the condition is false
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide("and (min-width: 480) and (max-height: 320)"));
|
||||
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name:CombineConditionTest013
|
||||
* @tc.desc:test the combine condition
|
||||
*/
|
||||
HWTEST_F(ConditionArbitratorTest, CombineConditionTest014, TestSize.Level0)
|
||||
{
|
||||
TDD_CASE_BEGIN();
|
||||
|
||||
/**
|
||||
* @tc.steps: step1. set the condition screen and min-aspect-ratio 1 and round screen true
|
||||
* and device-type liteWerable
|
||||
* @tc.expected: step1. the condition is false
|
||||
*/
|
||||
ConditionArbitrator conditionArbitrator;
|
||||
EXPECT_FALSE(conditionArbitrator.Decide(
|
||||
"screen and (min-aspect-ratio: 1) and (round-screen: true) and (device-type: liteWearable)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step2. set the condition screen and aspect-ratio 2 and round-screen false
|
||||
* and the device-type smartVision
|
||||
* @tc.expected: step2. the condition is flase
|
||||
*/
|
||||
EXPECT_FALSE(conditionArbitrator.Decide(
|
||||
"screen and (min-aspect-ratio: 1) and (round-screen: true) and (device-type: smartVision)"));
|
||||
|
||||
/**
|
||||
* @tc.steps: step3. set the condition screen and max-aspect-ratio 3 and round-screen false
|
||||
* and device-type liteWearable
|
||||
* @tc.expected: the condition is true
|
||||
*/
|
||||
EXPECT_TRUE(conditionArbitrator.Decide(
|
||||
"screen and (max-aspect-ratio: 3) and (device-type: smartVision) and (round-screen: false)"));
|
||||
TDD_CASE_END();
|
||||
}
|
||||
|
||||
#ifndef TDD_ASSERTIONS
|
||||
void ConditionArbitratorTest::RunTests()
|
||||
{
|
||||
MaxWidthTest001();
|
||||
MinWidthTest002();
|
||||
WidthTest003();
|
||||
MaxHeightTest004();
|
||||
MinHeightTest005();
|
||||
HeightTest006();
|
||||
MaxAspectRatioTest007();
|
||||
MinAspectRatioTest008();
|
||||
AspectRatioTest009();
|
||||
AspectRatioTest010();
|
||||
DeviceTypeTest011();
|
||||
RoundScreenTest012();
|
||||
CombineConditionTest013();
|
||||
CombineConditionTest014();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -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_CONDITION_ARBITRATOR_TEST_H
|
||||
#define OHOS_ACELITE_CONDITION_ARBITRATOR_TEST_H
|
||||
#ifdef TDD_ASSERTIONS
|
||||
#include <climits>
|
||||
#include <gtest/gtest.h>
|
||||
#else
|
||||
#include <typeinfo.h>
|
||||
#endif
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
#ifdef TDD_ASSERTIONS
|
||||
using namespace std;
|
||||
using namespace testing::ext;
|
||||
class ConditionArbitratorTest : public testing::Test {
|
||||
#else
|
||||
class ConditionArbitratorTest {
|
||||
#endif
|
||||
public:
|
||||
void SetUp();
|
||||
void TearDown() {}
|
||||
void MaxWidthTest001();
|
||||
void MinWidthTest002();
|
||||
void WidthTest003();
|
||||
void MaxHeightTest004();
|
||||
void MinHeightTest005();
|
||||
void HeightTest006();
|
||||
void MaxAspectRatioTest007();
|
||||
void MinAspectRatioTest008();
|
||||
void AspectRatioTest009();
|
||||
void AspectRatioTest010();
|
||||
void DeviceTypeTest011();
|
||||
void RoundScreenTest012();
|
||||
void CombineConditionTest013();
|
||||
void CombineConditionTest014();
|
||||
|
||||
#ifndef TDD_ASSERTIONS
|
||||
void RunTests();
|
||||
#endif
|
||||
};
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,876 @@
|
||||
/*
|
||||
* 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 "stylemgr_media_query_tdd_test.h"
|
||||
|
||||
#include "js_debugger_config.h"
|
||||
#include "key_parser.h"
|
||||
#include "product_adapter.h"
|
||||
#include "scope_js_value.h"
|
||||
#include "system_info.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
namespace StyleSheetCSSData {
|
||||
const char CSS_DATA_TEST_001[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 300,"
|
||||
" \"height\": 80"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: phone)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" },"
|
||||
" \"containerNew\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" },"
|
||||
" {"
|
||||
" \"condition\": \"screen and (height: 1024)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"button\": {"
|
||||
" \"borderTopWidth\": 5,"
|
||||
" \"borderRightWidth\": 5,"
|
||||
" \"borderBottomWidth\": 5,"
|
||||
" \"borderLeftWidth\": 5"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_002[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"justifyContent\": \"center\","
|
||||
" \"alignItems\": \"center\","
|
||||
" \"backgroundColor\": 32768"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 300,"
|
||||
" \"height\": 80,"
|
||||
" \"borderTopWidth\": 2,"
|
||||
" \"borderRightWidth\": 2,"
|
||||
" \"borderBottomWidth\": 2,"
|
||||
" \"borderLeftWidth\": 2,"
|
||||
" \"color\": 16711680"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" },"
|
||||
" \"containerNew\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_003[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 300,"
|
||||
" \"height\": 80"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"containerNew\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_004[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"justifyContent\": \"center\","
|
||||
" \"alignItems\": \"center\","
|
||||
" \"backgroundColor\": 32768"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 215026"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_005[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_006[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"justifyContent\": \"center\","
|
||||
" \"alignItems\": \"center\","
|
||||
" \"backgroundColor\": 32768"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 300,"
|
||||
" \"height\": 80,"
|
||||
" \"borderTopWidth\": 2,"
|
||||
" \"borderRightWidth\": 2,"
|
||||
" \"borderBottomWidth\": 2,"
|
||||
" \"borderLeftWidth\": 2,"
|
||||
" \"color\": 16711680"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_007[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"backgroundColor\": 32768"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" },"
|
||||
" \"container\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_008[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"backgroundColor\": 32768"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 300,"
|
||||
" \"height\": 80,"
|
||||
" \"borderTopWidth\": 2,"
|
||||
" \"borderRightWidth\": 2,"
|
||||
" \"borderBottomWidth\": 2,"
|
||||
" \"borderLeftWidth\": 2,"
|
||||
" \"color\": 16711680"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 121301"
|
||||
" }"
|
||||
" }"
|
||||
" },"
|
||||
" {"
|
||||
" \"condition\": \"screen and (height: 466)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"button\": {"
|
||||
" \"borderTopWidth\": 5,"
|
||||
" \"borderRightWidth\": 5,"
|
||||
" \"borderBottomWidth\": 5,"
|
||||
" \"borderLeftWidth\": 5"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_009[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"backgroundColor\": 32768"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" }"
|
||||
" }"
|
||||
" },"
|
||||
" {"
|
||||
" \"condition\": \"screen and (height: 960)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 16711680"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_010[] =
|
||||
"{"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 123456"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ],"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 390,"
|
||||
" \"height\": 390,"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" }"
|
||||
" }"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_011[] =
|
||||
"{"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"backgroundColor\": 8421504"
|
||||
" },"
|
||||
" \"containerNew\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" },"
|
||||
" {"
|
||||
" \"condition\": \"screen and (height: 1024)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"button\": {"
|
||||
" \"borderTopWidth\": 5,"
|
||||
" \"borderRightWidth\": 5,"
|
||||
" \"borderBottomWidth\": 5,"
|
||||
" \"borderLeftWidth\": 5"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
|
||||
const char CSS_DATA_TEST_012[] =
|
||||
"{"
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" },"
|
||||
" \"button\": {"
|
||||
" \"width\": 300,"
|
||||
" \"height\": 80"
|
||||
" }"
|
||||
" },"
|
||||
" \"@media\": ["
|
||||
" {"
|
||||
" \"condition\": \"screen and (device-type: smartVision)\","
|
||||
" \"classSelectors\": {"
|
||||
" \"container\": {},"
|
||||
" \"containerNew\": {"
|
||||
" \"width\": 400,"
|
||||
" \"height\": 400"
|
||||
" }"
|
||||
" }"
|
||||
" }"
|
||||
" ]"
|
||||
"}";
|
||||
} // namespace StyleSheetCSSData
|
||||
|
||||
void StyleMgrMediaQueryTddTest::SetUp()
|
||||
{
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
Debugger::GetInstance().SetupJSContext();
|
||||
jerry_init(JERRY_INIT_EMPTY);
|
||||
}
|
||||
|
||||
void StyleMgrMediaQueryTddTest::TearDown()
|
||||
{
|
||||
jerry_cleanup();
|
||||
Debugger::GetInstance().ReleaseJSContext();
|
||||
}
|
||||
|
||||
int StyleMgrMediaQueryTddTest::GetAppStyleCount(const AppStyleList *list) const
|
||||
{
|
||||
if (list == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
const AppStyle *style = list->GetFirst();
|
||||
while (style != nullptr) {
|
||||
count++;
|
||||
style = style->GetNext();
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int StyleMgrMediaQueryTddTest::CalcAppStyleCount(const AppStyleSheet *list) const
|
||||
{
|
||||
if (list == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
return GetAppStyleCount(list->idSelectors_) + GetAppStyleCount(list->classSelectors_) +
|
||||
GetAppStyleCount(list->keyFrameSelectors_);
|
||||
}
|
||||
|
||||
int StyleMgrMediaQueryTddTest::GetAppStyleItemCount(const AppStyle *list) const
|
||||
{
|
||||
if (list == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
const AppStyleItem *styleItem = list->GetFirst();
|
||||
while (styleItem != nullptr) {
|
||||
count++;
|
||||
styleItem = styleItem->GetNext();
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
const AppStyle *StyleMgrMediaQueryTddTest::GetStyleFromSelector(const AppStyleList *styleList,
|
||||
const char *selectorName) const
|
||||
{
|
||||
if (styleList == nullptr || selectorName == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
const AppStyle *style = styleList->GetFirst();
|
||||
while (style != nullptr) {
|
||||
const char *styleName = style->GetStyleName();
|
||||
if (styleName != nullptr) {
|
||||
if (strcmp(styleName, selectorName) == 0) {
|
||||
return style;
|
||||
}
|
||||
}
|
||||
style = style->GetNext();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AppStyle *StyleMgrMediaQueryTddTest::GetStyleFromSelectorList(const AppStyleSheet *list,
|
||||
const char *selectorName) const
|
||||
{
|
||||
if (list == nullptr || selectorName == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AppStyle *selector = GetStyleFromSelector(list->classSelectors_, selectorName);
|
||||
selector = (selector != nullptr) ? selector : GetStyleFromSelector(list->idSelectors_, selectorName);
|
||||
selector = (selector != nullptr) ? selector : GetStyleFromSelector(list->keyFrameSelectors_, selectorName);
|
||||
|
||||
return selector;
|
||||
}
|
||||
|
||||
int StyleMgrMediaQueryTddTest::GetItemCountOfSelector(const AppStyleSheet *list, const char *selectorName) const
|
||||
{
|
||||
if (list == nullptr || selectorName == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const AppStyle *selector = GetStyleFromSelectorList(list, selectorName);
|
||||
return GetAppStyleItemCount(selector);
|
||||
}
|
||||
|
||||
const AppStyleItem *StyleMgrMediaQueryTddTest::GetStyleItemFromStyle(const AppStyle *style, const char *itemName) const
|
||||
{
|
||||
if (style == nullptr || itemName == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
uint16_t targetItemNameKey = KeyParser::ParseKeyId(itemName, strlen(itemName));
|
||||
if (targetItemNameKey == K_UNKNOWN) {
|
||||
return nullptr;
|
||||
}
|
||||
const AppStyleItem *styleItem = style->GetFirst();
|
||||
while (styleItem != nullptr) {
|
||||
if (styleItem->GetPropNameId() == targetItemNameKey) {
|
||||
return styleItem;
|
||||
}
|
||||
styleItem = styleItem->GetNext();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AppStyleItem *StyleMgrMediaQueryTddTest::GetStyleItemByName(const AppStyleSheet *list,
|
||||
const char *selectorName,
|
||||
const char *itemName) const
|
||||
{
|
||||
if (list == nullptr || selectorName == nullptr || itemName == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AppStyle *style = GetStyleFromSelectorList(list, selectorName);
|
||||
if (style == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
const AppStyleItem *styleItem = GetStyleItemFromStyle(style, itemName);
|
||||
return styleItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS001
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: SR000GCSKI
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS001, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t styleSheetObj =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_001),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_001));
|
||||
ScopeJSValue autoReleaseV(styleSheetObj);
|
||||
AppStyleManager styleManager;
|
||||
styleManager.InitStyleSheet(styleSheetObj);
|
||||
const AppStyleSheet *styleSheet = styleManager.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check count
|
||||
*/
|
||||
const int targetCount = 2;
|
||||
int count = CalcAppStyleCount(styleSheet);
|
||||
EXPECT_EQ(count, targetCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS002
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKJ
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS002, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
AppStyleManager styleMgr;
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_002),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_002));
|
||||
ScopeJSValue autoReleaseValue(styleSheetObject);
|
||||
/**
|
||||
* @tc.steps: step2. initialize style sheet list
|
||||
*/
|
||||
styleMgr.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = styleMgr.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step3. check count
|
||||
*/
|
||||
int targetCount = 3;
|
||||
int count = CalcAppStyleCount(styleSheet);
|
||||
EXPECT_EQ(count, targetCount);
|
||||
/**
|
||||
* @tc.steps: step4. the matched media query styles should be added
|
||||
*/
|
||||
const AppStyle *containerNewSelector = GetStyleFromSelectorList(styleSheet, "containerNew");
|
||||
EXPECT_NE(containerNewSelector, nullptr);
|
||||
|
||||
int containerSelectorItemCount = GetItemCountOfSelector(styleSheet, "container");
|
||||
targetCount = 5;
|
||||
EXPECT_EQ(containerSelectorItemCount, targetCount);
|
||||
|
||||
const AppStyleItem *backgroundColorItem = GetStyleItemByName(styleSheet, "container", "backgroundColor");
|
||||
EXPECT_NE(backgroundColorItem, nullptr);
|
||||
if (backgroundColorItem != nullptr) {
|
||||
int32_t targetValue = 8421504;
|
||||
int32_t backgroundColorValue = backgroundColorItem->GetNumValue();
|
||||
EXPECT_EQ(targetValue, backgroundColorValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS003
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKK
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS003, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_003),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_003));
|
||||
ScopeJSValue scopeJSValue(styleSheetObject);
|
||||
AppStyleManager styleManagerInstance;
|
||||
styleManagerInstance.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = styleManagerInstance.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check total cound
|
||||
*/
|
||||
const int count = 3;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), count);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS004
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKL
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS004, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
AppStyleManager appStyleManagerInner;
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_004),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_004));
|
||||
ScopeJSValue scopeValue(styleSheetObject);
|
||||
appStyleManagerInner.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = appStyleManagerInner.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
const AppStyleItem *item = GetStyleItemByName(styleSheet, "container", "backgroundColor");
|
||||
EXPECT_NE(item, nullptr);
|
||||
if (item != nullptr) {
|
||||
int32_t targetValue = 215026;
|
||||
int32_t backgroundColorValue = item->GetNumValue();
|
||||
EXPECT_EQ(targetValue, backgroundColorValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS005
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKM
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS005, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_005),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_005));
|
||||
ScopeJSValue jsValue(styleSheetObject); // auto release
|
||||
AppStyleManager styleManagerInstance;
|
||||
styleManagerInstance.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = styleManagerInstance.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
int targetCount = 1;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), targetCount);
|
||||
int containerSelectorItemCount = GetItemCountOfSelector(styleSheet, "container");
|
||||
targetCount = 3;
|
||||
EXPECT_EQ(containerSelectorItemCount, targetCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS006
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS006, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t cssObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_006),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_006));
|
||||
ScopeJSValue scopeValue(cssObject);
|
||||
AppStyleManager appStyleManager;
|
||||
appStyleManager.InitStyleSheet(cssObject);
|
||||
const AppStyleSheet *styleSheet = appStyleManager.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
int targetCount = 2;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), targetCount);
|
||||
int containerItemCount = 5;
|
||||
EXPECT_EQ(GetItemCountOfSelector(styleSheet, "container"), containerItemCount);
|
||||
int buttonItemCount = 7;
|
||||
EXPECT_EQ(GetItemCountOfSelector(styleSheet, "button"), buttonItemCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS007
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS007, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t cssDataJSValue =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_007),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_007));
|
||||
ScopeJSValue autoReleaseValue(cssDataJSValue);
|
||||
AppStyleManager appStyleManager;
|
||||
appStyleManager.InitStyleSheet(cssDataJSValue);
|
||||
const AppStyleSheet *styleSheet = appStyleManager.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
int targetCount = 1;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), targetCount);
|
||||
int containerItemCount = 3;
|
||||
EXPECT_EQ(GetItemCountOfSelector(styleSheet, "container"), containerItemCount);
|
||||
const AppStyleItem *widthStyleItem = GetStyleItemByName(styleSheet, "container", "width");
|
||||
EXPECT_NE(widthStyleItem, nullptr);
|
||||
if (widthStyleItem != nullptr) {
|
||||
int32_t targetValue = 400;
|
||||
int32_t widthValue = widthStyleItem->GetNumValue();
|
||||
EXPECT_EQ(targetValue, widthValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS008
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS008, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
const uint16_t screenSize = 466;
|
||||
ProductAdapter::SetScreenSize(screenSize, screenSize);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_008),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_008));
|
||||
ScopeJSValue autoReleaseValue(styleSheetObject);
|
||||
AppStyleManager appStyleManagerObject;
|
||||
appStyleManagerObject.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = appStyleManagerObject.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
int targetCount = 2;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), targetCount);
|
||||
const AppStyleItem *backgroundColorStyleItem = GetStyleItemByName(styleSheet, "container", "backgroundColor");
|
||||
EXPECT_NE(backgroundColorStyleItem, nullptr);
|
||||
if (backgroundColorStyleItem != nullptr) {
|
||||
int32_t targetValue = 121301;
|
||||
int32_t backgroundColorValue = backgroundColorStyleItem->GetNumValue();
|
||||
EXPECT_EQ(targetValue, backgroundColorValue);
|
||||
}
|
||||
const AppStyleItem *borderWidthItem = GetStyleItemByName(styleSheet, "button", "borderTopWidth");
|
||||
EXPECT_NE(borderWidthItem, nullptr);
|
||||
if (borderWidthItem != nullptr) {
|
||||
int32_t targetValue = 5;
|
||||
int32_t borderWidthValue = borderWidthItem->GetNumValue();
|
||||
EXPECT_EQ(targetValue, borderWidthValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS009
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS009, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
const uint16_t screenWidth = 480;
|
||||
const uint16_t screenHeight = 960;
|
||||
ProductAdapter::SetScreenSize(screenWidth, screenHeight);
|
||||
SystemInfo::GetInstance().Initialize();
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_009),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_009));
|
||||
ScopeJSValue scopeValue(styleSheetObject);
|
||||
AppStyleManager styleMgr;
|
||||
styleMgr.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = styleMgr.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
const AppStyleItem *backgroundColorItem = GetStyleItemByName(styleSheet, "container", "backgroundColor");
|
||||
EXPECT_NE(backgroundColorItem, nullptr);
|
||||
if (backgroundColorItem != nullptr) {
|
||||
int32_t targetColorValue = 16711680;
|
||||
int32_t backgroundColorValue = backgroundColorItem->GetNumValue();
|
||||
EXPECT_EQ(targetColorValue, backgroundColorValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS010
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS010, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t styleListJSValue =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_010),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_010));
|
||||
ScopeJSValue scopeValue(styleListJSValue);
|
||||
AppStyleManager appStyleManager;
|
||||
appStyleManager.InitStyleSheet(styleListJSValue);
|
||||
const AppStyleSheet *styleSheet = appStyleManager.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
const AppStyleItem *backgroundColorItem = GetStyleItemByName(styleSheet, "container", "backgroundColor");
|
||||
EXPECT_NE(backgroundColorItem, nullptr);
|
||||
if (backgroundColorItem != nullptr) {
|
||||
int32_t targetColorValue = 123456;
|
||||
EXPECT_EQ(targetColorValue, backgroundColorItem->GetNumValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS011
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS011, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
const uint16_t screenSizeWidth = 960;
|
||||
const uint16_t screenSizeHeight = 960;
|
||||
ProductAdapter::SetScreenSize(screenSizeWidth, screenSizeHeight);
|
||||
AppStyleManager styleMgrInstance;
|
||||
jerry_value_t styleSheetObject =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_011),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_011));
|
||||
ScopeJSValue autoReleaseValue(styleSheetObject);
|
||||
styleMgrInstance.InitStyleSheet(styleSheetObject);
|
||||
const AppStyleSheet *styleSheet = styleMgrInstance.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
int targetCount = 2;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), targetCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: StyleMgrMediaQueryCSS012
|
||||
* @tc.desc: Verify the style sheet with media query block initialization
|
||||
* @tc.require: AR000GCSKN
|
||||
*/
|
||||
HWTEST_F(StyleMgrMediaQueryTddTest, StyleMgrMediaQueryCSS012, TestSize.Level0)
|
||||
{
|
||||
/**
|
||||
* @tc.steps: step1. prepare test resource
|
||||
*/
|
||||
jerry_value_t cssData =
|
||||
jerry_json_parse(reinterpret_cast<const jerry_char_t *>(StyleSheetCSSData::CSS_DATA_TEST_012),
|
||||
strlen(StyleSheetCSSData::CSS_DATA_TEST_012));
|
||||
ScopeJSValue autoReleaseValue(cssData);
|
||||
AppStyleManager appStyleManager;
|
||||
appStyleManager.InitStyleSheet(cssData);
|
||||
const AppStyleSheet *styleSheet = appStyleManager.GetStyleSheet();
|
||||
/**
|
||||
* @tc.steps: step2. check the result
|
||||
*/
|
||||
int targetCount = 3;
|
||||
EXPECT_EQ(CalcAppStyleCount(styleSheet), targetCount);
|
||||
int containerItemCount = 2;
|
||||
EXPECT_EQ(GetItemCountOfSelector(styleSheet, "container"), containerItemCount);
|
||||
}
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* 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 ACELITE_STYLE_MANAGER_MEDIA_QUERY_TDD_TEST_H
|
||||
#define ACELITE_STYLE_MANAGER_MEDIA_QUERY_TDD_TEST_H
|
||||
|
||||
#include "acelite_config.h"
|
||||
#ifdef TDD_ASSERTIONS
|
||||
#include <climits>
|
||||
#include <gtest/gtest.h>
|
||||
#else
|
||||
#include <typeinfo.h>
|
||||
#endif
|
||||
#include "stylemgr/app_style_manager.h"
|
||||
#include "stylemgr/app_style_sheet.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace ACELite {
|
||||
#ifdef TDD_ASSERTIONS
|
||||
using namespace std;
|
||||
using namespace testing::ext;
|
||||
class StyleMgrMediaQueryTddTest : public testing::Test {
|
||||
#else
|
||||
class StyleMgrMediaQueryTddTest {
|
||||
#endif
|
||||
public:
|
||||
StyleMgrMediaQueryTddTest() = default;
|
||||
~StyleMgrMediaQueryTddTest() = default;
|
||||
void SetUp();
|
||||
void TearDown();
|
||||
|
||||
void StyleMgrMediaQueryCSS001();
|
||||
void StyleMgrMediaQueryCSS002();
|
||||
void StyleMgrMediaQueryCSS003();
|
||||
void StyleMgrMediaQueryCSS004();
|
||||
void StyleMgrMediaQueryCSS005();
|
||||
void StyleMgrMediaQueryCSS006();
|
||||
void StyleMgrMediaQueryCSS007();
|
||||
void StyleMgrMediaQueryCSS008();
|
||||
void StyleMgrMediaQueryCSS009();
|
||||
void StyleMgrMediaQueryCSS010();
|
||||
void StyleMgrMediaQueryCSS011();
|
||||
void StyleMgrMediaQueryCSS012();
|
||||
int CalcAppStyleCount(const AppStyleSheet *list) const;
|
||||
int GetAppStyleCount(const AppStyleList *list) const;
|
||||
int GetAppStyleItemCount(const AppStyle *list) const;
|
||||
int GetItemCountOfSelector(const AppStyleSheet *list, const char *selectorName) const;
|
||||
const AppStyle *GetStyleFromSelectorList(const AppStyleSheet *styleList, const char *selectorName) const;
|
||||
const AppStyle *GetStyleFromSelector(const AppStyleList *styleList, const char *selectorName) const;
|
||||
const AppStyleItem *
|
||||
GetStyleItemByName(const AppStyleSheet *list, const char *selectorName, const char *itemName) const;
|
||||
const AppStyleItem *GetStyleItemFromStyle(const AppStyle *style, const char *itemName) const;
|
||||
};
|
||||
} // namespace ACELite
|
||||
} // namespace OHOS
|
||||
#endif // ACELITE_STYLE_MANAGER_MEDIA_QUERY_TDD_TEST_H
|
||||
@@ -63,6 +63,7 @@ SOURCES += \
|
||||
$${ACELITE_CORE_PATH}/base/number_parser.cpp \
|
||||
$${ACELITE_CORE_PATH}/base/product_adapter.cpp \
|
||||
$${ACELITE_CORE_PATH}/base/string_util.cpp \
|
||||
$${ACELITE_CORE_PATH}/base/system_info.cpp \
|
||||
$${ACELITE_CORE_PATH}/base/time_util.cpp \
|
||||
$${ACELITE_CORE_PATH}/components/analog_clock_component.cpp \
|
||||
$${ACELITE_CORE_PATH}/components/camera_component.cpp \
|
||||
@@ -140,6 +141,7 @@ SOURCES += \
|
||||
$${ACELITE_CORE_PATH}/stylemgr/app_style_list.cpp \
|
||||
$${ACELITE_CORE_PATH}/stylemgr/app_style_manager.cpp \
|
||||
$${ACELITE_CORE_PATH}/stylemgr/app_style_sheet.cpp \
|
||||
$${ACELITE_CORE_PATH}/stylemgr/condition_arbitrator.cpp \
|
||||
$${ACELITE_CORE_PATH}/wrapper/js.cpp \
|
||||
$${ACELITE_FRAMEWORK_PATH}/targets/platform_adapter.cpp \
|
||||
targets/simulator/utils/js_heap_stats_dumper.cpp \
|
||||
|
||||
Reference in New Issue
Block a user