From 27cc95041b42e4da418fac6cdb1111e5321743c6 Mon Sep 17 00:00:00 2001 From: charleeshen Date: Thu, 31 Mar 2022 23:19:00 +0800 Subject: [PATCH] feat(dom): refactor dom value --- dom/include/dom/dom_value.h | 99 +++++++++++++++---- dom/src/dom/deserializer.cc | 2 +- dom/src/dom/diff_utils.cc | 30 +++--- dom/src/dom/dom_argument.cc | 16 +-- dom/src/dom/dom_node.cc | 8 +- dom/src/dom/dom_value.cc | 64 ++++++++++-- dom/src/dom/layer_optimized_render_manager.cc | 24 ++--- dom/src/dom/serializer.cc | 16 +-- dom/src/dom/taitank_layout_node.cc | 46 ++++----- .../android/src/main/jni/src/bridge/entry.cc | 8 +- .../js/core/src/modules/ui_manager_module.cc | 10 +- .../js/core/src/napi/jsc/js_native_api_jsc.cc | 12 +-- .../js/core/src/napi/v8/js_native_api_v8.cc | 10 +- .../ios-demo/HippyDemo/ViewController.mm | 2 +- ios/sdk/utils/HippyDomNodeUtils.mm | 14 +-- .../ios/renderer/NativeRenderManager.mm | 2 +- test/dom/deserializer_ut.cc | 40 ++++---- test/dom/dom_value_ut.cc | 68 ++++++------- 18 files changed, 287 insertions(+), 184 deletions(-) diff --git a/dom/include/dom/dom_value.h b/dom/include/dom/dom_value.h index 9825c7af9..df4496866 100644 --- a/dom/include/dom/dom_value.h +++ b/dom/include/dom/dom_value.h @@ -18,16 +18,16 @@ class DomValue final { int32_t i32_; uint32_t u32_; double d_; - Number(int32_t i32) : i32_(i32){} - Number(uint32_t u32) : u32_(u32){} - Number(float f) : d_(f){} - Number(double d) : d_(d){} + Number(int32_t i32) : i32_(i32) {} + Number(uint32_t u32) : u32_(u32) {} + Number(float f) : d_(f) {} + Number(double d) : d_(d) {} }; static const DomValue Undefined(); static const DomValue Null(); - DomValue(){} + DomValue() {} DomValue(const DomValue& source); /** @@ -201,53 +201,112 @@ class DomValue final { /** * @brief 转化成 int32_t + * @param i32 get int32_t value + * @return return true if success else return false */ - int32_t ToInt32() const; + bool ToInt32(int32_t& i32) const; + + /** + * @brief 转化成 int32_t, crash if failed + * @return return int32_t value + */ + int32_t ToInt32Checked() const; /** * @brief 转化成 uint32_t + * @param u32 get value + * @return return true if success else return false */ - uint32_t ToUint32() const; + bool ToUint32(uint32_t& u32) const; + + /** + * @brief 转化成 uint32_t, crash if failed + * @return return uint32_t value + */ + uint32_t ToUint32Checked() const; /** * @brief 转化成 double 类型, int32_t\uint32_t\double 可以无损转化 + * @param d get double value + * @return return true if success else return false */ - double ToDouble() const; + bool ToDouble(double& d) const; + + /** + * @brief 转化成 double 类型, int32_t\uint32_t\double 可以无损转化, crash if failed + * @return return double value + */ + double ToDoubleChecked() const; /** * @brief 转化成 bool 类型 + * @param b get bool value + * @return return true if success else return false */ - bool ToBoolean() const; + bool ToBoolean(bool& b) const; + + /** + * @brief 转化成 bool 类型, crash if failed + * @return return bool value + */ + bool ToBooleanChecked() const; /** * @brief 转化成 string 类型 + * @param str get string value + * @return return true if success else return false */ - const std::string& ToString() const; + bool ToString(std::string& str) const; /** - * @brief 转化成 string 类型 + * @brief 转化成 string 类型, crash if failed + * @return return string value */ - std::string& ToString(); + const std::string& ToStringChecked() const; /** - * @brief 转化成 DomValueObjectType 类型 + * @brief 转化成 string 类型, crash if failed + * @return return string value */ - const DomValueObjectType& ToObject() const; + std::string& ToStringChecked(); /** - * @brief 转化成 DomValueObjectType 类型 + * @brief 转化成 DomValueObjectType 类型, crash if failed + * @param obj get DomValueObjectType value + * @return return true if success else return false */ - DomValueObjectType& ToObject(); + bool ToObject(DomValueObjectType& obj) const; /** - * @brief 转化成 DomValueArrayType 类型 + * @brief 转化成 DomValueObjectType 类型, crash if failed + * @return return DomValueObjectType value */ - const DomValueArrayType& ToArray() const; + const DomValueObjectType& ToObjectChecked() const; /** - * @brief 转化成 DomValueArrayType 类型 + * @brief 转化成 DomValueObjectType 类型, crash if failed + * @return return DomValueObjectType value */ - DomValueArrayType& ToArray(); + DomValueObjectType& ToObjectChecked(); + + /** + * @brief 转化成 DomValueArrayType 类型, crash if failed + * @param arr get DomValueArrayType value + * @return return true if success else return false + */ + bool ToArray(DomValueArrayType& arr) const; + + /** + * @brief 转化成 DomValueArrayType 类型, crash if failed + * @return return DomValueArrayType value + */ + const DomValueArrayType& ToArrayChecked() const; + + /** + * @brief 转化成 DomValueArrayType 类型, crash if failed + * @return return DomValueArrayType value + */ + DomValueArrayType& ToArrayChecked(); private: inline void Deallocate(); diff --git a/dom/src/dom/deserializer.cc b/dom/src/dom/deserializer.cc index d336f3552..d6d732947 100644 --- a/dom/src/dom/deserializer.cc +++ b/dom/src/dom/deserializer.cc @@ -332,7 +332,7 @@ uint32_t Deserializer::ReadObjectProperties(DomValue& property, SerializationTag ReadObject(key); DomValue value; ReadObject(value); - object.insert(std::pair(key.ToString(), value)); + object.insert(std::pair(key.ToStringChecked(), value)); property = object; } } diff --git a/dom/src/dom/diff_utils.cc b/dom/src/dom/diff_utils.cc index c9280425b..f8de81c0b 100644 --- a/dom/src/dom/diff_utils.cc +++ b/dom/src/dom/diff_utils.cc @@ -26,20 +26,20 @@ DiffValue DiffUtils::DiffProps( continue; } if (from_value->second->IsBoolean()) { - if (!to_value->second || (to_value->second->ToBoolean() != from_value->second->ToBoolean())) { + if (!to_value->second || (to_value->second->ToBooleanChecked() != from_value->second->ToBooleanChecked())) { (*update_props)[kv.first] = to_value->second; } } else if (from_value->second->IsNumber()) { - if (!to_value->second || (to_value->second->ToDouble() != from_value->second->ToDouble())) { + if (!to_value->second || (to_value->second->ToDoubleChecked() != from_value->second->ToDoubleChecked())) { (*update_props)[kv.first] = to_value->second; } } else if (from_value->second->IsString()) { - if (!to_value->second || (to_value->second->ToString() != from_value->second->ToString())) { + if (!to_value->second || (to_value->second->ToStringChecked() != from_value->second->ToStringChecked())) { (*update_props)[kv.first] = to_value->second; } } else if (from_value->second->IsArray()) { if (to_value->second && to_value->second->IsArray()) { - DomValueArray result = DiffArray(from_value->second->ToArray(), to_value->second->ToArray()); + DomValueArray result = DiffArray(from_value->second->ToArrayChecked(), to_value->second->ToArrayChecked()); if (!result.empty()) { (*update_props)[kv.first] = std::make_shared(result); } @@ -48,7 +48,7 @@ DiffValue DiffUtils::DiffProps( } } else if (from_value->second->IsObject()) { if (to_value->second && to_value->second->IsObject()) { - DomValueObject result = DiffObject(to_value->second->ToObject(), to_value->second->ToObject()); + DomValueObject result = DiffObject(to_value->second->ToObjectChecked(), to_value->second->ToObjectChecked()); if (!result.empty()) { (*update_props)[kv.first] = to_value->second; } @@ -92,23 +92,23 @@ DomValueArray DiffUtils::DiffArray(const DomValueArray& from, const DomValueArra auto from_value = from[i]; auto to_value = to[i]; if (from_value.IsBoolean()) { - if (from_value.ToBoolean() != to_value.ToBoolean()) { + if (from_value.ToBooleanChecked() != to_value.ToBooleanChecked()) { return to; } } else if (from_value.IsNumber()) { - if (from_value.ToDouble() != from_value.ToDouble()) { + if (from_value.ToDoubleChecked() != from_value.ToDoubleChecked()) { return to; } } else if (from_value.IsString()) { - if (from_value.ToString() != from_value.ToString()) { + if (from_value.ToStringChecked() != from_value.ToStringChecked()) { return to; } } else if (from_value.IsArray()) { - if (!to_value.IsArray() || DiffArray(from_value.ToArray(), to_value.ToArray()).empty()) { + if (!to_value.IsArray() || DiffArray(from_value.ToArrayChecked(), to_value.ToArrayChecked()).empty()) { return to; } } else if (from_value.IsObject()) { - if (!to_value.IsObject() || DiffObject(from_value.ToObject(), to_value.ToObject()).empty()) { + if (!to_value.IsObject() || DiffObject(from_value.ToObjectChecked(), to_value.ToObjectChecked()).empty()) { return to; } } else if (from_value.IsNull()) { @@ -132,20 +132,20 @@ DomValueObject DiffUtils::DiffObject(const DomValueObject& from, const DomValueO auto from_value = from.find(kv.first); // old auto to_value = to.find(kv.first); // new if (from_value->second.IsBoolean()) { - if (to_value != to.end() && to_value->second.ToBoolean() != from_value->second.ToBoolean()) { + if (to_value != to.end() && to_value->second.ToBooleanChecked() != from_value->second.ToBooleanChecked()) { diff_props[kv.first] = to_value->second; } } else if (from_value->second.IsNumber()) { - if (to_value != to.end() && to_value->second.ToDouble() != from_value->second.ToDouble()) { + if (to_value != to.end() && to_value->second.ToDoubleChecked() != from_value->second.ToDoubleChecked()) { diff_props[kv.first] = to_value->second; } } else if (from_value->second.IsString()) { - if (to_value != to.end() && to_value->second.ToString() != from_value->second.ToString()) { + if (to_value != to.end() && to_value->second.ToStringChecked() != from_value->second.ToStringChecked()) { diff_props[kv.first] = to_value->second; } } else if (from_value->second.IsArray()) { if (to_value != to.end() && to_value->second.IsArray()) { - DomValueArray result = DiffArray(from_value->second.ToArray(), to_value->second.ToArray()); + DomValueArray result = DiffArray(from_value->second.ToArrayChecked(), to_value->second.ToArrayChecked()); if (!result.empty()) { diff_props[kv.first] = result; } @@ -154,7 +154,7 @@ DomValueObject DiffUtils::DiffObject(const DomValueObject& from, const DomValueO } } else if (from_value->second.IsObject()) { if (to_value != to.end() && to_value->second.IsObject()) { - DomValueObject result = DiffObject(to_value->second.ToObject(), to_value->second.ToObject()); + DomValueObject result = DiffObject(to_value->second.ToObjectChecked(), to_value->second.ToObjectChecked()); if (!result.empty()) { diff_props[kv.first] = to_value->second; } diff --git a/dom/src/dom/dom_argument.cc b/dom/src/dom/dom_argument.cc index 56ca37729..6629b2fb6 100644 --- a/dom/src/dom/dom_argument.cc +++ b/dom/src/dom/dom_argument.cc @@ -49,9 +49,9 @@ bool DomArgument::ConvertObjectToBson(const tdf::base::DomValue& dom_value, std: tdf::base::Oddball oddball = tdf::base::Oddball::kUndefined; if (type == tdf::base::DomValue::Type::kNull) { oddball = tdf::base::Oddball::kNull; - } else if (type == tdf::base::DomValue::Type::kBoolean && dom_value.ToBoolean()) { + } else if (type == tdf::base::DomValue::Type::kBoolean && dom_value.ToBooleanChecked()) { oddball = tdf::base::Oddball::kTrue; - } else if (type == tdf::base::DomValue::Type::kBoolean && !dom_value.ToBoolean()) { + } else if (type == tdf::base::DomValue::Type::kBoolean && !dom_value.ToBooleanChecked()) { oddball = tdf::base::Oddball::kFalse; } serializer.WriteOddball(oddball); @@ -60,26 +60,26 @@ bool DomArgument::ConvertObjectToBson(const tdf::base::DomValue& dom_value, std: case tdf::base::DomValue::Type::kNumber: { tdf::base::DomValue::NumberType number_type = dom_value.GetNumberType(); if (number_type == tdf::base::DomValue::NumberType::kInt32) { - serializer.WriteInt32(dom_value.ToInt32()); + serializer.WriteInt32(dom_value.ToInt32Checked()); } else if (number_type == tdf::base::DomValue::NumberType::kUInt32) { - serializer.WriteUint32(dom_value.ToUint32()); + serializer.WriteUint32(dom_value.ToUint32Checked()); } else if (number_type == tdf::base::DomValue::NumberType::kDouble) { - serializer.WriteDouble(dom_value.ToDouble()); + serializer.WriteDouble(dom_value.ToDoubleChecked()); } else { ret = false; } return ret; } case tdf::base::DomValue::Type::kString: { - serializer.WriteString(dom_value.ToString()); + serializer.WriteString(dom_value.ToStringChecked()); break; } case tdf::base::DomValue::Type::kArray: { - serializer.WriteDenseJSArray(dom_value.ToArray()); + serializer.WriteDenseJSArray(dom_value.ToArrayChecked()); break; } case tdf::base::DomValue::Type::kObject: { - serializer.WriteJSObject(dom_value.ToObject()); + serializer.WriteJSObject(dom_value.ToObjectChecked()); break; } default: { diff --git a/dom/src/dom/dom_node.cc b/dom/src/dom/dom_node.cc index 132cb0a5f..bd1ce6472 100644 --- a/dom/src/dom/dom_node.cc +++ b/dom/src/dom/dom_node.cc @@ -428,8 +428,8 @@ void DomNode::UpdateObjectStyle(DomValue& style_map, const DomValue& update_styl TDF_BASE_DCHECK(style_map.IsObject()); TDF_BASE_DCHECK(update_style.IsObject()); - auto style_object = style_map.ToObject(); - for (auto& v : update_style.ToObject()) { + auto style_object = style_map.ToObjectChecked(); + for (auto& v : update_style.ToObjectChecked()) { auto iter = style_object.find(v.first); if (iter == style_object.end()) { style_object[v.first] = v.second; @@ -445,7 +445,7 @@ void DomNode::UpdateObjectStyle(DomValue& style_map, const DomValue& update_styl bool DomNode::ReplaceStyle(DomValue& style, const std::string& key, const DomValue& value) { if (style.IsObject()) { - auto& object = style.ToObject(); + auto& object = style.ToObjectChecked(); if (object.find(key) != object.end()) { object.at(key) = value; return true; @@ -460,7 +460,7 @@ bool DomNode::ReplaceStyle(DomValue& style, const std::string& key, const DomVal } if (style.IsArray()) { - auto& array = style.ToArray(); + auto& array = style.ToArrayChecked(); bool replaced = false; for (auto& a : array) { replaced = ReplaceStyle(a, key, value); diff --git a/dom/src/dom/dom_value.cc b/dom/src/dom/dom_value.cc index 413fb89c2..95cde6287 100644 --- a/dom/src/dom/dom_value.cc +++ b/dom/src/dom/dom_value.cc @@ -318,17 +318,37 @@ bool DomValue::IsUInt32() const noexcept { return type_ == Type::kNumber && numb bool DomValue::IsDouble() const noexcept { return type_ == Type::kNumber && number_type_ == NumberType::kDouble; } -int32_t DomValue::ToInt32() const { +bool DomValue::ToInt32(int32_t& i32) const { + bool is_int32 = IsInt32(); + if (is_int32) i32 = num_.i32_; + return is_int32; +} + +int32_t DomValue::ToInt32Checked() const { TDF_BASE_CHECK(IsInt32()); return num_.i32_; } -uint32_t DomValue::ToUint32() const { +bool DomValue::ToUint32(uint32_t& u32) const { + bool is_uint32 = IsUInt32(); + if (is_uint32) u32 = num_.u32_; + return is_uint32; +} + +uint32_t DomValue::ToUint32Checked() const { TDF_BASE_CHECK(IsUInt32()); return num_.u32_; } -double DomValue::ToDouble() const { +bool DomValue::ToDouble(double& d) const { + bool is_number = IsNumber(); + if (number_type_ == DomValue::NumberType::kDouble) d = num_.d_; + if (number_type_ == DomValue::NumberType::kInt32) d = num_.i32_; + if (number_type_ == DomValue::NumberType::kUInt32) d = num_.u32_; + return is_number; +} + +double DomValue::ToDoubleChecked() const { TDF_BASE_CHECK(IsNumber()); if (number_type_ == DomValue::NumberType::kDouble) return num_.d_; if (number_type_ == DomValue::NumberType::kInt32) return num_.i32_; @@ -336,37 +356,61 @@ double DomValue::ToDouble() const { TDF_BASE_UNREACHABLE(); } -bool DomValue::ToBoolean() const { +bool DomValue::ToBoolean(bool& b) const { + bool is_bool = IsBoolean(); + b = b_; + return is_bool; +} + +bool DomValue::ToBooleanChecked() const { TDF_BASE_CHECK(IsBoolean()); return b_; } -const std::string& DomValue::ToString() const { +bool DomValue::ToString(std::string& str) const { + bool is_string = IsString(); + str = str_; + return is_string; +} + +const std::string& DomValue::ToStringChecked() const { TDF_BASE_CHECK(IsString()); return str_; } -std::string& DomValue::ToString() { +std::string& DomValue::ToStringChecked() { TDF_BASE_CHECK(IsString()); return str_; } -const DomValue::DomValueObjectType& DomValue::ToObject() const { +bool DomValue::ToObject(DomValue::DomValueObjectType& obj) const{ + bool is_object = IsObject(); + obj = obj_; + return is_object; +} + +const DomValue::DomValueObjectType& DomValue::ToObjectChecked() const { TDF_BASE_CHECK(IsObject()); return obj_; } -DomValue::DomValueObjectType& DomValue::ToObject() { +DomValue::DomValueObjectType& DomValue::ToObjectChecked() { TDF_BASE_CHECK(IsObject()); return obj_; } -const DomValue::DomValueArrayType& DomValue::ToArray() const { +bool DomValue::ToArray(DomValue::DomValueArrayType& arr) const { + bool is_array = IsArray(); + arr = arr_; + return is_array; +} + +const DomValue::DomValueArrayType& DomValue::ToArrayChecked() const { TDF_BASE_CHECK(IsArray()); return arr_; } -DomValue::DomValueArrayType& DomValue::ToArray() { +DomValue::DomValueArrayType& DomValue::ToArrayChecked() { TDF_BASE_CHECK(IsArray()); return arr_; } diff --git a/dom/src/dom/layer_optimized_render_manager.cc b/dom/src/dom/layer_optimized_render_manager.cc index 7e2c89a56..abbfe769b 100644 --- a/dom/src/dom/layer_optimized_render_manager.cc +++ b/dom/src/dom/layer_optimized_render_manager.cc @@ -143,56 +143,56 @@ bool LayerOptimizedRenderManager::CheckStyleJustLayout(const std::shared_ptrIsNull() || (value->IsNumber() && value->ToDouble() == 1)) { + if (value->IsNull() || (value->IsNumber() && value->ToDoubleChecked() == 1)) { continue; } } else if (key == kBorderRadius) { const auto &background_color = style_map->find(kBackgroundColor); if (background_color != style_map->end() && (*background_color).second->IsNumber() && - (*background_color).second->ToDouble() != 0) { + (*background_color).second->ToDoubleChecked() != 0) { return false; } const auto &border_width = style_map->find(kBorderWidth); if (border_width != style_map->end() && (*border_width).second->IsNumber() && - (*border_width).second->ToDouble() != 0) { + (*border_width).second->ToDoubleChecked() != 0) { return false; } } else if (key == kBorderLeftColor) { - if (value->IsNumber() && value->ToDouble() == 0) { + if (value->IsNumber() && value->ToDoubleChecked() == 0) { continue; } } else if (key == kBorderRightColor) { - if (value->IsNumber() && value->ToDouble() == 0) { + if (value->IsNumber() && value->ToDoubleChecked() == 0) { continue; } } else if (key == kBorderTopColor) { - if (value->IsNumber() && value->ToDouble() == 0) { + if (value->IsNumber() && value->ToDoubleChecked() == 0) { continue; } } else if (key == kBorderBottomColor) { - if (value->IsNumber() && value->ToDouble() == 0) { + if (value->IsNumber() && value->ToDoubleChecked() == 0) { continue; } } else if (key == kBorderWidth) { - if (value->IsNull() || (value->IsNumber() && value->ToDouble() == 0)) { + if (value->IsNull() || (value->IsNumber() && value->ToDoubleChecked() == 0)) { continue; } } else if (key == kBorderLeftWidth) { - if (value->IsNull() || (value->IsNumber() && value->ToDouble() == 0)) { + if (value->IsNull() || (value->IsNumber() && value->ToDoubleChecked() == 0)) { continue; } } else if (key == kBorderTopWidth) { - if (value->IsNull() || (value->IsNumber() && value->ToDouble() == 0)) { + if (value->IsNull() || (value->IsNumber() && value->ToDoubleChecked() == 0)) { continue; } } else if (key == kBorderRightWidth) { - if (value->IsNull() || (value->IsNumber() && value->ToDouble() == 0)) { + if (value->IsNull() || (value->IsNumber() && value->ToDoubleChecked() == 0)) { continue; } } else if (key == kBorderBottomWidth) { - if (value->IsNull() || (value->IsNumber() && value->ToDouble() == 0)) { + if (value->IsNull() || (value->IsNumber() && value->ToDoubleChecked() == 0)) { continue; } } diff --git a/dom/src/dom/serializer.cc b/dom/src/dom/serializer.cc index 6f8aa947d..e73443b18 100644 --- a/dom/src/dom/serializer.cc +++ b/dom/src/dom/serializer.cc @@ -180,9 +180,9 @@ void Serializer::WriteObject(const DomValue& dom_value) { Oddball ball = Oddball::kUndefined; if (type == DomValue::Type::kNull) { ball = Oddball::kNull; - } else if (type == DomValue::Type::kBoolean && dom_value.ToBoolean()) { + } else if (type == DomValue::Type::kBoolean && dom_value.ToBooleanChecked()) { ball = Oddball::kTrue; - } else if (type == DomValue::Type::kBoolean && !dom_value.ToBoolean()) { + } else if (type == DomValue::Type::kBoolean && !dom_value.ToBooleanChecked()) { ball = Oddball::kFalse; } WriteOddball(ball); @@ -192,15 +192,15 @@ void Serializer::WriteObject(const DomValue& dom_value) { DomValue::NumberType number_type = dom_value.GetNumberType(); switch (number_type) { case DomValue::NumberType::kInt32: { - WriteInt32(dom_value.ToInt32()); + WriteInt32(dom_value.ToInt32Checked()); break; } case DomValue::NumberType::kUInt32: { - WriteUint32(dom_value.ToUint32()); + WriteUint32(dom_value.ToUint32Checked()); break; } case DomValue::NumberType::kDouble: { - WriteDouble(dom_value.ToDouble()); + WriteDouble(dom_value.ToDoubleChecked()); break; } default: { @@ -210,15 +210,15 @@ void Serializer::WriteObject(const DomValue& dom_value) { break; } case DomValue::Type::kString: { - WriteString(dom_value.ToString()); + WriteString(dom_value.ToStringChecked()); break; } case DomValue::Type::kObject: { - WriteJSObject(dom_value.ToObject()); + WriteJSObject(dom_value.ToObjectChecked()); break; } case DomValue::Type::kArray: { - WriteDenseJSArray(dom_value.ToArray()); + WriteDenseJSArray(dom_value.ToArrayChecked()); break; } default: diff --git a/dom/src/dom/taitank_layout_node.cc b/dom/src/dom/taitank_layout_node.cc index 23f256455..9e4fe4467 100644 --- a/dom/src/dom/taitank_layout_node.cc +++ b/dom/src/dom/taitank_layout_node.cc @@ -109,18 +109,18 @@ TAITANK_GET_STYLE_DECL(DisplayType, DisplayType, DisplayType::DisplayTypeFlex) TAITANK_GET_STYLE_DECL(Direction, HPDirection, HPDirection::DirectionLTR) -#define SET_STYLE_VALUE(NAME, DEFAULT) \ - auto dom_value = style_map.find(k##NAME)->second; \ - CheckValueType(dom_value->GetType()); \ - float value = DEFAULT; \ - if (dom_value->IsNumber()) value = static_cast(dom_value->ToDouble()); \ +#define SET_STYLE_VALUE(NAME, DEFAULT) \ + auto dom_value = style_map.find(k##NAME)->second; \ + CheckValueType(dom_value->GetType()); \ + float value = DEFAULT; \ + if (dom_value->IsNumber()) value = static_cast(dom_value->ToDoubleChecked()); \ Set##NAME(value); -#define SET_STYLE_VALUES(NAME, STYLENAME, DEFAULT) \ - auto dom_value = style_map.find(k##STYLENAME)->second; \ - CheckValueType(dom_value->GetType()); \ - float value = DEFAULT; \ - if (dom_value->IsNumber()) value = static_cast(dom_value->ToDouble()); \ +#define SET_STYLE_VALUES(NAME, STYLENAME, DEFAULT) \ + auto dom_value = style_map.find(k##STYLENAME)->second; \ + CheckValueType(dom_value->GetType()); \ + float value = DEFAULT; \ + if (dom_value->IsNumber()) value = static_cast(dom_value->ToDoubleChecked()); \ Set##NAME(GetStyle##NAME(k##STYLENAME), value); static void CheckValueType(tdf::base::DomValue::Type type) { @@ -207,40 +207,40 @@ void TaitankLayoutNode::Parser(std::unordered_map(style_map.find(kFlex)->second->ToDouble())); + SetFlex(static_cast(style_map.find(kFlex)->second->ToDoubleChecked())); } if (style_map.find(kFlexGrow) != style_map.end()) { - SetFlexGrow(static_cast(style_map.find(kFlexGrow)->second->ToDouble())); + SetFlexGrow(static_cast(style_map.find(kFlexGrow)->second->ToDoubleChecked())); } if (style_map.find(kFlexShrink) != style_map.end()) { - SetFlexShrink(static_cast(style_map.find(kFlexShrink)->second->ToDouble())); + SetFlexShrink(static_cast(style_map.find(kFlexShrink)->second->ToDoubleChecked())); } if (style_map.find(kFlexBasis) != style_map.end()) { - SetFlexBasis(static_cast(style_map.find(kFlexBasis)->second->ToDouble())); + SetFlexBasis(static_cast(style_map.find(kFlexBasis)->second->ToDoubleChecked())); } if (style_map.find(kDirection) != style_map.end()) { - SetDirection(GetStyleDirection(style_map.find(kDirection)->second->ToString())); + SetDirection(GetStyleDirection(style_map.find(kDirection)->second->ToStringChecked())); } if (style_map.find(kFlexDirection) != style_map.end()) { - SetFlexDirection(GetStyleFlexDirection(style_map.find(kFlexDirection)->second->ToString())); + SetFlexDirection(GetStyleFlexDirection(style_map.find(kFlexDirection)->second->ToStringChecked())); } if (style_map.find(kFlexWrap) != style_map.end()) { - SetFlexWrap(GetStyleWrapMode(style_map.find(kFlexWrap)->second->ToString())); + SetFlexWrap(GetStyleWrapMode(style_map.find(kFlexWrap)->second->ToStringChecked())); } if (style_map.find(kAilgnSelf) != style_map.end()) { - SetAlignSelf(GetStyleAlign(style_map.find(kAilgnSelf)->second->ToString())); + SetAlignSelf(GetStyleAlign(style_map.find(kAilgnSelf)->second->ToStringChecked())); } if (style_map.find(kAlignItems) != style_map.end()) { - SetAlignItems(GetStyleAlign(style_map.find(kAlignItems)->second->ToString())); + SetAlignItems(GetStyleAlign(style_map.find(kAlignItems)->second->ToStringChecked())); } if (style_map.find(kJustifyContent) != style_map.end()) { - SetJustifyContent(GetStyleJustify(style_map.find(kJustifyContent)->second->ToString())); + SetJustifyContent(GetStyleJustify(style_map.find(kJustifyContent)->second->ToStringChecked())); } if (style_map.find(kOverflow) != style_map.end()) { - SetOverflow(GetStyleOverflow(style_map.find(kOverflow)->second->ToString())); + SetOverflow(GetStyleOverflow(style_map.find(kOverflow)->second->ToStringChecked())); } if (style_map.find(kDisplay) != style_map.end()) { - SetDisplay(GetStyleDisplayType(style_map.find(kDisplay)->second->ToString())); + SetDisplay(GetStyleDisplayType(style_map.find(kDisplay)->second->ToStringChecked())); } if (style_map.find(kMargin) != style_map.end()) { SET_STYLE_VALUES(Margin, Margin, 0) @@ -312,7 +312,7 @@ void TaitankLayoutNode::Parser(std::unordered_mapsecond->ToString())); + SetPositionType(GetStylePositionType(style_map.find(kPosition)->second->ToStringChecked())); } } diff --git a/framework/js/android/src/main/jni/src/bridge/entry.cc b/framework/js/android/src/main/jni/src/bridge/entry.cc index 963e68383..d97cd619d 100644 --- a/framework/js/android/src/main/jni/src/bridge/entry.cc +++ b/framework/js/android/src/main/jni/src/bridge/entry.cc @@ -294,14 +294,14 @@ void UpdateAnimationNode(JNIEnv* j_env, } TDF_BASE_DCHECK(params.IsArray()); - tdf::base::DomValue::DomValueArrayType array = params.ToArray(); + tdf::base::DomValue::DomValueArrayType array = params.ToArrayChecked(); std::unordered_map>> node_style_map; for (size_t i = 0; i < array.size(); i++) { TDF_BASE_DCHECK(array[i].IsObject()); - auto node = array[i].ToObject(); - int32_t node_id = node["nodeId"].ToInt32(); + auto node = array[i].ToObjectChecked(); + int32_t node_id = node["nodeId"].ToInt32Checked(); // int32_t animation_id = node["animationId"].ToInt32(); - std::string animation_key = node["animationKey"].ToString(); + std::string animation_key = node["animationKey"].ToStringChecked(); tdf::base::DomValue animation_value = node["animationValue"]; auto iter = node_style_map.find(node_id); diff --git a/framework/js/core/src/modules/ui_manager_module.cc b/framework/js/core/src/modules/ui_manager_module.cc index 9acfafe99..41c232df0 100644 --- a/framework/js/core/src/modules/ui_manager_module.cc +++ b/framework/js/core/src/modules/ui_manager_module.cc @@ -167,7 +167,7 @@ GetNodeStyle(const std::shared_ptr &context, auto style_it = props.find(kNodePropertyStyle); if (style_it != props.end()) { if (style_it->second.IsObject()) { - std::unordered_map style_obj = style_it->second.ToObject(); + std::unordered_map style_obj = style_it->second.ToObjectChecked(); for (const auto &p : style_obj) { ret[p.first] = std::make_shared(p.second); } @@ -215,7 +215,7 @@ GetNodeProps(const std::shared_ptr &context, const std::shared_ptr props_map = props_obj->ToObject(); + std::unordered_map props_map = props_obj->ToObjectChecked(); auto style_tuple = GetNodeStyle(context, props_map); if (!std::get<2>(style_tuple).empty()) { style_map = std::move(std::get<2>(style_tuple)); @@ -281,7 +281,7 @@ void HandleEventListeners(const std::shared_ptr &context, DomValue dom_value; std::shared_ptr scope = weak_scope.lock(); if (scope && arg->ToObject(dom_value) && dom_value.IsUInt32()) { - scope->AddListener(dom_id, name_str, dom_value.ToUint32()); + scope->AddListener(dom_id, name_str, dom_value.ToUint32Checked()); } }); } @@ -441,13 +441,13 @@ void UIManagerModule::CallUIFunction(const hippy::napi::CallbackInfo &info) { int32_t id = 0; auto id_value = context->ToDomValue(info[0]); if (id_value->IsNumber()) { - id = static_cast(id_value->ToDouble()); + id = static_cast(id_value->ToDoubleChecked()); } std::string name; auto name_value = context->ToDomValue(info[1]); if (name_value->IsString()) { - name = name_value->ToString(); + name = name_value->ToStringChecked(); } std::unordered_map> param; diff --git a/framework/js/core/src/napi/jsc/js_native_api_jsc.cc b/framework/js/core/src/napi/jsc/js_native_api_jsc.cc index 8e8d7480c..9485e5e15 100644 --- a/framework/js/core/src/napi/jsc/js_native_api_jsc.cc +++ b/framework/js/core/src/napi/jsc/js_native_api_jsc.cc @@ -738,17 +738,17 @@ std::shared_ptr JSCCtx::CreateCtxValue(const std::shared_ptr } else if (wrapper->IsNull()) { return CreateNull(); } else if (wrapper->IsString()) { - std::string str = wrapper->ToString(); + std::string str = wrapper->ToStringChecked(); unicode_string_view str_view(StringViewUtils::ToU8Pointer(str.c_str()), str.length()); return CreateString(str_view); } else if (wrapper->IsInt32()) { - return CreateNumber(wrapper->ToInt32()); + return CreateNumber(wrapper->ToInt32Checked()); } else if (wrapper->IsDouble()) { - return CreateNumber(wrapper->ToDouble()); + return CreateNumber(wrapper->ToDoubleChecked()); } else if (wrapper->IsBoolean()) { - return CreateBoolean(wrapper->ToBoolean()); + return CreateBoolean(wrapper->ToBooleanChecked()); } else if (wrapper->IsArray()) { - auto arr = wrapper->ToArray(); + auto arr = wrapper->ToArrayChecked(); std::shared_ptr args[arr.size()]; for (auto i = 0; i < arr.size(); ++i) { args[i] = CreateCtxValue(std::make_shared(arr[i])); @@ -760,7 +760,7 @@ std::shared_ptr JSCCtx::CreateCtxValue(const std::shared_ptr JSObjectRef obj_ref = JSObjectMake(context_, cls_ref, nullptr); JSClassRelease(cls_ref); - auto obj = wrapper->ToObject(); + auto obj = wrapper->ToObjectChecked(); for (const auto& p : obj) { auto obj_key = p.first; auto obj_value = p.second; diff --git a/framework/js/core/src/napi/v8/js_native_api_v8.cc b/framework/js/core/src/napi/v8/js_native_api_v8.cc index cc82d40c1..857d50a4d 100644 --- a/framework/js/core/src/napi/v8/js_native_api_v8.cc +++ b/framework/js/core/src/napi/v8/js_native_api_v8.cc @@ -1303,16 +1303,16 @@ std::shared_ptr V8Ctx::CreateCtxValue( } else if (value->IsNull()) { return CreateNull(); } else if (value->IsString()) { - std::string str = value->ToString(); + std::string str = value->ToStringChecked(); unicode_string_view str_view(StringViewUtils::ToU8Pointer(str.c_str()), str.length()); return CreateString(str_view); } else if (value->IsNumber()) { - return CreateNumber(value->ToDouble()); + return CreateNumber(value->ToDoubleChecked()); } else if (value->IsBoolean()) { - return CreateBoolean(value->ToBoolean()); + return CreateBoolean(value->ToBooleanChecked()); } else if (value->IsArray()) { - auto arr = value->ToArray(); + auto arr = value->ToArrayChecked(); auto len = arr.size(); std::shared_ptr args[len]; for (size_t i = 0; i < len; ++i) { @@ -1320,7 +1320,7 @@ std::shared_ptr V8Ctx::CreateCtxValue( } return CreateArray(arr.size(), args); } else if (value->IsObject()) { - auto obj = value->ToObject(); + auto obj = value->ToObjectChecked(); v8::HandleScope handle_scope(isolate_); v8::Local context = context_persistent_.Get(isolate_); diff --git a/framework/js/examples/ios-demo/HippyDemo/ViewController.mm b/framework/js/examples/ios-demo/HippyDemo/ViewController.mm index 7cc557946..bbe77bb1a 100644 --- a/framework/js/examples/ios-demo/HippyDemo/ViewController.mm +++ b/framework/js/examples/ios-demo/HippyDemo/ViewController.mm @@ -168,7 +168,7 @@ auto style_props = all_props["style"]; if (style_props) { if (tdf::base::DomValue::Type::kObject == style_props->GetType()) { - auto style_object = style_props->ToObject(); + auto style_object = style_props->ToObjectChecked(); for (auto iter = style_object.begin(); iter != style_object.end(); iter++) { const std::string &iter_key = iter->first; auto &iter_value = iter->second; diff --git a/ios/sdk/utils/HippyDomNodeUtils.mm b/ios/sdk/utils/HippyDomNodeUtils.mm index 73f67c2f9..03f23aef5 100644 --- a/ios/sdk/utils/HippyDomNodeUtils.mm +++ b/ios/sdk/utils/HippyDomNodeUtils.mm @@ -36,13 +36,13 @@ id domValueToOCType(const DomValue *const pDomValue) { id value = [NSNull null]; switch (type) { case DomValueType::kBoolean: - value = @(pDomValue->ToBoolean()); + value = @(pDomValue->ToBooleanChecked()); break; case DomValueType::kString: - value = [NSString stringWithUTF8String:pDomValue->ToString().c_str()]; + value = [NSString stringWithUTF8String:pDomValue->ToStringChecked().c_str()]; break; case DomValueType::kObject: { - DomValue::DomValueObjectType objectType = pDomValue->ToObject(); + DomValue::DomValueObjectType objectType = pDomValue->ToObjectChecked(); std::unordered_map> map(objectType.size()); for (const auto &pair : objectType) { map[pair.first] = std::make_shared(pair.second); @@ -53,7 +53,7 @@ id domValueToOCType(const DomValue *const pDomValue) { } break; case DomValueType::kArray: { - DomValue::DomValueArrayType domValueArray = pDomValue->ToArray(); + DomValue::DomValueArrayType domValueArray = pDomValue->ToArrayChecked(); NSMutableArray *array = [NSMutableArray arrayWithCapacity:domValueArray.size()]; for (auto it = domValueArray.begin(); it != domValueArray.end(); it++) { const DomValue &v = *it; @@ -166,13 +166,13 @@ NSNumber *domValueToNumber(const DomValue *const pDomValue) { NSNumber *number = nil; switch (pDomValue->GetNumberType()) { case DomValueNumberType::kInt32: - number = @(pDomValue->ToInt32()); + number = @(pDomValue->ToInt32Checked()); break; case DomValueNumberType::kUInt32: - number = @(pDomValue->ToUint32()); + number = @(pDomValue->ToUint32Checked()); break; case DomValueNumberType::kDouble: - number = @(pDomValue->ToDouble()); + number = @(pDomValue->ToDoubleChecked()); break; case DomValueNumberType::kNaN: number = [NSDecimalNumber notANumber]; diff --git a/renderer/native/ios/renderer/NativeRenderManager.mm b/renderer/native/ios/renderer/NativeRenderManager.mm index 94ac2f93b..18fe246d2 100644 --- a/renderer/native/ios/renderer/NativeRenderManager.mm +++ b/renderer/native/ios/renderer/NativeRenderManager.mm @@ -60,7 +60,7 @@ void NativeRenderManager::UpdateLayout(const std::vectorend() != it) { auto dom_value = it->second; - useAnimation = dom_value->ToBoolean(); + useAnimation = dom_value->ToBooleanChecked(); } DomNodeUpdateInfoTuple nodeUpdateInfo = std::make_tuple(tag, layoutResult, useAnimation, node->GetStyleMap()); nodes_infos.push_back(nodeUpdateInfo); diff --git a/test/dom/deserializer_ut.cc b/test/dom/deserializer_ut.cc index a55aba952..11b22bcaf 100644 --- a/test/dom/deserializer_ut.cc +++ b/test/dom/deserializer_ut.cc @@ -26,7 +26,7 @@ void CheckUint32(uint32_t value) { deserializer.ReadObject(dom_value); EXPECT_TRUE(dom_value.GetType() == tdf::base::DomValue::Type::kNumber); EXPECT_TRUE(dom_value.GetNumberType() == tdf::base::DomValue::NumberType::kUInt32); - EXPECT_TRUE(dom_value.ToUint32() == value); + EXPECT_TRUE(dom_value.ToUint32Checked() == value); } void CheckInt32(int32_t value) { @@ -42,7 +42,7 @@ void CheckInt32(int32_t value) { deserializer.ReadObject(dom_value); EXPECT_TRUE(dom_value.GetType() == tdf::base::DomValue::Type::kNumber); EXPECT_TRUE(dom_value.GetNumberType() == tdf::base::DomValue::NumberType::kInt32); - EXPECT_TRUE(dom_value.ToInt32() == value); + EXPECT_TRUE(dom_value.ToInt32Checked() == value); } void CheckDouble(double value) { @@ -58,7 +58,7 @@ void CheckDouble(double value) { deserializer.ReadObject(dom_value); EXPECT_TRUE(dom_value.GetType() == tdf::base::DomValue::Type::kNumber); EXPECT_TRUE(dom_value.GetNumberType() == tdf::base::DomValue::NumberType::kDouble); - EXPECT_TRUE(dom_value.ToDouble() == value); + EXPECT_TRUE(dom_value.ToDoubleChecked() == value); } void CheckString(std::string value) { @@ -73,8 +73,8 @@ void CheckString(std::string value) { tdf::base::DomValue dom_value; deserializer.ReadObject(dom_value); EXPECT_TRUE(dom_value.GetType() == tdf::base::DomValue::Type::kString); - EXPECT_TRUE(dom_value.ToString() == value); - EXPECT_TRUE(dom_value.ToString().length() == value.length()); + EXPECT_TRUE(dom_value.ToStringChecked() == value); + EXPECT_TRUE(dom_value.ToStringChecked().length() == value.length()); } void CheckMap(tdf::base::DomValue::DomValueObjectType value) { @@ -90,16 +90,16 @@ void CheckMap(tdf::base::DomValue::DomValueObjectType value) { deserializer.ReadObject(dom_value); EXPECT_TRUE(dom_value.GetType() == tdf::base::DomValue::Type::kObject); EXPECT_TRUE(dom_value.IsObject()); - EXPECT_TRUE(dom_value.ToObject().size() == value.size()); + EXPECT_TRUE(dom_value.ToObjectChecked().size() == value.size()); - for (auto& v : dom_value.ToObject()) { + for (auto& v : dom_value.ToObjectChecked()) { EXPECT_TRUE(value.find(v.first) != value.end()); auto c = value.find(v.first); - if (v.second.IsUInt32()) EXPECT_TRUE(v.second.ToUint32() == c->second.ToUint32()); - if (v.second.IsInt32()) EXPECT_TRUE(v.second.ToInt32() == c->second.ToInt32()); - if (v.second.IsDouble()) EXPECT_TRUE(v.second.ToDouble() == c->second.ToDouble()); - if (v.second.IsString()) EXPECT_TRUE(v.second.ToString() == c->second.ToString()); - if (v.second.IsObject()) CheckMap(c->second.ToObject()); + if (v.second.IsUInt32()) EXPECT_TRUE(v.second.ToUint32Checked() == c->second.ToUint32Checked()); + if (v.second.IsInt32()) EXPECT_TRUE(v.second.ToInt32Checked() == c->second.ToInt32Checked()); + if (v.second.IsDouble()) EXPECT_TRUE(v.second.ToDoubleChecked() == c->second.ToDoubleChecked()); + if (v.second.IsString()) EXPECT_TRUE(v.second.ToStringChecked() == c->second.ToStringChecked()); + if (v.second.IsObject()) CheckMap(c->second.ToObjectChecked()); } } @@ -116,16 +116,16 @@ void CheckArray(tdf::base::DomValue::DomValueArrayType value) { deserializer.ReadObject(dom_value); EXPECT_TRUE(dom_value.GetType() == tdf::base::DomValue::Type::kArray); EXPECT_TRUE(dom_value.IsArray()); - EXPECT_TRUE(dom_value.ToArray().size() == value.size()); + EXPECT_TRUE(dom_value.ToArrayChecked().size() == value.size()); - for (size_t i = 0; i < dom_value.ToArray().size(); i++) { - auto v = dom_value.ToArray()[i]; + for (size_t i = 0; i < dom_value.ToArrayChecked().size(); i++) { + auto v = dom_value.ToArrayChecked()[i]; auto c = value[i]; - if (v.IsUInt32()) EXPECT_TRUE(v.ToUint32() == c.ToUint32()); - if (v.IsInt32()) EXPECT_TRUE(v.ToInt32() == c.ToInt32()); - if (v.IsDouble()) EXPECT_TRUE(v.ToDouble() == c.ToDouble()); - if (v.IsString()) EXPECT_TRUE(v.ToString() == c.ToString()); - if (v.IsArray()) CheckArray(c.ToArray()); + if (v.IsUInt32()) EXPECT_TRUE(v.ToUint32Checked() == c.ToUint32Checked()); + if (v.IsInt32()) EXPECT_TRUE(v.ToInt32Checked() == c.ToInt32Checked()); + if (v.IsDouble()) EXPECT_TRUE(v.ToDoubleChecked() == c.ToDoubleChecked()); + if (v.IsString()) EXPECT_TRUE(v.ToStringChecked() == c.ToStringChecked()); + if (v.IsArray()) CheckArray(c.ToArrayChecked()); } } diff --git a/test/dom/dom_value_ut.cc b/test/dom/dom_value_ut.cc index 789bb90fd..b3f7bf325 100644 --- a/test/dom/dom_value_ut.cc +++ b/test/dom/dom_value_ut.cc @@ -45,21 +45,21 @@ TEST(DomValueTest, Int32) { << "Int32 Value GetNumberType() return is not DomValue::NumberType::kInt32."; EXPECT_EQ(i32.IsNumber(), true) << "Int32 Value IsNumber() return is not true."; EXPECT_EQ(i32.IsInt32(), true) << "Int32 Value IsInt32() return is not true."; - EXPECT_EQ(i32.ToInt32(), 0) << "Int32 Value ToInt32() is not equal to 0."; + EXPECT_EQ(i32.ToInt32Checked(), 0) << "Int32 Value ToInt32Checked() is not equal to 0."; i32 = DomValue(-1); - EXPECT_EQ(i32.ToInt32(), -1) << "Int32 Value ToInt32() is not equal to -1."; + EXPECT_EQ(i32.ToInt32Checked(), -1) << "Int32 Value ToInt32Checked() is not equal to -1."; i32 = DomValue(1); - EXPECT_EQ(i32.ToInt32(), 1) << "Int32 Value ToInt32() is not equal to 1."; + EXPECT_EQ(i32.ToInt32Checked(), 1) << "Int32 Value ToInt32Checked() is not equal to 1."; i32 = DomValue(std::numeric_limits::max()); - EXPECT_EQ(i32.ToInt32() == std::numeric_limits::max(), true) - << "Int32 Value ToInt32() is not equal to " << std::numeric_limits::max() << "."; + EXPECT_EQ(i32.ToInt32Checked() == std::numeric_limits::max(), true) + << "Int32 Value ToInt32Checked() is not equal to " << std::numeric_limits::max() << "."; i32 = DomValue(std::numeric_limits::min()); - EXPECT_EQ(i32.ToInt32() == std::numeric_limits::min(), true) - << "Int32 Value ToInt32() is not equal to " << std::numeric_limits::min() << "."; + EXPECT_EQ(i32.ToInt32Checked() == std::numeric_limits::min(), true) + << "Int32 Value ToInt32Checked() is not equal to " << std::numeric_limits::min() << "."; std::random_device random_device; std::mt19937 mt19937(random_device()); @@ -68,7 +68,7 @@ TEST(DomValueTest, Int32) { for (int i = 0; i < 300; i++) { int32_t r = distribution(mt19937); i32 = DomValue(r); - EXPECT_EQ(i32.ToInt32() == r, true) << "Int32 Value ToInt32() is not equal to random value " << r << "."; + EXPECT_EQ(i32.ToInt32Checked() == r, true) << "Int32 Value ToInt32Checked() is not equal to random value " << r << "."; } DomValue copy_i32 = DomValue(i32); @@ -77,8 +77,8 @@ TEST(DomValueTest, Int32) { EXPECT_EQ(copy_i32.GetNumberType() == DomValue::NumberType::kInt32, true) << "Copy constructor Int32 Value GetNumberType() is return not DomValue::NumberType::kInt32."; EXPECT_EQ(copy_i32.IsNumber(), true) << "Copy constructor Int32 Value IsNumber() return is not true."; - EXPECT_EQ(copy_i32.ToInt32(), i32.ToInt32()) - << "Copy constructor Int32 Value ToInt32() is not equal to Int32 Value ToInt32()."; + EXPECT_EQ(copy_i32.ToInt32Checked(), i32.ToInt32Checked()) + << "Copy constructor Int32 Value ToInt32Checked() is not equal to Int32 Value ToInt32Checked()."; } TEST(DomValueTest, UInt32) { @@ -90,14 +90,14 @@ TEST(DomValueTest, UInt32) { << "Uint32 Value GetNumberType() return is not DomValue::NumberType::kUInt32."; EXPECT_EQ(u32.IsNumber(), true) << "Uint32 Value IsNumber() return is not true."; EXPECT_EQ(u32.IsUInt32(), true) << "Uint32 Value IsUInt32() return is not true."; - EXPECT_EQ(u32.ToUint32(), 0) << "Uint32 Value ToUInt32() is not equal to 0."; + EXPECT_EQ(u32.ToUint32Checked(), 0) << "Uint32 Value ToUInt32() is not equal to 0."; uint32_t one = 1; u32 = DomValue(one); - EXPECT_EQ(u32.ToUint32(), one) << "Uint32 Value ToUInt32() is not equal to 1."; + EXPECT_EQ(u32.ToUint32Checked(), one) << "Uint32 Value ToUInt32() is not equal to 1."; u32 = DomValue(std::numeric_limits::max()); - EXPECT_EQ(u32.ToUint32() == std::numeric_limits::max(), true) + EXPECT_EQ(u32.ToUint32Checked() == std::numeric_limits::max(), true) << "Uint32 Value ToUint32() is not equal to " << std::numeric_limits::max() << "."; std::random_device random_device; @@ -106,7 +106,7 @@ TEST(DomValueTest, UInt32) { for (int i = 0; i < 300; i++) { uint32_t r = distribution(mt19937); u32 = DomValue(r); - EXPECT_EQ(u32.ToUint32() == r, true) << "Uint32 Value ToUint32() is not equal to random value " << r << "."; + EXPECT_EQ(u32.ToUint32Checked() == r, true) << "Uint32 Value ToUint32() is not equal to random value " << r << "."; } DomValue copy_u32 = DomValue(u32); @@ -115,7 +115,7 @@ TEST(DomValueTest, UInt32) { EXPECT_EQ(copy_u32.GetNumberType() == DomValue::NumberType::kUInt32, true) << "Copy constructor Uint32 Value GetNumberType() return is not DomValue::NumberType::kUInt32."; EXPECT_EQ(copy_u32.IsNumber(), true) << "Copy constructor Uint32 Value IsNumber() return is not true."; - EXPECT_EQ(copy_u32.ToUint32(), u32.ToUint32()) + EXPECT_EQ(copy_u32.ToUint32Checked(), u32.ToUint32Checked()) << "Copy constructor Uint32 Value ToUint32() is not equal to Uint32 Value ToUint32()."; } @@ -127,14 +127,14 @@ TEST(DomValueTest, Double) { << "Double Value GetNumberType() return is not DomValue::NumberType::kDouble."; EXPECT_EQ(d.IsNumber(), true) << "Double Value IsNumber() return is not true."; EXPECT_EQ(d.IsDouble(), true) << "Double Value IsDouble() return is not true."; - EXPECT_DOUBLE_EQ(d.ToDouble(), 0) << "Double Value ToDouble() is not equal to 0."; + EXPECT_DOUBLE_EQ(d.ToDoubleChecked(), 0) << "Double Value ToDoubleChecked() is not equal to 0."; d = DomValue(1.0f); - EXPECT_EQ(d.ToDouble(), 1.0f) << "Double Value ToDouble() is not equal to 1."; + EXPECT_EQ(d.ToDoubleChecked(), 1.0f) << "Double Value ToDoubleChecked() is not equal to 1."; d = DomValue(std::numeric_limits::max()); - EXPECT_EQ(d.ToDouble(), std::numeric_limits::max()) - << "Double Value ToDouble() is not equal to " << std::numeric_limits::max() << "."; + EXPECT_EQ(d.ToDoubleChecked(), std::numeric_limits::max()) + << "Double Value ToDoubleChecked() is not equal to " << std::numeric_limits::max() << "."; std::random_device random_device; std::mt19937 mt19937(random_device()); @@ -142,7 +142,7 @@ TEST(DomValueTest, Double) { for (int i = 0; i < 300; i++) { double r = distribution(mt19937); d = DomValue(r); - EXPECT_EQ(d.ToDouble() == r, true) << "Double Value ToDouble() is not equal to random value " << r << "."; + EXPECT_EQ(d.ToDoubleChecked() == r, true) << "Double Value ToDoubleChecked() is not equal to random value " << r << "."; } DomValue copy_d = DomValue(d); @@ -151,8 +151,8 @@ TEST(DomValueTest, Double) { EXPECT_EQ(copy_d.GetNumberType() == DomValue::NumberType::kDouble, true) << "Copy constructor Double Value GetNumberType() return is not DomValue::NumberType::kDouble."; EXPECT_EQ(copy_d.IsNumber(), true) << "Copy constructor Double Value IsNumber() return is not true."; - EXPECT_EQ(copy_d.ToDouble(), d.ToDouble()) - << "Copy constructor Double Value ToDouble() is not equal to Double Value ToDouble()."; + EXPECT_EQ(copy_d.ToDoubleChecked(), d.ToDoubleChecked()) + << "Copy constructor Double Value ToDoubleChecked() is not equal to Double Value ToDoubleChecked()."; } TEST(DomValueTest, String) { @@ -161,43 +161,43 @@ TEST(DomValueTest, String) { EXPECT_EQ(dom_value.GetType() == DomValue::Type::kString, true) << "String Value GetType() return is not DomValue::Type::kString."; EXPECT_EQ(dom_value.IsString(), true) << "String Value IsString() return is not true."; - EXPECT_EQ(dom_value.ToString() == str, true) << "String Value ToString() is not equal to " << str << "."; + EXPECT_EQ(dom_value.ToStringChecked() == str, true) << "String Value ToStringChecked() is not equal to " << str << "."; str = "~!@#$%^&*()-="; dom_value = DomValue(str); - EXPECT_EQ(dom_value.ToString() == str, true) << "String Value ToString() is not equal to " << str << "."; + EXPECT_EQ(dom_value.ToStringChecked() == str, true) << "String Value ToStringChecked() is not equal to " << str << "."; str = "1234567890"; dom_value = DomValue(str); - EXPECT_EQ(dom_value.ToString() == str, true) << "String Value ToString() is not equal to " << str << "."; + EXPECT_EQ(dom_value.ToStringChecked() == str, true) << "String Value ToStringChecked() is not equal to " << str << "."; str = "腾讯"; dom_value = DomValue(str); - EXPECT_EQ(dom_value.ToString() == str, true) << "String Value ToString() is not equal to " << str << "."; + EXPECT_EQ(dom_value.ToStringChecked() == str, true) << "String Value ToStringChecked() is not equal to " << str << "."; str = ""; dom_value = DomValue(str); - EXPECT_EQ(dom_value.ToString() == str, true) << "String Value ToString() is not equal to ''."; + EXPECT_EQ(dom_value.ToStringChecked() == str, true) << "String Value ToStringChecked() is not equal to ''."; const char* cstr = "abcdefghijklmnopqrstuvwxyz"; dom_value = DomValue(cstr); - EXPECT_STREQ(dom_value.ToString().c_str(), cstr) << "String Value ToString() is not equal to " << cstr << "."; + EXPECT_STREQ(dom_value.ToStringChecked().c_str(), cstr) << "String Value ToStringChecked() is not equal to " << cstr << "."; cstr = "~!@#$%^&*()-="; dom_value = DomValue(cstr); - EXPECT_STREQ(dom_value.ToString().c_str(), cstr) << "String Value ToString() is not equal to " << cstr << "."; + EXPECT_STREQ(dom_value.ToStringChecked().c_str(), cstr) << "String Value ToStringChecked() is not equal to " << cstr << "."; cstr = "1234567890"; dom_value = DomValue(cstr); - EXPECT_STREQ(dom_value.ToString().c_str(), cstr) << "String Value ToString() is not equal to " << cstr << "."; + EXPECT_STREQ(dom_value.ToStringChecked().c_str(), cstr) << "String Value ToStringChecked() is not equal to " << cstr << "."; cstr = "腾讯"; dom_value = DomValue(cstr); - EXPECT_STREQ(dom_value.ToString().c_str(), cstr) << "String Value ToString() is not equal to " << cstr << "."; + EXPECT_STREQ(dom_value.ToStringChecked().c_str(), cstr) << "String Value ToStringChecked() is not equal to " << cstr << "."; // cstr = nullptr; // dom_value = DomValue(cstr); -// EXPECT_STREQ(dom_value.ToString().c_str(), cstr) << "String Value ToString() is not equal to " << cstr << "."; +// EXPECT_STREQ(dom_value.ToStringChecked().c_str(), cstr) << "String Value ToStringChecked() is not equal to " << cstr << "."; } TEST(DomValueTest, kObject) { @@ -215,7 +215,7 @@ TEST(DomValueTest, kObject) { EXPECT_EQ(dom_value.GetType() == DomValue::Type::kObject, true) << "Object Value GetType() return is not DomValue::Type::kObject."; EXPECT_EQ(dom_value.IsObject(), true) << "Object Value IsObject() return is not true."; - EXPECT_EQ(dom_value.ToObject().size() == 8, true) << "Object Value size() is not equal to 8."; + EXPECT_EQ(dom_value.ToObjectChecked().size() == 8, true) << "Object Value size() is not equal to 8."; } TEST(DomValueTest, kArray) { @@ -233,7 +233,7 @@ TEST(DomValueTest, kArray) { EXPECT_EQ(dom_value.GetType() == DomValue::Type::kArray, true) << "Array Value GetType() return is not DomValue::Type::kArray."; EXPECT_EQ(dom_value.IsArray(), true) << "Array Value IsArray() return is not true."; - EXPECT_EQ(dom_value.ToArray().size() == 8, true) << "Array Value size() is not equal to 8."; + EXPECT_EQ(dom_value.ToArrayChecked().size() == 8, true) << "Array Value size() is not equal to 8."; } } // namespace testing