File: Microsoft.NetCore.Analyzers\ImmutableCollections\DoNotCallToImmutableCollectionOnAnImmutableCollectionValueTests.Fixer.cs
Web Access
Project: ..\..\..\src\Microsoft.CodeAnalysis.NetAnalyzers\tests\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests.csproj (Microsoft.CodeAnalysis.NetAnalyzers.UnitTests)
// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the MIT license.  See License.txt in the project root for license information.
 
using System.Collections.Immutable;
using System.Threading.Tasks;
using Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
    Microsoft.NetCore.Analyzers.ImmutableCollections.DoNotCallToImmutableCollectionOnAnImmutableCollectionValueAnalyzer,
    Microsoft.NetCore.Analyzers.ImmutableCollections.DoNotCallToImmutableCollectionOnAnImmutableCollectionValueFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.NetCore.Analyzers.ImmutableCollections.DoNotCallToImmutableCollectionOnAnImmutableCollectionValueAnalyzer,
    Microsoft.NetCore.Analyzers.ImmutableCollections.DoNotCallToImmutableCollectionOnAnImmutableCollectionValueFixer>;
 
namespace Microsoft.NetCore.Analyzers.ImmutableCollections.UnitTests
{
    public class DoNotCallToImmutableCollectionOnAnImmutableCollectionValueFixerTests
    {
        public static readonly TheoryData<string> CollectionNames_Arity1 = new()
        {
            nameof(ImmutableArray),
            nameof(ImmutableHashSet),
            nameof(ImmutableList),
            nameof(ImmutableSortedSet)
        };
 
        public static readonly TheoryData<string> CollectionNames_Arity2 = new()
        {
            nameof(ImmutableDictionary),
            nameof(ImmutableSortedDictionary)
        };
 
        [Theory]
        [MemberData(nameof(CollectionNames_Arity1))]
        public async Task CA2009_Arity1_CSharpAsync(string collectionName)
        {
            var initial = $@"
using System.Collections.Generic;
using System.Collections.Immutable;
 
class C
{{
    public void M(IEnumerable<int> p1, List<int> p2, {collectionName}<int> p3)
    {{
        var a = [|p1.To{collectionName}().To{collectionName}()|];
        var b = [|p3.To{collectionName}()|];
        var c = [|{collectionName}.To{collectionName}({collectionName}.To{collectionName}(p1))|];
        var d = [|{collectionName}.To{collectionName}(p3)|];
    }}
}}";
 
            var expected = $@"
using System.Collections.Generic;
using System.Collections.Immutable;
 
class C
{{
    public void M(IEnumerable<int> p1, List<int> p2, {collectionName}<int> p3)
    {{
        var a = p1.To{collectionName}();
        var b = p3;
        var c = {collectionName}.To{collectionName}(p1);
        var d = p3;
    }}
}}";
            await VerifyCS.VerifyCodeFixAsync(initial, expected);
        }
 
        [Theory]
        [MemberData(nameof(CollectionNames_Arity1))]
        public async Task CA2009_Arity1_BasicAsync(string collectionName)
        {
            var initial = $@"
Imports System.Collections.Generic
Imports System.Collections.Immutable
 
Class C
	Public Sub M(p1 As IEnumerable(Of Integer), p2 As List(Of Integer), p3 As {collectionName}(Of Integer))
		Dim a = [|p1.To{collectionName}().To{collectionName}()|]
		Dim b = [|p3.To{collectionName}()|]
		Dim c = [|{collectionName}.To{collectionName}({collectionName}.To{collectionName}(p1))|]
		Dim d = [|{collectionName}.To{collectionName}(p3)|]
	End Sub
End Class";
 
            var expected = $@"
Imports System.Collections.Generic
Imports System.Collections.Immutable
 
Class C
	Public Sub M(p1 As IEnumerable(Of Integer), p2 As List(Of Integer), p3 As {collectionName}(Of Integer))
		Dim a = p1.To{collectionName}()
		Dim b = p3
		Dim c = {collectionName}.To{collectionName}(p1)
		Dim d = p3
	End Sub
End Class";
            await VerifyVB.VerifyCodeFixAsync(initial, expected);
        }
 
        [Theory]
        [MemberData(nameof(CollectionNames_Arity2))]
        public async Task CA2009_Arity2_CSharpAsync(string collectionName)
        {
            var initial = $@"
using System.Collections.Generic;
using System.Collections.Immutable;
 
class C
{{
    public void M(IEnumerable<KeyValuePair<int, int>> p1, List<KeyValuePair<int, int>> p2, {collectionName}<int, int> p3)
    {{
        var a = [|p1.To{collectionName}().To{collectionName}()|];
        var b = [|p3.To{collectionName}()|];
        var c = [|{collectionName}.To{collectionName}({collectionName}.To{collectionName}(p1))|];
        var d = [|{collectionName}.To{collectionName}(p3)|];
    }}
}}";
 
            var expected = $@"
using System.Collections.Generic;
using System.Collections.Immutable;
 
class C
{{
    public void M(IEnumerable<KeyValuePair<int, int>> p1, List<KeyValuePair<int, int>> p2, {collectionName}<int, int> p3)
    {{
        var a = p1.To{collectionName}();
        var b = p3;
        var c = {collectionName}.To{collectionName}(p1);
        var d = p3;
    }}
}}";
            await VerifyCS.VerifyCodeFixAsync(initial, expected);
        }
 
        [Theory]
        [MemberData(nameof(CollectionNames_Arity2))]
        public async Task CA2009_Arity2_BasicAsync(string collectionName)
        {
            var initial = $@"
Imports System.Collections.Generic
Imports System.Collections.Immutable
 
Class C
	Public Sub M(p1 As IEnumerable(Of KeyValuePair(Of Integer, Integer)), p2 As List(Of KeyValuePair(Of Integer, Integer)), p3 As {collectionName}(Of Integer, Integer))
		Dim a = [|p1.To{collectionName}().To{collectionName}()|]
		Dim b = [|p3.To{collectionName}()|]
		Dim c = [|{collectionName}.To{collectionName}({collectionName}.To{collectionName}(p1))|]
		Dim d = [|{collectionName}.To{collectionName}(p3)|]
	End Sub
End Class";
 
            var expected = $@"
Imports System.Collections.Generic
Imports System.Collections.Immutable
 
Class C
	Public Sub M(p1 As IEnumerable(Of KeyValuePair(Of Integer, Integer)), p2 As List(Of KeyValuePair(Of Integer, Integer)), p3 As {collectionName}(Of Integer, Integer))
		Dim a = p1.To{collectionName}()
		Dim b = p3
		Dim c = {collectionName}.To{collectionName}(p1)
		Dim d = p3
	End Sub
End Class";
            await VerifyVB.VerifyCodeFixAsync(initial, expected);
        }
    }
}