예제 #1
0
        void Run([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CompilerOptions cscOptions = CompilerOptions.None, DecompilerSettings decompilerSettings = null)
        {
            var csFile  = Path.Combine(TestCasePath, testName + ".cs");
            var exeFile = Path.Combine(TestCasePath, testName) + Tester.GetSuffix(cscOptions) + ".exe";

            if (cscOptions.HasFlag(CompilerOptions.Library))
            {
                exeFile = Path.ChangeExtension(exeFile, ".dll");
            }

            // 1. Compile
            CompilerResults output = null;

            try {
                output = Tester.CompileCSharp(csFile, cscOptions, exeFile);
            } finally {
                if (output != null)
                {
                    output.TempFiles.Delete();
                }
            }

            // 2. Decompile
            var decompiled = Tester.DecompileCSharp(exeFile, decompilerSettings ?? Tester.GetSettings(cscOptions));

            // 3. Compile
            CodeAssert.FilesAreEqual(csFile, decompiled, Tester.GetPreprocessorSymbols(cscOptions).ToArray());
        }
예제 #2
0
        void Run([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CompilerOptions cscOptions = CompilerOptions.None, DecompilerSettings decompilerSettings = null)
        {
            var ilFile       = Path.Combine(TestCasePath, testName) + Tester.GetSuffix(cscOptions) + ".il";
            var csFile       = Path.Combine(TestCasePath, testName + ".cs");
            var expectedFile = Path.Combine(TestCasePath, testName + ".Expected.cs");

            if (!File.Exists(ilFile))
            {
                // re-create .il file if necessary
                CompilerResults output = null;
                try
                {
                    output = Tester.CompileCSharp(csFile, cscOptions);
                    Tester.Disassemble(output.PathToAssembly, ilFile, asmOptions);
                }
                finally
                {
                    if (output != null)
                    {
                        output.TempFiles.Delete();
                    }
                }
            }

            var executable = Tester.AssembleIL(ilFile, asmOptions);
            var decompiled = Tester.DecompileCSharp(executable, decompilerSettings);

            CodeAssert.FilesAreEqual(expectedFile, decompiled, Tester.GetPreprocessorSymbols(cscOptions).ToArray());
        }
예제 #3
0
        void Run([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CompilerOptions cscOptions = CompilerOptions.None)
        {
            var ilFile = Path.Combine(TestCasePath, testName) + Tester.GetSuffix(cscOptions) + ".il";
            var csFile = Path.Combine(TestCasePath, testName + ".cs");

            if (!File.Exists(ilFile))
            {
                // re-create .il file if necessary
                CompilerResults output = null;
                try {
                    output = Tester.CompileCSharp(csFile, cscOptions | CompilerOptions.Library);
                    Tester.Disassemble(output.PathToAssembly, ilFile, asmOptions);
                } finally {
                    if (output != null)
                    {
                        output.TempFiles.Delete();
                    }
                }
            }

            var executable = Tester.AssembleIL(ilFile, asmOptions | AssemblerOptions.Library);
            var decompiled = Tester.DecompileCSharp(executable);

            CodeAssert.FilesAreEqual(csFile, decompiled, cscOptions.HasFlag(CompilerOptions.UseRoslyn) ? null : new[] { "LEGACY_CSC" });
        }
예제 #4
0
        void Run([CallerMemberName] string testName = null, DecompilerSettings settings = null)
        {
            var ilFile = Path.Combine(TestCasePath, testName + ".il");
            var csFile = Path.Combine(TestCasePath, testName + ".cs");

            var executable = Tester.AssembleIL(ilFile, AssemblerOptions.Library);
            var decompiled = Tester.DecompileCSharp(executable, settings);

            CodeAssert.FilesAreEqual(csFile, decompiled);
        }
예제 #5
0
        void Run([CallerMemberName] string testName = null, VBCompilerOptions options = VBCompilerOptions.UseDebug, DecompilerSettings settings = null)
        {
            var vbFile = Path.Combine(TestCasePath, testName + ".vb");
            var csFile = Path.Combine(TestCasePath, testName + ".cs");

            var executable = Tester.CompileVB(vbFile, options);
            var decompiled = Tester.DecompileCSharp(executable.PathToAssembly, settings);

            CodeAssert.FilesAreEqual(csFile, decompiled);
        }
예제 #6
0
        void Run([CallerMemberName] string testName = null)
        {
            var ilExpectedFile = Path.Combine(TestCasePath, testName + ".il");
            var ilResultFile   = Path.Combine(TestCasePath, testName + ".result.il");

            var executable   = Tester.AssembleIL(ilExpectedFile, AssemblerOptions.Library);
            var disassembled = Tester.Disassemble(executable, ilResultFile, AssemblerOptions.UseOwnDisassembler);

            CodeAssert.FilesAreEqual(ilExpectedFile, ilResultFile);
        }
예제 #7
0
        void Run([CallerMemberName] string testName = null, CompilerOptions options = CompilerOptions.UseDebug, DecompilerSettings settings = null)
        {
            var vbFile  = Path.Combine(TestCasePath, testName + ".vb");
            var csFile  = Path.Combine(TestCasePath, testName + ".cs");
            var exeFile = Path.Combine(TestCasePath, testName) + Tester.GetSuffix(options) + ".exe";

            if (options.HasFlag(CompilerOptions.Library))
            {
                exeFile = Path.ChangeExtension(exeFile, ".dll");
            }

            var executable = Tester.CompileVB(vbFile, options | CompilerOptions.ReferenceVisualBasic, exeFile);
            var decompiled = Tester.DecompileCSharp(executable.PathToAssembly, settings);

            CodeAssert.FilesAreEqual(csFile, decompiled);
        }
예제 #8
0
        async Task Run([CallerMemberName] string testName = null, CompilerOptions options = CompilerOptions.UseDebug, DecompilerSettings settings = null)
        {
            var vbFile  = Path.Combine(TestCasePath, testName + ".vb");
            var csFile  = Path.Combine(TestCasePath, testName + ".cs");
            var exeFile = Path.Combine(TestCasePath, testName) + Tester.GetSuffix(options) + ".exe";

            if (options.HasFlag(CompilerOptions.Library))
            {
                exeFile = Path.ChangeExtension(exeFile, ".dll");
            }

            var executable = await Tester.CompileVB(vbFile, options | CompilerOptions.ReferenceVisualBasic, exeFile).ConfigureAwait(false);

            var decompiled = await Tester.DecompileCSharp(executable.PathToAssembly, settings).ConfigureAwait(false);

            CodeAssert.FilesAreEqual(csFile, decompiled, Tester.GetPreprocessorSymbols(options).ToArray());
        }
예제 #9
0
        void Run([CallerMemberName] string testName = null, DecompilerSettings settings = null,
                 AssemblerOptions assemblerOptions  = AssemblerOptions.Library)
        {
            if (settings == null)
            {
                // never use file-scoped namespaces, unless explicitly specified
                settings = new DecompilerSettings {
                    FileScopedNamespaces = false
                };
            }
            var ilFile = Path.Combine(TestCasePath, testName + ".il");
            var csFile = Path.Combine(TestCasePath, testName + ".cs");

            var executable = Tester.AssembleIL(ilFile, assemblerOptions);
            var decompiled = Tester.DecompileCSharp(executable, settings);

            CodeAssert.FilesAreEqual(csFile, decompiled);
        }
예제 #10
0
        void Run([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CompilerOptions cscOptions = CompilerOptions.None)
        {
            var ilFile = Path.Combine(TestCasePath, testName);

            if ((cscOptions & CompilerOptions.Optimize) != 0)
            {
                ilFile += ".opt";
            }
            if ((cscOptions & CompilerOptions.Force32Bit) != 0)
            {
                ilFile += ".32";
            }
            if ((cscOptions & CompilerOptions.UseDebug) != 0)
            {
                ilFile += ".dbg";
            }
            if ((cscOptions & CompilerOptions.UseRoslyn) != 0)
            {
                ilFile += ".roslyn";
            }
            ilFile += ".il";
            var csFile = Path.Combine(TestCasePath, testName + ".cs");

            if (!File.Exists(ilFile))
            {
                // re-create .il file if necessary
                CompilerResults output = null;
                try {
                    output = Tester.CompileCSharp(csFile, cscOptions | CompilerOptions.Library);
                    Tester.Disassemble(output.PathToAssembly, ilFile, asmOptions);
                } finally {
                    if (output != null)
                    {
                        output.TempFiles.Delete();
                    }
                }
            }

            var executable = Tester.AssembleIL(ilFile, asmOptions | AssemblerOptions.Library);
            var decompiled = Tester.DecompileCSharp(executable);

            CodeAssert.FilesAreEqual(csFile, decompiled);
        }