mirror of
https://github.com/logos-co/logos-cpp-sdk.git
synced 2026-08-31 17:51:07 +00:00
237 lines
7.0 KiB
C++
237 lines
7.0 KiB
C++
#include <gtest/gtest.h>
|
|
#include "logos_json_utils.h"
|
|
#include <QJsonObject>
|
|
|
|
// =============================================================================
|
|
// jsonParamToVariant tests
|
|
// =============================================================================
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsStringType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "arg0"; p["value"] = "hello"; p["type"] = "string";
|
|
QVariant v = LogosJsonUtils::jsonParamToVariant(p);
|
|
EXPECT_TRUE(v.isValid());
|
|
EXPECT_EQ(v.toString(), "hello");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsQStringType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "qt"; p["type"] = "QString";
|
|
EXPECT_EQ(LogosJsonUtils::jsonParamToVariant(p).toString(), "qt");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsIntType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "42"; p["type"] = "int";
|
|
QVariant v = LogosJsonUtils::jsonParamToVariant(p);
|
|
EXPECT_TRUE(v.isValid());
|
|
EXPECT_EQ(v.toInt(), 42);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsIntegerType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "99"; p["type"] = "integer";
|
|
EXPECT_EQ(LogosJsonUtils::jsonParamToVariant(p).toInt(), 99);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsBoolTrue)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "true"; p["type"] = "bool";
|
|
EXPECT_TRUE(LogosJsonUtils::jsonParamToVariant(p).toBool());
|
|
|
|
p["value"] = "1";
|
|
EXPECT_TRUE(LogosJsonUtils::jsonParamToVariant(p).toBool());
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsBoolFalse)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "false"; p["type"] = "bool";
|
|
EXPECT_FALSE(LogosJsonUtils::jsonParamToVariant(p).toBool());
|
|
|
|
p["value"] = "0";
|
|
EXPECT_FALSE(LogosJsonUtils::jsonParamToVariant(p).toBool());
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsBooleanType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "true"; p["type"] = "boolean";
|
|
EXPECT_TRUE(LogosJsonUtils::jsonParamToVariant(p).toBool());
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsDoubleType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "3.14"; p["type"] = "double";
|
|
EXPECT_NEAR(LogosJsonUtils::jsonParamToVariant(p).toDouble(), 3.14, 0.001);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ConvertsFloatType)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "2.718"; p["type"] = "float";
|
|
EXPECT_NEAR(LogosJsonUtils::jsonParamToVariant(p).toDouble(), 2.718, 0.001);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, InvalidIntReturnsInvalid)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "abc"; p["type"] = "int";
|
|
EXPECT_FALSE(LogosJsonUtils::jsonParamToVariant(p).isValid());
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, InvalidBoolReturnsInvalid)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "maybe"; p["type"] = "bool";
|
|
EXPECT_FALSE(LogosJsonUtils::jsonParamToVariant(p).isValid());
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, InvalidDoubleReturnsInvalid)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "xyz"; p["type"] = "double";
|
|
EXPECT_FALSE(LogosJsonUtils::jsonParamToVariant(p).isValid());
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, UnknownTypeTreatedAsString)
|
|
{
|
|
QJsonObject p;
|
|
p["name"] = "a"; p["value"] = "data"; p["type"] = "custom_thing";
|
|
QVariant v = LogosJsonUtils::jsonParamToVariant(p);
|
|
EXPECT_TRUE(v.isValid());
|
|
EXPECT_EQ(v.toString(), "data");
|
|
}
|
|
|
|
// =============================================================================
|
|
// parseMethodParams tests
|
|
// =============================================================================
|
|
|
|
TEST(LogosJsonUtilsTest, ParseMixedParams)
|
|
{
|
|
QString json = R"([
|
|
{"name":"arg0","value":"hello","type":"string"},
|
|
{"name":"arg1","value":"42","type":"int"},
|
|
{"name":"arg2","value":"true","type":"bool"},
|
|
{"name":"arg3","value":"3.14","type":"double"}
|
|
])";
|
|
bool ok = false;
|
|
QString err;
|
|
QVariantList args = LogosJsonUtils::parseMethodParams(json, &ok, &err);
|
|
EXPECT_TRUE(ok);
|
|
EXPECT_TRUE(err.isEmpty());
|
|
ASSERT_EQ(args.size(), 4);
|
|
EXPECT_EQ(args[0].toString(), "hello");
|
|
EXPECT_EQ(args[1].toInt(), 42);
|
|
EXPECT_TRUE(args[2].toBool());
|
|
EXPECT_NEAR(args[3].toDouble(), 3.14, 0.001);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ParseEmptyArray)
|
|
{
|
|
bool ok = false;
|
|
QVariantList args = LogosJsonUtils::parseMethodParams("[]", &ok);
|
|
EXPECT_TRUE(ok);
|
|
EXPECT_EQ(args.size(), 0);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ParseInvalidJson)
|
|
{
|
|
bool ok = true;
|
|
QString err;
|
|
QVariantList args = LogosJsonUtils::parseMethodParams("not json", &ok, &err);
|
|
EXPECT_FALSE(ok);
|
|
EXPECT_TRUE(err.contains("JSON parse error"));
|
|
EXPECT_EQ(args.size(), 0);
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ParseInvalidParamValue)
|
|
{
|
|
QString json = R"([{"name":"a","value":"abc","type":"int"}])";
|
|
bool ok = true;
|
|
QString err;
|
|
QVariantList args = LogosJsonUtils::parseMethodParams(json, &ok, &err);
|
|
EXPECT_FALSE(ok);
|
|
EXPECT_TRUE(err.contains("Invalid parameter"));
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ParseSingleString)
|
|
{
|
|
QString json = R"([{"name":"arg0","value":"test","type":"string"}])";
|
|
bool ok = false;
|
|
QVariantList args = LogosJsonUtils::parseMethodParams(json, &ok);
|
|
EXPECT_TRUE(ok);
|
|
ASSERT_EQ(args.size(), 1);
|
|
EXPECT_EQ(args[0].toString(), "test");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, ParseNullOkPointer)
|
|
{
|
|
QVariantList args = LogosJsonUtils::parseMethodParams("[]");
|
|
EXPECT_EQ(args.size(), 0);
|
|
}
|
|
|
|
// =============================================================================
|
|
// variantToJsonString tests
|
|
// =============================================================================
|
|
|
|
TEST(LogosJsonUtilsTest, VariantToJson_Invalid)
|
|
{
|
|
EXPECT_EQ(LogosJsonUtils::variantToJsonString(QVariant()), "null");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, VariantToJson_String)
|
|
{
|
|
EXPECT_EQ(LogosJsonUtils::variantToJsonString(QVariant("hello")), "hello");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, VariantToJson_Int)
|
|
{
|
|
EXPECT_EQ(LogosJsonUtils::variantToJsonString(QVariant(42)), "42");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, VariantToJson_Bool)
|
|
{
|
|
EXPECT_EQ(LogosJsonUtils::variantToJsonString(QVariant(true)), "true");
|
|
EXPECT_EQ(LogosJsonUtils::variantToJsonString(QVariant(false)), "false");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, VariantToJson_Double)
|
|
{
|
|
QString result = LogosJsonUtils::variantToJsonString(QVariant(3.14));
|
|
EXPECT_TRUE(result.startsWith("3.14"));
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, VariantToJson_Map)
|
|
{
|
|
QVariantMap map;
|
|
map["key"] = "value";
|
|
QString result = LogosJsonUtils::variantToJsonString(QVariant(map));
|
|
EXPECT_TRUE(result.contains("key"));
|
|
EXPECT_TRUE(result.contains("value"));
|
|
}
|
|
|
|
// =============================================================================
|
|
// formatEventJson tests
|
|
// =============================================================================
|
|
|
|
TEST(LogosJsonUtilsTest, FormatEventJson_Basic)
|
|
{
|
|
QVariantList data;
|
|
data << QVariant("hello") << QVariant(42);
|
|
QString result = LogosJsonUtils::formatEventJson("myEvent", data);
|
|
EXPECT_EQ(result, R"({"event":"myEvent","data":["hello","42"]})");
|
|
}
|
|
|
|
TEST(LogosJsonUtilsTest, FormatEventJson_Empty)
|
|
{
|
|
QString result = LogosJsonUtils::formatEventJson("evt", {});
|
|
EXPECT_EQ(result, R"({"event":"evt","data":[]})");
|
|
}
|