MiscDiagnosticUpdateSourceTests.vb 5.4 KB
Newer Older
1 2 3 4 5 6
' Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.

Imports System.Collections.Immutable
Imports System.Threading
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.Diagnostics
C
Cyrus Najmabadi 已提交
7
Imports Microsoft.CodeAnalysis.Editor
8
Imports Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics
9
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Diagnostics
10 11 12
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Shared.TestHooks
C
Cyrus Najmabadi 已提交
13
Imports Microsoft.CodeAnalysis.Text.Shared.Extensions
14
Imports Microsoft.VisualStudio.LanguageServices.Implementation.Diagnostics
C
Cyrus Najmabadi 已提交
15
Imports Microsoft.VisualStudio.Text.Tagging
16 17 18 19 20 21 22 23 24 25 26
Imports Roslyn.Test.Utilities
Imports Roslyn.Utilities

Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
    Public Class MiscDiagnosticUpdateSourceTests
        <Fact>
        Public Sub TestMiscSquiggles()
            Dim code = <code>
class 123 { }
                       </code>
            Using workspace = CSharpWorkspaceFactory.CreateWorkspaceFromLines(code.ToString())
27 28 29 30
                Dim miscService = New MiscellaneousDiagnosticAnalyzerService(
                    New TestDiagnosticAnalyzerService(DiagnosticExtensions.GetCompilerDiagnosticAnalyzersMap()),
                    New MockDiagnosticUpdateSourceRegistrationService())

31 32
                Assert.False(miscService.SupportGetDiagnostics)

C
Cyrus Najmabadi 已提交
33
                Dim listener = New AsynchronousOperationListener()
C
Cyrus Najmabadi 已提交
34
                Dim listeners = AsynchronousOperationListener.CreateListeners(
C
Cyrus Najmabadi 已提交
35 36
                    ValueTuple.Create(FeatureAttribute.DiagnosticService, listener),
                    ValueTuple.Create(FeatureAttribute.ErrorSquiggles, listener))
37

38 39
                Dim diagnosticService = New DiagnosticService(listeners)
                diagnosticService.Register(miscService)
40 41 42 43 44

                Dim optionsService = workspace.Services.GetService(Of IOptionService)()

                Dim buffer = workspace.Documents.First().GetTextBuffer()

C
Cyrus Najmabadi 已提交
45 46
                Dim foregroundService = workspace.GetService(Of IForegroundNotificationService)()
                Dim provider = New DiagnosticsSquiggleTaggerProvider(optionsService, diagnosticService, foregroundService, listeners)
C
Cyrus Najmabadi 已提交
47
                Dim tagger = provider.CreateTagger(Of IErrorTag)(buffer)
48 49 50
                Using disposable = TryCast(tagger, IDisposable)
                    Dim analyzer = miscService.CreateIncrementalAnalyzer(workspace)
                    analyzer.AnalyzeSyntaxAsync(workspace.CurrentSolution.Projects.First().Documents.First(), CancellationToken.None).PumpingWait()
51

52
                    listener.CreateWaitTask().PumpingWait()
53

54
                    Dim snapshot = buffer.CurrentSnapshot
C
Cyrus Najmabadi 已提交
55
                    Dim spans = tagger.GetTags(snapshot.GetSnapshotSpanCollection()).ToImmutableArray()
56

57 58 59
                    Assert.True(spans.Count() > 0)
                    Assert.True(spans.All(Function(s) s.Span.Length > 0))
                End Using
60 61 62
            End Using
        End Sub

H
Heejae Chang 已提交
63 64 65 66 67 68
        <Fact>
        Public Sub TestMiscCSharpErrorSource()
            Dim code = <code>
class 123 { }
                       </code>
            Using workspace = CSharpWorkspaceFactory.CreateWorkspaceFromLines(code.ToString())
69 70 71 72
                Dim miscService = New MiscellaneousDiagnosticAnalyzerService(
                    New TestDiagnosticAnalyzerService(DiagnosticExtensions.GetCompilerDiagnosticAnalyzersMap()),
                    New MockDiagnosticUpdateSourceRegistrationService())

73
                Dim buildTool = String.Empty
H
Heejae Chang 已提交
74 75

                AddHandler miscService.DiagnosticsUpdated, Sub(e, a)
76 77
                                                               Dim id = DirectCast(a.Id, BuildToolId)
                                                               buildTool = id.BuildTool
H
Heejae Chang 已提交
78 79 80 81 82
                                                           End Sub

                Dim analyzer = miscService.CreateIncrementalAnalyzer(workspace)
                analyzer.AnalyzeSyntaxAsync(workspace.CurrentSolution.Projects.First().Documents.First(), CancellationToken.None).PumpingWait()

83
                Assert.Equal(PredefinedBuildTools.Live, buildTool)
H
Heejae Chang 已提交
84 85 86 87 88 89 90 91 92 93
            End Using
        End Sub

        <Fact>
        Public Sub TestMiscVBErrorSource()
            Dim code = <code>
Class 123
End Class
                       </code>
            Using workspace = VisualBasicWorkspaceFactory.CreateWorkspaceFromLines(code.ToString())
94 95 96 97
                Dim miscService = New MiscellaneousDiagnosticAnalyzerService(
                    New TestDiagnosticAnalyzerService(DiagnosticExtensions.GetCompilerDiagnosticAnalyzersMap()),
                    New MockDiagnosticUpdateSourceRegistrationService())

98
                Dim buildTool = String.Empty
H
Heejae Chang 已提交
99 100

                AddHandler miscService.DiagnosticsUpdated, Sub(e, a)
101 102
                                                               Dim id = DirectCast(a.Id, BuildToolId)
                                                               buildTool = id.BuildTool
H
Heejae Chang 已提交
103 104 105 106 107
                                                           End Sub

                Dim analyzer = miscService.CreateIncrementalAnalyzer(workspace)
                analyzer.AnalyzeSyntaxAsync(workspace.CurrentSolution.Projects.First().Documents.First(), CancellationToken.None).PumpingWait()

108
                Assert.Equal(PredefinedBuildTools.Live, buildTool)
H
Heejae Chang 已提交
109 110
            End Using
        End Sub
111 112
    End Class
End Namespace