Browse Source

Add VBPrettyTestRunner

pull/1087/head
Siegfried Pammer 7 years ago
parent
commit
98416b03dd
  1. 3
      ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
  2. 45
      ICSharpCode.Decompiler.Tests/TestCases/VBPretty/Async.cs
  3. 47
      ICSharpCode.Decompiler.Tests/TestCases/VBPretty/Async.vb
  4. 80
      ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs

3
ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

@ -63,6 +63,8 @@ @@ -63,6 +63,8 @@
<ItemGroup>
<Compile Include="DataFlowTest.cs" />
<Compile Include="VBPrettyTestRunner.cs" />
<Compile Include="TestCases\VBPretty\Async.cs" />
<Compile Include="UglyTestRunner.cs" />
<Compile Include="TestCases\Correctness\ExpressionTrees.cs" />
<Compile Include="TestCases\Correctness\LINQRaytracer.cs" />
@ -166,6 +168,7 @@ @@ -166,6 +168,7 @@
<None Include="TestCases\ILPretty\Issue379.il" />
<None Include="TestCases\ILPretty\Issue982.il" />
<None Include="TestCases\Pretty\Readme.txt" />
<None Include="TestCases\VBPretty\Async.vb" />
</ItemGroup>
<ItemGroup>

45
ICSharpCode.Decompiler.Tests/TestCases/VBPretty/Async.cs

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
using System;
using System.Threading.Tasks;
using System.IO;
namespace EquivalentCSharpConsoleApp
{
static class Program
{
public static void Main(string[] args)
{
var task = new Task(ProcessDataAsync);
task.Start();
task.Wait();
Console.ReadLine();
}
public async static void ProcessDataAsync()
{
Task<int> task = HandleFileAsync("C:\\enable1.txt");
Console.WriteLine("Please wait, processing");
int result = await task;
Console.WriteLine("Count: " + result.ToString());
}
public async static Task<int> HandleFileAsync(string file)
{
Console.WriteLine("HandleFile enter");
int count = 0;
using (StreamReader reader = new StreamReader(file))
{
string value = await reader.ReadToEndAsync();
count += value.Length;
for (var i = 0; i <= 10000; i += 1)
{
var x = value.GetHashCode();
if (x == 0)
count -= 1;
}
}
Console.WriteLine("HandleFile exit");
return count;
}
}
}

47
ICSharpCode.Decompiler.Tests/TestCases/VBPretty/Async.vb

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
Imports System
Imports System.IO
Module Program
' Sample taken verbatim from https://www.dotnetperls.com/async-vbnet
Sub Main(args As String())
Dim task = New Task(AddressOf ProcessDataAsync)
' Start and wait for task to end.
task.Start()
task.Wait()
Console.ReadLine()
End Sub
Async Sub ProcessDataAsync()
' Create a task Of Integer.
' ... Use HandleFileAsync method with a large file.
Dim task As Task(Of Integer) = HandleFileAsync("C:\enable1.txt")
' This statement runs while HandleFileAsync executes.
Console.WriteLine("Please wait, processing")
' Use await to wait for task to complete.
Dim result As Integer = Await task
Console.WriteLine("Count: " + result.ToString())
End Sub
Async Function HandleFileAsync(ByVal file As String) As Task(Of Integer)
Console.WriteLine("HandleFile enter")
' Open the file.
Dim count As Integer = 0
Using reader As StreamReader = New StreamReader(file)
Dim value As String = Await reader.ReadToEndAsync()
count += value.Length
' Do a slow computation on the file.
For i = 0 To 10000 Step 1
Dim x = value.GetHashCode()
If x = 0 Then
count -= 1
End If
Next
End Using
Console.WriteLine("HandleFile exit")
Return count
End Function
End Module

80
ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs

@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
// 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.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using ICSharpCode.Decompiler.Tests.Helpers;
using NUnit.Framework;
namespace ICSharpCode.Decompiler.Tests
{
[TestFixture, Parallelizable(ParallelScope.All)]
public class VBPrettyTestRunner
{
static readonly string TestCasePath = DecompilerTestBase.TestCasePath + "/ILPretty";
[Test]
public void AllFilesHaveTests()
{
var testNames = typeof(ILPrettyTestRunner).GetMethods()
.Where(m => m.GetCustomAttributes(typeof(TestAttribute), false).Any())
.Select(m => m.Name)
.ToArray();
foreach (var file in new DirectoryInfo(TestCasePath).EnumerateFiles()) {
if (file.Extension.Equals(".vb", StringComparison.OrdinalIgnoreCase)) {
var testName = file.Name.Split('.')[0];
Assert.Contains(testName, testNames);
Assert.IsTrue(File.Exists(Path.Combine(TestCasePath, testName + ".cs")));
}
}
}
static readonly VBCompilerOptions[] defaultOptions =
{
VBCompilerOptions.None,
VBCompilerOptions.Optimize,
VBCompilerOptions.UseRoslyn,
VBCompilerOptions.Optimize | VBCompilerOptions.UseRoslyn,
};
static readonly VBCompilerOptions[] roslynOnlyOptions =
{
VBCompilerOptions.UseRoslyn,
VBCompilerOptions.Optimize | VBCompilerOptions.UseRoslyn,
};
[Test, Ignore("Implement VB async/await")]
public void Async([ValueSource("defaultOptions")] VBCompilerOptions options)
{
Run(options: options);
}
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);
}
}
}
Loading…
Cancel
Save