/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2024-2025. All rights reserved.
 */
package cjjson.test

import std.unittest.*
import std.unittest.testmacro.*
import cjjson.*
import cjjson.macros.*

// 泛型父类,并使用 withGenericType 属性标记泛型
@JsonAdapter[withGenericType = T]
public open class GenericParent<T> {
    public var parentData: ?T = None
}

// 泛型子类,继承了泛型父类
@JsonAdapter[withSuperClass = GenericParent<T> ; withGenericType = T]
public class GenericChild<T> <: GenericParent<T> {
    public var childData: ?T = None
}

@Test
class GenericClassTest {
    @TestCase
    func genericChild() {
        let input = #"{"parentData":{"d1":1,"d2":2},"childData":{"d1":11,"d2":22}}"#
        let c = GenericChild<SimpleData>.fromJson(input)

        @Assert(c.parentData.getOrThrow().d1, 1)
        @Assert(c.parentData.getOrThrow().d2, 2)
        @Assert(c.childData.getOrThrow().d1, 11)
        @Assert(c.childData.getOrThrow().d2, 22)
    }
}