1  /*
2   * Copyright (c) 2021 Huawei Device Co., Ltd.
3   * Licensed under the Apache License, Version 2.0 (the "License");
4   * you may not use this file except in compliance with the License.
5   * You may obtain a copy of the License at
6   *
7   *     http://www.apache.org/licenses/LICENSE-2.0
8   *
9   * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  #include "base_test.h"
17  
18  #include "js_debugger_config.h"
19  
20  namespace OHOS {
21  namespace ACELite {
BaseTest()22  BaseTest::BaseTest() : globObj_(0), attrsObj_(0), styleObj_(0), componentNameId_(0) {}
23  
SetUp(void)24  void BaseTest::SetUp(void)
25  {
26      Debugger::GetInstance().SetupJSContext();
27      jerry_init(JERRY_INIT_EMPTY);
28  
29      globObj_ = jerry_get_global_object();
30      attrsObj_ = jerry_create_object();
31      JerrySetNamedProperty(globObj_, "attrs", attrsObj_);
32  
33      styleObj_ = jerry_create_object();
34      JerrySetNamedProperty(globObj_, "staticStyle", styleObj_);
35      rootComponentMock_.PrepareRootContainer();
36  }
37  
TearDown()38  void BaseTest::TearDown()
39  {
40      JsAppContext::GetInstance()->ReleaseStyles();
41      jerry_release_value(attrsObj_);
42      jerry_release_value(styleObj_);
43      jerry_release_value(globObj_);
44      jerry_cleanup();
45      Debugger::GetInstance().ReleaseJSContext();
46  }
47  
GetRenderedComponent(uint16_t componentKeyId) const48  Component *BaseTest::GetRenderedComponent(uint16_t componentKeyId) const
49  {
50      jerry_value_t children = jerry_create_null();
51      Component *component = ComponentFactory::CreateComponent(componentKeyId, globObj_, children);
52      rootComponentMock_.RenderComponent(*component);
53      jerry_release_value(children);
54      return component;
55  }
56  
ReleaseComponent(Component * & component) const57  void BaseTest::ReleaseComponent(Component *&component) const
58  {
59      if (component != nullptr) {
60          component->Release();
61          delete component;
62          component = nullptr;
63      }
64  }
65  
GetRGBColor(int32_t colorIntValue) const66  ColorType BaseTest::GetRGBColor(int32_t colorIntValue) const
67  {
68      uint32_t colorValue = colorIntValue;
69      uint8_t red8 = uint8_t((colorValue & TEXT_RED_COLOR_MASK) >> RED_COLOR_START_BIT);
70      uint8_t green8 = uint8_t((colorValue & TEXT_GREEN_COLOR_MASK) >> GREEN_COLOR_START_BIT);
71      uint8_t blue8 = uint8_t((colorValue & TEXT_BLUE_COLOR_MASK));
72      return Color::GetColorFromRGB(red8, green8, blue8);
73  }
74  
UpdateNumAttributeOrStyleValue(Component * component,const char * attributeName,const int32_t newNumValue,const bool isToSetAttribute) const75  void BaseTest::UpdateNumAttributeOrStyleValue(Component *component,
76                                                const char *attributeName,
77                                                const int32_t newNumValue,
78                                                const bool isToSetAttribute) const
79  {
80      if (component == nullptr) {
81          HILOG_WARN(HILOG_MODULE_ACE, "UpdateNumAttributeOrStyleValue component is null\n");
82          return;
83      }
84      jerry_value_t attrName = jerry_create_string(reinterpret_cast<const jerry_char_t *>(attributeName));
85      jerry_value_t attrValue = jerry_create_number(newNumValue);
86      if (isToSetAttribute) {
87          jerry_set_property(attrsObj_, attrName, attrValue);
88      } else {
89          jerry_set_property(styleObj_, attrName, attrValue);
90      }
91      component->UpdateView(KeyParser::ParseKeyId(attributeName), attrValue);
92      jerry_release_value(attrName);
93      jerry_release_value(attrValue);
94  }
95  
UpdateCharAttributeOrStyleValue(Component * component,const char * attributeName,const char * newCharValue,const bool isToSetAttribute) const96  void BaseTest::UpdateCharAttributeOrStyleValue(Component *component,
97                                                 const char *attributeName,
98                                                 const char *newCharValue,
99                                                 const bool isToSetAttribute) const
100  {
101      if (component == nullptr) {
102          HILOG_WARN(HILOG_MODULE_ACE, "UpdateCharAttributeOrStyleValue component is null\n");
103          return;
104      }
105      jerry_value_t attrName = jerry_create_string(reinterpret_cast<const jerry_char_t *>(attributeName));
106      jerry_value_t attrValue = jerry_create_string(reinterpret_cast<const jerry_char_t *>(newCharValue));
107      if (isToSetAttribute) {
108          jerry_set_property(attrsObj_, attrName, attrValue);
109      } else {
110          jerry_set_property(styleObj_, attrName, attrValue);
111      }
112      component->UpdateView(KeyParser::ParseKeyId(attributeName), attrValue);
113      jerry_release_value(attrName);
114      jerry_release_value(attrValue);
115  }
116  
SetCompnentNameId(const char * componentName)117  uint16_t BaseTest::SetCompnentNameId(const char *componentName)
118  {
119      if (componentName == nullptr) {
120          HILOG_WARN(HILOG_MODULE_ACE, "null component name\n");
121          return K_UNKNOWN;
122      }
123      uint8_t maxLength = 9;
124      char *tarComponentName = reinterpret_cast<char *>(malloc(maxLength));
125      if (tarComponentName == nullptr) {
126          HILOG_WARN(HILOG_MODULE_ACE, "alloc memory fail\n");
127          return K_UNKNOWN;
128      }
129      tarComponentName[0] = '\0';
130      bool copyRes = false;
131      if (!strcmp(componentName, "progress")) {
132          if (strcpy_s(tarComponentName, maxLength, "progress") == 0)
133              copyRes = true;
134      } else if (!strcmp(componentName, "chart")) {
135          if (strcpy_s(tarComponentName, maxLength, "chart") == 0)
136              copyRes = true;
137      } else if (!strcmp(componentName, "marquee")) {
138          if (strcpy_s(tarComponentName, maxLength, "marquee") == 0)
139              copyRes = true;
140      }
141  
142      if (copyRes) {
143          componentNameId_ = KeyParser::ParseKeyId(tarComponentName, strlen(tarComponentName));
144      } else {
145          componentNameId_ = K_UNKNOWN;
146      }
147      free(tarComponentName);
148      tarComponentName = nullptr;
149      return componentNameId_;
150  }
151  } // namespace ACELite
152  } // namespace OHOS
153