Example #1
0
        private static CompilerResults GenerateProtocol(Protocol protocol)
        {
            var codegen = new CodeGen();

            codegen.AddProtocol(protocol);
            return(GenerateAssembly(codegen));
        }
Example #2
0
        public override bool Execute()
        {
            var codegen = new CodeGen();
            if (SchemaFiles != null)
            {
                foreach (var schemaFile in SchemaFiles)
                {
                    var schema = Schema.Parse(System.IO.File.ReadAllText(schemaFile.ItemSpec));
                    codegen.AddSchema(schema);
                }
            }
            if (ProtocolFiles != null)
            {
                foreach (var protocolFile in ProtocolFiles)
                {
                    var protocol = Protocol.Parse(System.IO.File.ReadAllText(protocolFile.ItemSpec));
                    codegen.AddProtocol(protocol);
                }
            }

            var generateCode = codegen.GenerateCode();
            var namespaces = generateCode.Namespaces;
            for (var i = namespaces.Count - 1; i >= 0; i--)
            {
                var types = namespaces[i].Types;
                for (var j = types.Count - 1; j >= 0; j--)
                {
                    Log.LogMessage("Generating {0}.{1}", namespaces[i].Name, types[j].Name);
                }
            }

            codegen.WriteTypes(OutDir.ItemSpec);
            return true;
        }
Example #3
0
        public void TestAddProtocol()
        {
            var codeGen = new CodeGen();

            var recordSchema = new RecordSchema("TestRecord", null, new RecordSchema.Field[] { new RecordSchema.Field("A", new IntSchema()) });
            var protocol     = new AvroProtocol("TestProtocol", "Test.Namespace");

            protocol.AddType(recordSchema);

            codeGen.AddProtocol(protocol);

            Assert.AreEqual(2, codeGen.Count);
            Assert.IsNotNull(codeGen["Test.Namespace.TestProtocol"]);
            Assert.IsNotNull(codeGen["Test.Namespace.TestRecord"]);
        }
Example #4
0
        public override bool Execute()
        {
            var codegen = new CodeGen();

            if (SchemaFiles != null)
            {
                foreach (var schemaFile in SchemaFiles)
                {
                    var schema = Schema.Parse(System.IO.File.ReadAllText(schemaFile.ItemSpec));
                    codegen.AddSchema(schema);
                }
            }
            if (ProtocolFiles != null)
            {
                foreach (var protocolFile in ProtocolFiles)
                {
                    var protocol = Protocol.Parse(System.IO.File.ReadAllText(protocolFile.ItemSpec));
                    codegen.AddProtocol(protocol);
                }
            }

            var generateCode = codegen.GenerateCode();
            var namespaces   = generateCode.Namespaces;

            for (var i = namespaces.Count - 1; i >= 0; i--)
            {
                var types = namespaces[i].Types;
                for (var j = types.Count - 1; j >= 0; j--)
                {
                    Log.LogMessage("Generating {0}.{1}", namespaces[i].Name, types[j].Name);
                }
            }

            codegen.WriteTypes(OutDir.ItemSpec);
            return(true);
        }
Example #5
0
        public void TestSpecific(string str, object[] result)
        {
            if (compres == null)
            {
                Protocol protocol = Protocol.Parse(str);
                var      codegen  = new CodeGen();
                codegen.AddProtocol(protocol);
                var compileUnit = codegen.GenerateCode();

                // add a constructor to the main class using the passed assignment statements
                CodeTypeDeclaration ctd         = compileUnit.Namespaces[0].Types[(int)result[0]];
                CodeConstructor     constructor = new CodeConstructor();
                constructor.Attributes = MemberAttributes.Public;
                CodeSnippetExpression snippet = new CodeSnippetExpression((string)result[2]);
                constructor.Statements.Add(snippet);
                ctd.Members.Add(constructor);

                // add a function to the main class to populate the data
                // This has been moved from constructor, as it was causing some tests to pass that shouldn't when referencing a blank object on READ.

                CodeMemberMethod method = new CodeMemberMethod();
                method.Attributes = MemberAttributes.Public;
                method.Name       = "Populate";
                CodeSnippetExpression snippet2 = new CodeSnippetExpression((string)result[3]);
                method.Statements.Add(snippet2);
                ctd.Members.Add(method);



                // compile
                var comparam = new CompilerParameters(new string[] { "netstandard.dll" });
                comparam.ReferencedAssemblies.Add("System.dll");
                comparam.ReferencedAssemblies.Add(Path.Combine(TestContext.CurrentContext.TestDirectory, "Avro.dll"));
                comparam.GenerateInMemory = true;
                var ccp   = new Microsoft.CSharp.CSharpCodeProvider();
                var units = new CodeCompileUnit[] { compileUnit };
                compres = ccp.CompileAssemblyFromDom(comparam, units);
                Assert.IsNotNull(compres);
                if (compres.Errors.Count > 0)
                {
                    for (int i = 0; i < compres.Errors.Count; i++)
                    {
                        Console.WriteLine(compres.Errors[i]);
                    }
                }
                Assert.IsTrue(compres.Errors.Count == 0);
            }

            // create record
            ISpecificRecord rec = compres.CompiledAssembly.CreateInstance((string)result[1]) as ISpecificRecord;

            // Call populate to put some data in it.
            Type       recType    = rec.GetType();;
            MethodInfo methodInfo = recType.GetMethod("Populate");

            methodInfo.Invoke(rec, null);

            var x1 = compres.CompiledAssembly.FullName;

            Assert.IsFalse(rec == null);

            // serialize
            var stream = serialize(rec.Schema, rec);

            // deserialize
            var rec2 = deserialize <ISpecificRecord>(stream, rec.Schema, rec.Schema);

            Assert.IsFalse(rec2 == null);
            AssertSpecificRecordEqual(rec, rec2);
        }
Example #6
0
 private static CompilerResults GenerateProtocol(Protocol protocol)
 {
     var codegen = new CodeGen();
     codegen.AddProtocol(protocol);
     return GenerateAssembly(codegen);
 }
Example #7
0
        public static void TestSpecific(string str, object[] result)
        {
            Protocol protocol = Protocol.Parse(str);
            var      codegen  = new CodeGen();

            codegen.AddProtocol(protocol);
            var compileUnit = codegen.GenerateCode();

            // add a constructor to the main class using the passed assignment statements
            CodeTypeDeclaration ctd         = compileUnit.Namespaces[0].Types[(int)result[0]];
            CodeConstructor     constructor = new CodeConstructor();

            constructor.Attributes = MemberAttributes.Public;
            CodeSnippetExpression snippet = new CodeSnippetExpression((string)result[2]);

            constructor.Statements.Add(snippet);
            ctd.Members.Add(constructor);

            // add a function to the main class to populate the data
            // This has been moved from constructor, as it was causing some tests to pass that shouldn't when referencing a blank object on READ.

            CodeMemberMethod method = new CodeMemberMethod();

            method.Attributes = MemberAttributes.Public;
            method.Name       = "Populate";
            CodeSnippetExpression snippet2 = new CodeSnippetExpression((string)result[3]);

            method.Statements.Add(snippet2);
            ctd.Members.Add(method);



            // compile
            var comparam = new CompilerParameters(new string[] { "mscorlib.dll" });

            comparam.ReferencedAssemblies.Add("System.dll");
            comparam.ReferencedAssemblies.Add("System.Core.dll");
            comparam.ReferencedAssemblies.Add(Type.GetType("Mono.Runtime") != null ? "Mono.CSharp.dll" : "Microsoft.CSharp.dll");
            comparam.ReferencedAssemblies.Add("Avro.dll");
            comparam.GenerateInMemory = true;
            var ccp     = new Microsoft.CSharp.CSharpCodeProvider();
            var units   = new CodeCompileUnit[] { compileUnit };
            var compres = ccp.CompileAssemblyFromDom(comparam, units);

            if (compres == null || compres.Errors.Count > 0)
            {
                for (int i = 0; i < compres.Errors.Count; i++)
                {
                    Console.WriteLine(compres.Errors[i]);
                }
            }
            if (null != compres)
            {
                Assert.IsTrue(compres.Errors.Count == 0);
            }

            // create record
            ISpecificRecord rec = compres.CompiledAssembly.CreateInstance((string)result[1]) as ISpecificRecord;

            // Call populate to put some data in it.
            Type       recType    = rec.GetType();;
            MethodInfo methodInfo = recType.GetMethod("Populate");

            methodInfo.Invoke(rec, null);

            var x1 = compres.CompiledAssembly.FullName;


            Assert.IsFalse(rec == null);

            // serialize
            var stream     = new MemoryStream();
            var binEncoder = new BinaryEncoder(stream);
            var writer     = new SpecificDefaultWriter(rec.Schema);

            writer.Write(rec.Schema, rec, binEncoder);

            // deserialize
            stream.Position = 0;
            var decoder = new BinaryDecoder(stream);
            var reader  = new SpecificDefaultReader(rec.Schema, rec.Schema);
            var rec2    = (ISpecificRecord)reader.Read(null, rec.Schema, rec.Schema, decoder);

            Assert.IsFalse(rec2 == null);
        }
Example #8
0
        public static void TestSpecific(string str, object[] result)
        {
            Protocol protocol = Protocol.Parse(str);
            var      codegen  = new CodeGen();

            codegen.AddProtocol(protocol);
            var compileUnit = codegen.GenerateCode();

            // add a constructor to the main class using the passed assignment statements
            CodeTypeDeclaration ctd         = compileUnit.Namespaces[0].Types[(int)result[0]];
            CodeConstructor     constructor = new CodeConstructor();

            constructor.Attributes = MemberAttributes.Public;
            CodeSnippetExpression snippet = new CodeSnippetExpression((string)result[2]);

            constructor.Statements.Add(snippet);
            ctd.Members.Add(constructor);

            // compile
            var comparam = new CompilerParameters(new string[] { "mscorlib.dll" });

            comparam.ReferencedAssemblies.Add("System.dll");
            comparam.ReferencedAssemblies.Add("System.Core.dll");
            comparam.ReferencedAssemblies.Add(Type.GetType("Mono.Runtime") != null ? "Mono.CSharp.dll" : "Microsoft.CSharp.dll");
            comparam.ReferencedAssemblies.Add("Avro.dll");
            comparam.GenerateInMemory = true;
            var ccp     = new Microsoft.CSharp.CSharpCodeProvider();
            var units   = new CodeCompileUnit[] { compileUnit };
            var compres = ccp.CompileAssemblyFromDom(comparam, units);

            if (compres == null || compres.Errors.Count > 0)
            {
                for (int i = 0; i < compres.Errors.Count; i++)
                {
                    Console.WriteLine(compres.Errors[i]);
                }
            }
            if (null != compres)
            {
                Assert.IsTrue(compres.Errors.Count == 0);
            }

            // create record
            ISpecificRecord rec = compres.CompiledAssembly.CreateInstance((string)result[1]) as ISpecificRecord;

            Assert.IsFalse(rec == null);

            // serialize
            var stream     = new MemoryStream();
            var binEncoder = new BinaryEncoder(stream);
            var writer     = new SpecificDefaultWriter(rec.Schema);

            writer.Write(rec.Schema, rec, binEncoder);

            // deserialize
            stream.Position = 0;
            var decoder = new BinaryDecoder(stream);
            var reader  = new SpecificDefaultReader(rec.Schema, rec.Schema);
            var rec2    = (ISpecificRecord)reader.Read(null, rec.Schema, rec.Schema, decoder);

            Assert.IsFalse(rec2 == null);
        }