summaryrefslogtreecommitdiff
path: root/ICSharpCode.Decompiler/Tests/TestRunner.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ICSharpCode.Decompiler/Tests/TestRunner.cs')
-rw-r--r--ICSharpCode.Decompiler/Tests/TestRunner.cs198
1 files changed, 198 insertions, 0 deletions
diff --git a/ICSharpCode.Decompiler/Tests/TestRunner.cs b/ICSharpCode.Decompiler/Tests/TestRunner.cs
new file mode 100644
index 00000000..215725b0
--- /dev/null
+++ b/ICSharpCode.Decompiler/Tests/TestRunner.cs
@@ -0,0 +1,198 @@
+// 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 DiffLib;
+using ICSharpCode.Decompiler.Ast;
+using ICSharpCode.Decompiler.Tests.Helpers;
+using Microsoft.CSharp;
+using Mono.Cecil;
+using NUnit.Framework;
+
+namespace ICSharpCode.Decompiler.Tests
+{
+ [TestFixture]
+ public class TestRunner : DecompilerTestBase
+ {
+ [Test]
+ public void Async()
+ {
+ TestFile(@"..\..\Tests\Async.cs");
+ }
+
+ [Test, Ignore("disambiguating overloads is not yet implemented")]
+ public void CallOverloadedMethod()
+ {
+ TestFile(@"..\..\Tests\CallOverloadedMethod.cs");
+ }
+
+ [Test, Ignore("unncessary primitive casts")]
+ public void CheckedUnchecked()
+ {
+ TestFile(@"..\..\Tests\CheckedUnchecked.cs");
+ }
+
+ [Test, Ignore("Missing cast on null")]
+ public void DelegateConstruction()
+ {
+ TestFile(@"..\..\Tests\DelegateConstruction.cs");
+ }
+
+ [Test, Ignore("Not yet implemented")]
+ public void ExpressionTrees()
+ {
+ TestFile(@"..\..\Tests\ExpressionTrees.cs");
+ }
+
+ [Test]
+ public void ExceptionHandling()
+ {
+ AssertRoundtripCode(@"..\..\Tests\ExceptionHandling.cs", optimize: false);
+ AssertRoundtripCode(@"..\..\Tests\ExceptionHandling.cs", optimize: false);
+ }
+
+ [Test]
+ public void Generics()
+ {
+ TestFile(@"..\..\Tests\Generics.cs");
+ }
+
+ [Test]
+ public void CustomShortCircuitOperators()
+ {
+ TestFile(@"..\..\Tests\CustomShortCircuitOperators.cs");
+ }
+
+ [Test]
+ public void ControlFlowWithDebug()
+ {
+ AssertRoundtripCode(@"..\..\Tests\ControlFlow.cs", optimize: false, useDebug: true);
+ AssertRoundtripCode(@"..\..\Tests\ControlFlow.cs", optimize: false, useDebug: true);
+ }
+
+ [Test]
+ public void DoubleConstants()
+ {
+ TestFile(@"..\..\Tests\DoubleConstants.cs");
+ }
+
+ [Test]
+ public void IncrementDecrement()
+ {
+ TestFile(@"..\..\Tests\IncrementDecrement.cs");
+ }
+
+ [Test]
+ public void InitializerTests()
+ {
+ TestFile(@"..\..\Tests\InitializerTests.cs");
+ }
+
+ [Test]
+ public void LiftedOperators()
+ {
+ TestFile(@"..\..\Tests\LiftedOperators.cs");
+ }
+
+ [Test]
+ public void Lock()
+ {
+ //TestFile(@"..\..\Tests\Lock.cs", compilerVersion: 2);
+ TestFile(@"..\..\Tests\Lock.cs", compilerVersion: 4);
+ }
+
+ [Test]
+ public void Loops()
+ {
+ TestFile(@"..\..\Tests\Loops.cs");
+ }
+
+ [Test]
+ public void MultidimensionalArray()
+ {
+ TestFile(@"..\..\Tests\MultidimensionalArray.cs");
+ }
+
+ [Test]
+ public void PInvoke()
+ {
+ TestFile(@"..\..\Tests\PInvoke.cs");
+ }
+
+ [Test]
+ public void PropertiesAndEvents()
+ {
+ TestFile(@"..\..\Tests\PropertiesAndEvents.cs");
+ }
+
+ [Test]
+ public void QueryExpressions()
+ {
+ TestFile(@"..\..\Tests\QueryExpressions.cs");
+ }
+
+ [Test, Ignore("switch transform doesn't recreate the exact original switch")]
+ public void Switch()
+ {
+ TestFile(@"..\..\Tests\Switch.cs");
+ }
+
+ [Test]
+ public void UndocumentedExpressions()
+ {
+ TestFile(@"..\..\Tests\UndocumentedExpressions.cs");
+ }
+
+ [Test, Ignore("has incorrect casts to IntPtr")]
+ public void UnsafeCode()
+ {
+ TestFile(@"..\..\Tests\UnsafeCode.cs");
+ }
+
+ [Test]
+ public void ValueTypes()
+ {
+ TestFile(@"..\..\Tests\ValueTypes.cs");
+ }
+
+ [Test, Ignore("Redundant yield break; not removed")]
+ public void YieldReturn()
+ {
+ TestFile(@"..\..\Tests\YieldReturn.cs");
+ }
+
+ [Test]
+ public void TypeAnalysis()
+ {
+ TestFile(@"..\..\Tests\TypeAnalysisTests.cs");
+ }
+
+ static void TestFile(string fileName, bool useDebug = false, int compilerVersion = 4)
+ {
+ AssertRoundtripCode(fileName, optimize: false, useDebug: useDebug, compilerVersion: compilerVersion);
+ AssertRoundtripCode(fileName, optimize: true, useDebug: useDebug, compilerVersion: compilerVersion);
+ AssertRoundtripCode(fileName, optimize: false, useDebug: useDebug, compilerVersion: compilerVersion);
+ AssertRoundtripCode(fileName, optimize: true, useDebug: useDebug, compilerVersion: compilerVersion);
+ }
+ }
+}