/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/VisualBasicTest/KeywordHighlighting/ForLoopBlockHighlighterTests.vb
361 строка
9 KB
Cyrus Najmabadi
Organize VB imports
27 июн 2025, 21:53
27 июн 2025, 21:53
e9c47fd
Код
Авторство
О чём код?
' 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 Microsoft.CodeAnalysis.VisualBasic.KeywordHighlighting Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.KeywordHighlighting <Trait(Traits.Feature, Traits.Features.KeywordHighlighting)> Public Class ForLoopBlockHighlighterTests Inherits AbstractVisualBasicKeywordHighlighterTests Friend Overrides Function GetHighlighterType() As Type Return GetType(ForLoopBlockHighlighter) End Function <Fact> Public Async Function TestForLoop1() As Task Await TestAsync(<Text> Class C Sub M() {|Cursor:[|For|]|} i = 2 [|To|] 10 [|Step|] 2 If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForLoop2() As Task Await TestAsync(<Text> Class C Sub M() [|For|] i = 2 {|Cursor:[|To|]|} 10 [|Step|] 2 If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForLoop3() As Task Await TestAsync(<Text> Class C Sub M() [|For|] i = 2 [|To|] 10 {|Cursor:[|Step|]|} 2 If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForLoop5() As Task Await TestAsync(<Text> Class C Sub M() [|For|] i = 2 [|To|] 10 [|Step|] 2 If DateTime.Now.Ticks Mod 2 = 0 Then {|Cursor:[|Exit For|]|} Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForLoop6() As Task Await TestAsync(<Text> Class C Sub M() [|For|] i = 2 [|To|] 10 [|Step|] 2 If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else {|Cursor:[|Continue For|]|} End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForLoop4() As Task Await TestAsync(<Text> Class C Sub M() [|For|] i = 2 [|To|] 10 [|Step|] 2 If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If {|Cursor:[|Next|]|} End Sub End Class</Text>) End Function <Fact> Public Async Function TestForEachLoop1() As Task Await TestAsync(<Text> Class C Sub M() {|Cursor:[|For Each|]|} x [|In|] a If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForEachLoop2() As Task Await TestAsync(<Text> Class C Sub M() [|For Each|] x {|Cursor:[|In|]|} a If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForEachLoop3() As Task Await TestAsync(<Text> Class C Sub M() [|For Each|] x [|In|] a If DateTime.Now.Ticks Mod 2 = 0 Then {|Cursor:[|Exit For|]|} Else [|Continue For|] End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForEachLoop4() As Task Await TestAsync(<Text> Class C Sub M() [|For Each|] x [|In|] a If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else {|Cursor:[|Continue For|]|} End If [|Next|] End Sub End Class</Text>) End Function <Fact> Public Async Function TestForEachLoop5() As Task Await TestAsync(<Text> Class C Sub M() [|For Each|] x [|In|] a If DateTime.Now.Ticks Mod 2 = 0 Then [|Exit For|] Else [|Continue For|] End If {|Cursor:[|Next|]|} End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541628"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop1() As Task Await TestAsync(<Text> Class C Sub M() {|Cursor:[|For|]|} i = 1 [|To|] 10 For j = 1 To 10 Step 2 [|Next|] j, i End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop2() As Task Await TestAsync(<Text> Class C Sub M() For i = 1 To 10 {|Cursor:[|For|]|} j = 1 [|To|] 10 [|Step|] 2 [|Next|] j, i End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541628"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop3() As Task Await TestAsync(<Text> Class C Sub M() [|For|] i = 1 [|To|] 10 For j = 1 To 10 Step 2 [|{|Cursor:Next|}|] j, i End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForMatchesNextWithSingleElementIdentifierList() As Task Await TestAsync(<Text> Class C Sub M() [|{|Cursor:For|}|] a = 1 [|To|] 2 [|Next|] a End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForMatchesCorrectNextWithSingleElementIdentifierList() As Task Await TestAsync(<Text> Class C Sub M() [|For|] a = 1 [|To|] 2 [|{|Cursor:Next|}|] a End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForMatchesNextOfCorrectSinglyNestedFor() As Task ' Outer for blocks closed by a Next <identifier list> must go through their children for ' blocks to find the one that closes it (always the last such nested for block if found ' at the first nested level) Await TestAsync(<Text> Class C Sub M() [|{|Cursor:For|}|] a = 1 [|To|] 2 For b = 1 To 2 Next For b = 1 To 2 [|Next|] b, a End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForMatchesNextAtCorrectNestingLevel() As Task Await TestAsync(<Text> Class C Sub M()For a = 1 To 2 For b = 1 To 2 [|{|Cursor:For|}|] c = 1 [|To|] 2 For d = 1 To 2 For e = 1 To 2 For f = 1 To 2 Next f, e [|Next|] d, c Next b, a End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForMatchesNextOfCorrectDoublyNestedFor() As Task ' Outer for blocks closed by a Next <identifier list> must go through their children, ' grandchildren, etc. for blocks to find the one that closes it (always the last nested ' block in the last nested block (... etc.) if ever found) Await TestAsync(<Text> Class C Sub M() [|{|Cursor:For|}|] a = 1 [|To|] 2 For b = 1 To 2 Next For b = 1 To 2 For c = 1 To 2 For d = 1 To 2 Next d, c For c = 1 To 2 [|Next|] c, b, a End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForNotMatchesNextOfIncorrectNestedFor() As Task ' Outer for blocks without a Next should not match the Next of a nested for block unless ' the next block actually closes the outer for. Await TestAsync(<Text> Class C Sub M() [|{|Cursor:For|}|] a = 1 [|To|] 2 For b = 1 To 2 Next For b = 1 To 2 Next b End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_NextMatchesCorrectForIgnoringLoopIdentifierNames() As Task ' The choice of For loop to highlight based on a Next <identifier list> statement should ' be based on structure, not identifier name matches. Await TestAsync(<Text> Class C Sub M() [|For|] a = 0 [|To|] 2 For b = 0 To 3 [|{|Cursor:Next|}|] z, y End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_ForMatchesCorrectNextIgnoringLoopIdentifierNames() As Task ' The choice of Next <identifier list> to highlight statement should be based on ' structure, not identifier name matches. Await TestAsync(<Text> Class C Sub M() [|For|] a = 0 [|To|] 2 For b = 0 To 3 [|{|Cursor:Next|}|] z, y End Sub End Class</Text>) End Function <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544961")> Public Async Function TestForNestedLoop_NextMatchesOutermostForIfNextClosesMoreForsThanExist() As Task Await TestAsync(<Text> Class C Sub M() [|For|] a = 1 [|To|] 2 For b = 1 To 2 [|{|Cursor:Next|}|] z, b, a End Sub End Class</Text>) End Function End Class End Namespace