Files

222 lines
5.8 KiB
C++
Raw Permalink Normal View History

2026-03-24 10:14:17 -04:00
#include <gtest/gtest.h>
#include <QJsonArray>
#include <QJsonObject>
#include "generator_lib.h"
static QJsonArray makeTestMethods()
{
QJsonArray methods;
// A simple invokable method: int add(int a, int b)
{
QJsonObject m;
m["name"] = "add";
m["returnType"] = "int";
m["isInvokable"] = true;
QJsonArray params;
{
QJsonObject p;
p["type"] = "int";
p["name"] = "a";
params.append(p);
}
{
QJsonObject p;
p["type"] = "int";
p["name"] = "b";
params.append(p);
}
m["parameters"] = params;
methods.append(m);
}
// A void method with no params
{
QJsonObject m;
m["name"] = "reset";
m["returnType"] = "void";
m["isInvokable"] = true;
m["parameters"] = QJsonArray();
methods.append(m);
}
// A non-invokable method (should be skipped)
{
QJsonObject m;
m["name"] = "internal";
m["returnType"] = "void";
m["isInvokable"] = false;
m["parameters"] = QJsonArray();
methods.append(m);
}
return methods;
}
TEST(MakeHeaderTest, ContainsPragmaOnce)
{
QString h = makeHeader("test_mod", "TestMod", QJsonArray());
EXPECT_TRUE(h.contains("#pragma once"));
}
TEST(MakeHeaderTest, ContainsClassName)
{
QString h = makeHeader("test_mod", "TestMod", QJsonArray());
EXPECT_TRUE(h.contains("class TestMod"));
}
TEST(MakeHeaderTest, ContainsConstructor)
{
QString h = makeHeader("test_mod", "TestMod", QJsonArray());
EXPECT_TRUE(h.contains("explicit TestMod(LogosAPI* api)"));
}
TEST(MakeHeaderTest, ContainsIncludes)
{
QString h = makeHeader("test_mod", "TestMod", QJsonArray());
EXPECT_TRUE(h.contains("#include \"logos_types.h\""));
EXPECT_TRUE(h.contains("#include \"logos_api.h\""));
EXPECT_TRUE(h.contains("#include \"logos_api_client.h\""));
EXPECT_TRUE(h.contains("#include \"logos_object.h\""));
EXPECT_TRUE(h.contains("#include <QVariantList>"));
EXPECT_TRUE(h.contains("#include <QVariantMap>"));
2026-03-24 10:14:17 -04:00
}
TEST(MakeHeaderTest, ContainsEventCallbackTypedefs)
{
QString h = makeHeader("test_mod", "TestMod", QJsonArray());
EXPECT_TRUE(h.contains("RawEventCallback"));
EXPECT_TRUE(h.contains("EventCallback"));
}
TEST(MakeHeaderTest, ContainsMethodDeclarations)
{
QJsonArray methods = makeTestMethods();
QString h = makeHeader("test_mod", "TestMod", methods);
EXPECT_TRUE(h.contains("int add(int a, int b)"));
EXPECT_TRUE(h.contains("void reset()"));
// Non-invokable should not appear
EXPECT_FALSE(h.contains("internal"));
}
TEST(MakeHeaderTest, ContainsAsyncOverloads)
{
QJsonArray methods = makeTestMethods();
QString h = makeHeader("test_mod", "TestMod", methods);
EXPECT_TRUE(h.contains("addAsync("));
EXPECT_TRUE(h.contains("resetAsync("));
// Async callback types
EXPECT_TRUE(h.contains("std::function<void(int)> callback"));
EXPECT_TRUE(h.contains("std::function<void()> callback"));
}
TEST(MakeHeaderTest, ContainsPrivateMembers)
{
QString h = makeHeader("test_mod", "TestMod", QJsonArray());
EXPECT_TRUE(h.contains("m_api"));
EXPECT_TRUE(h.contains("m_client"));
EXPECT_TRUE(h.contains("m_moduleName"));
EXPECT_TRUE(h.contains("ensureReplica"));
}
TEST(MakeHeaderTest, ConstRefForStringParams)
{
QJsonArray methods;
{
QJsonObject m;
m["name"] = "greet";
m["returnType"] = "QString";
m["isInvokable"] = true;
QJsonArray params;
QJsonObject p;
p["type"] = "QString";
p["name"] = "name";
params.append(p);
m["parameters"] = params;
methods.append(m);
}
QString h = makeHeader("mod", "Mod", methods);
EXPECT_TRUE(h.contains("const QString& name"));
}
TEST(MakeHeaderTest, ConstRefForQVariantListParam)
{
QJsonArray methods;
{
QJsonObject m;
m["name"] = "process";
m["returnType"] = "void";
m["isInvokable"] = true;
QJsonArray params;
QJsonObject p;
p["type"] = "QVariantList";
p["name"] = "items";
params.append(p);
m["parameters"] = params;
methods.append(m);
}
QString h = makeHeader("mod", "Mod", methods);
EXPECT_TRUE(h.contains("const QVariantList& items"));
}
TEST(MakeHeaderTest, ConstRefForQVariantMapParam)
{
QJsonArray methods;
{
QJsonObject m;
m["name"] = "update";
m["returnType"] = "void";
m["isInvokable"] = true;
QJsonArray params;
QJsonObject p;
p["type"] = "QVariantMap";
p["name"] = "data";
params.append(p);
m["parameters"] = params;
methods.append(m);
}
QString h = makeHeader("mod", "Mod", methods);
EXPECT_TRUE(h.contains("const QVariantMap& data"));
}
TEST(MakeHeaderTest, QVariantListAsyncOverload)
{
QJsonArray methods;
{
QJsonObject m;
m["name"] = "getItems";
m["returnType"] = "QVariantList";
m["isInvokable"] = true;
m["parameters"] = QJsonArray();
methods.append(m);
}
QString h = makeHeader("mod", "Mod", methods);
EXPECT_TRUE(h.contains("QVariantList getItems()"));
EXPECT_TRUE(h.contains("getItemsAsync("));
EXPECT_TRUE(h.contains("std::function<void(QVariantList)> callback"));
}
TEST(MakeHeaderTest, QVariantMapAsyncOverload)
{
QJsonArray methods;
{
QJsonObject m;
m["name"] = "getData";
m["returnType"] = "QVariantMap";
m["isInvokable"] = true;
m["parameters"] = QJsonArray();
methods.append(m);
}
QString h = makeHeader("mod", "Mod", methods);
EXPECT_TRUE(h.contains("QVariantMap getData()"));
EXPECT_TRUE(h.contains("getDataAsync("));
EXPECT_TRUE(h.contains("std::function<void(QVariantMap)> callback"));
}