提交 29dadf0c 编写于 作者: R Rikki Gibson

Add some parsing and incremental parsing tests

上级 9a88cd45
...@@ -2879,6 +2879,223 @@ class A { } ...@@ -2879,6 +2879,223 @@ class A { }
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot()); WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
} }
[Fact]
public void Statement_EditAttributeList_01()
{
var source = @"
class C
{
void M()
{
[Attr]
void local1() { };
}
}
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = "Attr";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, "1, Attr2");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void Statement_EditAttributeList_02()
{
var source = @"
class C
{
void M()
{
[Attr1]
Method1();
}
}
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"Attr1";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, ", Attr2");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void Statement_AddAttributeList()
{
var source = @"
class C
{
void M()
{
[Attr1]
void local1() { };
}
}
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"[Attr1]";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, " [Attr2]");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditStatementWithAttributes_01()
{
var source = @"
class C
{
void M()
{
[Attr1]
void local1() { Method(); };
}
}
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"Method(";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, "Arg");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditStatementWithAttributes_02()
{
var source = @"
class C
{
void M()
{
[Attr1]
Method1();
}
}
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"Method";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 1);
var change = new TextChange(span, "2");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditGlobalStatementWithAttributes_01()
{
var source = @"
[Attr]
x.y();
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"x.y";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, ".z");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditGlobalStatementWithAttributes_02()
{
var source = @"
[Attr]
if (b) { }
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"if (b) { }";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, " if (c) { }");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditGlobalStatementWithAttributes_03()
{
var source = @"
[Attr]
if (b) { }
";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = @"if (b) { }";
var span = new TextSpan(source.IndexOf(substring) + substring.Length, 0);
var change = new TextChange(span, " else (c) { }");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditNestedStatementWithAttributes_01()
{
var source = "{ [Goo]Goo(); [Goo]Goo(); [Goo]Goo(); }";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var span = new TextSpan(start: 0, length: 1); // delete first character
var change = new TextChange(span, "");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditNestedStatementWithAttributes_02()
{
var source = "{ [Goo]Goo(); [Goo]Goo(); [Goo]Goo(); }";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var span = new TextSpan(start: 0, length: 0);
var change = new TextChange(span, "{ ");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
[Fact]
public void EditNestedStatementWithAttributes_03()
{
var source = "class C { void M() { Goo[Goo] [Goo]if(Goo) { } } }";
var tree = SyntaxFactory.ParseSyntaxTree(source);
var text = tree.GetText();
var substring = "Goo[Goo]";
var span = new TextSpan(start: source.IndexOf(substring), length: 3); // Goo[Goo] -> [Goo]
var change = new TextChange(span, "");
text = text.WithChanges(change);
tree = tree.WithChangedText(text);
var fullTree = SyntaxFactory.ParseSyntaxTree(text.ToString());
WalkTreeAndVerify(tree.GetCompilationUnitRoot(), fullTree.GetCompilationUnitRoot());
}
#endregion #endregion
#region Helper functions #region Helper functions
......
...@@ -7365,5 +7365,79 @@ async void Goo(System.IAsyncDisposable d) ...@@ -7365,5 +7365,79 @@ async void Goo(System.IAsyncDisposable d)
// [A]await using var i = d; // [A]await using var i = d;
Diagnostic(ErrorCode.ERR_PredefinedTypeNotFound, "await").WithArguments("System.IAsyncDisposable").WithLocation(6, 12)); Diagnostic(ErrorCode.ERR_PredefinedTypeNotFound, "await").WithArguments("System.IAsyncDisposable").WithLocation(6, 12));
} }
[Fact]
public void AttrDeclOnStatementWhereMemberExpected()
{
UsingTree(@"
class C
{
[Attr] x.y();
}
");
N(SyntaxKind.CompilationUnit);
{
N(SyntaxKind.ClassDeclaration);
{
N(SyntaxKind.ClassKeyword);
N(SyntaxKind.IdentifierToken, "C");
N(SyntaxKind.OpenBraceToken);
N(SyntaxKind.IncompleteMember);
{
N(SyntaxKind.AttributeList);
{
N(SyntaxKind.OpenBracketToken);
N(SyntaxKind.Attribute);
{
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "Attr");
}
}
N(SyntaxKind.CloseBracketToken);
}
N(SyntaxKind.QualifiedName);
{
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "x");
}
N(SyntaxKind.DotToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "y");
}
}
}
N(SyntaxKind.IncompleteMember);
{
N(SyntaxKind.TupleType);
{
N(SyntaxKind.OpenParenToken);
M(SyntaxKind.TupleElement);
{
M(SyntaxKind.IdentifierName);
{
M(SyntaxKind.IdentifierToken);
}
}
M(SyntaxKind.CommaToken);
M(SyntaxKind.TupleElement);
{
M(SyntaxKind.IdentifierName);
{
M(SyntaxKind.IdentifierToken);
}
}
N(SyntaxKind.CloseParenToken);
}
}
N(SyntaxKind.CloseBraceToken);
}
N(SyntaxKind.EndOfFileToken);
}
EOF();
}
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册