diff --git a/src/tests/JsonSerializer_test.cj b/src/tests/JsonSerializer_test.cj index d9acea9..f378b27 100644 --- a/src/tests/JsonSerializer_test.cj +++ b/src/tests/JsonSerializer_test.cj @@ -70,6 +70,22 @@ class LeafChild <: MidParent { public init() {} } +// 三级继承(全标宏):爷 → 父 → 子 每层都标注 @SerializerParent +@SerializerParent +open class GrandAll { + public var _ga: String = "" +} + +@SerializerParent +open class MidAll <: GrandAll { + public var _ma: String = "" +} + +class LeafAll <: MidAll { + public var _la: String = "" + public init() {} +} + func makeUser(): User { let u = User() u._id = "u-1" @@ -374,4 +390,44 @@ public class JsonSerializerTests { let json = JsonSerializer.Serialize(leaf) @Expect(json.contains("\"_gp\": \"auto\""), true) } + + /// 三级继承(全标宏):爷/父/子 每层字段都导出、反序列化全部回填 + @TestCase + public func threeLevelAllMacro() { + let leaf = LeafAll() + leaf._ga = "ga-v" + leaf._ma = "ma-v" + leaf._la = "la-v" + + let json = JsonSerializer.Serialize(leaf) + @Expect(json.contains("\"_ga\": \"ga-v\""), true) // 爷字段(宏)导出 + @Expect(json.contains("\"_ma\": \"ma-v\""), true) // 父字段(宏)导出 + @Expect(json.contains("\"_la\": \"la-v\""), true) // 子字段(反射)导出 + + let back = JsonSerializer.Deserialize(json) + @Expect(back._ga, "ga-v") + @Expect(back._ma, "ma-v") + @Expect(back._la, "la-v") + } + + /// 三级继承:每层字段互不遮蔽(字段名不同),导出顺序无关,值各自正确 + @TestCase + public func threeLevelFieldSeparation() { + let leaf = LeafAll() + leaf._ga = "G" + leaf._ma = "M" + leaf._la = "L" + let json = JsonSerializer.Serialize(leaf) + + // 三个字段值互不串 + @Expect(json.contains("\"_ga\": \"G\""), true) + @Expect(json.contains("\"_ma\": \"M\""), true) + @Expect(json.contains("\"_la\": \"L\""), true) + + // 反序列化后互不覆盖 + let back = JsonSerializer.Deserialize(json) + @Expect(back._ga, "G") + @Expect(back._ma, "M") + @Expect(back._la, "L") + } }