提交 b15e3680 编写于 作者: A AlekseyTs 提交者: GitHub

Add regression tests for IOperation. (#22837)

Closes #7582.
上级 08843312
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
......@@ -160,5 +160,83 @@ public void IFieldReferenceExpression_InferenceDeconstructionDeclaration_Alterna
VerifyOperationTreeAndDiagnosticsForTest<DeclarationExpressionSyntax>(source, expectedOperationTree, expectedDiagnostics,
parseOptions: TestOptions.Script);
}
[CompilerTrait(CompilerFeature.IOperation)]
[WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")]
[Fact]
public void IFieldReferenceExpression_ImplicitThis ()
{
string source = @"
class C
{
int i;
void M()
{
/*<bind>*/i/*</bind>*/ = 1;
i++;
}
}
";
string expectedOperationTree = @"
IFieldReferenceExpression: System.Int32 C.i (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C, IsImplicit) (Syntax: 'i')";
var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<IdentifierNameSyntax>(source, expectedOperationTree, expectedDiagnostics);
}
[CompilerTrait(CompilerFeature.IOperation)]
[WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")]
[Fact]
public void IFieldReferenceExpression_ExplicitThis()
{
string source = @"
class C
{
int i;
void M()
{
/*<bind>*/this.i/*</bind>*/ = 1;
i++;
}
}
";
string expectedOperationTree = @"
IFieldReferenceExpression: System.Int32 C.i (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'this.i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'this')";
var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<MemberAccessExpressionSyntax>(source, expectedOperationTree, expectedDiagnostics);
}
[CompilerTrait(CompilerFeature.IOperation)]
[WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")]
[Fact]
public void IFieldReferenceExpression_base()
{
string source = @"
class C
{
protected int i;
}
class B : C
{
void M()
{
/*<bind>*/base.i/*</bind>*/ = 1;
i++;
}
}
";
string expectedOperationTree = @"
IFieldReferenceExpression: System.Int32 C.i (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'base.i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'base')";
var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<MemberAccessExpressionSyntax>(source, expectedOperationTree, expectedDiagnostics);
}
}
}
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Semantics
Imports Microsoft.CodeAnalysis.Test.Utilities
......@@ -36,5 +36,99 @@ IOperation: (OperationKind.None) (Syntax: 'Conditional(field)')
VerifyOperationTreeAndDiagnosticsForTest(Of AttributeSyntax)(source, expectedOperationTree, expectedDiagnostics)
End Sub
<CompilerTrait(CompilerFeature.IOperation)>
<Fact, WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")>
Public Sub FieldReference_ImplicitMe()
Dim source = <![CDATA[
Class C
Private i As Integer
Private Sub M()
i = 1 'BIND:"i"
End Sub
End Class]]>.Value
Dim expectedOperationTree = <![CDATA[
IFieldReferenceExpression: C.i As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C, IsImplicit) (Syntax: 'i')
]]>.Value
Dim expectedDiagnostics = String.Empty
VerifyOperationTreeAndDiagnosticsForTest(Of IdentifierNameSyntax)(source, expectedOperationTree, expectedDiagnostics)
End Sub
<CompilerTrait(CompilerFeature.IOperation)>
<Fact, WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")>
Public Sub FieldReference_ExplicitMe()
Dim source = <![CDATA[
Class C
Private i As Integer
Private Sub M()
Me.i = 1 'BIND:"Me.i"
End Sub
End Class]]>.Value
Dim expectedOperationTree = <![CDATA[
IFieldReferenceExpression: C.i As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'Me.i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'Me')
]]>.Value
Dim expectedDiagnostics = String.Empty
VerifyOperationTreeAndDiagnosticsForTest(Of MemberAccessExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics)
End Sub
<CompilerTrait(CompilerFeature.IOperation)>
<Fact, WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")>
Public Sub FieldReference_MyBase()
Dim source = <![CDATA[
Class C
Protected i As Integer
End Class
Class B
Inherits C
Private Sub M()
MyBase.i = 1 'BIND:"MyBase.i"
End Sub
End Class]]>.Value
Dim expectedOperationTree = <![CDATA[
IFieldReferenceExpression: C.i As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'MyBase.i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'MyBase')
]]>.Value
Dim expectedDiagnostics = String.Empty
VerifyOperationTreeAndDiagnosticsForTest(Of MemberAccessExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics)
End Sub
<CompilerTrait(CompilerFeature.IOperation)>
<Fact, WorkItem(7582, "https://github.com/dotnet/roslyn/issues/7582")>
Public Sub FieldReference_MyClass()
Dim source = <![CDATA[
Class C
Private i As Integer
Private Sub M()
MyClass.i = 1 'BIND:"MyClass.i"
End Sub
End Class]]>.Value
Dim expectedOperationTree = <![CDATA[
IFieldReferenceExpression: C.i As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'MyClass.i')
Instance Receiver:
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'MyClass')
]]>.Value
Dim expectedDiagnostics = String.Empty
VerifyOperationTreeAndDiagnosticsForTest(Of MemberAccessExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics)
End Sub
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册