public void Bug684860_XmlText() { const int n = 100000; // 100000 instances of "<" in: // /// <x a="<<<..."/> // class { } var builder = new System.Text.StringBuilder(); builder.Append("/// <x a=\""); for (int i = 0; i < n; i++) { builder.Append("<"); } builder.AppendLine("\"/>"); builder.AppendLine("class C { }"); var text = builder.ToString(); var tree = SyntaxFactory.ParseSyntaxTree(text, options: new CSharpParseOptions(documentationMode: DocumentationMode.Parse)); var root = tree.GetRoot(); var walker = new TokenAndTriviaWalker(); walker.Visit(root); Assert.True(walker.Tokens > n); var tokens = root.DescendantTokens(descendIntoTrivia: true).ToArray(); Assert.True(tokens.Length > n); }
public void Bug684860_SkippedTokens() { const int n = 100000; // 100000 instances of "0+" in: // #pragma warning disable 1 0+0+0+... var builder = new System.Text.StringBuilder(); builder.Append("#pragma warning disable 1 "); for (int i = 0; i < n; i++) { builder.Append("0+"); } builder.AppendLine(); var text = builder.ToString(); var tree = SyntaxFactory.ParseSyntaxTree(text); var root = tree.GetRoot(); var walker = new TokenAndTriviaWalker(); walker.Visit(root); Assert.True(walker.Tokens > n); var tokens1 = root.DescendantTokens(descendIntoTrivia: false).ToArray(); var tokens2 = root.DescendantTokens(descendIntoTrivia: true).ToArray(); Assert.True((tokens2.Length - tokens1.Length) > n); }