private static void RunTest(string testCase, Assemblies.AssemblyDefinition asm, IEnumerable <TypeDefinition> types, IEnumerable <IGrouping <string, string> > matchingCode) { if (testCase == "Generics") { testCase.GetHashCode(); } string decompiledText = Decompile(asm, types); IEnumerable <string> matchingFiles = matchingCode.FirstOrDefault(kv => string.Equals(kv.Key, testCase, StringComparison.OrdinalIgnoreCase)); if (matchingFiles == null || matchingFiles.Count() == 0) { throw new FileNotFoundException("No source code found for " + testCase + "."); } if (matchingFiles.Count() != 1) { throw new AmbiguousMatchException("More than one source code file found for " + testCase + "."); } string originalCode = matchingFiles.Single(); string noComments = CodeSampleFileParser.ConcatLines( from line in SplitLines(originalCode) where !CodeSampleFileParser.IsIgnorableLine(line) select line); CodeAssert.AreEqual(noComments, decompiledText); }
private static string Decompile(Assemblies.AssemblyDefinition asm, IEnumerable <TypeDefinition> types) { DecompilerSettings settings = new DecompilerSettings(); settings.FullyQualifyAmbiguousTypeNames = false; var ctx = new DecompilerContext(asm.MainModule) { Settings = settings }; var decompiler = new AstBuilder(ctx); foreach (var t in types) { decompiler.AddType(t); } new Helpers.RemoveCompilerAttribute().Run(decompiler.CompilationUnit); var output = new StringWriter(); decompiler.GenerateCode(new PlainTextOutput(output)); return(output.ToString().Trim()); }