diff --git a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs index 4b8232bfa..364180edc 100644 --- a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs @@ -29,7 +29,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture, Parallelizable(ParallelScope.All)] public class CorrectnessTestRunner { - static readonly string TestCasePath = DecompilerTestBase.TestCasePath + "/Correctness"; + static readonly string TestCasePath = Tester.TestCasePath + "/Correctness"; [Test] public void AllFilesHaveTests() diff --git a/ICSharpCode.Decompiler.Tests/CustomAttributes/CustomAttributeTests.cs b/ICSharpCode.Decompiler.Tests/CustomAttributes/CustomAttributeTests.cs deleted file mode 100644 index ae683ad8c..000000000 --- a/ICSharpCode.Decompiler.Tests/CustomAttributes/CustomAttributeTests.cs +++ /dev/null @@ -1,26 +0,0 @@ -using NUnit.Framework; - -namespace ICSharpCode.Decompiler.Tests.CustomAttributes -{ - [TestFixture] - public class CustomAttributeTests : DecompilerTestBase - { - [Test] - public void CustomAttributeSamples() - { - ValidateFileRoundtrip(@"CustomAttributes/S_CustomAttributeSamples.cs"); - } - - [Test] - public void CustomAttributes() - { - ValidateFileRoundtrip(@"CustomAttributes/S_CustomAttributes.cs"); - } - - [Test] - public void AssemblyCustomAttribute() - { - ValidateFileRoundtrip(@"CustomAttributes/S_AssemblyCustomAttribute.cs"); - } - } -} diff --git a/ICSharpCode.Decompiler.Tests/DecompilerTestBase.cs b/ICSharpCode.Decompiler.Tests/DecompilerTestBase.cs deleted file mode 100644 index ba79100e1..000000000 --- a/ICSharpCode.Decompiler.Tests/DecompilerTestBase.cs +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using ICSharpCode.Decompiler.Tests.Helpers; -using Microsoft.CSharp; -using Mono.Cecil; -using ICSharpCode.Decompiler.CSharp; -using ICSharpCode.Decompiler.CSharp.OutputVisitor; - -namespace ICSharpCode.Decompiler.Tests -{ - public abstract class DecompilerTestBase - { - public static readonly string TestCasePath = Path.Combine( - Path.GetDirectoryName(typeof(DecompilerTestBase).Assembly.Location), - "../../../TestCases"); - - protected static void ValidateFileRoundtrip(string samplesFileName) - { - var fullPath = Path.Combine(TestCasePath, "..", samplesFileName); - AssertRoundtripCode(fullPath); - } - - static string RemoveIgnorableLines(IEnumerable lines) - { - return CodeSampleFileParser.ConcatLines(lines.Where(l => !CodeSampleFileParser.IsCommentOrBlank(l))); - } - - protected static void AssertRoundtripCode(string fileName, bool optimize = false, bool useDebug = false, int compilerVersion = 4) - { - var code = RemoveIgnorableLines(File.ReadLines(fileName)); - AssemblyDefinition assembly = CompileLegacy(code, optimize, useDebug, compilerVersion); - - CSharpDecompiler decompiler = new CSharpDecompiler(assembly.MainModule, new DecompilerSettings()); - - decompiler.AstTransforms.Insert(0, new RemoveEmbeddedAtttributes()); - decompiler.AstTransforms.Insert(0, new RemoveCompilerAttribute()); - - var syntaxTree = decompiler.DecompileWholeModuleAsSingleFile(); - - var options = FormattingOptionsFactory.CreateAllman(); - options.IndentSwitchBody = false; - CodeAssert.AreEqual(code, syntaxTree.ToString(options)); - } - - protected static AssemblyDefinition CompileLegacy(string code, bool optimize, bool useDebug, int compilerVersion) - { - CSharpCodeProvider provider = new CSharpCodeProvider(new Dictionary { { "CompilerVersion", "v" + new Version(compilerVersion, 0) } }); - CompilerParameters options = new CompilerParameters(); - options.CompilerOptions = "/unsafe /o" + (optimize ? "+" : "-") + (useDebug ? " /debug" : ""); - if (compilerVersion >= 4) - options.ReferencedAssemblies.Add("System.Core.dll"); - CompilerResults results = provider.CompileAssemblyFromSource(options, code); - try - { - if (results.Errors.Cast().Any((arg) => !arg.IsWarning)) - { - StringBuilder b = new StringBuilder("Compiler error:"); - foreach (var error in results.Errors) - { - b.AppendLine(error.ToString()); - } - throw new Exception(b.ToString()); - } - return AssemblyDefinition.ReadAssembly(results.PathToAssembly, - new ReaderParameters { InMemory = true }); - } - finally - { - File.Delete(results.PathToAssembly); - results.TempFiles.Delete(); - } - } - } -} diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs index 9111d647d..70b3caf71 100644 --- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs +++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs @@ -63,6 +63,10 @@ namespace ICSharpCode.Decompiler.Tests.Helpers public static partial class Tester { + public static readonly string TestCasePath = Path.Combine( + Path.GetDirectoryName(typeof(Tester).Assembly.Location), + "../../../TestCases"); + public static string AssembleIL(string sourceFileName, AssemblerOptions options = AssemblerOptions.UseDebug) { string ilasmPath = Path.Combine(Environment.GetEnvironmentVariable("windir"), @"Microsoft.NET\Framework\v4.0.30319\ilasm.exe"); diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj index c7b455051..3c8938bcb 100644 --- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj +++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj @@ -169,11 +169,9 @@ - - - - - + + + diff --git a/ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs index 4dca2f114..b0cbede71 100644 --- a/ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs @@ -28,7 +28,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture, Parallelizable(ParallelScope.All)] public class ILPrettyTestRunner { - static readonly string TestCasePath = DecompilerTestBase.TestCasePath + "/ILPretty"; + static readonly string TestCasePath = Tester.TestCasePath + "/ILPretty"; [Test] public void AllFilesHaveTests() diff --git a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs index 18fb34990..15cd282f6 100644 --- a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs @@ -29,7 +29,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture, Parallelizable(ParallelScope.All)] public class PrettyTestRunner { - static readonly string TestCasePath = DecompilerTestBase.TestCasePath + "/Pretty"; + static readonly string TestCasePath = Tester.TestCasePath + "/Pretty"; [Test] public void AllFilesHaveTests() @@ -308,6 +308,24 @@ namespace ICSharpCode.Decompiler.Tests RunForLibrary(cscOptions: cscOptions); } + [Test] + public void AssemblyCustomAttributes([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions) + { + RunForLibrary(cscOptions: cscOptions); + } + + [Test] + public void CustomAttributes([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions) + { + RunForLibrary(cscOptions: cscOptions); + } + + [Test] + public void CustomAttributeSamples([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions) + { + RunForLibrary(cscOptions: cscOptions); + } + void RunForLibrary([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CSharpCompilerOptions cscOptions = CSharpCompilerOptions.None, DecompilerSettings decompilerSettings = null) { Run(testName, asmOptions | AssemblerOptions.Library, cscOptions | CSharpCompilerOptions.Library, decompilerSettings); diff --git a/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs b/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs index be0848001..96890b853 100644 --- a/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs +++ b/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs @@ -33,7 +33,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture, Parallelizable(ParallelScope.All)] public class RoundtripAssembly { - public static readonly string TestDir = Path.GetFullPath(Path.Combine(DecompilerTestBase.TestCasePath, "../../ILSpy-tests")); + public static readonly string TestDir = Path.GetFullPath(Path.Combine(Tester.TestCasePath, "../../ILSpy-tests")); static readonly string nunit = Path.Combine(TestDir, "nunit", "nunit3-console.exe"); [Test] diff --git a/ICSharpCode.Decompiler.Tests/CustomAttributes/S_AssemblyCustomAttribute.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/AssemblyCustomAttributes.cs similarity index 100% rename from ICSharpCode.Decompiler.Tests/CustomAttributes/S_AssemblyCustomAttribute.cs rename to ICSharpCode.Decompiler.Tests/TestCases/Pretty/AssemblyCustomAttributes.cs diff --git a/ICSharpCode.Decompiler.Tests/CustomAttributes/S_CustomAttributeSamples.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs similarity index 100% rename from ICSharpCode.Decompiler.Tests/CustomAttributes/S_CustomAttributeSamples.cs rename to ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs diff --git a/ICSharpCode.Decompiler.Tests/CustomAttributes/S_CustomAttributes.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributes.cs similarity index 100% rename from ICSharpCode.Decompiler.Tests/CustomAttributes/S_CustomAttributes.cs rename to ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributes.cs diff --git a/ICSharpCode.Decompiler.Tests/UglyTestRunner.cs b/ICSharpCode.Decompiler.Tests/UglyTestRunner.cs index c449321dd..b91485a02 100644 --- a/ICSharpCode.Decompiler.Tests/UglyTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/UglyTestRunner.cs @@ -29,7 +29,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture, Parallelizable(ParallelScope.All)] public class UglyTestRunner { - static readonly string TestCasePath = DecompilerTestBase.TestCasePath + "/Ugly"; + static readonly string TestCasePath = Tester.TestCasePath + "/Ugly"; [Test] public void AllFilesHaveTests() diff --git a/ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs index 1c2acffc3..850edaee0 100644 --- a/ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs @@ -28,7 +28,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture, Parallelizable(ParallelScope.All)] public class VBPrettyTestRunner { - static readonly string TestCasePath = DecompilerTestBase.TestCasePath + "/VBPretty"; + static readonly string TestCasePath = Tester.TestCasePath + "/VBPretty"; [Test] public void AllFilesHaveTests()