From 9437c6e4ad2d77d0ddf521c9f15ab4e1e16f5c6c Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 17 Feb 2019 22:03:35 +0100 Subject: [PATCH] Add basic interface tests. --- .../ICSharpCode.Decompiler.Tests.csproj | 1 + .../PrettyTestRunner.cs | 6 ++ .../TestCases/Pretty/InterfaceTests.cs | 36 ++++++++ .../TestCases/Pretty/InterfaceTests.il | 81 +++++++++++++++++ .../TestCases/Pretty/InterfaceTests.opt.il | 81 +++++++++++++++++ .../Pretty/InterfaceTests.opt.roslyn.il | 85 ++++++++++++++++++ .../TestCases/Pretty/InterfaceTests.roslyn.il | 87 +++++++++++++++++++ .../Types/S_TypeDeclarations.cs | 17 ---- 8 files changed, 377 insertions(+), 17 deletions(-) create mode 100644 ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs create mode 100644 ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.il create mode 100644 ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.il create mode 100644 ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.roslyn.il create mode 100644 ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.roslyn.il delete mode 100644 ICSharpCode.Decompiler.Tests/Types/S_TypeDeclarations.cs diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj index 741ad9973..9329d2d4e 100644 --- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj +++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj @@ -91,6 +91,7 @@ + diff --git a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs index 05fe84c6a..81fc145f1 100644 --- a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs @@ -402,6 +402,12 @@ namespace ICSharpCode.Decompiler.Tests RunForLibrary(cscOptions: cscOptions); } + [Test] + public void InterfaceTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions) + { + RunForLibrary(cscOptions: cscOptions); + } + [Test] [Ignore("missing 'new' modifiers in a lot of contexts.")] public void TypeMemberTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions) diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs new file mode 100644 index 000000000..2b4167c32 --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs @@ -0,0 +1,36 @@ +// 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. + +namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty +{ + internal class InterfaceTests + { + public interface IA + { + } + public interface IA2 : IA + { + } + public interface IB + { + } + public class C : IA2, IA, IB + { + } + } +} diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.il new file mode 100644 index 000000000..f966ac635 --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.il @@ -0,0 +1,81 @@ + + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly InterfaceTests +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .permissionset reqmin + = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}} + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module InterfaceTests.dll +.custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) +.imagebase 0x10000000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + extends [mscorlib]System.Object +{ + .class interface abstract auto ansi nested public IA + { + } // end of class IA + + .class interface abstract auto ansi nested public IA2 + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA + { + } // end of class IA2 + + .class interface abstract auto ansi nested public IB + { + } // end of class IB + + .class auto ansi nested public beforefieldinit C + extends [mscorlib]System.Object + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA2, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IB + { + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method C::.ctor + + } // end of class C + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method InterfaceTests::.ctor + +} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.il new file mode 100644 index 000000000..362fb867d --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.il @@ -0,0 +1,81 @@ + + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly InterfaceTests.opt +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .permissionset reqmin + = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}} + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module InterfaceTests.opt.dll +.custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) +.imagebase 0x10000000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + extends [mscorlib]System.Object +{ + .class interface abstract auto ansi nested public IA + { + } // end of class IA + + .class interface abstract auto ansi nested public IA2 + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA + { + } // end of class IA2 + + .class interface abstract auto ansi nested public IB + { + } // end of class IB + + .class auto ansi nested public beforefieldinit C + extends [mscorlib]System.Object + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA2, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IB + { + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method C::.ctor + + } // end of class C + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method InterfaceTests::.ctor + +} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.roslyn.il new file mode 100644 index 000000000..b6dea3f2d --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.opt.roslyn.il @@ -0,0 +1,85 @@ + + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly InterfaceTests +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + // --- The following custom attribute is added automatically, do not uncomment ------- + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) + + .permissionset reqmin + = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}} + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module InterfaceTests.dll +.custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) +.imagebase 0x10000000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + extends [mscorlib]System.Object +{ + .class interface abstract auto ansi nested public IA + { + } // end of class IA + + .class interface abstract auto ansi nested public IA2 + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA + { + } // end of class IA2 + + .class interface abstract auto ansi nested public IB + { + } // end of class IB + + .class auto ansi nested public beforefieldinit C + extends [mscorlib]System.Object + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA2, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IB + { + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method C::.ctor + + } // end of class C + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method InterfaceTests::.ctor + +} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.roslyn.il new file mode 100644 index 000000000..3a35819cd --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.roslyn.il @@ -0,0 +1,87 @@ + + + + +// Metadata version: v4.0.30319 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly InterfaceTests +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + + // --- The following custom attribute is added automatically, do not uncomment ------- + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 ) + + .permissionset reqmin + = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}} + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module InterfaceTests.dll +.custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) +.imagebase 0x10000000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + extends [mscorlib]System.Object +{ + .class interface abstract auto ansi nested public IA + { + } // end of class IA + + .class interface abstract auto ansi nested public IA2 + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA + { + } // end of class IA2 + + .class interface abstract auto ansi nested public IB + { + } // end of class IB + + .class auto ansi nested public beforefieldinit C + extends [mscorlib]System.Object + implements ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA2, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IA, + ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests/IB + { + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: nop + IL_0007: ret + } // end of method C::.ctor + + } // end of class C + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: nop + IL_0007: ret + } // end of method InterfaceTests::.ctor + +} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.InterfaceTests + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/ICSharpCode.Decompiler.Tests/Types/S_TypeDeclarations.cs b/ICSharpCode.Decompiler.Tests/Types/S_TypeDeclarations.cs deleted file mode 100644 index 99bf4279e..000000000 --- a/ICSharpCode.Decompiler.Tests/Types/S_TypeDeclarations.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace ClassMultiInterface -{ - public interface IA - { - } - public interface IA2 : IA - { - } - public interface IB - { - } - public class C : IA2, IB - { - } -}