#pragma once
#include "test_framework.hpp"

namespace lsp::test
{
    // Facade 接口测试类（Serialize, Deserialize, check, debug）
    class FacadeTests
    {
    public:
        static void registerTests(TestRunner& runner);

    private:
        // ==================== Serialize/Deserialize 测试 ====================
        static TestResult testSerializeSimpleStruct();
        static TestResult testSerializeComplexStruct();
        static TestResult testSerializeLSPAny();
        static TestResult testDeserializeSimpleStruct();
        static TestResult testDeserializeComplexStruct();
        static TestResult testDeserializeInvalidJSON();
        static TestResult testSerializeDeserializeRoundtrip();

        // ==================== check 命名空间测试 ====================
        static TestResult testCheckIsObject();
        static TestResult testCheckIsArray();
        static TestResult testCheckIsString();
        static TestResult testCheckIsNumber();
        static TestResult testCheckIsBool();
        static TestResult testCheckIsNull();
        static TestResult testCheckMultipleTypes();

        // ==================== debug 命名空间测试 ====================
        static TestResult testDebugGetTypeName();
        static TestResult testDebugGetIdStringInt();
        static TestResult testDebugGetIdStringString();
    };
}
