diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
index 27f5b4af7..feef9b6e3 100644
--- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
+++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
@@ -238,6 +238,24 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
}
}
+ public static CSharpDecompiler GetDecompilerForSnippet(string csharpText)
+ {
+ var syntaxTree = SyntaxFactory.ParseSyntaxTree(csharpText);
+ var compilation = CSharpCompilation.Create(
+ "TestAssembly",
+ new[] { syntaxTree },
+ defaultReferences.Value,
+ new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
+ var peStream = new MemoryStream();
+ var emitResult = compilation.Emit(peStream);
+ peStream.Position = 0;
+
+ var moduleDefinition = ModuleDefinition.ReadModule(peStream);
+ var decompiler = new CSharpDecompiler(moduleDefinition, new DecompilerSettings());
+
+ return decompiler;
+ }
+
internal static string GetSuffix(CompilerOptions cscOptions)
{
string suffix = "";
diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
index f92b8c612..8a9e88932 100644
--- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
+++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
@@ -68,6 +68,7 @@
+
diff --git a/ICSharpCode.Decompiler.Tests/Util/SequencePointTests.cs b/ICSharpCode.Decompiler.Tests/Util/SequencePointTests.cs
new file mode 100644
index 000000000..0be27921e
--- /dev/null
+++ b/ICSharpCode.Decompiler.Tests/Util/SequencePointTests.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using ICSharpCode.Decompiler.CSharp.OutputVisitor;
+using ICSharpCode.Decompiler.Tests.Helpers;
+using ICSharpCode.Decompiler.TypeSystem;
+using NUnit.Framework;
+
+namespace ICSharpCode.Decompiler.Tests.Util
+{
+ [TestFixture]
+ public class SequencePointTests
+ {
+ [Test]
+ public void BasicSequencePoints()
+ {
+ TestCreateSequencePoints(@"class C { void M() { int i = 0; int j = 1; } }",
+ "int num = 0;",
+ "int num2 = 1;");
+ }
+
+ private void TestCreateSequencePoints(string code, params string[] expectedSequencePoints)
+ {
+ var decompiler = Tester.GetDecompilerForSnippet(code);
+
+ var firstType = decompiler.TypeSystem.Compilation.GetTopLevelTypeDefinitons().First(t => code.Contains(t.Name));
+ var tree = decompiler.DecompileType(firstType.FullTypeName);
+
+ var output = new StringWriter();
+ tree.AcceptVisitor(new InsertParenthesesVisitor { InsertParenthesesForReadability = true });
+ TokenWriter tokenWriter = new TextWriterTokenWriter(output);
+ tokenWriter = new InsertMissingTokensDecorator(tokenWriter, (ILocatable)tokenWriter);
+ var formattingOptions = FormattingOptionsFactory.CreateSharpDevelop();
+ tree.AcceptVisitor(new CSharpOutputVisitor(tokenWriter, formattingOptions));
+
+ var functionsWithSequencePoints = decompiler.CreateSequencePoints(tree);
+ var finalText = output.ToString();
+
+ var lines = finalText.Split(new[] { output.NewLine }, StringSplitOptions.None);
+
+ var actualSequencePoints = new List();
+ foreach (var sequencePoint in functionsWithSequencePoints.Values.First()) {
+ if (sequencePoint.IsHidden) {
+ continue;
+ }
+
+ var line = lines[sequencePoint.StartLine - 1];
+ var text = line.Substring(sequencePoint.StartColumn - 1, sequencePoint.EndColumn - sequencePoint.StartColumn);
+ actualSequencePoints.Add(text);
+ }
+
+ Assert.True(Enumerable.SequenceEqual(expectedSequencePoints, actualSequencePoints));
+ }
+ }
+}
\ No newline at end of file