mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-26 03:00:18 +08:00
feat(dom): refactor dom value
This commit is contained in:
+79
-20
@@ -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();
|
||||
|
||||
@@ -332,7 +332,7 @@ uint32_t Deserializer::ReadObjectProperties(DomValue& property, SerializationTag
|
||||
ReadObject(key);
|
||||
DomValue value;
|
||||
ReadObject(value);
|
||||
object.insert(std::pair<std::string, DomValue>(key.ToString(), value));
|
||||
object.insert(std::pair<std::string, DomValue>(key.ToStringChecked(), value));
|
||||
property = object;
|
||||
}
|
||||
}
|
||||
|
||||
+15
-15
@@ -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<DomValue>(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;
|
||||
}
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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);
|
||||
|
||||
+54
-10
@@ -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_;
|
||||
}
|
||||
|
||||
@@ -143,56 +143,56 @@ bool LayerOptimizedRenderManager::CheckStyleJustLayout(const std::shared_ptr<Dom
|
||||
}
|
||||
|
||||
if (key == kOpacity) {
|
||||
if (value->IsNull() || (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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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<float>(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<float>(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<float>(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<float>(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<std::string, std::shared_ptr<t
|
||||
SET_STYLE_VALUE(MaxHeight, 0)
|
||||
}
|
||||
if (style_map.find(kFlex) != style_map.end()) {
|
||||
SetFlex(static_cast<float>(style_map.find(kFlex)->second->ToDouble()));
|
||||
SetFlex(static_cast<float>(style_map.find(kFlex)->second->ToDoubleChecked()));
|
||||
}
|
||||
if (style_map.find(kFlexGrow) != style_map.end()) {
|
||||
SetFlexGrow(static_cast<float>(style_map.find(kFlexGrow)->second->ToDouble()));
|
||||
SetFlexGrow(static_cast<float>(style_map.find(kFlexGrow)->second->ToDoubleChecked()));
|
||||
}
|
||||
if (style_map.find(kFlexShrink) != style_map.end()) {
|
||||
SetFlexShrink(static_cast<float>(style_map.find(kFlexShrink)->second->ToDouble()));
|
||||
SetFlexShrink(static_cast<float>(style_map.find(kFlexShrink)->second->ToDoubleChecked()));
|
||||
}
|
||||
if (style_map.find(kFlexBasis) != style_map.end()) {
|
||||
SetFlexBasis(static_cast<float>(style_map.find(kFlexBasis)->second->ToDouble()));
|
||||
SetFlexBasis(static_cast<float>(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_map<std::string, std::shared_ptr<t
|
||||
SET_STYLE_VALUES(Position, Bottom, 0)
|
||||
}
|
||||
if (style_map.find(kPosition) != style_map.end()) {
|
||||
SetPositionType(GetStylePositionType(style_map.find(kPosition)->second->ToString()));
|
||||
SetPositionType(GetStylePositionType(style_map.find(kPosition)->second->ToStringChecked()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<int32_t, std::unordered_map<std::string, std::shared_ptr<tdf::base::DomValue>>> 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);
|
||||
|
||||
@@ -167,7 +167,7 @@ GetNodeStyle(const std::shared_ptr<Ctx> &context,
|
||||
auto style_it = props.find(kNodePropertyStyle);
|
||||
if (style_it != props.end()) {
|
||||
if (style_it->second.IsObject()) {
|
||||
std::unordered_map<std::string, DomValue> style_obj = style_it->second.ToObject();
|
||||
std::unordered_map<std::string, DomValue> style_obj = style_it->second.ToObjectChecked();
|
||||
for (const auto &p : style_obj) {
|
||||
ret[p.first] = std::make_shared<DomValue>(p.second);
|
||||
}
|
||||
@@ -215,7 +215,7 @@ GetNodeProps(const std::shared_ptr<Ctx> &context, const std::shared_ptr<CtxValue
|
||||
std::move(dom_ext_map));
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, DomValue> props_map = props_obj->ToObject();
|
||||
std::unordered_map<std::string, DomValue> 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<Ctx> &context,
|
||||
DomValue dom_value;
|
||||
std::shared_ptr<Scope> 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<int32_t>(id_value->ToDouble());
|
||||
id = static_cast<int32_t>(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<std::string, std::shared_ptr<DomValue>> param;
|
||||
|
||||
@@ -738,17 +738,17 @@ std::shared_ptr<CtxValue> JSCCtx::CreateCtxValue(const std::shared_ptr<DomValue>
|
||||
} 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<CtxValue> args[arr.size()];
|
||||
for (auto i = 0; i < arr.size(); ++i) {
|
||||
args[i] = CreateCtxValue(std::make_shared<DomValue>(arr[i]));
|
||||
@@ -760,7 +760,7 @@ std::shared_ptr<CtxValue> JSCCtx::CreateCtxValue(const std::shared_ptr<DomValue>
|
||||
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;
|
||||
|
||||
@@ -1303,16 +1303,16 @@ std::shared_ptr<CtxValue> 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<CtxValue> args[len];
|
||||
for (size_t i = 0; i < len; ++i) {
|
||||
@@ -1320,7 +1320,7 @@ std::shared_ptr<CtxValue> 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<v8::Context> context = context_persistent_.Get(isolate_);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<std::string, std::shared_ptr<DomValue>> map(objectType.size());
|
||||
for (const auto &pair : objectType) {
|
||||
map[pair.first] = std::make_shared<DomValue>(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];
|
||||
|
||||
@@ -60,7 +60,7 @@ void NativeRenderManager::UpdateLayout(const std::vector<std::shared_ptr<DomNode
|
||||
bool useAnimation = false;
|
||||
if (extStyle->end() != 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);
|
||||
|
||||
+20
-20
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+34
-34
@@ -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<int32_t>::max());
|
||||
EXPECT_EQ(i32.ToInt32() == std::numeric_limits<int32_t>::max(), true)
|
||||
<< "Int32 Value ToInt32() is not equal to " << std::numeric_limits<int32_t>::max() << ".";
|
||||
EXPECT_EQ(i32.ToInt32Checked() == std::numeric_limits<int32_t>::max(), true)
|
||||
<< "Int32 Value ToInt32Checked() is not equal to " << std::numeric_limits<int32_t>::max() << ".";
|
||||
|
||||
i32 = DomValue(std::numeric_limits<int32_t>::min());
|
||||
EXPECT_EQ(i32.ToInt32() == std::numeric_limits<int32_t>::min(), true)
|
||||
<< "Int32 Value ToInt32() is not equal to " << std::numeric_limits<int32_t>::min() << ".";
|
||||
EXPECT_EQ(i32.ToInt32Checked() == std::numeric_limits<int32_t>::min(), true)
|
||||
<< "Int32 Value ToInt32Checked() is not equal to " << std::numeric_limits<int32_t>::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<uint32_t>::max());
|
||||
EXPECT_EQ(u32.ToUint32() == std::numeric_limits<uint32_t>::max(), true)
|
||||
EXPECT_EQ(u32.ToUint32Checked() == std::numeric_limits<uint32_t>::max(), true)
|
||||
<< "Uint32 Value ToUint32() is not equal to " << std::numeric_limits<uint32_t>::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<double>::max());
|
||||
EXPECT_EQ(d.ToDouble(), std::numeric_limits<double>::max())
|
||||
<< "Double Value ToDouble() is not equal to " << std::numeric_limits<double>::max() << ".";
|
||||
EXPECT_EQ(d.ToDoubleChecked(), std::numeric_limits<double>::max())
|
||||
<< "Double Value ToDoubleChecked() is not equal to " << std::numeric_limits<double>::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
|
||||
|
||||
Reference in New Issue
Block a user