/** .============.* // M A K E / \* // C++ DEV / \* // E A S Y / \/ \* ++ ----------. \/\ .* \\ \ \ /\ /* \\ \ \ /* \\ \ \ /* -============'** Copyright (c) 2018 Hevake and contributors, all rights reserved.** This file is part of cpp-tbox (https://github.com/cpp-main/cpp-tbox)* Use of this source code is governed by MIT license that can be found* in the LICENSE file in the root of the source tree. All contributing* project authors may be found in the CONTRIBUTORS.md file in the root* of the source tree.*/#include <gtest/gtest.h>#include <tbox/base/json.hpp>#include "json.h"#include "fs.h"namespace tbox {namespace util {namespace json {TEST(Json, GetBoolField){Json js;js["test"] = "true"_json;bool b_value = false;EXPECT_TRUE(GetField(js, "test", b_value));EXPECT_TRUE(b_value);int i_value = 0;EXPECT_FALSE(GetField(js, "test", i_value));double d_value = 0;EXPECT_FALSE(GetField(js, "test", d_value));std::string s_value;EXPECT_FALSE(GetField(js, "test", s_value));}TEST(Json, GetUintField){Json js;js["test"] = "10"_json;bool b_value = false;EXPECT_FALSE(GetField(js, "test", b_value));unsigned int u_value = 0;EXPECT_TRUE(GetField(js, "test", u_value));EXPECT_EQ(u_value, 10);int i_value = 0;EXPECT_TRUE(GetField(js, "test", i_value));EXPECT_EQ(i_value, 10);double d_value = 0;EXPECT_TRUE(GetField(js, "test", d_value));EXPECT_FLOAT_EQ(d_value, 10.0);std::string s_value;EXPECT_FALSE(GetField(js, "test", s_value));}TEST(Json, GetIntField){Json js;js["test"] = "-10"_json;bool b_value = false;EXPECT_FALSE(GetField(js, "test", b_value));unsigned int u_value = 0;EXPECT_FALSE(GetField(js, "test", u_value));int i_value = 0;EXPECT_TRUE(GetField(js, "test", i_value));EXPECT_EQ(i_value, -10);double d_value = 0;EXPECT_TRUE(GetField(js, "test", d_value));EXPECT_FLOAT_EQ(d_value, -10.0);std::string s_value;EXPECT_FALSE(GetField(js, "test", s_value));}TEST(Json, GetDoubleField){Json js;js["test"] = 1.234;bool b_value = false;EXPECT_FALSE(GetField(js, "test", b_value));unsigned int u_value = 0;EXPECT_FALSE(GetField(js, "test", u_value));int i_value = 0;EXPECT_FALSE(GetField(js, "test", i_value));double d_value = 0;EXPECT_TRUE(GetField(js, "test", d_value));EXPECT_FLOAT_EQ(d_value, 1.234);std::string s_value;EXPECT_FALSE(GetField(js, "test", s_value));}TEST(Json, GetStringField){Json js;js["test"] = "hello";bool b_value = false;EXPECT_FALSE(GetField(js, "test", b_value));unsigned int u_value = 0;EXPECT_FALSE(GetField(js, "test", u_value));int i_value = 0;EXPECT_FALSE(GetField(js, "test", i_value));std::string s_value;EXPECT_TRUE(GetField(js, "test", s_value));EXPECT_EQ(s_value, "hello");double d_value = 0;EXPECT_FALSE(GetField(js, "test", d_value));}TEST(Json, HasField){Json js = R"({"object": {"a": 12,"b": 3},"array": [ 12, 3 ],"int": 12,"string": "hello"})"_json;EXPECT_TRUE(HasObjectField(js, "object"));EXPECT_FALSE(HasObjectField(js, "array"));EXPECT_FALSE(HasObjectField(js, "int"));EXPECT_FALSE(HasObjectField(js, "string"));EXPECT_FALSE(HasArrayField(js, "object"));EXPECT_TRUE(HasArrayField(js, "array"));EXPECT_FALSE(HasArrayField(js, "int"));EXPECT_FALSE(HasArrayField(js, "string"));}TEST(Json, Load) {const char *filepath = "/tmp/tbox-json-test.json";const char *json_text = \R"({"int": 123,"string": "hello","array": [1, 2, 3]})";Json js;fs::WriteStringToTextFile(filepath, json_text);EXPECT_NO_THROW({ js = Load(filepath); } );int i_value;GetField(js, "int", i_value);EXPECT_EQ(i_value, 123);fs::RemoveFile(filepath);EXPECT_ANY_THROW({ js = Load(filepath); } );}TEST(Json, LoadNoThrow) {const char *filepath = "/tmp/tbox-json-test.json";const char *json_text = \R"({"int": 123,"string": "hello","array": [1, 2, 3]})";Json js;fs::WriteStringToTextFile(filepath, json_text);EXPECT_TRUE(Load(filepath, js));int i_value;GetField(js, "int", i_value);EXPECT_EQ(i_value, 123);fs::RemoveFile(filepath);EXPECT_FALSE(Load(filepath, js));}TEST(Json, FindEndPos) {EXPECT_EQ(FindEndPos("", 0), 0);EXPECT_EQ(FindEndPos(R"({})", 2), 2); //! {}EXPECT_EQ(FindEndPos(R"([])", 2), 2); //! []//! 测试[] {}嵌套EXPECT_EQ(FindEndPos(R"([12,{"name":"hevake"}])", 22), 22); //! [] 中嵌 {}EXPECT_EQ(FindEndPos(R"([12,{"name":"hevake}])", 21), 0);EXPECT_EQ(FindEndPos(R"([1,{"a":"}]"}])", 14), 14);EXPECT_EQ(FindEndPos(R"([1,{"a":"\"abc"}])", 17), 17);EXPECT_EQ(FindEndPos(R"({"a":1,b:[1,2,{"b":3}]})", 23), 23);EXPECT_EQ(FindEndPos(R"({)", 2), 0);//! 测试\转义符EXPECT_EQ(FindEndPos(R"("abc\"123")", 10), 10);EXPECT_EQ(FindEndPos(R"("abc\\"123")", 11), 7);EXPECT_EQ(FindEndPos(R"("abc\ \"123")", 12), 12);EXPECT_EQ(FindEndPos(R"("abc\\\\"123")", 13), 9);EXPECT_EQ(FindEndPos(R"("abc\ \\\"123")", 14), 14);//! 其它EXPECT_EQ(FindEndPos(R"( "abc" )", 7), 6); //! 测试两边都有空格的情况EXPECT_EQ(FindEndPos(R"( )", 4), 0);//! 异常情况EXPECT_EQ(FindEndPos(R"({])", 2), -1);EXPECT_EQ(FindEndPos(R"([})", 2), -1);}}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型