public void FinalOutput()
 {
     Type[] types = new Type[] {typeof (SimpleEvent), typeof (ProtocolInfo)};
     IGenerator rootGenerator = new RootGenerator(types, 0);
     TextWriter textWriter = new StringWriter();
     rootGenerator.Write(new CodeWriter(textWriter));
     using (StreamReader sr = File.OpenText("GeneratedTextSample.txt"))
     {
         Assert.AreEqual(sr.ReadToEnd(), textWriter.ToString());
     }
 }
        private static int Main(string[] args)
        {
            AppArguments parsedArgs = new AppArguments();
            if (!Parser.ParseArgumentsWithUsage(args, parsedArgs))
            {
                return 1;
            }

            List<string> referencedAssemblies = new List<string>(parsedArgs.ReferencedAssemblies);
            if (
                !referencedAssemblies.Exists(
                     delegate(string asm) { return asm.Contains("ProtocolGenerator.exe"); }))
            {
                referencedAssemblies.Add("ProtocolGenerator.exe");
            }

            Assembly templateAssembly;

            if (!CompileLibraryInMemory(parsedArgs.EventTemplatePath, referencedAssemblies.ToArray(), out templateAssembly))
            {
                Console.WriteLine("ERROR: TemplateFile compile error.");
                return 2;
            }

            uint minorVersion = GetMinorVersion(parsedArgs.EventTemplatePath);

            IGenerator rootGenerator;
            try
            {
                // TODO - Ctor throws exception. Is it OK?
                rootGenerator = new RootGenerator(templateAssembly.GetTypes(), minorVersion);
            }
            catch (SyntaxErrorException e)
            {
                Console.WriteLine(e);
                return 3;
            }

            string generatedFilePath = GetGeneratedFilePath(parsedArgs.EventTemplatePath);
            using (StreamWriter sw = File.CreateText(generatedFilePath))
            {
                rootGenerator.Write(new CodeWriter(sw));
            }
            return 0;
        }