diff --git a/README.md b/README.md
index b97500b..db6030c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
-# capnproto-dotnetcore
+# capnproto-dotnetcore [](https://ci.appveyor.com/project/c80k/capnproto-dotnetcore/branch/master)
+
A Cap'n Proto implementation for .NET Standard 2.0 (credits to [lostinplace](https://github.com/lostinplace)) and .NET Core 2.1.
["Cap'n Proto is an insanely fast data interchange format and capability-based RPC system."](https://capnproto.org/) Whilst the original implementation is written in C++ there are several ports to other languages. This is a C# implementation for .NET Core.
@@ -13,9 +14,7 @@ The overall deployment consists of two components:
### Code generator back end: Windows
-Disclaimer: The mid-term goal is to provide the C# code generator backend as Chocolatey package. It turns out that setting up a correct package verification process (which is a requirement for package approval) requires more effort than expected. See [Issue: Not on Chocolatey](https://github.com/c80k/capnproto-dotnetcore/issues/6) for instructions on how to create and install the package locally. Read on to get an impression on how it's supposed to work in the future.
-
-The C# code generator back end will be available as [Chocolatey](https://chocolatey.org/) package. You may choose between two flavors: The portable version requires a .NET Core 2.1 (or higher) runtime or SDK (type `dotnet` at command line prompt to check whether you already have one). This is the recommended variant. To install, type
+The C# code generator back end is available as [Chocolatey](https://chocolatey.org/) package. You may choose between two flavors: The portable version requires a .NET Core 2.1 (or higher) runtime or SDK (type `dotnet` at command line prompt to check whether you already have one). This is the recommended variant. To install, type
```
choco install capnpc-csharp
@@ -50,10 +49,11 @@ vcpkg install capnproto
```
Solution/project structure is as follows:
-- Capnp.Net.sln contains three projects:
+- Capnp.Net.sln contains these projects:
* Capnp.Net.Runtime is the runtime implementation, a .NET assembly.
- * capnpc-csharp is the compiler backend for C# language
- * Capnp.Net.Runtime.Tests is an MS Unit Testing assembly, containing - you guessed it - the test suite
+ * capnpc-csharp is the generator backend for C# language.
+ * Capnp.Net.Runtime.Tests is an MS Unit Testing assembly, containing - you guessed it - the test suite.
+ * capnpc-csharp.tests contains the generator backend test suite.
- CapnpCompatTest.sln compiles to a native x86 executable which depends on the original Cap'n Proto C++ implementation. It is (partially) required by the test suite for interoperability testing.
## Features
diff --git a/capnpc-csharp.tests/Resources/UnitTest1.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest1.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest1.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest1.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/UnitTest10.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest10.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest10.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest10.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/UnitTest11.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest11.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest11.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest11.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/UnitTest2.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest2.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest2.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest2.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/UnitTest20.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest20.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest20.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest20.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/UnitTest3.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest3.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest3.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest3.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/UnitTest4.capnp.bin b/capnpc-csharp.tests/Embedded Resources/UnitTest4.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/UnitTest4.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/UnitTest4.capnp.bin
diff --git a/capnpc-csharp.tests/Resources/schema-with-offsets.capnp.bin b/capnpc-csharp.tests/Embedded Resources/schema-with-offsets.capnp.bin
similarity index 100%
rename from capnpc-csharp.tests/Resources/schema-with-offsets.capnp.bin
rename to capnpc-csharp.tests/Embedded Resources/schema-with-offsets.capnp.bin
diff --git a/capnpc-csharp.tests/FeatureSteps/CodeGeneratorSteps.cs b/capnpc-csharp.tests/FeatureSteps/CodeGeneratorSteps.cs
index 366c0e3..4d3a893 100644
--- a/capnpc-csharp.tests/FeatureSteps/CodeGeneratorSteps.cs
+++ b/capnpc-csharp.tests/FeatureSteps/CodeGeneratorSteps.cs
@@ -1,5 +1,4 @@
-using capnpc_csharp.Tests.Properties;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.IO;
using System.Reflection;
@@ -17,7 +16,7 @@ namespace capnpc_csharp.Tests
bool _success;
Exception _generateException;
- Stream LoadResource(string name)
+ internal static Stream LoadResource(string name)
{
var assembly = Assembly.GetExecutingAssembly();
string[] names = assembly.GetManifestResourceNames();
diff --git a/capnpc-csharp.tests/Properties/Resources.Designer.cs b/capnpc-csharp.tests/Properties/Resources.Designer.cs
deleted file mode 100644
index 336b474..0000000
--- a/capnpc-csharp.tests/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// Dieser Code wurde von einem Tool generiert.
-// Laufzeitversion:4.0.30319.42000
-//
-// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
-// der Code erneut generiert wird.
-//
-//------------------------------------------------------------------------------
-
-namespace capnpc_csharp.Tests.Properties {
- using System;
-
-
- ///
- /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
- ///
- // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
- // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
- // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
- // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("capnpc_csharp.Tests.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
- /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] schema_with_offsets_capnp {
- get {
- object obj = ResourceManager.GetObject("schema_with_offsets_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] UnitTest1_capnp {
- get {
- object obj = ResourceManager.GetObject("UnitTest1_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] UnitTest10_capnp {
- get {
- object obj = ResourceManager.GetObject("UnitTest10_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] UnitTest11_capnp {
- get {
- object obj = ResourceManager.GetObject("UnitTest11_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] UnitTest2_capnp {
- get {
- object obj = ResourceManager.GetObject("UnitTest2_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] UnitTest20_capnp {
- get {
- object obj = ResourceManager.GetObject("UnitTest20_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
- ///
- internal static byte[] UnitTest3_capnp {
- get {
- object obj = ResourceManager.GetObject("UnitTest3_capnp", resourceCulture);
- return ((byte[])(obj));
- }
- }
-
- ///
- /// Sucht eine lokalisierte Ressource vom Typ 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
deleted file mode 100644
index b4ecfef..0000000
--- a/capnpc-csharp.tests/Properties/Resources.resx
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- ..\Resources\UnitTest10.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ..\Resources\UnitTest20.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ..\Resources\UnitTest3.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ..\Resources\UnitTest2.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ..\Resources\UnitTest1.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ..\Resources\schema-with-offsets.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ..\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/test.capnp.bin b/capnpc-csharp.tests/Resources/test.capnp.bin
deleted file mode 100644
index 66c8d13..0000000
Binary files a/capnpc-csharp.tests/Resources/test.capnp.bin and /dev/null differ
diff --git a/capnpc-csharp.tests/UnitTests.cs b/capnpc-csharp.tests/UnitTests.cs
index f7d59fd..e2b80d5 100644
--- a/capnpc-csharp.tests/UnitTests.cs
+++ b/capnpc-csharp.tests/UnitTests.cs
@@ -1,29 +1,30 @@
-using capnpc_csharp.Tests.Properties;
using Capnp;
+using Model = CapnpC.Model;
+using Generator = CapnpC.Generator;
+using CodeGeneratorRequest = CapnpC.Schema.CodeGeneratorRequest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
-namespace CapnpC
+namespace capnpc_csharp.Tests
{
[TestClass]
- public class UnitTests
+ public class CodeGeneratorUnitTests
{
static readonly Dictionary GeneratedCode = new Dictionary();
[TestMethod]
public void Test00Enumerant()
{
- var model = Load(Resources.UnitTest1_capnp);
+ var model = Load("UnitTest1.capnp.bin");
Assert.AreEqual("@byte", GetTypeDef(0xc8461867c409f5d4, model).Enumerants[0].Literal);
}
[TestMethod]
public void Test01NestedClash()
{
- var run = LoadAndGenerate(Resources.UnitTest1_capnp, 1);
+ var run = LoadAndGenerate("UnitTest1.capnp.bin", 1);
var structFoo = GetTypeDef(0x93db6ba5509bac24, run.Model);
var names = run.CodeGen.GetNames();
var fieldName = names.GetCodeIdentifier(structFoo.Fields[0]).ToString();
@@ -34,28 +35,28 @@ namespace CapnpC
[TestMethod]
public void Test02ForwardInheritance()
{
- LoadAndGenerate(Resources.UnitTest2_capnp, 2);
+ LoadAndGenerate("UnitTest2.capnp.bin", 2);
// Should not throw
}
[TestMethod]
public void Test03NonGeneratedNodeSkip()
{
- LoadAndGenerate(Resources.UnitTest3_capnp, 3);
+ LoadAndGenerate("UnitTest3.capnp.bin", 3);
// Should not throw
}
[TestMethod]
public void Test04MutualDependencies()
{
- LoadAndGenerate(Resources.UnitTest4_capnp, 4);
+ LoadAndGenerate("UnitTest4.capnp.bin", 4);
// Should not throw
}
[TestMethod]
public void Test10ImportedNamespaces()
{
- var run = LoadAndGenerate(Resources.UnitTest10_capnp, 10);
+ var run = LoadAndGenerate("UnitTest10.capnp.bin", 10);
var outerTypeDef = run.FirstFile.NestedTypes.First();
var outerType = Model.Types.FromDefinition(outerTypeDef);
var innerType = outerTypeDef.Fields[0].Type;
@@ -76,21 +77,21 @@ namespace CapnpC
[TestMethod]
public void Test11ImportedConst()
{
- LoadAndGenerate(Resources.UnitTest11_capnp, 11);
+ LoadAndGenerate("UnitTest11.capnp.bin", 11);
// Should not throw
}
[TestMethod]
public void Test20AnnotationAndConst()
{
- LoadAndGenerate(Resources.UnitTest20_capnp, 20);
+ LoadAndGenerate("UnitTest20.capnp.bin", 20);
// Should not throw
}
[TestMethod]
public void Test30SchemaCapnp()
{
- LoadAndGenerate(Resources.schema_with_offsets_capnp);
+ LoadAndGenerate("schema-with-offsets.capnp.bin");
// Should not throw
}
@@ -105,10 +106,10 @@ namespace CapnpC
static Generator.CodeGenerator NewGeneratorFor(Model.SchemaModel model)
=> new Generator.CodeGenerator(model, new Generator.GeneratorOptions());
- Run LoadAndGenerate(byte[] input, int? testNum = null)
+ Run LoadAndGenerate(string inputName, int? testNum = null)
{
var run = new Run();
- run.Model = Load(input);
+ run.Model = Load(inputName);
run.CodeGen = NewGeneratorFor(run.Model);
run.FirstFile = run.Model.FilesToGenerate.First();
run.Code = run.CodeGen.Transform(run.FirstFile);
@@ -137,16 +138,16 @@ namespace CapnpC
return null;
}
- static Model.SchemaModel Load(byte[] data)
+ static Model.SchemaModel Load(string inputName)
{
WireFrame segments;
- var input = new MemoryStream(data);
+ var input = CodeGeneratorSteps.LoadResource(inputName);
using (input)
{
segments = Framing.ReadSegments(input);
}
var dec = DeserializerState.CreateRoot(segments);
- var reader = Schema.CodeGeneratorRequest.Reader.Create(dec);
+ var reader = CodeGeneratorRequest.Reader.Create(dec);
var model = Model.SchemaModel.Create(reader);
return model;
}
diff --git a/capnpc-csharp.tests/capnpc-csharp.tests.csproj b/capnpc-csharp.tests/capnpc-csharp.tests.csproj
index ebe9366..ce9a24e 100644
--- a/capnpc-csharp.tests/capnpc-csharp.tests.csproj
+++ b/capnpc-csharp.tests/capnpc-csharp.tests.csproj
@@ -23,7 +23,6 @@
-
@@ -38,21 +37,14 @@
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
+
+
+
+
+
+
+
+