From e543b62e2bb5a50f01c49263e33fa42635773961 Mon Sep 17 00:00:00 2001 From: Kuba Ober Date: Thu, 29 Aug 2019 10:28:53 -0400 Subject: [PATCH] Test for absence of name clashes with immediately enclosing type. --- .../Resources/UnitTest1.capnp.bin | Bin 504 -> 816 bytes capnpc-csharp.tests/UnitTest1.capnp | 6 +++++- capnpc-csharp.tests/UnitTests.cs | 16 ++++++++++++++++ capnpc-csharp/Generator/CodeGenerator.cs | 4 +++- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/capnpc-csharp.tests/Resources/UnitTest1.capnp.bin b/capnpc-csharp.tests/Resources/UnitTest1.capnp.bin index b6ecdf86c135d4d5dd551f83024cfd2a695e39e4..ae47486724106d3236d29bd30325fcb8e2286f47 100644 GIT binary patch literal 816 zcmZ`%yG{a85S`^IMuR34b|%Ke!~_#t8!IS`iH5)jpjiwtyMQi*Ex$l16$u@mK|$-I zF!4L=Ip*rYQT9Xv;23refGJfRchDk5bME2HOF?dL zekLD_uko(&rXK-9BVYiWrKfEo-+!gW(@}kS08a+cI-7*G(S`m5hJfwN23UvvyK*{z zzn?w-j>+rc7xN}x+nG#}!@iRd*1HB=X@%XW>Ayyo7mw|J*q0q7kYB%}gnI+f`n;b2 zwQv~tFYPdbO{w>KMmv00ZXT1!Z}-CqS;<44>jnDZEi&tM`LqsGl_zW1^f9*{%RWr@ ztHSTg;$;Oo1KnBoUC@LSofhZ+$pcfokN*TZNAOWHte@ zD-erM4rG#_n7}e|hK8&mkben?ZGjk~9LN9ykZtl41BEAhFbXI_OlD-b@|E*Qx`f*a rkS#$#?3!1an_85ZS2Ed=QEc*ZMn^`D$(>C4jEs{nGD%PV!(;*g`@9`9 diff --git a/capnpc-csharp.tests/UnitTest1.capnp b/capnpc-csharp.tests/UnitTest1.capnp index 125190e..f638014 100644 --- a/capnpc-csharp.tests/UnitTest1.capnp +++ b/capnpc-csharp.tests/UnitTest1.capnp @@ -2,4 +2,8 @@ enum Enumerant { byte @0; -} \ No newline at end of file +} + +struct Foo { + foo @0: UInt8; +} diff --git a/capnpc-csharp.tests/UnitTests.cs b/capnpc-csharp.tests/UnitTests.cs index 0d10a48..2d4ea6b 100644 --- a/capnpc-csharp.tests/UnitTests.cs +++ b/capnpc-csharp.tests/UnitTests.cs @@ -18,6 +18,22 @@ namespace CapnpC Assert.AreEqual("@byte", GetTypeDef(0xc8461867c409f5d4, model).Enumerants[0].Literal); } + [TestMethod] + public void Test01NestedClash() + { + var model = Load(Resources.UnitTest1_capnp); + var structFoo = GetTypeDef(0x93db6ba5509bac24, model); + var codeGen = NewGeneratorFor(model); + codeGen.Transform(model.FilesToGenerate.First()); + var names = codeGen.GetNames(); + var fieldName = names.GetCodeIdentifier(structFoo.Fields[0]).ToString(); + Assert.AreEqual("Foo", structFoo.Name); + Assert.AreNotEqual(structFoo.Name, fieldName); + } + + static Generator.CodeGenerator NewGeneratorFor(Model.SchemaModel model) + => new Generator.CodeGenerator(model, new Generator.GeneratorOptions()); + static Model.TypeDefinition GetTypeDef(ulong id, Model.SchemaModel model) { foreach (var defs in model.FilesToGenerate.Select(f => f.NestedTypes)) diff --git a/capnpc-csharp/Generator/CodeGenerator.cs b/capnpc-csharp/Generator/CodeGenerator.cs index 785a50f..d066655 100644 --- a/capnpc-csharp/Generator/CodeGenerator.cs +++ b/capnpc-csharp/Generator/CodeGenerator.cs @@ -33,6 +33,8 @@ _interfaceGen = new InterfaceSnippetGen(_names); } + internal GenNames GetNames() => _names; + IEnumerable TransformEnum(TypeDefinition def) { yield return _commonGen.MakeEnum(def); @@ -143,7 +145,7 @@ } } - string Transform(GenFile file) + internal string Transform(GenFile file) { if (file.Namespace != null) {