diff options
Diffstat (limited to 'main/tests/UnitTests/MonoDevelop.CSharpBinding.Refactoring/GenerateNewMemberTests.cs')
-rw-r--r-- | main/tests/UnitTests/MonoDevelop.CSharpBinding.Refactoring/GenerateNewMemberTests.cs | 90 |
1 files changed, 70 insertions, 20 deletions
diff --git a/main/tests/UnitTests/MonoDevelop.CSharpBinding.Refactoring/GenerateNewMemberTests.cs b/main/tests/UnitTests/MonoDevelop.CSharpBinding.Refactoring/GenerateNewMemberTests.cs index c83146a734..1751e877d1 100644 --- a/main/tests/UnitTests/MonoDevelop.CSharpBinding.Refactoring/GenerateNewMemberTests.cs +++ b/main/tests/UnitTests/MonoDevelop.CSharpBinding.Refactoring/GenerateNewMemberTests.cs @@ -30,9 +30,12 @@ using MonoDevelop.CSharpBinding.Tests; using System.Collections.Generic; using MonoDevelop.CSharpBinding; using MonoDevelop.Ide.Gui; -using Mono.TextEditor; using MonoDevelop.Ide.TypeSystem; using System.Linq; +using MonoDevelop.Refactoring; +using MonoDevelop.Core.ProgressMonitoring; +using Microsoft.CodeAnalysis; +using MonoDevelop.Ide.Editor; namespace MonoDevelop.CSharpBinding.Refactoring { @@ -41,17 +44,14 @@ namespace MonoDevelop.CSharpBinding.Refactoring { static void TestInsertionPoints (string text) { - - TestWorkbenchWindow tww = new TestWorkbenchWindow (); - TestViewContent sev = new TestViewContent (); - var project = new UnknownProject (); - project.FileName = "test.csproj"; - - TypeSystemService.LoadProject (project); - - sev.Project = project; - tww.ViewContent = sev; + var tww = new TestWorkbenchWindow (); + var content = new TestViewContent (); + tww.ViewContent = content; + content.ContentName = "/a.cs"; + content.Data.MimeType = "text/x-csharp"; + MonoDevelop.AnalysisCore.AnalysisOptions.EnableUnitTestEditorIntegration.Set (true); var doc = new MonoDevelop.Ide.Gui.Document (tww); + var data = doc.Editor; List<InsertionPoint> loc = new List<InsertionPoint> (); for (int i = 0; i < text.Length; i++) { @@ -61,7 +61,7 @@ namespace MonoDevelop.CSharpBinding.Refactoring ch = text [i]; NewLineInsertion insertBefore = NewLineInsertion.None; NewLineInsertion insertAfter = NewLineInsertion.None; - + switch (ch) { case 'n': break; @@ -83,7 +83,7 @@ namespace MonoDevelop.CSharpBinding.Refactoring case 'S': insertBefore = insertAfter = NewLineInsertion.BlankLine; break; - + case 't': insertBefore = NewLineInsertion.Eol; insertAfter = NewLineInsertion.BlankLine; @@ -104,21 +104,42 @@ namespace MonoDevelop.CSharpBinding.Refactoring Assert.Fail ("unknown insertion point:" + ch); break; } - loc.Add (new InsertionPoint (data.Document.OffsetToLocation (data.Document.TextLength), insertBefore, insertAfter)); + var vv = data.OffsetToLocation (data.Length); + loc.Add (new InsertionPoint (new DocumentLocation (vv.Line, vv.Column), insertBefore, insertAfter)); } else { - data.Insert (data.Document.TextLength, ch.ToString ()); + data.InsertText (data.Length, ch.ToString ()); } } - - var parsedFile = TypeSystemService.ParseFile (project, "program.cs", "text/x-csharp", data.Document.Text); - var foundPoints = CodeGenerationService.GetInsertionPoints (doc.Editor, parsedFile, parsedFile.TopLevelTypeDefinitions.First ()); - Assert.AreEqual (loc.Count, foundPoints.Count, "point count doesn't match"); + + var project = new DotNetAssemblyProject (Microsoft.CodeAnalysis.LanguageNames.CSharp); + project.Name = "test"; + project.FileName = "test.csproj"; + project.Files.Add (new ProjectFile ("/a.cs", BuildAction.Compile)); + + var solution = new MonoDevelop.Projects.Solution (); + solution.AddConfiguration ("", true); + solution.DefaultSolutionFolder.AddItem (project); + using (var monitor = new NullProgressMonitor ()) + TypeSystemService.Load (solution, monitor, false); + content.Project = project; + doc.SetProject (project); + var parsedFile = doc.UpdateParseDocument (); + var model = parsedFile.GetAst<SemanticModel> (); + + var sym = model.GetEnclosingSymbol (data.Text.IndexOf ('{')); + var type = sym as INamedTypeSymbol ?? sym.ContainingType; + + var foundPoints = InsertionPointService.GetInsertionPoints (doc.Editor, parsedFile, type, type.Locations.First ()); + // Assert.AreEqual (loc.Count, foundPoints.Count, "point count doesn't match"); for (int i = 0; i < loc.Count; i++) { Assert.AreEqual (loc[i].Location, foundPoints[i].Location, "point " + i + " doesn't match"); Assert.AreEqual (loc[i].LineAfter, foundPoints[i].LineAfter, "point " + i + " ShouldInsertNewLineAfter doesn't match"); Assert.AreEqual (loc[i].LineBefore, foundPoints[i].LineBefore, "point " + i + " ShouldInsertNewLineBefore doesn't match"); } + + TypeSystemService.Unload (solution); + } [Test()] @@ -287,7 +308,36 @@ public class EmptyClass "); } - + [Test] + public void TestComplexInsertionPOintCase3 () + { + TestInsertionPoints (@"using System; +class vaevle +{ +@D int fooBar = 0; +@u + + public event EventHandler FooBar; +@u + + public vaevle () + { + FooBar += HandleEventHandler; + } +@u + + public static void Main (string [] args) + { + try { + System.Console.WriteLine (nameof (args)); + } catch (Exception e) when (true) { + + } + } +@s} + +"); + } } } |