public async Task GetCSharpSyntaxTreeAsync_NoWorkspace_CreatesSyntaxTree() { // Arrange var filePath = "C:\\path\\to\\file.razor.cs"; var uri = new Uri(filePath); var textBuffer = new TestTextBuffer(new StringTextSnapshot("class Foo{}")); var virtualDocument = new CSharpVirtualDocument(uri, textBuffer); var virtualDocumentSnapshot = (CSharpVirtualDocumentSnapshot)virtualDocument.CurrentSnapshot; // Act var syntaxTree = await virtualDocumentSnapshot.GetCSharpSyntaxTreeAsync(workspace : null, CancellationToken.None); // Assert var diagnostics = syntaxTree.GetDiagnostics(); Assert.Empty(diagnostics); Assert.True(syntaxTree.Length > 0); }
public DefaultRazorBreakpointResolverTest() { DocumentUri = new Uri("file://*****:*****@" {ValidBreakpointCSharp} {InvalidBreakpointCSharp} "; var csharpTextSnapshot = new StringTextSnapshot( $@"public class SomeRazorFile {{{mappedCSharpText}}}"); CSharpTextBuffer = new TestTextBuffer(csharpTextSnapshot); var textBufferSnapshot = new StringTextSnapshot($"@code {{{mappedCSharpText}}}"); HostTextbuffer = new TestTextBuffer(textBufferSnapshot); }
public void CurrentSnapshot_ChangesWhenTextBufferChanges() { // Arrange var textBuffer = new TestTextBuffer(new StringTextSnapshot(string.Empty)); textBuffer.ChangeContentType(NotInertContentType, editTag: null); using var document = new DefaultLSPDocument(Uri, textBuffer, virtualDocuments: Array.Empty <VirtualDocument>()); var originalSnapshot = document.CurrentSnapshot; // Act var edit = textBuffer.CreateEdit(); edit.Insert(0, "New!"); edit.Apply(); // Assert var newSnapshot = document.CurrentSnapshot; Assert.NotSame(originalSnapshot, newSnapshot); Assert.Equal(1, originalSnapshot.Version); Assert.Equal(2, newSnapshot.Version); }
public void InertTextBuffer_DoesNotCreateSnapshot() { // Arrange var textBuffer = new TestTextBuffer(new StringTextSnapshot(string.Empty)); textBuffer.ChangeContentType(NotInertContentType, editTag: null); using var document = new DefaultLSPDocument(Uri, textBuffer, virtualDocuments: Array.Empty <VirtualDocument>()); var originalSnapshot = document.CurrentSnapshot; textBuffer.ChangeContentType(TestInertContentType.Instance, editTag: null); // Act var edit = textBuffer.CreateEdit(); edit.Insert(0, "New!"); edit.Apply(); // Assert var newSnapshot = document.CurrentSnapshot; Assert.Same(originalSnapshot, newSnapshot); }
private TestParserManager CreateParserManager(ITextSnapshot originalSnapshot) { var textBuffer = new TestTextBuffer(originalSnapshot); var documentTracker = CreateDocumentTracker(textBuffer); var templateEngineFactory = CreateProjectEngineFactory(); var parser = new DefaultVisualStudioRazorParser( Dispatcher, documentTracker, templateEngineFactory, new DefaultErrorReporter(), new TestCompletionBroker()) { // We block idle work with the below reset events. Therefore, make tests fast and have the idle timer fire as soon as possible. IdleDelay = TimeSpan.FromMilliseconds(1), NotifyForegroundIdleStart = new ManualResetEventSlim(), BlockBackgroundIdleWork = new ManualResetEventSlim(), }; parser.StartParser(); return(new TestParserManager(parser)); }
public DefaultLSPDocumentManagerTest() { var contentType = Mock.Of <IContentType>(contentType => contentType.IsOfType("inert") == false && contentType.IsOfType("test") == true && contentType.TypeName == "test", MockBehavior.Strict); ChangeListeners = Enumerable.Empty <Lazy <LSPDocumentChangeListener, IContentTypeMetadata> >(); JoinableTaskContext = new JoinableTaskContext(); TextBuffer = new TestTextBuffer(new StringTextSnapshot(string.Empty)); TextBuffer.ChangeContentType(contentType, editTag: null); var snapshot = TextBuffer.CurrentSnapshot; Uri = new Uri("C:/path/to/file.razor"); UriProvider = Mock.Of <FileUriProvider>(provider => provider.GetOrCreate(TextBuffer) == Uri, MockBehavior.Strict); Mock.Get(UriProvider).Setup(p => p.Remove(It.IsAny <ITextBuffer>())).Verifiable(); var testVirtualDocument = new TestVirtualDocument(); var lspDocument = new DefaultLSPDocument(Uri, TextBuffer, new[] { testVirtualDocument }); LSPDocumentSnapshot = lspDocument.CurrentSnapshot; LSPDocument = lspDocument; LSPDocumentFactory = Mock.Of <LSPDocumentFactory>(factory => factory.Create(TextBuffer) == LSPDocument, MockBehavior.Strict); }
public TestParserManager(DefaultVisualStudioRazorParser parser) { _parserComplete = new ManualResetEventSlim(); _reparseComplete = new ManualResetEventSlim(); _testBuffer = (TestTextBuffer)parser.TextBuffer; ParseCount = 0; _parser = parser; parser.DocumentStructureChanged += (sender, args) => { CurrentSyntaxTree = args.CodeDocument.GetSyntaxTree(); Interlocked.Increment(ref ParseCount); if (args.SourceChange == null) { // Reparse occurred _reparseComplete.Set(); } _parserComplete.Set(); }; }
public async Task NoDocumentSnapshotParsesComponentFileCorrectly() { // Arrange var snapshot = new StringTextSnapshot("@code { }"); var testBuffer = new TestTextBuffer(snapshot); var documentTracker = CreateDocumentTracker(testBuffer, filePath: "C:\\This\\Path\\Is\\Just\\For\\component.razor"); using (var manager = CreateParserManager(documentTracker)) { // Act await manager.InitializeWithDocumentAsync(snapshot); // Assert Assert.Equal(1, manager.ParseCount); var codeDocument = await manager.InnerParser.GetLatestCodeDocumentAsync(snapshot); Assert.Equal(FileKinds.Component, codeDocument.GetFileKind()); // @code is only applicable in component files so we're verifying that `@code` was treated as a directive. var directiveNodes = manager.CurrentSyntaxTree.Root.DescendantNodes().Where(child => child.Kind == SyntaxKind.RazorDirective); Assert.Single(directiveNodes); } }
public DefaultRazorProximityExpressionResolverTest() { DocumentUri = new Uri("file://*****:*****@"public class SomeRazorFile {{ {InvalidProximityExpressionRoot} public void Render() {{ {ValidProximityExpressionRoot} }} }} "); CSharpTextBuffer = new TestTextBuffer(csharpTextSnapshot); var textBufferSnapshot = new StringTextSnapshot($"@{{{InvalidProximityExpressionRoot}}} @code {{{ValidProximityExpressionRoot}}}"); HostTextbuffer = new TestTextBuffer(textBufferSnapshot); }
public DefaultRazorBreakpointResolverTest() { DocumentUri = new Uri("file://*****:*****@"public class SomeRazorFile {{ {ValidBreakpointCSharp} {InvalidBreakpointCSharp} }}"); CSharpTextBuffer = new TestTextBuffer(csharpTextSnapshot); var textBufferSnapshot = new StringTextSnapshot(@$ " @code {{ {ValidBreakpointCSharp} {InvalidBreakpointCSharp} }} "); HostTextbuffer = new TestTextBuffer(textBufferSnapshot); }
public TestParserManager(VisualStudioRazorParser parser) { _parserComplete = new ManualResetEventSlim(); _reparseComplete = new ManualResetEventSlim(); _testBuffer = (TestTextBuffer)parser._textBuffer; ParseCount = 0; // Change idle delay to be huge in order to enable us to take control of when idle methods fire. parser._idleTimer.Interval = TimeSpan.FromMinutes(2).TotalMilliseconds; _parser = parser; parser.DocumentStructureChanged += (sender, args) => { Interlocked.Increment(ref ParseCount); _parserComplete.Set(); if (args.SourceChange == null) { // Reparse occurred _reparseComplete.Set(); } CurrentSyntaxTree = args.CodeDocument.GetSyntaxTree(); }; }
public void TextBuffer_OnPostChanged_IndentsInbetweenDirectiveBlockBraces() { // Arrange var change = Environment.NewLine; var initialSnapshot = new StringTextSnapshot(" @functions {}"); var afterChangeSnapshot = new StringTextSnapshot(" @functions {" + change + "}"); var edit = new TestEdit(16, 0, initialSnapshot, change.Length, afterChangeSnapshot, change); var expectedIndentResult = " @functions {" + change + change + " }"; var caret = CreateCaretFrom(16 + change.Length, afterChangeSnapshot); TestTextBuffer textBuffer = null; var focusedTextView = CreateFocusedTextView(() => textBuffer, caret); var documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView); textBuffer = CreateTextBuffer(initialSnapshot, documentTracker); var editorOperationsFactory = CreateOperationsFactoryService(); var braceSmartIndenter = new BraceSmartIndenter(Dispatcher, documentTracker, editorOperationsFactory); // Act textBuffer.ApplyEdit(edit); // Assert Assert.Equal(expectedIndentResult, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content); }
public void TextBuffer_OnPostChanged_DoesNotIndentJavaScript() { // Arrange var change = Environment.NewLine; var initialSnapshot = new StringTextSnapshot(" <script>function foo() {}</script>"); var afterChangeSnapshot = new StringTextSnapshot(" <script>function foo() {" + change + "}</script>"); var edit = new TestEdit(28, 0, initialSnapshot, change.Length, afterChangeSnapshot, change); var caret = CreateCaretFrom(28 + change.Length, afterChangeSnapshot); TestTextBuffer textBuffer = null; var focusedTextView = CreateFocusedTextView(() => textBuffer, caret); var documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView); textBuffer = CreateTextBuffer(initialSnapshot, documentTracker); var codeDocumentProvider = CreateCodeDocumentProvider(initialSnapshot.Content); var editorOperationsFactory = CreateOperationsFactoryService(); var braceSmartIndenter = new BraceSmartIndenter(Dispatcher, documentTracker, codeDocumentProvider, editorOperationsFactory); // Act textBuffer.ApplyEdit(edit); // Assert Assert.Equal(afterChangeSnapshot.Content, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content); }
public DefaultRazorLanguageServerCustomMessageTargetTest() { JoinableTaskContext = new JoinableTaskContext(); TextBuffer = new TestTextBuffer(new StringTextSnapshot(string.Empty)); }
public DefaultFileUriProviderTest() { TextBuffer = new TestTextBuffer(StringTextSnapshot.Empty); }