|
// 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.
#nullable disable
using System.Text.RegularExpressions;
using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.CSharp.UnitTests.EmbeddedLanguages.RegularExpressions
{
// These tests were created by trying to enumerate all codepaths in the lexer/parser.
public partial class CSharpRegexParserTests
{
[Fact]
public void TestEmpty()
{
Test(@"""""", @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[0..0)"" Text="""" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOneWhitespace_IgnorePatternWhitespace()
{
Test(@""" """, @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text="" "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestTwoWhitespace_IgnorePatternWhitespace()
{
Test(@""" """, @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text="" "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestEmptyParenComment()
{
Test(@"""(?#)""", @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?#)</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?#)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestSimpleParenComment()
{
Test(@"""(?# )""", @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?# )</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?# )"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnterminatedParenComment1()
{
Test(@"""(?#""", $@"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?#</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_regex_comment}"" Span=""[9..12)"" Text=""(?#"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?#"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnterminatedParenComment2()
{
Test(@"""(?# """, $@"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?# </CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_regex_comment}"" Span=""[9..13)"" Text=""(?# "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?# "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestMultipleComments1()
{
Test(@"""(?#)(?#)""", @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?#)</CommentTrivia>
<CommentTrivia>(?#)</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?#)(?#)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestMultipleComments2()
{
Test(@"""(?#)(?#)""", @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?#)</CommentTrivia>
<CommentTrivia>(?#)</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?#)(?#)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestMultipleComments3()
{
Test(@"""(?#) (?#)""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>
<Trivia>
<CommentTrivia>(?#)</CommentTrivia>
</Trivia> </TextToken>
</Text>
</Sequence>
<EndOfFile>
<Trivia>
<CommentTrivia>(?#)</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?#) (?#)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestMultipleComments4()
{
Test(@"""(?#) (?#)""", @"<Tree>
<CompilationUnit>
<Sequence />
<EndOfFile>
<Trivia>
<CommentTrivia>(?#)</CommentTrivia>
<WhitespaceTrivia> </WhitespaceTrivia>
<CommentTrivia>(?#)</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?#) (?#)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestDoNotTreatAsCommentAfterEscapeInCharacterClass1()
{
Test(@"@""[a\p{Lu}(?#)b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{</OpenBraceToken>
<EscapeCategoryToken>Lu</EscapeCategoryToken>
<CloseBraceToken>}</CloseBraceToken>
</CategoryEscape>
<Text>
<TextToken>(?#)b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..24)"" Text=""[a\p{Lu}(?#)b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDoNotTreatAsCommentAfterEscapeInCharacterClass2()
{
Test(@"@""[a\0(?#)b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
<Text>
<TextToken>(?#)b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a\0(?#)b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDoNotTreatAsCommentAfterEscapeInCharacterClass3()
{
Test(@"@""[a\a(?#)b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>a</TextToken>
</SimpleEscape>
<Text>
<TextToken>(?#)b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a\a(?#)b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDoNotTreatAsCommentAfterEscapeInCharacterClass4()
{
Test(@"@""[a\x00(?#)b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>00</TextToken>
</HexEscape>
<Text>
<TextToken>(?#)b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""[a\x00(?#)b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDoNotTreatAsCommentAfterEscapeInCharacterClass5()
{
Test(@"@""[a\u0000(?#)b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
<Text>
<TextToken>(?#)b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..24)"" Text=""[a\u0000(?#)b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDoNotTreatAsCommentAfterEscapeInCharacterClass6()
{
Test(@"@""[a\](?#)b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>]</TextToken>
</SimpleEscape>
<Text>
<TextToken>(?#)b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a\](?#)b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOpenQuestion1()
{
Test(@"""(?""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[11..11)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""(?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOpenQuestion2()
{
Test(@"""(?""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[11..11)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""(?"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestOpenQuestion3()
{
Test(@"""(? """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(? "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOpenQuestion4()
{
Test(@"""(? """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(? "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestSimpleOptionsNode1()
{
Test(@"""(?i)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>i</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?i)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestSimpleOptionsNode2()
{
Test(@"""(?im)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>im</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?im)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestSimpleOptionsNode3()
{
Test(@"""(?im-x)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>im-x</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?im-x)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestSimpleOptionsNode4()
{
Test(@"""(?im-x+n)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>im-x+n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?im-x+n)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOptionThatDoesNotChangeWhitespaceScanning()
{
Test(@"""(?i) """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>i</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?i) "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOptionThatDoesChangeWhitespaceScanning()
{
Test(@"""(?x) """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>x</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?x) "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOptionThatDoesChangeWhitespaceScanning2()
{
Test(@""" (?x) """, @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>x</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text="" (?x) "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOptionThatDoesChangeWhitespaceScanning3()
{
Test(@""" (?-x) """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text="" (?-x) "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestOptionRestoredWhenGroupPops()
{
Test(@""" ( (?-x) ) """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>(</OpenParenToken>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..20)"" Text="" ( (?-x) ) "" />
<Capture Name=""1"" Span=""[10..19)"" Text=""( (?-x) )"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNestedOptionGroup1()
{
Test(@""" (?-x:) """, @"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text="" (?-x:) "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNestedOptionGroup2()
{
Test(@""" (?-x: ) """, @"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text="" (?-x: ) "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNestedOptionGroup3()
{
Test(@""" (?-x: (?+x: ) ) """, @"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>+x</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>)</CloseParenToken>
</NestedOptionsGrouping>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..26)"" Text="" (?-x: (?+x: ) ) "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestIncompleteOptionsGroup1()
{
Test(@"""(?-x""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken />
</SimpleOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?-x"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestIncompleteOptionsGroup2()
{
Test(@"""(?-x """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken />
</SimpleOptionsGrouping>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?-x "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestIncorrectOptionsGroup3()
{
Test(@"""(?-x :""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken />
</SimpleOptionsGrouping>
<Text>
<TextToken> :</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?-x :"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestIncorrectOptionsGroup4()
{
Test(@"""(?-x )""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken />
</SimpleOptionsGrouping>
<Text>
<TextToken> </TextToken>
</Text>
<Text>
<TextToken>)</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Too_many_close_parens}"" Span=""[14..15)"" Text="")"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?-x )"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestIncorrectOptionsGroup5()
{
Test(@"""(?-x :)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-x</OptionsToken>
<CloseParenToken />
</SimpleOptionsGrouping>
<Text>
<TextToken> :</TextToken>
</Text>
<Text>
<TextToken>)</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Too_many_close_parens}"" Span=""[15..16)"" Text="")"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?-x :)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestCloseParen()
{
Test(@""")""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>)</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Too_many_close_parens}"" Span=""[9..10)"" Text="")"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text="")"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestSingleChar()
{
Test(@"""a""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""a"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTwoCharsChar()
{
Test(@"""ab""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>ab</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""ab"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAsteriskQuantifier()
{
Test(@"""a*""", @"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""a*"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAsteriskQuestionQuantifier()
{
Test(@"""a*?""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""a*?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPlusQuantifier()
{
Test(@"""a+""", @"<Tree>
<CompilationUnit>
<Sequence>
<OneOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<PlusToken>+</PlusToken>
</OneOrMoreQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""a+"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPlusQuestionQuantifier()
{
Test(@"""a+?""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<OneOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<PlusToken>+</PlusToken>
</OneOrMoreQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""a+?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestQuestionQuantifier()
{
Test(@"""a?""", @"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrOneQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<QuestionToken>?</QuestionToken>
</ZeroOrOneQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""a?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestQuestionQuestionQuantifier()
{
Test(@"""a??""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<ZeroOrOneQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<QuestionToken>?</QuestionToken>
</ZeroOrOneQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""a??"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestEmptySimpleGroup()
{
Test(@"""()""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""()"" />
<Capture Name=""1"" Span=""[9..11)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestGroupWithSingleElement()
{
Test(@"""(a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(a)"" />
<Capture Name=""1"" Span=""[9..12)"" Text=""(a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestGroupWithMissingCloseParen()
{
Test(@"""(""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[10..10)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""("" />
<Capture Name=""1"" Span=""[9..10)"" Text=""("" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestGroupWithElementWithMissingCloseParen()
{
Test(@"""(a""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[11..11)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""(a"" />
<Capture Name=""1"" Span=""[9..11)"" Text=""(a"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void JustBar()
{
Test(@"""|""", @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence />
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""|"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void SpaceBar()
{
Test(@""" |""", @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text="" |"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void BarSpace()
{
Test(@"""| """, @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence />
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""| "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void SpaceBarSpace()
{
Test(@""" | """, @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text="" | "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void JustBar_IgnoreWhitespace()
{
Test(@"""|""", @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence />
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""|"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void SpaceBar_IgnoreWhitespace()
{
Test(@""" |""", @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence />
<BarToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text="" |"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void BarSpace_IgnoreWhitespace()
{
Test(@"""| """, @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence />
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""| "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void SpaceBarSpace_IgnoreWhitespace()
{
Test(@""" | """, @"<Tree>
<CompilationUnit>
<Alternation>
<Sequence />
<BarToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text="" | "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void DoubleBar()
{
Test(@"""||""", @"<Tree>
<CompilationUnit>
<Alternation>
<Alternation>
<Sequence />
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""||"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void BarInGroup()
{
Test(@"""(|)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Alternation>
<Sequence />
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(|)"" />
<Capture Name=""1"" Span=""[9..12)"" Text=""(|)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestExactNumericQuantifier()
{
Test(@"""a{0}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ExactNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ExactNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""a{0}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOpenRangeNumericQuantifier()
{
Test(@"""a{0,}""", @"<Tree>
<CompilationUnit>
<Sequence>
<OpenRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CommaToken>,</CommaToken>
<CloseBraceToken>}</CloseBraceToken>
</OpenRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""a{0,}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestClosedRangeNumericQuantifier()
{
Test(@"""a{0,1}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ClosedRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""1"">1</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""a{0,1}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestLargeExactRangeNumericQuantifier1()
{
Test(@"""a{2147483647}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ExactNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""2147483647"">2147483647</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ExactNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""a{2147483647}"" />
</Captures>
</Tree>", RegexOptions.None, runSubTreeTests: false, allowOutOfMemory: true);
}
[Fact]
public void TestLargeExactRangeNumericQuantifier2()
{
Test(@"""a{2147483648}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ExactNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{{</OpenBraceToken>
<NumberToken value=""-2147483648"">2147483648</NumberToken>
<CloseBraceToken>}}</CloseBraceToken>
</ExactNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Capture_group_numbers_must_be_less_than_or_equal_to_Int32_MaxValue}"" Span=""[11..21)"" Text=""2147483648"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""a{{2147483648}}"" />
</Captures>
</Tree>", RegexOptions.None, runSubTreeTests: false);
}
[Fact]
public void TestLargeOpenRangeNumericQuantifier1()
{
Test(@"""a{2147483647,}""", @"<Tree>
<CompilationUnit>
<Sequence>
<OpenRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""2147483647"">2147483647</NumberToken>
<CommaToken>,</CommaToken>
<CloseBraceToken>}</CloseBraceToken>
</OpenRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..23)"" Text=""a{2147483647,}"" />
</Captures>
</Tree>", RegexOptions.None, runSubTreeTests: false, allowOutOfMemory: true);
}
[Fact]
public void TestLargeOpenRangeNumericQuantifier2()
{
Test(@"""a{2147483648,}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<OpenRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{{</OpenBraceToken>
<NumberToken value=""-2147483648"">2147483648</NumberToken>
<CommaToken>,</CommaToken>
<CloseBraceToken>}}</CloseBraceToken>
</OpenRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Capture_group_numbers_must_be_less_than_or_equal_to_Int32_MaxValue}"" Span=""[11..21)"" Text=""2147483648"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..23)"" Text=""a{{2147483648,}}"" />
</Captures>
</Tree>", RegexOptions.None, runSubTreeTests: false);
}
[Fact]
public void TestLargeClosedRangeNumericQuantifier1()
{
Test(@"""a{0,2147483647}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ClosedRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""2147483647"">2147483647</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..24)"" Text=""a{0,2147483647}"" />
</Captures>
</Tree>", RegexOptions.None, runSubTreeTests: false);
}
[Fact]
public void TestLargeClosedRangeNumericQuantifier2()
{
Test(@"""a{0,2147483648}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ClosedRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""-2147483648"">2147483648</NumberToken>
<CloseBraceToken>}}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Capture_group_numbers_must_be_less_than_or_equal_to_Int32_MaxValue}"" Span=""[13..23)"" Text=""2147483648"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..24)"" Text=""a{{0,2147483648}}"" />
</Captures>
</Tree>", RegexOptions.None, runSubTreeTests: false);
}
[Fact]
public void TestBadMinMaxClosedRangeNumericQuantifier()
{
Test(@"""a{1,0}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ClosedRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{{</OpenBraceToken>
<NumberToken value=""1"">1</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""0"">0</NumberToken>
<CloseBraceToken>}}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Illegal_x_y_with_x_less_than_y.Replace(">", ">")}"" Span=""[13..14)"" Text=""0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""a{{1,0}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestLazyExactNumericQuantifier()
{
Test(@"""a{0}?""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<ExactNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ExactNumericQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""a{0}?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestLazyOpenNumericQuantifier()
{
Test(@"""a{0,}?""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<OpenRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CommaToken>,</CommaToken>
<CloseBraceToken>}</CloseBraceToken>
</OpenRangeNumericQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""a{0,}?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestLazyClosedNumericQuantifier()
{
Test(@"""a{0,1}?""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<ClosedRangeNumericQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""0"">0</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""1"">1</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""a{0,1}?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestIncompleteNumericQuantifier1()
{
Test(@"""a{""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""a{"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestIncompleteNumericQuantifier2()
{
Test(@"""a{0""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""a{0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestIncompleteNumericQuantifier3()
{
Test(@"""a{0,""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0,</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""a{0,"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestIncompleteNumericQuantifier4()
{
Test(@"""a{0,1""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0,1</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""a{0,1"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNotNumericQuantifier1()
{
Test(@"""a{0 }""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""a{0 }"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNotNumericQuantifier2()
{
Test(@"""a{0, }""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0,</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""a{0, }"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNotNumericQuantifier3()
{
Test(@"""a{0 ,}""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>,}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""a{0 ,}"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNotNumericQuantifier4()
{
Test(@"""a{0 ,1}""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>,1}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""a{0 ,1}"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNotNumericQuantifier5()
{
Test(@"""a{0, 1}""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0,</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>1}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""a{0, 1}"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNotNumericQuantifier6()
{
Test(@"""a{0,1 }""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>a{0,1</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""a{0,1 }"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/41425")]
public void TestLegalOpenCloseBrace1()
{
Test(@"@""{}""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>{}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""{}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/41425")]
public void TestLegalOpenCloseBrace2()
{
Test(@"@""{1, 2}""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>{1, 2}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""{1, 2}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/41425")]
public void TestDanglingNumericQuantifier1()
{
Test(@"@""{1}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>{{</TextToken>
</Text>
<Text>
<TextToken>1}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""{{"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""{{1}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/41425")]
public void TestDanglingNumericQuantifier2()
{
Test(@"@""{1,2}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>{{</TextToken>
</Text>
<Text>
<TextToken>1,2}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""{{"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""{{1,2}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestLazyQuantifierDueToIgnoredWhitespace()
{
Test(@"""a* ?""", @"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<QuestionToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>?</QuestionToken>
</LazyQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""a* ?"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNonLazyQuantifierDueToNonIgnoredWhitespace()
{
Test(@"""a* ?""", @"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<ZeroOrOneQuantifier>
<Text>
<TextToken> </TextToken>
</Text>
<QuestionToken>?</QuestionToken>
</ZeroOrOneQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""a* ?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAsteriskQuantifierAtStart()
{
Test(@"""*""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>*</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[9..10)"" Text=""*"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""*"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAsteriskQuantifierAtStartOfGroup()
{
Test(@"""(*)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>*</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""*"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(*)"" />
<Capture Name=""1"" Span=""[9..12)"" Text=""(*)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAsteriskQuantifierAfterQuantifier()
{
Test(@"""a**""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>*</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Nested_quantifier_0, "*")}"" Span=""[11..12)"" Text=""*"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""a**"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPlusQuantifierAtStart()
{
Test(@"""+""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>+</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[9..10)"" Text=""+"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""+"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPlusQuantifierAtStartOfGroup()
{
Test(@"""(+)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>+</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""+"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(+)"" />
<Capture Name=""1"" Span=""[9..12)"" Text=""(+)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPlusQuantifierAfterQuantifier()
{
Test(@"""a*+""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>+</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Nested_quantifier_0, "+")}"" Span=""[11..12)"" Text=""+"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""a*+"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestQuestionQuantifierAtStart()
{
Test(@"""?""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[9..10)"" Text=""?"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..10)"" Text=""?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestQuestionQuantifierAtStartOfGroup()
{
Test(@"""(?)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""?"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestQuestionQuantifierAfterQuantifier()
{
Test(@"""a*??""", $@"<Tree>
<CompilationUnit>
<Sequence>
<LazyQuantifier>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<QuestionToken>?</QuestionToken>
</LazyQuantifier>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Nested_quantifier_0, "?")}"" Span=""[12..13)"" Text=""?"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""a*??"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNumericQuantifierAtStart()
{
Test(@"""{0}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>{{</TextToken>
</Text>
<Text>
<TextToken>0}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[9..10)"" Text=""{{"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""{{0}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNumericQuantifierAtStartOfGroup()
{
Test(@"""({0})""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>{{</TextToken>
</Text>
<Text>
<TextToken>0}}</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[10..11)"" Text=""{{"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""({{0}})"" />
<Capture Name=""1"" Span=""[9..14)"" Text=""({{0}})"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNumericQuantifierAfterQuantifier()
{
Test(@"""a*{0}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>{{</TextToken>
</Text>
<Text>
<TextToken>0}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Nested_quantifier_0, "{")}"" Span=""[11..12)"" Text=""{{"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""a*{{0}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonNumericQuantifierAtStart()
{
Test(@"""{0""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>{0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""{0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonNumericQuantifierAtStartOfGroup()
{
Test(@"""({0)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>{0</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""({0)"" />
<Capture Name=""1"" Span=""[9..13)"" Text=""({0)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonNumericQuantifierAfterQuantifier()
{
Test(@"""a*{0""", @"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>{0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""a*{0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestEscapeAtEnd1()
{
Test(@"@""\""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken />
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Illegal_backslash_at_end_of_pattern}"" Span=""[10..11)"" Text=""\"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..11)"" Text=""\"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestEscapeAtEnd2()
{
Test(@"""\\""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken />
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Illegal_backslash_at_end_of_pattern}"" Span=""[9..11)"" Text=""\\"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..11)"" Text=""\\"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestSimpleEscape()
{
Test(@"@""\w""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>w</TextToken>
</CharacterClassEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\w"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPrimaryEscapes1()
{
Test(@"@""\b\B\A\G\Z\z\w\W\s\W\s\S\d\D""", @"<Tree>
<CompilationUnit>
<Sequence>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>b</TextToken>
</AnchorEscape>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>B</TextToken>
</AnchorEscape>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>A</TextToken>
</AnchorEscape>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>G</TextToken>
</AnchorEscape>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>Z</TextToken>
</AnchorEscape>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>z</TextToken>
</AnchorEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>w</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>W</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>s</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>W</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>s</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>S</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>d</TextToken>
</CharacterClassEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>D</TextToken>
</CharacterClassEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..38)"" Text=""\b\B\A\G\Z\z\w\W\s\W\s\S\d\D"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape1()
{
Test(@"@""\c""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Missing_control_character}"" Span=""[11..12)"" Text=""c"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\c"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape2()
{
Test(@"@""\c<""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<Text>
<TextToken><</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text=""<"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c<"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape3()
{
Test(@"@""\ca""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\ca"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape4()
{
Test(@"@""\cA""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\cA"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape5()
{
Test(@"@""\c A""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<Text>
<TextToken> A</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\c A"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape6()
{
Test(@"@""\c(a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text=""("" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\c(a)"" />
<Capture Name=""1"" Span=""[12..15)"" Text=""(a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape7()
{
Test(@"@""\c>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<Text>
<TextToken>></TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text="">"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c>"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape8()
{
Test(@"@""\c?""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ZeroOrOneQuantifier>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<QuestionToken>?</QuestionToken>
</ZeroOrOneQuantifier>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text=""?"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c?"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape9()
{
Test(@"@""\c@""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>@</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c@"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape10()
{
Test(@"@""\c^""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>^</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c^"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape11()
{
Test(@"@""\c_""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>_</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c_"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape12()
{
Test(@"@""\c`""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<Text>
<TextToken>`</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text=""`"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c`"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape13()
{
Test(@"@""\c{""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<Text>
<TextToken>{{</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[12..13)"" Text=""{{"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c{{"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape14()
{
Test(@"@""\ca""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\ca"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape15()
{
Test(@"@""\cA""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\cA"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape16()
{
Test(@"@""\cz""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>z</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\cz"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape17()
{
Test(@"@""\cZ""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>Z</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\cZ"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape18()
{
Test(@"@""\c\""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>\</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c\"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestControlEscape19()
{
Test(@"@""\c]""", @"<Tree>
<CompilationUnit>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>]</TextToken>
</ControlEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\c]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnknownEscape1()
{
Test(@"@""\m""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>m</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "m")}"" Span=""[11..12)"" Text=""m"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\m"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape1()
{
Test(@"@""\x""", $@"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken />
</HexEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..12)"" Text=""\x"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\x"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape2()
{
Test(@"@""\x """, $@"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken />
</HexEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..12)"" Text=""\x"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\x "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape3()
{
Test(@"@""\x0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>0</TextToken>
</HexEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..13)"" Text=""\x0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\x0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape4()
{
Test(@"@""\x0 """, $@"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>0</TextToken>
</HexEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..13)"" Text=""\x0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\x0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape5()
{
Test(@"@""\x00""", @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>00</TextToken>
</HexEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\x00"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape6()
{
Test(@"@""\x00 """, @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>00</TextToken>
</HexEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\x00 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape7()
{
Test(@"@""\x000""", @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>00</TextToken>
</HexEscape>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\x000"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape8()
{
Test(@"@""\xff""", @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>ff</TextToken>
</HexEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\xff"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape9()
{
Test(@"@""\xFF""", @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>FF</TextToken>
</HexEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\xFF"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape10()
{
Test(@"@""\xfF""", @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>fF</TextToken>
</HexEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\xfF"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape11()
{
Test(@"@""\xfff""", @"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>ff</TextToken>
</HexEscape>
<Text>
<TextToken>f</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\xfff"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestHexEscape12()
{
Test(@"@""\xgg""", $@"<Tree>
<CompilationUnit>
<Sequence>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken />
</HexEscape>
<Text>
<TextToken>gg</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..12)"" Text=""\x"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\xgg"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnknownEscape2()
{
Test(@"@""\m """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>m</TextToken>
</SimpleEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "m")}"" Span=""[11..12)"" Text=""m"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\m "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape1()
{
Test(@"@""\u""", $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken />
</UnicodeEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..12)"" Text=""\u"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\u"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape2()
{
Test(@"@""\u0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0</TextToken>
</UnicodeEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..13)"" Text=""\u0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\u0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape3()
{
Test(@"@""\u00""", $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>00</TextToken>
</UnicodeEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..14)"" Text=""\u00"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\u00"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape4()
{
Test(@"@""\u000""", $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>000</TextToken>
</UnicodeEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..15)"" Text=""\u000"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\u000"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape5()
{
Test(@"@""\u0000""", @"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\u0000"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape6()
{
Test(@"@""\u0000 """, @"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""\u0000 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape7()
{
Test(@"@""\u """, $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken />
</UnicodeEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..12)"" Text=""\u"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\u "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape8()
{
Test(@"@""\u0 """, $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0</TextToken>
</UnicodeEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..13)"" Text=""\u0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\u0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestUnicodeEscape9()
{
Test(@"@""\ugggg""", $@"<Tree>
<CompilationUnit>
<Sequence>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken />
</UnicodeEscape>
<Text>
<TextToken>gggg</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[10..12)"" Text=""\u"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\ugggg"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape1()
{
Test(@"@""\0""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape2()
{
Test(@"@""\0 """, @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape3()
{
Test(@"@""\00""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>00</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\00"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape4()
{
Test(@"@""\00 """, @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>00</TextToken>
</OctalEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\00 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape5()
{
Test(@"@""\000""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>000</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\000"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape6()
{
Test(@"@""\000 """, @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>000</TextToken>
</OctalEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\000 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape7()
{
Test(@"@""\0000""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>000</TextToken>
</OctalEscape>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\0000"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape8()
{
Test(@"@""\0000 """, @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>000</TextToken>
</OctalEscape>
<Text>
<TextToken>0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\0000 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape9()
{
Test(@"@""\7""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""7"">7</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 7)}"" Span=""[11..12)"" Text=""7"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\7"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape10()
{
Test(@"@""\78""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>7</TextToken>
</OctalEscape>
<Text>
<TextToken>8</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\78"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscape11()
{
Test(@"@""\8""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""8"">8</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 8)}"" Span=""[11..12)"" Text=""8"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\8"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestOctalEscapeEcmascript1()
{
Test(@"@""\40""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>40</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\40"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestOctalEscapeEcmascript2()
{
Test(@"@""\401""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>40</TextToken>
</OctalEscape>
<Text>
<TextToken>1</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\401"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestOctalEscapeEcmascript3()
{
Test(@"@""\37""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>37</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\37"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestOctalEscapeEcmascript4()
{
Test(@"@""\371""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>371</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\371"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestOctalEscapeEcmascript5()
{
Test(@"@""\0000""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>000</TextToken>
</OctalEscape>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\0000"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEscape1()
{
Test(@"@""\k""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\k"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape2()
{
Test(@"@""\k """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\k "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape3()
{
Test(@"@""\k<""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\k<"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape4()
{
Test(@"@""\k< """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>< </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\k< "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape5()
{
Test(@"@""\k<0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\k<0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape6()
{
Test(@"@""\k<0 """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\k<0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape7()
{
Test(@"@""\k<0>""", @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\k<0>"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape8()
{
Test(@"@""\k<0> """, @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k<0> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape9()
{
Test(@"@""\k<00> """, @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">00</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""\k<00> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape10()
{
Test(@"@""\k<a> """, $@"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_name_0, "a")}"" Span=""[13..14)"" Text=""a"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k<a> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEscape11()
{
Test(@"@""(?<a>)\k<a> """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""(?<a>)\k<a> "" />
<Capture Name=""1"" Span=""[10..16)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[10..16)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureEcmaEscape1()
{
Test(@"@""\k""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\k"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape2()
{
Test(@"@""\k """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\k "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape3()
{
Test(@"@""\k<""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\k<"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape4()
{
Test(@"@""\k< """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>< </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\k< "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape5()
{
Test(@"@""\k<0""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\k<0"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape6()
{
Test(@"@""\k<0 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\k<0 "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape7()
{
Test(@"@""\k<0>""", @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\k<0>"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureEcmaEscape8()
{
Test(@"@""\k<0> """, @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k<0> "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestKCaptureQuoteEscape3()
{
Test(@"@""\k'""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>'</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_named_back_reference.Replace("<", "<").Replace(">", ">")}"" Span=""[10..12)"" Text=""\k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\k'"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape4()
{
Test(@"@""\k' """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>' </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\k' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape5()
{
Test(@"@""\k'0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>'0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\k'0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape6()
{
Test(@"@""\k'0 """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>'0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\k'0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape7()
{
Test(@"@""\k'0'""", @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<SingleQuoteToken>'</SingleQuoteToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
</KCaptureEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\k'0'"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape8()
{
Test(@"@""\k'0' """, @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<SingleQuoteToken>'</SingleQuoteToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k'0' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape9()
{
Test(@"@""\k'00' """, @"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<SingleQuoteToken>'</SingleQuoteToken>
<NumberToken value=""0"">00</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""\k'00' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape10()
{
Test(@"@""\k'a' """, $@"<Tree>
<CompilationUnit>
<Sequence>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<SingleQuoteToken>'</SingleQuoteToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_name_0, "a")}"" Span=""[13..14)"" Text=""a"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k'a' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureQuoteEscape11()
{
Test(@"@""(?<a>)\k'a' """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<KCaptureEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<SingleQuoteToken>'</SingleQuoteToken>
</KCaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""(?<a>)\k'a' "" />
<Capture Name=""1"" Span=""[10..16)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[10..16)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureWrongQuote1()
{
Test(@"@""\k<0' """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken><0' </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k<0' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestKCaptureWrongQuote2()
{
Test(@"@""\k'0> """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>k</TextToken>
</SimpleEscape>
<Text>
<TextToken>'0> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unrecognized_escape_sequence_0, "k")}"" Span=""[11..12)"" Text=""k"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\k'0> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape1()
{
Test(@"@""\""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken />
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Illegal_backslash_at_end_of_pattern}"" Span=""[10..11)"" Text=""\"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..11)"" Text=""\"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape2()
{
Test(@"@""\ """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken> </TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\ "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape3()
{
Test(@"@""\<""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\<"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape4()
{
Test(@"@""\< """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\< "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape5()
{
Test(@"@""\<0""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\<0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape6()
{
Test(@"@""\<0 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken>0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\<0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape7()
{
Test(@"@""\<0>""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\<0>"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape8()
{
Test(@"@""\<0> """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\<0> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape9()
{
Test(@"@""\<00> """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">00</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\<00> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape10()
{
Test(@"@""\<a> """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_name_0, "a")}"" Span=""[12..13)"" Text=""a"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\<a> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEscape11()
{
Test(@"@""(?<a>)\<a> """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..21)"" Text=""(?<a>)\<a> "" />
<Capture Name=""1"" Span=""[10..16)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[10..16)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureEcmaEscape1()
{
Test(@"@""\""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken />
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Illegal_backslash_at_end_of_pattern}"" Span=""[10..11)"" Text=""\"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..11)"" Text=""\"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape2()
{
Test(@"@""\ """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken> </TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\ "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape3()
{
Test(@"@""\<""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\<"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape4()
{
Test(@"@""\< """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\< "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape5()
{
Test(@"@""\<0""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\<0"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape6()
{
Test(@"@""\<0 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken>0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\<0 "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape7()
{
Test(@"@""\<0>""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\<0>"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureEcmaEscape8()
{
Test(@"@""\<0> """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\<0> "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCaptureQuoteEscape3()
{
Test(@"@""\'""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>'</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\'"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape4()
{
Test(@"@""\' """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>'</TextToken>
</SimpleEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape5()
{
Test(@"@""\'0""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>'</TextToken>
</SimpleEscape>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\'0"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape6()
{
Test(@"@""\'0 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>'</TextToken>
</SimpleEscape>
<Text>
<TextToken>0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\'0 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape7()
{
Test(@"@""\'0'""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<SingleQuoteToken>'</SingleQuoteToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
</CaptureEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""\'0'"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape8()
{
Test(@"@""\'0' """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<SingleQuoteToken>'</SingleQuoteToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\'0' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape9()
{
Test(@"@""\'00' """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<SingleQuoteToken>'</SingleQuoteToken>
<NumberToken value=""0"">00</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""\'00' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape10()
{
Test(@"@""\'a' """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<SingleQuoteToken>'</SingleQuoteToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_name_0, "a")}"" Span=""[12..13)"" Text=""a"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\'a' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureQuoteEscape11()
{
Test(@"@""(?<a>)\'a' """, @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<CaptureEscape>
<BackslashToken>\</BackslashToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<SingleQuoteToken>'</SingleQuoteToken>
</CaptureEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..21)"" Text=""(?<a>)\'a' "" />
<Capture Name=""1"" Span=""[10..16)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[10..16)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureWrongQuote1()
{
Test(@"@""\<0' """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken><</TextToken>
</SimpleEscape>
<Text>
<TextToken>0' </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\<0' "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureWrongQuote2()
{
Test(@"@""\'0> """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>'</TextToken>
</SimpleEscape>
<Text>
<TextToken>0> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""\'0> "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDefinedCategoryEscape()
{
Test(@"""\\p{Cc}""", @"<Tree>
<CompilationUnit>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{</OpenBraceToken>
<EscapeCategoryToken>Cc</EscapeCategoryToken>
<CloseBraceToken>}</CloseBraceToken>
</CategoryEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""\\p{Cc}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDefinedCategoryEscapeWithSpaces1()
{
Test(@"""\\p{ Cc }""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>{{ Cc }}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Incomplete_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""\\p{{ Cc }}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestDefinedCategoryEscapeWithSpaces2()
{
Test(@"""\\p{ Cc }""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>{{</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>Cc</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Incomplete_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""\\p{{ Cc }}"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestDefinedCategoryEscapeWithSpaces3()
{
Test(@"""\\p {Cc}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>{{Cc}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""\\p {{Cc}}"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestUndefinedCategoryEscape()
{
Test(@"""\\p{xxx}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{{</OpenBraceToken>
<EscapeCategoryToken>xxx</EscapeCategoryToken>
<CloseBraceToken>}}</CloseBraceToken>
</CategoryEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unknown_property_0, "xxx")}"" Span=""[13..16)"" Text=""xxx"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""\\p{{xxx}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTooShortCategoryEscape1()
{
Test(@"""\\p""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Incomplete_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""\\p"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTooShortCategoryEscape2()
{
Test(@"""\\p{""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>{{</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Incomplete_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""\\p{{"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTooShortCategoryEscape3()
{
Test(@"""\\p{}""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>{{}}</TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Incomplete_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""\\p{{}}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTooShortCategoryEscape4()
{
Test(@"""\\p{} """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>{{}} </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unknown_property}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""\\p{{}} "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTooShortCategoryEscape5()
{
Test(@"""\\p {} """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken> {{}} </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""\\p {{}} "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestTooShortCategoryEscape6()
{
Test(@"""\\p{Cc """, $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
</SimpleEscape>
<Text>
<TextToken>{{Cc </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Incomplete_character_escape}"" Span=""[9..12)"" Text=""\\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""\\p{{Cc "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCategoryNameWithDash()
{
Test(@"""\\p{IsArabicPresentationForms-A}""", @"<Tree>
<CompilationUnit>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{</OpenBraceToken>
<EscapeCategoryToken>IsArabicPresentationForms-A</EscapeCategoryToken>
<CloseBraceToken>}</CloseBraceToken>
</CategoryEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..41)"" Text=""\\p{IsArabicPresentationForms-A}"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonCapturingGrouping1()
{
Test(@"""(?:)""", @"<Tree>
<CompilationUnit>
<Sequence>
<NonCapturingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NonCapturingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?:)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonCapturingGrouping2()
{
Test(@"""(?:a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<NonCapturingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ColonToken>:</ColonToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NonCapturingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?:a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonCapturingGrouping3()
{
Test(@"""(?:""", $@"<Tree>
<CompilationUnit>
<Sequence>
<NonCapturingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken />
</NonCapturingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?:"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNonCapturingGrouping4()
{
Test(@"""(?: """, $@"<Tree>
<CompilationUnit>
<Sequence>
<NonCapturingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken />
</NonCapturingGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?: "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestPositiveLookaheadGrouping1()
{
Test(@"""(?=)""", @"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</PositiveLookaheadGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?=)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPositiveLookaheadGrouping2()
{
Test(@"""(?=a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<EqualsToken>=</EqualsToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</PositiveLookaheadGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?=a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPositiveLookaheadGrouping3()
{
Test(@"""(?=""", $@"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken />
</PositiveLookaheadGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?="" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPositiveLookaheadGrouping4()
{
Test(@"""(?= """, $@"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken />
</PositiveLookaheadGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?= "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNegativeLookaheadGrouping1()
{
Test(@"""(?!)""", @"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NegativeLookaheadGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?!)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegativeLookaheadGrouping2()
{
Test(@"""(?!a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ExclamationToken>!</ExclamationToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NegativeLookaheadGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?!a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegativeLookaheadGrouping3()
{
Test(@"""(?!""", $@"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken />
</NegativeLookaheadGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?!"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegativeLookaheadGrouping4()
{
Test(@"""(?! """, $@"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookaheadGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken />
</NegativeLookaheadGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?! "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestAtomicGrouping1()
{
Test(@"""(?>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<AtomicGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</AtomicGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAtomicGrouping2()
{
Test(@"""(?>a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<AtomicGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</AtomicGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?>a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAtomicGrouping3()
{
Test(@"""(?>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<AtomicGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</AtomicGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?>"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestAtomicGrouping4()
{
Test(@"""(?> """, $@"<Tree>
<CompilationUnit>
<Sequence>
<AtomicGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</AtomicGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?> "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestPositiveLookbehindGrouping1()
{
Test(@"""(?<=)""", @"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</PositiveLookbehindGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<=)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPositiveLookbehindGrouping2()
{
Test(@"""(?<=a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<EqualsToken>=</EqualsToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</PositiveLookbehindGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<=a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPositiveLookbehindGrouping3()
{
Test(@"""(?<=""", $@"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken />
</PositiveLookbehindGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?<="" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestPositiveLookbehindGrouping4()
{
Test(@"""(?<= """, $@"<Tree>
<CompilationUnit>
<Sequence>
<PositiveLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken />
</PositiveLookbehindGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<= "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNegativeLookbehindGrouping1()
{
Test(@"""(?<!)""", @"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NegativeLookbehindGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<!)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegativeLookbehindGrouping2()
{
Test(@"""(?<!a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<ExclamationToken>!</ExclamationToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NegativeLookbehindGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<!a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegativeLookbehindGrouping3()
{
Test(@"""(?<!""", $@"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken />
</NegativeLookbehindGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?<!"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegativeLookbehindGrouping4()
{
Test(@"""(?<! """, $@"<Tree>
<CompilationUnit>
<Sequence>
<NegativeLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken />
</NegativeLookbehindGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<! "" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture1()
{
Test(@"""(?<""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..12)"" Text=""(?<"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?<"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture2()
{
Test(@"""(?<>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[12..13)"" Text="">"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?<>"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture3()
{
Test(@"""(?<a""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..12)"" Text=""(?<"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?<a"" />
<Capture Name=""1"" Span=""[9..13)"" Text=""(?<a"" />
<Capture Name=""a"" Span=""[9..13)"" Text=""(?<a"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture4()
{
Test(@"""(?<a>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<a>"" />
<Capture Name=""1"" Span=""[9..14)"" Text=""(?<a>"" />
<Capture Name=""a"" Span=""[9..14)"" Text=""(?<a>"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture5()
{
Test(@"""(?<a>a""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<a>a"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>a"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>a"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture6()
{
Test(@"""(?<a>a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<a>a)"" />
<Capture Name=""1"" Span=""[9..16)"" Text=""(?<a>a)"" />
<Capture Name=""a"" Span=""[9..16)"" Text=""(?<a>a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture7()
{
Test(@"""(?<a >a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken />
<Sequence>
<Text>
<TextToken> >a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[13..14)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<a >a)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a >a)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a >a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNamedCapture8()
{
Test(@"""(?<a >a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[13..14)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<a >a)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a >a)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a >a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture9()
{
Test(@"""(?< a>a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken> a>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[12..13)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?< a>a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNamedCapture10()
{
Test(@"""(?< a>a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>a>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[12..13)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?< a>a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture11()
{
Test(@"""(?< a >a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken> a >a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[12..13)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?< a >a)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNamedCapture12()
{
Test(@"""(?< a >a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>a</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[12..13)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?< a >a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedCapture13()
{
Test(@"""(?<ab>a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""ab"">ab</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<ab>a)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<ab>a)"" />
<Capture Name=""ab"" Span=""[9..17)"" Text=""(?<ab>a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestZeroNumberCapture()
{
Test(@"""(?<0>a)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Capture_number_cannot_be_zero}"" Span=""[12..13)"" Text=""0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<0>a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNumericNumberCapture1()
{
Test(@"""(?<1>a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<1>a)"" />
<Capture Name=""1"" Span=""[9..16)"" Text=""(?<1>a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNumericNumberCapture2()
{
Test(@"""(?<10>a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""10"">10</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<10>a)"" />
<Capture Name=""10"" Span=""[9..17)"" Text=""(?<10>a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNumericNumberCapture3()
{
Test(@"""(?<1>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<1>)"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<1>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNumericNumberCapture4()
{
Test(@"""(?<1> )""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<1> )"" />
<Capture Name=""1"" Span=""[9..16)"" Text=""(?<1> )"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNumericNumberCapture6()
{
Test(@"""(?<1> )""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<1> )"" />
<Capture Name=""1"" Span=""[9..16)"" Text=""(?<1> )"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestBalancingGrouping1()
{
Test(@"""(?<-""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[13..13)"" Text="""" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?<-"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping2()
{
Test(@"""(?<-0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..12)"" Text=""(?<"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<-0"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping3()
{
Test(@"""(?<-0)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[14..15)"" Text="")"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<-0)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping4()
{
Test(@"""(?<-0>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<-0>"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping5()
{
Test(@"""(?<-0>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<-0>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping6()
{
Test(@"""(?<-0 >)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[14..15)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<-0 >)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping7()
{
Test(@"""(?<- 0 >)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>0</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[13..14)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?<- 0 >)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping8()
{
Test(@"""(?<- 0>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>0></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[13..14)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<- 0>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping9()
{
Test(@"""(?<-00>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">00</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<-00>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping10()
{
Test(@"""(?<a-""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[14..14)"" Text="""" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?<a-"" />
<Capture Name=""1"" Span=""[9..14)"" Text=""(?<a-"" />
<Capture Name=""a"" Span=""[9..14)"" Text=""(?<a-"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping11()
{
Test(@"""(?<a-0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[9..12)"" Text=""(?<"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?<a-0"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a-0"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a-0"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping12()
{
Test(@"""(?<a-0)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[15..16)"" Text="")"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<a-0)"" />
<Capture Name=""1"" Span=""[9..16)"" Text=""(?<a-0)"" />
<Capture Name=""a"" Span=""[9..16)"" Text=""(?<a-0)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping13()
{
Test(@"""(?<a-0>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[16..16)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<a-0>"" />
<Capture Name=""1"" Span=""[9..16)"" Text=""(?<a-0>"" />
<Capture Name=""a"" Span=""[9..16)"" Text=""(?<a-0>"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping14()
{
Test(@"""(?<a-0>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<a-0>)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a-0>)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a-0>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping15()
{
Test(@"""(?<a-0 >)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[15..16)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?<a-0 >)"" />
<Capture Name=""1"" Span=""[9..18)"" Text=""(?<a-0 >)"" />
<Capture Name=""a"" Span=""[9..18)"" Text=""(?<a-0 >)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping16()
{
Test(@"""(?<a- 0 >)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>0</TextToken>
</Text>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[14..15)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..19)"" Text=""(?<a- 0 >)"" />
<Capture Name=""1"" Span=""[9..19)"" Text=""(?<a- 0 >)"" />
<Capture Name=""a"" Span=""[9..19)"" Text=""(?<a- 0 >)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping17()
{
Test(@"""(?<a- 0>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>0></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[14..15)"" Text="" "" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?<a- 0>)"" />
<Capture Name=""1"" Span=""[9..18)"" Text=""(?<a- 0>)"" />
<Capture Name=""a"" Span=""[9..18)"" Text=""(?<a- 0>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGrouping18()
{
Test(@"""(?<a-00>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">00</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?<a-00>)"" />
<Capture Name=""1"" Span=""[9..18)"" Text=""(?<a-00>)"" />
<Capture Name=""a"" Span=""[9..18)"" Text=""(?<a-00>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingUndefinedReference1()
{
Test(@"""(?<-1>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[13..14)"" Text=""1"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?<-1>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingDefinedReferenceBehind()
{
Test(@"""()(?<-1>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""()(?<-1>)"" />
<Capture Name=""1"" Span=""[9..11)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingDefinedReferenceAhead()
{
Test(@"""(?<-1>)()""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?<-1>)()"" />
<Capture Name=""1"" Span=""[16..18)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingNamedReferenceBehind()
{
Test(@"""(?<a>)(?<-a>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?<a>)(?<-a>)"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingNamedReferenceAhead()
{
Test(@"""(?<-a>)(?<a>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?<-a>)(?<a>)"" />
<Capture Name=""1"" Span=""[16..22)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[16..22)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingNumberedReferenceBehind()
{
Test(@"""(?<4>)(?<-4>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""4"">4</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""4"">4</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?<4>)(?<-4>)"" />
<Capture Name=""4"" Span=""[9..15)"" Text=""(?<4>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingNumberedReferenceAhead()
{
Test(@"""(?<-4>)(?<4>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""4"">4</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<NumberToken value=""4"">4</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?<-4>)(?<4>)"" />
<Capture Name=""4"" Span=""[16..22)"" Text=""(?<4>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumberedExists()
{
Test(@"""(?<a>)(?<b>)(?<-1>)(?<-2>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""b"">b</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..35)"" Text=""(?<a>)(?<b>)(?<-1>)(?<-2>)"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""2"" Span=""[15..21)"" Text=""(?<b>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""b"" Span=""[15..21)"" Text=""(?<b>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers()
{
Test(@"""()()(?<-0>)(?<-1>)(?<-2>)(?<-3>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[38..39)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..41)"" Text=""()()(?<-0>)(?<-1>)(?<-2>)(?<-3>)"" />
<Capture Name=""1"" Span=""[9..11)"" Text=""()"" />
<Capture Name=""2"" Span=""[11..13)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers1()
{
Test(@"""()(?<a>)(?<-0>)(?<-1>)(?<-2>)(?<-3>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[42..43)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..45)"" Text=""()(?<a>)(?<-0>)(?<-1>)(?<-2>)(?<-3>)"" />
<Capture Name=""1"" Span=""[9..11)"" Text=""()"" />
<Capture Name=""2"" Span=""[11..17)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[11..17)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers2()
{
Test(@"""(?<a>)()(?<-0>)(?<-1>)(?<-2>)(?<-3>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[42..43)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..45)"" Text=""(?<a>)()(?<-0>)(?<-1>)(?<-2>)(?<-3>)"" />
<Capture Name=""1"" Span=""[15..17)"" Text=""()"" />
<Capture Name=""2"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers3()
{
Test(@"""(?<a>)(?<b>)(?<-0>)(?<-1>)(?<-2>)(?<-3>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""b"">b</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[46..47)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..49)"" Text=""(?<a>)(?<b>)(?<-0>)(?<-1>)(?<-2>)(?<-3>)"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""2"" Span=""[15..21)"" Text=""(?<b>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""b"" Span=""[15..21)"" Text=""(?<b>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers4()
{
Test(@"""(?<-0>)(?<-1>)(?<-2>)(?<-3>)()()""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[34..35)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..41)"" Text=""(?<-0>)(?<-1>)(?<-2>)(?<-3>)()()"" />
<Capture Name=""1"" Span=""[37..39)"" Text=""()"" />
<Capture Name=""2"" Span=""[39..41)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers5_1()
{
Test(@"""(?<-0>)(?<-1>)(?<-2>)(?<-3>)()(?""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[27..28)"" Text=""2"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[34..35)"" Text=""3"" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[39..40)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[40..41)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[41..41)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..41)"" Text=""(?<-0>)(?<-1>)(?<-2>)(?<-3>)()(?"" />
<Capture Name=""1"" Span=""[37..39)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers5()
{
Test(@"""(?<-0>)(?<-1>)(?<-2>)(?<-3>)()(?<a>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[34..35)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..45)"" Text=""(?<-0>)(?<-1>)(?<-2>)(?<-3>)()(?<a>)"" />
<Capture Name=""1"" Span=""[37..39)"" Text=""()"" />
<Capture Name=""2"" Span=""[39..45)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[39..45)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers6()
{
Test(@"""(?<-0>)(?<-1>)(?<-2>)(?<-3>)(?<a>)()""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[34..35)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..45)"" Text=""(?<-0>)(?<-1>)(?<-2>)(?<-3>)(?<a>)()"" />
<Capture Name=""1"" Span=""[43..45)"" Text=""()"" />
<Capture Name=""2"" Span=""[37..43)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[37..43)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers7_1()
{
Test(@"""(?<-0>)(?<-1>)(?<-2>)(?<-3>)(?<a>)(?""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[27..28)"" Text=""2"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[34..35)"" Text=""3"" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[43..44)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[44..45)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[45..45)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..45)"" Text=""(?<-0>)(?<-1>)(?<-2>)(?<-3>)(?<a>)(?"" />
<Capture Name=""1"" Span=""[37..43)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[37..43)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestBalancingGroupingAutoNumbers7()
{
Test(@"""(?<-0>)(?<-1>)(?<-2>)(?<-3>)(?<a>)(?<b>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""1"">1</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""2"">2</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""3"">3</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""b"">b</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 3)}"" Span=""[34..35)"" Text=""3"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..49)"" Text=""(?<-0>)(?<-1>)(?<-2>)(?<-3>)(?<a>)(?<b>)"" />
<Capture Name=""1"" Span=""[37..43)"" Text=""(?<a>)"" />
<Capture Name=""2"" Span=""[43..49)"" Text=""(?<b>)"" />
<Capture Name=""a"" Span=""[37..43)"" Text=""(?<a>)"" />
<Capture Name=""b"" Span=""[43..49)"" Text=""(?<b>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestReferenceToBalancingGroupCaptureName1()
{
Test(@"""(?<a-0>)(?<b-a>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""b"">b</CaptureNameToken>
<MinusToken>-</MinusToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..25)"" Text=""(?<a-0>)(?<b-a>)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a-0>)"" />
<Capture Name=""2"" Span=""[17..25)"" Text=""(?<b-a>)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a-0>)"" />
<Capture Name=""b"" Span=""[17..25)"" Text=""(?<b-a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestReferenceToBalancingGroupCaptureName2()
{
Test(@"""(?<a-0>)(?<-a>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..24)"" Text=""(?<a-0>)(?<-a>)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a-0>)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a-0>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestReferenceToSameBalancingGroup()
{
Test(@"""(?<a-a>)""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<a-a>)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a-a>)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a-a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestQuoteNamedCapture()
{
Test(@"""(?'a')""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<SingleQuoteToken>'</SingleQuoteToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?'a')"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?'a')"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?'a')"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestQuoteBalancingCapture1()
{
Test(@"""(?'-0')""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken />
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?'-0')"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestQuoteBalancingCapture2()
{
Test(@"""(?'a-0')""", @"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken>'</SingleQuoteToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?'a-0')"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?'a-0')"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?'a-0')"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestMismatchedOpenCloseCapture1()
{
Test(@"""(?<a-0')""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<GreaterThanToken />
<Sequence>
<Text>
<TextToken>'</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[15..16)"" Text=""'"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?<a-0')"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?<a-0')"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?<a-0')"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestMismatchedOpenCloseCapture2()
{
Test(@"""(?'a-0>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BalancingGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<MinusToken>-</MinusToken>
<NumberToken value=""0"">0</NumberToken>
<SingleQuoteToken />
<Sequence>
<Text>
<TextToken>></TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</BalancingGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Invalid_group_name_Group_names_must_begin_with_a_word_character}"" Span=""[15..16)"" Text="">"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?'a-0>)"" />
<Capture Name=""1"" Span=""[9..17)"" Text=""(?'a-0>)"" />
<Capture Name=""a"" Span=""[9..17)"" Text=""(?'a-0>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace, allowIndexOutOfRange: true);
}
[Fact]
public void TestConditionalCapture1()
{
Test(@"""(?(""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken />
</SimpleGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..12)"" Text=""(?("" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture2()
{
Test(@"""(?(0""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken />
<Sequence />
<CloseParenToken />
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed}"" Span=""[12..13)"" Text=""0"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..13)"" Text=""(?(0"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture3()
{
Test(@"""(?(0)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Sequence />
<CloseParenToken />
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?(0)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture4()
{
Test(@"""(?(0))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?(0))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture5()
{
Test(@"""(?(0)a)""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?(0)a)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture6()
{
Test(@"""(?(0)a|)""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Alternation>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?(0)a|)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture7()
{
Test(@"""(?(0)a|b)""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Alternation>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?(0)a|b)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture8()
{
Test(@"""(?(0)a|b|)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence />
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[17..18)"" Text=""|"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..19)"" Text=""(?(0)a|b|)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture9()
{
Test(@"""(?(0)a|b|c)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>c</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[17..18)"" Text=""|"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..20)"" Text=""(?(0)a|b|c)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture10()
{
Test(@"""(?(0 )""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken />
<Sequence />
<CloseParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Malformed}"" Span=""[12..13)"" Text=""0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?(0 )"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture11()
{
Test(@"""(?(1))""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""1"">1</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Reference_to_undefined_group}"" Span=""[12..13)"" Text=""1"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?(1))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture12()
{
Test(@"""(?(00))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">00</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?(00))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture13()
{
Test(@"""(?(0)a|b|c|d)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Alternation>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>c</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>d</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[17..18)"" Text=""|"" />
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[19..20)"" Text=""|"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?(0)a|b|c|d)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestConditionalCapture14()
{
Test(@"""(?(0)a|b|c|d|e)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<NumberToken value=""0"">0</NumberToken>
<CloseParenToken>)</CloseParenToken>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>c</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>d</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>e</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[17..18)"" Text=""|"" />
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[19..20)"" Text=""|"" />
<Diagnostic Message=""{FeaturesResources.Too_many_bars_in_conditional_grouping}"" Span=""[21..22)"" Text=""|"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..24)"" Text=""(?(0)a|b|c|d|e)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedConditionalCapture1()
{
Test(@"""(?(a))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?(a))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedConditionalCapture2()
{
Test(@"""(?<a>)(?(a))""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<ConditionalCaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OpenParenToken>(</OpenParenToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<CloseParenToken>)</CloseParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalCaptureGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..21)"" Text=""(?<a>)(?(a))"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedConditionalCapture3()
{
Test(@"""(?<a>)(?(a ))""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>)</CloseParenToken>
</SimpleGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?<a>)(?(a ))"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNamedConditionalCapture4()
{
Test(@"""(?<a>)(?( a))""", @"<Tree>
<CompilationUnit>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>
<Trivia>
<WhitespaceTrivia> </WhitespaceTrivia>
</Trivia>a</TextToken>
</Text>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..22)"" Text=""(?<a>)(?( a))"" />
<Capture Name=""1"" Span=""[9..15)"" Text=""(?<a>)"" />
<Capture Name=""a"" Span=""[9..15)"" Text=""(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestNestedGroupsInConditionalGrouping1()
{
Test(@"""(?(()a()))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Text>
<TextToken>a</TextToken>
</Text>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..19)"" Text=""(?(()a()))"" />
<Capture Name=""1"" Span=""[12..14)"" Text=""()"" />
<Capture Name=""2"" Span=""[15..17)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNestedGroupsInConditionalGrouping2()
{
Test(@"""(?((?<x>)a(?<y>)))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""x"">x</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<Text>
<TextToken>a</TextToken>
</Text>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""y"">y</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..27)"" Text=""(?((?<x>)a(?<y>)))"" />
<Capture Name=""1"" Span=""[12..18)"" Text=""(?<x>)"" />
<Capture Name=""2"" Span=""[19..25)"" Text=""(?<y>)"" />
<Capture Name=""x"" Span=""[12..18)"" Text=""(?<x>)"" />
<Capture Name=""y"" Span=""[19..25)"" Text=""(?<y>)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptureInConditionalGrouping1()
{
Test(@"""(?(?'""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken />
<SingleQuoteToken />
<Sequence />
<CloseParenToken />
</CaptureGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[11..14)"" Text=""(?'"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?(?'"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestCaptureInConditionalGrouping2()
{
Test(@"""(?(?'x'))""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SingleQuoteToken>'</SingleQuoteToken>
<CaptureNameToken value=""x"">x</CaptureNameToken>
<SingleQuoteToken>'</SingleQuoteToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?(?'x'))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestCommentInConditionalGrouping1()
{
Test(@"""(?(?#""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<CommentTrivia>#</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_regex_comment}"" Span=""[11..14)"" Text=""(?#"" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[11..12)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[12..13)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?(?#"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestCommentInConditionalGrouping2()
{
Test(@"""(?(?#)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<CommentTrivia>#)</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_cannot_be_comments}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[11..12)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[12..13)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?(?#)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestCommentInConditionalGrouping3()
{
Test(@"""(?(?#))""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<Text>
<TextToken>?</TextToken>
</Text>
</Sequence>
<CloseParenToken />
</SimpleGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile>
<Trivia>
<CommentTrivia>#))</CommentTrivia>
</Trivia>
</EndOfFile>
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_cannot_be_comments}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[11..12)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Quantifier_x_y_following_nothing}"" Span=""[12..13)"" Text=""?"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[16..16)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?(?#))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestAngleCaptureInConditionalGrouping1()
{
Test(@"""(?(?<""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken />
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</CaptureGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[11..14)"" Text=""(?<"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..14)"" Text=""(?(?<"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestAngleCaptureInConditionalGrouping2()
{
Test(@"""(?(?<a""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken />
<Sequence />
<CloseParenToken />
</CaptureGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_grouping_construct}"" Span=""[11..14)"" Text=""(?<"" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..15)"" Text=""(?(?<a"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestAngleCaptureInConditionalGrouping3()
{
Test(@"""(?(?<a>""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken />
</CaptureGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[16..16)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..16)"" Text=""(?(?<a>"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestAngleCaptureInConditionalGrouping4()
{
Test(@"""(?(?<a>)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<Sequence />
<CloseParenToken />
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
<Diagnostic Message=""{FeaturesResources.Not_enough_close_parens}"" Span=""[17..17)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?(?<a>)"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestAngleCaptureInConditionalGrouping5()
{
Test(@"""(?(?<a>))""", $@"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<CaptureGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<CaptureNameToken value=""a"">a</CaptureNameToken>
<GreaterThanToken>></GreaterThanToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</CaptureGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Alternation_conditions_do_not_capture_and_cannot_be_named}"" Span=""[9..10)"" Text=""("" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[9..18)"" Text=""(?(?<a>))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestLookbehindAssertionInConditionalGrouping1()
{
Test(@"""(?(?<=))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<PositiveLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<EqualsToken>=</EqualsToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</PositiveLookbehindGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?(?<=))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestLookbehindAssertionInConditionalGrouping2()
{
Test(@"""(?(?<!))""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<NegativeLookbehindGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<LessThanToken><</LessThanToken>
<ExclamationToken>!</ExclamationToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NegativeLookbehindGrouping>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[9..17)"" Text=""(?(?<!))"" />
</Captures>
</Tree>", RegexOptions.IgnorePatternWhitespace);
}
[Fact]
public void TestBackreference1()
{
Test(@"@""\1""", $@"<Tree>
<CompilationUnit>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[11..12)"" Text=""1"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\1"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestBackreference2()
{
Test(@"@""\1 """, $@"<Tree>
<CompilationUnit>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[11..12)"" Text=""1"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\1 "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestBackreference3()
{
Test(@"@""()\1""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""()\1"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestBackreference4()
{
Test(@"@""()\1 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""()\1 "" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestBackreference5()
{
Test(@"@""()\10 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>10</TextToken>
</OctalEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""()\10 "" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestEcmascriptBackreference1()
{
Test(@"@""\1""", @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>1</TextToken>
</OctalEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""\1"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestEcmascriptBackreference2()
{
Test(@"@""\1 """, @"<Tree>
<CompilationUnit>
<Sequence>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>1</TextToken>
</OctalEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""\1 "" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestEcmascriptBackreference3()
{
Test(@"@""()\1""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""()\1"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestEcmaBackreference4()
{
Test(@"@""()\1 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""()\1 "" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestEcmascriptBackreference5()
{
Test(@"@""()\10 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""10"">1</NumberToken>
</BackreferenceEscape>
<Text>
<TextToken>0 </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""()\10 "" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestEcmascriptBackreference6()
{
Test(@"@""()()()()()()()()()()\10 """, @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""10"">10</NumberToken>
</BackreferenceEscape>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..34)"" Text=""()()()()()()()()()()\10 "" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[12..14)"" Text=""()"" />
<Capture Name=""3"" Span=""[14..16)"" Text=""()"" />
<Capture Name=""4"" Span=""[16..18)"" Text=""()"" />
<Capture Name=""5"" Span=""[18..20)"" Text=""()"" />
<Capture Name=""6"" Span=""[20..22)"" Text=""()"" />
<Capture Name=""7"" Span=""[22..24)"" Text=""()"" />
<Capture Name=""8"" Span=""[24..26)"" Text=""()"" />
<Capture Name=""9"" Span=""[26..28)"" Text=""()"" />
<Capture Name=""10"" Span=""[28..30)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ECMAScript);
}
[Fact]
public void TestCharacterClass1()
{
Test(@"@""[""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence />
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[11..11)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..11)"" Text=""["" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass2()
{
Test(@"@""[ """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""[ "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass3()
{
Test(@"@""[]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>]</TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..12)"" Text=""[]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass4()
{
Test(@"@""[] """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>] </TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""[] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass5()
{
Test(@"@""[a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""[a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass6()
{
Test(@"@""[a] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""[a] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass7()
{
Test(@"@""[a-""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken />
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[13..13)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""[a-"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass8()
{
Test(@"@""[a- """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken> </TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[14..14)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""[a- "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass9()
{
Test(@"@""[a-]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a-</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""[a-]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass10()
{
Test(@"@""[a-] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a-</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass11()
{
Test(@"@""[a-b]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>b</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-b]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass12()
{
Test(@"@""[a-b] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>b</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[a-b] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass13()
{
Test(@"@""[a-[b]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-[b]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass14()
{
Test(@"@""[a-b-[c]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>b</TextToken>
</Text>
</CharacterClassRange>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>c</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a-b-[c]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass15()
{
Test(@"@""[a-[b]-c] """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
<Text>
<TextToken>-c</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.A_subtraction_must_be_the_last_element_in_a_character_class}"" Span=""[12..12)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a-[b]-c] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass16()
{
Test(@"@""[[a]-b] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>[a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken>-b] </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[[a]-b] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass17()
{
Test(@"@""[[a]-[b]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>[a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken>-</TextToken>
</Text>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken>] </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[[a]-[b]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass18()
{
Test(@"@""[\w-a] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>w</TextToken>
</CharacterClassEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[\w-a] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass19()
{
Test(@"@""[a-\w] """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>w</TextToken>
</CharacterClassEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Cannot_include_class_0_in_character_range, "w")}"" Span=""[13..15)"" Text=""\w"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[a-\w] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass20()
{
Test(@"@""[\p{llll}-a] """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{{</OpenBraceToken>
<EscapeCategoryToken>llll</EscapeCategoryToken>
<CloseBraceToken>}}</CloseBraceToken>
</CategoryEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Unknown_property_0, "llll")}"" Span=""[14..18)"" Text=""llll"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""[\p{{llll}}-a] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass21()
{
Test(@"@""[\p{Lu}-a] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{</OpenBraceToken>
<EscapeCategoryToken>Lu</EscapeCategoryToken>
<CloseBraceToken>}</CloseBraceToken>
</CategoryEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..21)"" Text=""[\p{Lu}-a] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass22()
{
Test(@"@""[a-\p{Lu}] """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{{</OpenBraceToken>
<EscapeCategoryToken>Lu</EscapeCategoryToken>
<CloseBraceToken>}}</CloseBraceToken>
</CategoryEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Cannot_include_class_0_in_character_range, "p")}"" Span=""[13..15)"" Text=""\p"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..21)"" Text=""[a-\p{{Lu}}] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass23()
{
Test(@"@""[a-[:Ll:]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:Ll:</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..21)"" Text=""[a-[:Ll:]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass24()
{
Test(@"@""[a-[:Ll]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:Ll</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a-[:Ll]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass25()
{
Test(@"@""[a-[:""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:</TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-[:"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass26()
{
Test(@"@""[a-[:L""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:L</TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[16..16)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[a-[:L"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass27()
{
Test(@"@""[a-[:L:""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:L:</TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[17..17)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[a-[:L:"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass28()
{
Test(@"@""[a-[:L:]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:L:</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[18..18)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-[:L:]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass29()
{
Test(@"@""[\-]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""[\-]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass30()
{
Test(@"@""[a-b-c] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>b</TextToken>
</Text>
</CharacterClassRange>
<Text>
<TextToken>-c</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-b-c] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass31()
{
Test(@"@""[-b-c] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>-</TextToken>
</Text>
<CharacterClassRange>
<Text>
<TextToken>b</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>c</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[-b-c] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass32()
{
Test(@"@""[-[b] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>-[b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[-[b] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass33()
{
Test(@"@""[-[b]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>-[b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken>] </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[-[b]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass34()
{
Test(@"@""[--b """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>-</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>b</TextToken>
</Text>
</CharacterClassRange>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[15..15)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[--b "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass35()
{
Test(@"@""[--b] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>-</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>b</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[--b] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass36()
{
Test(@"@""[--[b """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>-</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>b </TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[16..16)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[--[b "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass37()
{
Test(@"@""[--[b] """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>-</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.A_subtraction_must_be_the_last_element_in_a_character_class}"" Span=""[12..12)"" Text="""" />
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[17..17)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[--[b] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass38()
{
Test(@"@""[--[b]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>-</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[--[b]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass39()
{
Test(@"@""[a--[b """, $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>-</TextToken>
</Text>
</CharacterClassRange>
<Text>
<TextToken>[b </TextToken>
</Text>
</Sequence>
<CloseBracketToken />
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
<Diagnostic Message=""{FeaturesResources.Unterminated_character_class_set}"" Span=""[17..17)"" Text="""" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[a--[b "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass40()
{
Test(@"@""[,--[a] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>,</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>-</TextToken>
</Text>
</CharacterClassRange>
<Text>
<TextToken>[a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken> </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[,--[a] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass41()
{
Test(@"@""[,--[a]] """, @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>,</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>-</TextToken>
</Text>
</CharacterClassRange>
<Text>
<TextToken>[a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken>] </TextToken>
</Text>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[,--[a]] "" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass42()
{
Test(@"@""[\s-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>s</TextToken>
</CharacterClassEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[\s-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass43()
{
Test(@"@""[\p{Lu}-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{</OpenBraceToken>
<EscapeCategoryToken>Lu</EscapeCategoryToken>
<CloseBraceToken>}</CloseBraceToken>
</CategoryEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[\p{Lu}-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClass44()
{
Test(@"@""[\p{Lu}-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CategoryEscape>
<BackslashToken>\</BackslashToken>
<TextToken>p</TextToken>
<OpenBraceToken>{</OpenBraceToken>
<EscapeCategoryToken>Lu</EscapeCategoryToken>
<CloseBraceToken>}</CloseBraceToken>
</CategoryEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[\p{Lu}-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestNegatedCharacterClass1()
{
Test(@"@""[a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..13)"" Text=""[a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange1()
{
Test(@"@""[\c<-\c>]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<CharacterClassRange>
<Text>
<TextToken><</TextToken>
</Text>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
</CharacterClassRange>
<Text>
<TextToken>></TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[13..14)"" Text=""<"" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[17..18)"" Text="">"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\c<-\c>]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange2()
{
Test(@"@""[\c>-\c<]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<CharacterClassRange>
<Text>
<TextToken>></TextToken>
</Text>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
</CharacterClassRange>
<Text>
<TextToken><</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[13..14)"" Text="">"" />
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[17..18)"" Text=""<"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\c>-\c<]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange3()
{
Test(@"@""[\c>-a]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
<CharacterClassRange>
<Text>
<TextToken>></TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[13..14)"" Text="">"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[\c>-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange4()
{
Test(@"@""[a-\c>]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken />
</ControlEscape>
</CharacterClassRange>
<Text>
<TextToken>></TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Unrecognized_control_character}"" Span=""[15..16)"" Text="">"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[a-\c>]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange5()
{
Test(@"@""[a--]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>-</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a--]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange6()
{
Test(@"@""[--a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>-</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[--a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange7()
{
Test(@"@""[a-\-]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[a-\-]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange8()
{
Test(@"@""[\--a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[\--a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange9()
{
Test(@"@""[\0-\1]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>1</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[\0-\1]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange10()
{
Test(@"@""[\1-\0]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>1</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[13..14)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[\1-\0]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange11()
{
Test(@"@""[\0-\01]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>01</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\0-\01]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange12()
{
Test(@"@""[\01-\0]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>01</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\01-\0]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange13()
{
Test(@"@""[[:x:]-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<PosixProperty>
<TextToken>[:x:]</TextToken>
</PosixProperty>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[[:x:]-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange14()
{
Test(@"@""[a-[:x:]]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>:x:</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[a-[:x:]]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange15()
{
Test(@"@""[\0-\ca]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\0-\ca]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange16()
{
Test(@"@""[\ca-\0]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>0</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\ca-\0]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange17()
{
Test(@"@""[\ca-\cA]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\ca-\cA]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange18()
{
Test(@"@""[\cA-\ca]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cA-\ca]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange19()
{
Test(@"@""[\u0-\u1]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0</TextToken>
</UnicodeEscape>
<MinusToken>-</MinusToken>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>1</TextToken>
</UnicodeEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[11..14)"" Text=""\u0"" />
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[15..18)"" Text=""\u1"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\u0-\u1]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange20()
{
Test(@"@""[\u1-\u0]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>1</TextToken>
</UnicodeEscape>
<MinusToken>-</MinusToken>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0</TextToken>
</UnicodeEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[11..14)"" Text=""\u1"" />
<Diagnostic Message=""{FeaturesResources.Insufficient_hexadecimal_digits}"" Span=""[15..18)"" Text=""\u0"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\u1-\u0]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange21()
{
Test(@"@""[\u0000-\u0000]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
<MinusToken>-</MinusToken>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..25)"" Text=""[\u0000-\u0000]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange22()
{
Test(@"@""[\u0000-\u0001]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
<MinusToken>-</MinusToken>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0001</TextToken>
</UnicodeEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..25)"" Text=""[\u0000-\u0001]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange23()
{
Test(@"@""[\u0001-\u0000]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0001</TextToken>
</UnicodeEscape>
<MinusToken>-</MinusToken>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0000</TextToken>
</UnicodeEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[17..18)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..25)"" Text=""[\u0001-\u0000]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange24()
{
Test(@"@""[\u0001-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0001</TextToken>
</UnicodeEscape>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[\u0001-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange25()
{
Test(@"@""[a-\u0001]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<UnicodeEscape>
<BackslashToken>\</BackslashToken>
<TextToken>u</TextToken>
<TextToken>0001</TextToken>
</UnicodeEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a-\u0001]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange26()
{
Test(@"@""[a-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange27()
{
Test(@"@""[a-A]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>A</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-A]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange28()
{
Test(@"@""[A-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[A-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange29()
{
Test(@"@""[a-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-a]"" />
</Captures>
</Tree>", RegexOptions.IgnoreCase);
}
[Fact]
public void TestCharacterClassRange30()
{
Test(@"@""[a-A]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>A</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[a-A]"" />
</Captures>
</Tree>", RegexOptions.IgnoreCase);
}
[Fact]
public void TestCharacterClassRange31()
{
Test(@"@""[A-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..15)"" Text=""[A-a]"" />
</Captures>
</Tree>", RegexOptions.IgnoreCase);
}
[Fact]
public void TestCharacterClassRange32()
{
Test(@"@""[a-\x61]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>61</TextToken>
</HexEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-\x61]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange33()
{
Test(@"@""[\x61-a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>61</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\x61-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange34()
{
Test(@"@""[a-\x60]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>60</TextToken>
</HexEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-\x60]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange35()
{
Test(@"@""[\x62-a]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>62</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[15..16)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\x62-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange36()
{
Test(@"@""[a-\x62]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>62</TextToken>
</HexEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-\x62]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange37()
{
Test(@"@""[\x62-a]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>62</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<Text>
<TextToken>a</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[15..16)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\x62-a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange38()
{
Test(@"@""[\3-\cc]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>3</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>c</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\3-\cc]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange39()
{
Test(@"@""[\cc-\3]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>c</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>3</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\cc-\3]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange40()
{
Test(@"@""[\2-\cc]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>2</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>c</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\2-\cc]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange41()
{
Test(@"@""[\cc-\2]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>c</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>2</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\cc-\2]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange42()
{
Test(@"@""[\4-\cc]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>4</TextToken>
</OctalEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>c</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[13..14)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\4-\cc]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange43()
{
Test(@"@""[\cc-\4]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>c</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<OctalEscape>
<BackslashToken>\</BackslashToken>
<TextToken>4</TextToken>
</OctalEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[\cc-\4]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange44()
{
Test(@"@""[\ca-\cb]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>b</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\ca-\cb]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange45()
{
Test(@"@""[\ca-\cB]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>B</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\ca-\cB]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange46()
{
Test(@"@""[\cA-\cb]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>b</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cA-\cb]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange47()
{
Test(@"@""[\cA-\cB]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>B</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cA-\cB]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange48()
{
Test(@"@""[\cb-\ca]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>b</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cb-\ca]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange49()
{
Test(@"@""[\cb-\cA]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>b</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cb-\cA]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange50()
{
Test(@"@""[\cB-\ca]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>B</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>a</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cB-\ca]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange51()
{
Test(@"@""[\cB-\cA]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>B</TextToken>
</ControlEscape>
<MinusToken>-</MinusToken>
<ControlEscape>
<BackslashToken>\</BackslashToken>
<TextToken>c</TextToken>
<TextToken>A</TextToken>
</ControlEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[14..15)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[\cB-\cA]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange52()
{
Test(@"@""[\--a]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
<Text>
<TextToken>-a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[\--a]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange53()
{
Test(@"@""[\--#]""", @"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
<Text>
<TextToken>-#</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[\--#]"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCharacterClassRange54()
{
Test(@"@""[a-\-]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""[a-\-]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange55()
{
Test(@"@""[a-\-b]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[a-\-b]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange56()
{
Test(@"@""[a-\-\-b]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
<Text>
<TextToken>b</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[a-\-\-b]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange57()
{
Test(@"@""[b-\-a]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>b</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..17)"" Text=""[b-\-a]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange58()
{
Test(@"@""[b-\-\-a]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>b</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[b-\-\-a]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange59()
{
Test(@"@""[a-\-\D]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>D</TextToken>
</CharacterClassEscape>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[a-\-\D]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange60()
{
Test(@"@""[a-\-\-\D]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
<CharacterClassEscape>
<BackslashToken>\</BackslashToken>
<TextToken>D</TextToken>
</CharacterClassEscape>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[12..13)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..20)"" Text=""[a-\-\-\D]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange61()
{
Test(@"@""[a -\-\b]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassRange>
<Text>
<TextToken> </TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>b</TextToken>
</SimpleEscape>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..19)"" Text=""[a -\-\b]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCharacterClassRange62()
{
Test(@"@""[ab-\-a]""", $@"<Tree>
<CompilationUnit>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>a</TextToken>
</Text>
<CharacterClassRange>
<Text>
<TextToken>b</TextToken>
</Text>
<MinusToken>-</MinusToken>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>-</TextToken>
</SimpleEscape>
</CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{FeaturesResources.x_y_range_in_reverse_order}"" Span=""[13..14)"" Text=""-"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..18)"" Text=""[ab-\-a]"" />
</Captures>
</Tree>", RegexOptions.None, allowDiagnosticsMismatch: true);
}
[Fact]
public void TestCaptures1()
{
Test(@"@""()\1""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""()\1"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures2()
{
Test(@"@""()\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[13..14)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""()\2"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures3()
{
Test(@"@""()()\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""()()\2"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[12..14)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures4()
{
Test(@"@""()\1""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[13..14)"" Text=""1"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""()\1"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures5()
{
Test(@"@""()\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[13..14)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..14)"" Text=""()\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures6()
{
Test(@"@""()()\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[15..16)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..16)"" Text=""()()\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures7()
{
Test(@"@""()()(?n)\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""()()(?n)\1\2"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[12..14)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures8()
{
Test(@"@""()(?n)()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[21..22)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""()(?n)()\1\2"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures9()
{
Test(@"@""(?n)()()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[19..20)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[21..22)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""(?n)()()\1\2"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures10()
{
Test(@"@""()()(?n)\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[19..20)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[21..22)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""()()(?n)\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures11()
{
Test(@"@""()(?n)()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[19..20)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[21..22)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""()(?n)()\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures12()
{
Test(@"@""(?n)()()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[19..20)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[21..22)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..22)"" Text=""(?n)()()\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures13()
{
Test(@"@""()()(?-n)\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""()()(?-n)\1\2"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[12..14)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures14()
{
Test(@"@""()(?-n)()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""()(?-n)()\1\2"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[17..19)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures15()
{
Test(@"@""(?-n)()()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""(?-n)()()\1\2"" />
<Capture Name=""1"" Span=""[15..17)"" Text=""()"" />
<Capture Name=""2"" Span=""[17..19)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures16()
{
Test(@"@""()()(?-n)\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[20..21)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[22..23)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""()()(?-n)\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures17()
{
Test(@"@""()(?-n)()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[22..23)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""()(?-n)()\1\2"" />
<Capture Name=""1"" Span=""[17..19)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures18()
{
Test(@"@""(?-n)()()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""(?-n)()()\1\2"" />
<Capture Name=""1"" Span=""[15..17)"" Text=""()"" />
<Capture Name=""2"" Span=""[17..19)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures19()
{
Test(@"@""()()(?n:\1\2)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""()()(?n:\1\2)"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[12..14)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures20()
{
Test(@"@""()()(?n:\1\2)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[19..20)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[21..22)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""()()(?n:\1\2)"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures21()
{
Test(@"@""()()(?-n:\1\2)""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..24)"" Text=""()()(?-n:\1\2)"" />
<Capture Name=""1"" Span=""[10..12)"" Text=""()"" />
<Capture Name=""2"" Span=""[12..14)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures22()
{
Test(@"@""()()(?-n:\1\2)""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[20..21)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[22..23)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..24)"" Text=""()()(?-n:\1\2)"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures23()
{
Test(@"@""(?n:)()()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""(?n:)()()\1\2"" />
<Capture Name=""1"" Span=""[15..17)"" Text=""()"" />
<Capture Name=""2"" Span=""[17..19)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures24()
{
Test(@"@""(?n:)()()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[20..21)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[22..23)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..23)"" Text=""(?n:)()()\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures25()
{
Test(@"@""(?-n:)()()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..24)"" Text=""(?-n:)()()\1\2"" />
<Capture Name=""1"" Span=""[16..18)"" Text=""()"" />
<Capture Name=""2"" Span=""[18..20)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures26()
{
Test(@"@""(?-n:)()()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<NestedOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<ColonToken>:</ColonToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</NestedOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[21..22)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[23..24)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..24)"" Text=""(?-n:)()()\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures27()
{
Test(@"@""(?n)(?-n)()()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..27)"" Text=""(?n)(?-n)()()\1\2"" />
<Capture Name=""1"" Span=""[19..21)"" Text=""()"" />
<Capture Name=""2"" Span=""[21..23)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures28()
{
Test(@"@""(?n)(?-n)()()\1\2""", @"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..27)"" Text=""(?n)(?-n)()()\1\2"" />
<Capture Name=""1"" Span=""[19..21)"" Text=""()"" />
<Capture Name=""2"" Span=""[21..23)"" Text=""()"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestCaptures29()
{
Test(@"@""(?-n)(?n)()()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[24..25)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[26..27)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..27)"" Text=""(?-n)(?n)()()\1\2"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestCaptures30()
{
Test(@"@""(?-n)(?n)()()\1\2""", $@"<Tree>
<CompilationUnit>
<Sequence>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>-n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleOptionsGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<OptionsToken>n</OptionsToken>
<CloseParenToken>)</CloseParenToken>
</SimpleOptionsGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence />
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""1"">1</NumberToken>
</BackreferenceEscape>
<BackreferenceEscape>
<BackslashToken>\</BackslashToken>
<NumberToken value=""2"">2</NumberToken>
</BackreferenceEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Diagnostics>
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 1)}"" Span=""[24..25)"" Text=""1"" />
<Diagnostic Message=""{string.Format(FeaturesResources.Reference_to_undefined_group_number_0, 2)}"" Span=""[26..27)"" Text=""2"" />
</Diagnostics>
<Captures>
<Capture Name=""0"" Span=""[10..27)"" Text=""(?-n)(?n)()()\1\2"" />
</Captures>
</Tree>", RegexOptions.ExplicitCapture);
}
[Fact]
public void TestComplex1()
{
Test($@"@""{And(".*[0-9].*[0-9].*", ".*[A-Z].*[A-Z].*", Not(".*(01|12).*"))}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>Z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>Z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Alternation>
<Sequence>
<Text>
<TextToken>01</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>12</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..96)"" Text=""(?(.*[0-9].*[0-9].*)(?(.*[A-Z].*[A-Z].*)((?(.*(01|12).*)[0-[0]]|.*))|[0-[0]])|[0-[0]])"" />
<Capture Name=""1"" Span=""[50..78)"" Text=""((?(.*(01|12).*)[0-[0]]|.*))"" />
<Capture Name=""2"" Span=""[56..63)"" Text=""(01|12)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestComplex2()
{
Test($@"@""{And(".*a.*", ".*b.*")}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>a</TextToken>
</Text>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>b</TextToken>
</Text>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..35)"" Text=""(?(.*a.*)(.*b.*)|[0-[0]])"" />
<Capture Name=""1"" Span=""[19..26)"" Text=""(.*b.*)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestComplex3()
{
Test($@"@""{And(".*[a-z].*", ".*[A-Z].*", ".*[0-9].*", ".{2,4}")}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>Z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ClosedRangeNumericQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""2"">2</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""4"">4</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..84)"" Text=""(?(.*[a-z].*)(?(.*[A-Z].*)(?(.*[0-9].*)(.{2,4})|[0-[0]])|[0-[0]])|[0-[0]])"" />
<Capture Name=""1"" Span=""[49..57)"" Text=""(.{2,4})"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestComplex4()
{
Test($@"@""{And(".*[a-z].*", ".*[A-Z].*", ".*[0-9].*", ".{4,8}",
Not(".*(01|12|23|34|45|56|67|78|89).*"))}""", @"<Tree>
<CompilationUnit>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>Z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ClosedRangeNumericQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""4"">4</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""8"">8</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>01</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>12</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>23</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>34</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>45</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>56</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>67</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>78</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>89</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..144)"" Text=""(?(.*[a-z].*)(?(.*[A-Z].*)(?(.*[0-9].*)(?(.{4,8})((?(.*(01|12|23|34|45|56|67|78|89).*)[0-[0]]|.*))|[0-[0]])|[0-[0]])|[0-[0]])|[0-[0]])"" />
<Capture Name=""1"" Span=""[59..108)"" Text=""((?(.*(01|12|23|34|45|56|67|78|89).*)[0-[0]]|.*))"" />
<Capture Name=""2"" Span=""[65..93)"" Text=""(01|12|23|34|45|56|67|78|89)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestComplex5()
{
var twoLower = ".*[a-z].*[a-z].*";
var twoUpper = ".*[A-Z].*[A-Z].*";
var threeDigits = ".*[0-9].*[0-9].*[0-9].*";
var oneSpecial = @".*[\x21-\x2F\x3A-\x40\x5B-x60\x7B-\x7E].*";
var Not_countUp = Not(".*(012|123|234|345|456|567|678|789).*");
var Not_countDown = Not(".*(987|876|765|654|543|432|321|210).*");
var length = "[!-~]{8,12}";
var contains_first_P_and_then_r = ".*X.*r.*";
var all = And(twoLower, twoUpper, threeDigits, oneSpecial, Not_countUp, Not_countDown, length, contains_first_P_and_then_r);
Test($@"@""\b{all}\b""", @"<Tree>
<CompilationUnit>
<Sequence>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>b</TextToken>
</AnchorEscape>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>a</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>Z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>A</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>Z</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>0</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>9</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>21</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>2F</TextToken>
</HexEscape>
</CharacterClassRange>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>3A</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>40</TextToken>
</HexEscape>
</CharacterClassRange>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>5B</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<Text>
<TextToken>x</TextToken>
</Text>
</CharacterClassRange>
<Text>
<TextToken>60</TextToken>
</Text>
<CharacterClassRange>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>7B</TextToken>
</HexEscape>
<MinusToken>-</MinusToken>
<HexEscape>
<BackslashToken>\</BackslashToken>
<TextToken>x</TextToken>
<TextToken>7E</TextToken>
</HexEscape>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>012</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>123</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>234</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>345</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>456</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>567</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>678</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>789</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Alternation>
<Sequence>
<Text>
<TextToken>987</TextToken>
</Text>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>876</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>765</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>654</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>543</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>432</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>321</TextToken>
</Text>
</Sequence>
</Alternation>
<BarToken>|</BarToken>
<Sequence>
<Text>
<TextToken>210</TextToken>
</Text>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<ConditionalExpressionGrouping>
<OpenParenToken>(</OpenParenToken>
<QuestionToken>?</QuestionToken>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ClosedRangeNumericQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<CharacterClassRange>
<Text>
<TextToken>!</TextToken>
</Text>
<MinusToken>-</MinusToken>
<Text>
<TextToken>~</TextToken>
</Text>
</CharacterClassRange>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""8"">8</NumberToken>
<CommaToken>,</CommaToken>
<NumberToken value=""12"">12</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ClosedRangeNumericQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
<Alternation>
<Sequence>
<SimpleGrouping>
<OpenParenToken>(</OpenParenToken>
<Sequence>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>X</TextToken>
</Text>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
<Text>
<TextToken>r</TextToken>
</Text>
<ZeroOrMoreQuantifier>
<Wildcard>
<DotToken>.</DotToken>
</Wildcard>
<AsteriskToken>*</AsteriskToken>
</ZeroOrMoreQuantifier>
</Sequence>
<CloseParenToken>)</CloseParenToken>
</SimpleGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
</Sequence>
<BarToken>|</BarToken>
<Sequence>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
<CharacterClassSubtraction>
<MinusToken>-</MinusToken>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</CharacterClassSubtraction>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
</Sequence>
</Alternation>
<CloseParenToken>)</CloseParenToken>
</ConditionalExpressionGrouping>
<AnchorEscape>
<BackslashToken>\</BackslashToken>
<TextToken>b</TextToken>
</AnchorEscape>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..326)"" Text=""\b(?(.*[a-z].*[a-z].*)(?(.*[A-Z].*[A-Z].*)(?(.*[0-9].*[0-9].*[0-9].*)(?(.*[\x21-\x2F\x3A-\x40\x5B-x60\x7B-\x7E].*)(?((?(.*(012|123|234|345|456|567|678|789).*)[0-[0]]|.*))(?((?(.*(987|876|765|654|543|432|321|210).*)[0-[0]]|.*))(?([!-~]{8,12})(.*X.*r.*)|[0-[0]])|[0-[0]])|[0-[0]])|[0-[0]])|[0-[0]])|[0-[0]])|[0-[0]])\b"" />
<Capture Name=""1"" Span=""[132..165)"" Text=""(012|123|234|345|456|567|678|789)"" />
<Capture Name=""2"" Span=""[188..221)"" Text=""(987|876|765|654|543|432|321|210)"" />
<Capture Name=""3"" Span=""[251..261)"" Text=""(.*X.*r.*)"" />
</Captures>
</Tree>", RegexOptions.None);
}
[Fact]
public void TestComplex6()
{
Test(@"@""pa[5\$s]{2}w[o0]rd$""", @"<Tree>
<CompilationUnit>
<Sequence>
<Text>
<TextToken>pa</TextToken>
</Text>
<ExactNumericQuantifier>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>5</TextToken>
</Text>
<SimpleEscape>
<BackslashToken>\</BackslashToken>
<TextToken>$</TextToken>
</SimpleEscape>
<Text>
<TextToken>s</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<OpenBraceToken>{</OpenBraceToken>
<NumberToken value=""2"">2</NumberToken>
<CloseBraceToken>}</CloseBraceToken>
</ExactNumericQuantifier>
<Text>
<TextToken>w</TextToken>
</Text>
<CharacterClass>
<OpenBracketToken>[</OpenBracketToken>
<Sequence>
<Text>
<TextToken>o0</TextToken>
</Text>
</Sequence>
<CloseBracketToken>]</CloseBracketToken>
</CharacterClass>
<Text>
<TextToken>rd</TextToken>
</Text>
<EndAnchor>
<DollarToken>$</DollarToken>
</EndAnchor>
</Sequence>
<EndOfFile />
</CompilationUnit>
<Captures>
<Capture Name=""0"" Span=""[10..29)"" Text=""pa[5\$s]{2}w[o0]rd$"" />
</Captures>
</Tree>", RegexOptions.None);
}
}
}
|