From 8b210d8b6686fe4c0346a781e9f894fa213808f2 Mon Sep 17 00:00:00 2001 From: Kuba Ober Date: Fri, 30 Aug 2019 13:55:41 -0400 Subject: [PATCH] Test mutually recursive dependencies between nodes. --- .../Properties/Resources.Designer.cs | 10 ++++++++++ capnpc-csharp.tests/Properties/Resources.resx | 3 +++ .../Resources/UnitTest4.capnp.bin | Bin 0 -> 3304 bytes capnpc-csharp.tests/UnitTest4.capnp | 16 ++++++++++++++++ capnpc-csharp.tests/UnitTest4b.capnp | 15 +++++++++++++++ capnpc-csharp.tests/UnitTests.cs | 7 +++++++ capnpc-csharp/Model/SchemaModel.cs | 6 +++--- 7 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 capnpc-csharp.tests/Resources/UnitTest4.capnp.bin create mode 100644 capnpc-csharp.tests/UnitTest4.capnp create mode 100644 capnpc-csharp.tests/UnitTest4b.capnp diff --git a/capnpc-csharp.tests/Properties/Resources.Designer.cs b/capnpc-csharp.tests/Properties/Resources.Designer.cs index 0f7df65..5148dec 100644 --- a/capnpc-csharp.tests/Properties/Resources.Designer.cs +++ b/capnpc-csharp.tests/Properties/Resources.Designer.cs @@ -129,5 +129,15 @@ namespace capnpc_csharp.Tests.Properties { return ((byte[])(obj)); } } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] UnitTest4_capnp { + get { + object obj = ResourceManager.GetObject("UnitTest4_capnp", resourceCulture); + return ((byte[])(obj)); + } + } } } diff --git a/capnpc-csharp.tests/Properties/Resources.resx b/capnpc-csharp.tests/Properties/Resources.resx index 2404b46..b4ecfef 100644 --- a/capnpc-csharp.tests/Properties/Resources.resx +++ b/capnpc-csharp.tests/Properties/Resources.resx @@ -139,4 +139,7 @@ ..\Resources\UnitTest11.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\UnitTest4.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/capnpc-csharp.tests/Resources/UnitTest4.capnp.bin b/capnpc-csharp.tests/Resources/UnitTest4.capnp.bin new file mode 100644 index 0000000000000000000000000000000000000000..f93feb27a4e5c2b709d77a3cafed0b0d25619de7 GIT binary patch literal 3304 zcmb_eUx-vy7(cWB)GTzuSo6g)Va?sv-7sYrRBRt&V6oa13=+A{PBNe~gEN+kF1Wh| zr5Nl>h(tvMffN)$6cxfgs3^AXg5paLrM-v*ih?3azu!IQH}~GNGrI|X!@1u%-@p4i z-}%mW#~5QiOW_exlSzY5HX8GMi!sYFZ^EE@N3$`DLc4ib8PkE$Y+6j;(dX_oO=oXE z5lZVnF2Hvb>M8K`;CH|ozaDk$Jbdc&d#8U{41;DM7}?VG^TFY}zx($05NDb;4aQhx z&I0Sk5P8x=apuB%)8Qq~HiSqc-fVdPEw0O4{Ald_Gq8nAj1s8Kvxu`IX%MrWIeq5dK2V64NQFe&($BMuGzS$YTRTNjd=k72{<<+S*@`kX{>9- z6+Yf4=J)Ie$G`aGg*QiHuHm#B%C9i%0q4CCy^S@`QCxDxStvmrz8U^Upv!<0?>6w+ z>UUcqU)h=~SJrlBgHoYno`g>dKh+8Mu^L15_>^1gycb~oD#n)LU=GY=3hx%l`}PFo za<1(9NQ2S6W?yMQeCC~R;``#nGakUG;)*LV4^ghkwzpfny@gd{ z(b{_0x$IuTgy%0>g$e!Eg43_y>VkDdQeD|q^prl5*jd)q5&H^Bb!S)6Q~F3^XMSE( zr_^#Mtj9)tX+-Mhs(0dw?@xB(^yGbYN8-d$ru_HoUeNIWp35>9m8{meSoO?viTnBI zlJB-&%A5MEl}1nLBZ-~mU-l)Bwyx%7mn-Z{cV|2|j24{_Pf3)lTlS+BQi0n#xBZ3n zSKhxX)M_8<`!Sb<-j~m>uYxW@q6dv z9}Fr1F(r3RNs{X6Yv2zZ)#raau>H!f{oh|>ofC)ZfO%!zD_`t?%(L!~&WgDZ=^imJ z{(EJkyy-hh+^o}#t4FJUeBX->#7?0TsjmyiTwMPbeLH=JeYyUh`Eun`@(q|Q!tncG zkCQ9kvVX9gM@eQQm2H1Vi~|J#xLq`vU+`NY!|*pGf{6%KM!I literal 0 HcmV?d00001 diff --git a/capnpc-csharp.tests/UnitTest4.capnp b/capnpc-csharp.tests/UnitTest4.capnp new file mode 100644 index 0000000..edfb8c7 --- /dev/null +++ b/capnpc-csharp.tests/UnitTest4.capnp @@ -0,0 +1,16 @@ +@0xf463d204f5208b43; +$import "/capnp/c++.capnp".namespace("UnitTest4"); + +interface Node { + getInfo @0 () -> Info; +} + +struct Info { + node @0 :Node; + classes @1 :Classes; +} + +struct Classes { + i1 @0 :import "UnitTest4b.capnp".I1.Classes; + i2 @1: Void; +} \ No newline at end of file diff --git a/capnpc-csharp.tests/UnitTest4b.capnp b/capnpc-csharp.tests/UnitTest4b.capnp new file mode 100644 index 0000000..3bfe83a --- /dev/null +++ b/capnpc-csharp.tests/UnitTest4b.capnp @@ -0,0 +1,15 @@ +@0x8151238e9f9884c8; +$import "/capnp/c++.capnp".namespace("UnitTest4"); + +using Base = import "UnitTest4.capnp"; + +interface I1 { + interface Node extends (Base.Node) {} + struct Classes { + sub @0: Sub; + } + struct Sub { + const prototype :Base.Classes = ( i1 = (sub = ()) ); + data @0: Bool; + } +} diff --git a/capnpc-csharp.tests/UnitTests.cs b/capnpc-csharp.tests/UnitTests.cs index 0211867..f7d59fd 100644 --- a/capnpc-csharp.tests/UnitTests.cs +++ b/capnpc-csharp.tests/UnitTests.cs @@ -45,6 +45,13 @@ namespace CapnpC // Should not throw } + [TestMethod] + public void Test04MutualDependencies() + { + LoadAndGenerate(Resources.UnitTest4_capnp, 4); + // Should not throw + } + [TestMethod] public void Test10ImportedNamespaces() { diff --git a/capnpc-csharp/Model/SchemaModel.cs b/capnpc-csharp/Model/SchemaModel.cs index 8d0a9fd..bd758c6 100644 --- a/capnpc-csharp/Model/SchemaModel.cs +++ b/capnpc-csharp/Model/SchemaModel.cs @@ -688,7 +688,7 @@ namespace CapnpC.Model { var def = ProcessNode(id, state, true, tag); var typeDef = def as TypeDefinition; - if (def == null) + if (typeDef == null) throw new ArgumentException( $"Expected node {id.StrId()} to be a TypeDefinition but got {def.GetType().Name} instead.", nameof(id)); @@ -748,10 +748,10 @@ namespace CapnpC.Model => node.DisplayName.Substring((int)node.DisplayNamePrefixLength); public static string StrId(this Schema.Node.Reader node) - => $"0x{node.Id.ToString("X")}"; + => $"0x{node.Id:X}"; public static string StrId(this ulong nodeId) - => $"0x{nodeId.ToString("X")}"; + => $"0x{nodeId:X}"; public static NodeKind GetKind(this Schema.Node.Reader node) {