File: Options\OptionPageSearchHandlerTests.vb
Web Access
Project: src\src\VisualStudio\Core\Test\Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj (Microsoft.VisualStudio.LanguageServices.UnitTests)
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
 
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports Microsoft.VisualStudio.LanguageServices.Implementation.Options
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.VisualStudio.LanguageServices.UnitTests
    Public Class OptionPageSearchHandlerTests
        <WpfFact>
        Public Sub SearchStringNotFound()
            TestSearchString("Show _marshmallows", "frogs")
        End Sub
 
        <WpfFact>
        Public Sub Middle()
            TestSearchString("Show _marshmallows", "mallow",
                Normal("Show "),
                Underline("m"),
                Normal("arsh"),
                Highlight("mallow"),
                Normal("s"))
        End Sub
 
        <WpfFact>
        Public Sub OverlapUnderline()
            TestSearchString("Show mar_shmallows", "rsh",
                Normal("Show ma"),
                Highlight("r"),
                Highlight(Underline("s")),
                Highlight("h"),
                Normal("mallows"))
        End Sub
 
        <WpfFact>
        Public Sub CaseInsensitive()
            TestSearchString("Show mar_shmallows", "show",
                Highlight("Show"),
                Normal(" mar"),
                Underline("s"),
                Normal("hmallows"))
        End Sub
 
        <WpfFact>
        Public Sub HighlightAtStart()
            TestSearchString("Show mar_shmallows", "Show",
                Highlight("Show"),
                Normal(" mar"),
                Underline("s"),
                Normal("hmallows"))
        End Sub
 
        <WpfFact>
        Public Sub HighlightAtStart_NoUnderline()
            TestSearchString("Show marshmallows", "Show",
                Highlight("Show"),
                Normal(" marshmallows"))
        End Sub
 
        <WpfFact>
        Public Sub HighlightAtEnd()
            TestSearchString("Show mar_shmallows", "lows",
                Normal("Show mar"),
                Underline("s"),
                Normal("hmal"),
                Highlight("lows"))
        End Sub
 
        <WpfFact>
        Public Sub HighlightAtEnd_NoUnderline()
            TestSearchString("Show marshmallows", "lows",
                Normal("Show marshmal"),
                Highlight("lows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineAfterEndOfHighlight()
            TestSearchString("Show marshma_llows", "arshma",
                Normal("Show m"),
                Highlight("arshma"),
                Underline("l"),
                Normal("lows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineAtEndOfHighlight()
            TestSearchString("Show marshma_llows", "arshmal",
                Normal("Show m"),
                Highlight("arshma"),
                Highlight(Underline("l")),
                Normal("lows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineAtStartOfHighlight()
            TestSearchString("Show m_arshmallows", "arshmal",
                Normal("Show m"),
                Highlight(Underline("a")),
                Highlight("rshmal"),
                Normal("lows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineBeforeStartOfHighlight()
            TestSearchString("Show m_arshmallows", "rshmal",
                Normal("Show m"),
                Underline("a"),
                Highlight("rshmal"),
                Normal("lows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineAfterStartOfHighlight()
            TestSearchString("Show ma_rshmallows", "arshmal",
                Normal("Show m"),
                Highlight("a"),
                Highlight(Underline("r")),
                Highlight("shmal"),
                Normal("lows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineAndHighlightFirstChar()
            TestSearchString("_Show marshmallows", "show",
                Highlight(Underline("S")),
                Highlight("how"),
                Normal(" marshmallows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineFirstHighlightSecondChar()
            TestSearchString("_Show marshmallows", "how",
                Underline("S"),
                Highlight("how"),
                Normal(" marshmallows"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineLastHighlightSecondLastChar()
            TestSearchString("Show marshmallow_s", "allow",
                Normal("Show marshm"),
                Highlight("allow"),
                Underline("s"))
        End Sub
 
        <WpfFact>
        Public Sub UnderlineAndHighlightLastChar()
            TestSearchString("Show marshmallow_s", "allows",
                Normal("Show marshm"),
                Highlight("allow"),
                Highlight(Underline("s")))
        End Sub
 
        <WpfFact>
        Public Sub HighlightEntireContent()
            TestSearchString("Show marshmallows", "Show marshmallows",
                Highlight("Show marshmallows"))
        End Sub
 
        Private Shared Sub TestSearchString(controlContent As String, searchString As String, ParamArray runs As Run())
            Dim control = New Label With
            {
                .Content = controlContent
            }
 
            Dim handler = New OptionPageSearchHandler(control, controlContent)
 
            If runs.Length = 0 Then
                Assert.False(handler.TryHighlightSearchString(searchString))
            Else
                Assert.True(handler.TryHighlightSearchString(searchString))
                Dim textBlock = Assert.IsType(Of TextBlock)(control.Content)
                Dim actualRuns = textBlock.Inlines.OfType(Of Run).ToArray()
 
                Assert.Equal(runs.Length, actualRuns.Length)
 
                For i = 0 To runs.Length - 1
                    Assert.Equal(runs(i).Text, actualRuns(i).Text)
                    Assert.Equal(runs(i).TextDecorations, actualRuns(i).TextDecorations)
                    Assert.Equal(runs(i).Background, actualRuns(i).Background)
                Next
            End If
        End Sub
 
        Private Shared Function Normal(content As String) As Run
            Return New Run(content)
        End Function
 
        Private Shared Function Underline(content As String) As Run
            Dim run = Normal(content)
            run.TextDecorations.Add(TextDecorations.Underline)
            Return run
        End Function
 
        Private Shared Function Highlight(content As String) As Run
            Return Highlight(Normal(content))
        End Function
 
        Private Shared Function Highlight(run As Run) As Run
            run.Background = OptionPageSearchHandler.HighlightBackground
            Return run
        End Function
    End Class
End Namespace