' 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.Threading.Tasks Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense <[UseExportProvider]> Public Class VisualBasicCompletionCommandHandlerTests_InternalsVisibleTo Public Shared ReadOnly Property AllCompletionImplementations() As IEnumerable(Of Object()) Get Return TestStateFactory.GetAllCompletionImplementations() End Get End Property Public Async Function CodeCompletionContainsOtherAssembliesOfSolution(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1", "ClassLibrary2", "ClassLibrary3"})) End Using End Function Public Async Function CodeCompletionContainsOtherAssemblyIfAttributeSuffixIsPresent(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionIsTriggeredWhenDoubleQuoteIsEntered(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) Await state.AssertNoCompletionSession() state.SendTypeChars(""""c) Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionIsEmptyUntilDoubleQuotesAreEntered(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) Await state.AssertNoCompletionSession() state.SendInvokeCompletionList() Await state.WaitForAsynchronousOperationsAsync() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1"})) state.SendTypeChars("("c) Await state.WaitForAsynchronousOperationsAsync() state.SendInvokeCompletionList() Await state.WaitForAsynchronousOperationsAsync() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1"})) state.SendTypeChars(""""c) Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionIsTriggeredWhenCharacterIsEnteredAfterOpeningDoubleQuote(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ]]> ) Await state.AssertNoCompletionSession() state.SendTypeChars("a"c) Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionIsNotTriggeredWhenCharacterIsEnteredThatIsNotRightBesideTheOpeniningDoubleQuote(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ]]> ) Await state.AssertNoCompletionSession() state.SendTypeChars("b"c) Await state.AssertNoCompletionSession() End Using End Function Public Async Function CodeCompletionIsNotTriggeredWhenDoubleQuoteIsEnteredAtStartOfFile(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, $$ ) Await state.AssertNoCompletionSession() state.SendTypeChars("a"c) Await state.WaitForAsynchronousOperationsAsync() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionIsNotTriggeredByArrayElementAccess(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) Dim AssertNoCompletionAndCompletionDoesNotContainClassLibrary1 As Func(Of Task) = Async Function() Await state.AssertNoCompletionSession() state.SendInvokeCompletionList() Await state.WaitForAsynchronousOperationsAsync() Assert.True( state.CurrentCompletionPresenterSession Is Nothing OrElse Not state.CompletionItemsContainsAny({"ClassLibrary1"})) End Function Await AssertNoCompletionAndCompletionDoesNotContainClassLibrary1() state.SendTypeChars("("c) Await state.WaitForAsynchronousOperationsAsync() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1"})) state.SendTypeChars(""""c) Await AssertNoCompletionAndCompletionDoesNotContainClassLibrary1() End Using End Function Private Async Function AssertCompletionListHasItems(completionImplementation As CompletionImplementation, code As String, hasItems As Boolean) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, Imports System.Runtime.CompilerServices Imports System.Reflection <%= code %> ) state.SendInvokeCompletionList() Await state.WaitForAsynchronousOperationsAsync() If hasItems Then Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) Else If Not state.CurrentCompletionPresenterSession Is Nothing Then Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1"})) End If End If End Using End Function Public Async Function AssertCompletionListHasItems_AfterSingleDoubleQuoteAndClosing(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, "", True) End Function Public Async Function AssertCompletionListHasItems_AfterText(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, "", True) End Function Public Async Function AssertCompletionListHasItems_IfCursorIsInSecondParameter(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " Public Async Function AssertCompletionListHasNoItems_IfCursorIsClosingDoubleQuote1(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " Public Async Function AssertCompletionListHasNoItems_IfCursorIsClosingDoubleQuote2(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " Public Async Function AssertCompletionListHasItems_IfNamedParameterIsPresent(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, "", True) End Function Public Async Function AssertCompletionListHasNoItems_IfNumberIsEntered(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, "", False) End Function Public Async Function AssertCompletionListHasNoItems_IfNotInternalsVisibleToAttribute(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, "", False) End Function Public Async Function AssertCompletionListHasItems_IfOtherAttributeIsPresent1(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " Public Async Function AssertCompletionListHasItems_IfOtherAttributeIsPresent2(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, "", True) End Function Public Async Function AssertCompletionListHasItems_IfOtherAttributesAreAhead(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " Public Async Function AssertCompletionListHasItems_IfOtherAttributesAreFollowing(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " ", True) End Function Public Async Function AssertCompletionListHasItems_IfNamespaceIsFollowing(completionImplementation As CompletionImplementation) As Task Await AssertCompletionListHasItems(completionImplementation, " Public Async Function CodeCompletionHasItemsIfInteralVisibleToIsReferencedByTypeAlias(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionDoesNotContainCurrentAssembly(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ]]> ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.False(state.CompletionItemsContainsAny({"TestAssembly"})) End Using End Function Public Async Function CodeCompletionInsertsAssemblyNameOnCommit(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ]]> ) state.SendInvokeCompletionList() Await state.AssertSelectedCompletionItem("ClassLibrary1") state.SendTab() Await state.WaitForAsynchronousOperationsAsync() state.AssertMatchesTextStartingAtLine(1, "") End Using End Function Public Async Function CodeCompletionInsertsPublicKeyOnCommit(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, StrongNameProvider=<%= SigningTestHelpers.DefaultDesktopStrongNameProvider.GetType().AssemblyQualifiedName %>/> ]]> ) state.SendInvokeCompletionList() Await state.AssertSelectedCompletionItem("ClassLibrary1") state.SendTab() Await state.WaitForAsynchronousOperationsAsync() state.AssertMatchesTextStartingAtLine(1, "") End Using End Function Public Async Function CodeCompletionContainsPublicKeyIfKeyIsSpecifiedByAttribute(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, /> <Assembly: System.Reflection.AssemblyKeyFile("<%= SigningTestHelpers.PublicKeyFile %>")> ]]> ) state.SendInvokeCompletionList() Await state.AssertSelectedCompletionItem("ClassLibrary1") state.SendTab() Await state.WaitForAsynchronousOperationsAsync() state.AssertMatchesTextStartingAtLine(1, "") End Using End Function Public Async Function CodeCompletionContainsPublicKeyIfDelayedSigningIsEnabled(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, StrongNameProvider=<%= SigningTestHelpers.DefaultDesktopStrongNameProvider.GetType().AssemblyQualifiedName %>/> DelaySign="True" /> ]]> ) state.SendInvokeCompletionList() Await state.AssertSelectedCompletionItem("ClassLibrary1") state.SendTab() Await state.WaitForAsynchronousOperationsAsync() state.AssertMatchesTextStartingAtLine(1, "") End Using End Function Public Async Function CodeCompletionListIsEmptyIfAttributeIsNotTheBCLAttribute(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, Namespace Test _ Public NotInheritable Class InternalsVisibleToAttribute Inherits System.Attribute Public Sub New(ignore As String) End Sub End Class End Namespace ]]> ) state.SendInvokeCompletionList() Await state.AssertNoCompletionSession() End Using End Function Public Async Function CodeCompletionContainsOnlyAssembliesThatAreNotAlreadyIVT(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1", "ClassLibrary2"})) Assert.True(state.CompletionItemsContainsAll({"ClassLibrary3"})) End Using End Function Public Async Function CodeCompletionContainsOnlyAssembliesThatAreNotAlreadyIVTIfAssemblyNameIsAConstant(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, Namespace A Public NotInheritable Class Constants Private Sub New() End Sub Public Const AssemblyName1 As String = "ClassLibrary1" End Class End Namespace ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1", "ClassLibrary2"})) Assert.True(state.CompletionItemsContainsAll({"ClassLibrary3"})) End Using End Function Public Async Function CodeCompletionContainsOnlyAssembliesThatAreNotAlreadyIVTForDifferentSyntax(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1", "ClassLibrary2", "ClassLibrary3", "ClassLibrary4", "ClassLibrary5", "ClassLibrary6", "ClassLibrary7"})) Assert.True(state.CompletionItemsContainsAll({"ClassLibrary8"})) End Using End Function Public Async Function CodeCompletionContainsOnlyAssembliesThatAreNotAlreadyIVTWithSyntaxError(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ' Not a constant ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() ' ClassLibrary1 must be listed because the existing attribute argument can't be resolved to a constant. Assert.True(state.CompletionItemsContainsAll({"ClassLibrary1"})) End Using End Function Public Async Function CodeCompletionContainsOnlyAssembliesThatAreNotAlreadyIVTWithMoreThanOneDocument(completionImplementation As CompletionImplementation) As Task Using state = TestStateFactory.CreateTestStateFromWorkspace(completionImplementation, ]]> ) state.SendInvokeCompletionList() Await state.AssertCompletionSession() Assert.False(state.CompletionItemsContainsAny({"ClassLibrary1"})) Assert.True(state.CompletionItemsContainsAll({"ClassLibrary2"})) End Using End Function End Class End Namespace