From b7301f9fa8083e610059b0150488204dd89125df Mon Sep 17 00:00:00 2001 From: xRain Date: Mon, 17 Aug 2026 14:12:07 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E6=96=B0=E5=A2=9E=E4=B8=89=E7=BA=A7?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=E7=94=A8=E4=BE=8B=EF=BC=88=E4=B8=89=E5=B1=82?= =?UTF-8?q?=E5=85=A8=E6=A0=87=20@SerializerParent=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - threeLevelAllMacro:爷/父/子 每层字段都导出、反序列化全部回填 - threeLevelFieldSeparation:三层字段互不遮蔽、互不覆盖 - 新增模型 GrandAll → MidAll → LeafAll(每层标宏) - 18 用例全绿 --- src/tests/JsonSerializer_test.cj | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) 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") + } }