From f142fb15ffa0010195e9b5aca5689f5ad66b390d Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Mon, 21 Aug 2017 14:45:39 -0700 Subject: [PATCH] Added tests for out vars and deconstruction assignments. --- ...perationTests_ILocalReferenceExpression.cs | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ILocalReferenceExpression.cs diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ILocalReferenceExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ILocalReferenceExpression.cs new file mode 100644 index 00000000000..c1cf652ac99 --- /dev/null +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ILocalReferenceExpression.cs @@ -0,0 +1,94 @@ +// 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.Test.Utilities; +using Xunit; + +namespace Microsoft.CodeAnalysis.CSharp.UnitTests +{ + public partial class IOperationTests : SemanticModelTestBase + { + [CompilerTrait(CompilerFeature.IOperation)] + [Fact] + public void ILocalReferenceExpression_OutVar() + { + string source = @" +using System; + +public class C1 +{ + public virtual void M1() + { + M2(out /**/var i/**/); + } + + public void M2(out int i ) + { + i = 0; + } +} +"; + string expectedOperationTree = @" +ILocalReferenceExpression: i (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var i') +"; + var expectedDiagnostics = DiagnosticDescription.None; + + VerifyOperationTreeAndDiagnosticsForTest(source, expectedOperationTree, expectedDiagnostics); + } + + [CompilerTrait(CompilerFeature.IOperation)] + [Fact] + public void ILocalReferenceExpression_DeconstructionDeclaration() + { + string source = @" +using System; + +public class C1 +{ + public virtual void M1() + { + /**/(var i1, var i2)/**/ = (1, 2); + } +} +"; + string expectedOperationTree = @" +ITupleExpression (OperationKind.TupleExpression, Type: (System.Int32 i1, System.Int32 i2)) (Syntax: '(var i1, var i2)') + Elements(2): + ILocalReferenceExpression: i1 (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var i1') + ILocalReferenceExpression: i2 (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var i2') +"; + var expectedDiagnostics = DiagnosticDescription.None; + + VerifyOperationTreeAndDiagnosticsForTest(source, expectedOperationTree, expectedDiagnostics); + } + + [CompilerTrait(CompilerFeature.IOperation)] + [Fact] + public void ILocalReferenceExpression_DeconstructionDeclaration_AlternateSyntax() + { + string source = @" +using System; + +public class C1 +{ + public virtual void M1() + { + /**/var (i1, i2)/**/ = (1, 2); + } +} +"; + string expectedOperationTree = @" +ITupleExpression (OperationKind.TupleExpression, Type: (System.Int32 i1, System.Int32 i2)) (Syntax: 'var (i1, i2)') + Elements(2): + ILocalReferenceExpression: i1 (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i1') + ILocalReferenceExpression: i2 (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i2') +"; + var expectedDiagnostics = DiagnosticDescription.None; + + VerifyOperationTreeAndDiagnosticsForTest(source, expectedOperationTree, expectedDiagnostics); + } + + + } +} -- GitLab