File: Microsoft.NetCore.Analyzers\Runtime\MarkAllNonSerializableFieldsTests.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.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp.Testing;
using Microsoft.CodeAnalysis.Testing;
using Microsoft.CodeAnalysis.VisualBasic.Testing;
using Microsoft.NetCore.CSharp.Analyzers.Runtime;
using Microsoft.NetCore.VisualBasic.Analyzers.Runtime;
using Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
    Microsoft.NetCore.Analyzers.Runtime.SerializationRulesDiagnosticAnalyzer,
    Microsoft.NetCore.CSharp.Analyzers.Runtime.CSharpMarkAllNonSerializableFieldsFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.NetCore.Analyzers.Runtime.SerializationRulesDiagnosticAnalyzer,
    Microsoft.NetCore.VisualBasic.Analyzers.Runtime.BasicMarkAllNonSerializableFieldsFixer>;
 
namespace Microsoft.NetCore.Analyzers.Runtime.UnitTests
{
    public partial class MarkAllNonSerializableFieldsFixerTests
    {
        [Fact]
        public async Task CA2235WithNonSerializableFieldsWithFixAsync()
        {
            await VerifyCS.VerifyCodeFixAsync(@"
using System;
public class NonSerializableType { }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    internal NonSerializableType {|CA2235:s1|};
}",
@"
using System;
public class NonSerializableType { }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    [NonSerialized]
    internal NonSerializableType s1;
}");
 
            await VerifyVB.VerifyCodeFixAsync(@"
Imports System
Public Class NonSerializableType
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields 
    Friend {|CA2235:s1|} As NonSerializableType
End Class",
@"
Imports System
Public Class NonSerializableType
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields
    <NonSerialized>
    Friend s1 As NonSerializableType
End Class");
        }
 
        [Fact]
        public async Task CA2235WithNonSerializableFieldsWithFix1Async()
        {
            await new CSharpCodeFixTest<SerializationRulesDiagnosticAnalyzer, CSharpMarkAllNonSerializableFieldsFixer, DefaultVerifier>
            {
                TestCode = @"
using System;
public class NonSerializableType { }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    internal NonSerializableType {|CA2235:s1|};
}",
                FixedCode = @"
using System;
 
[Serializable]
public class NonSerializableType { }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    internal NonSerializableType s1;
}",
                CodeActionIndex = 1,
            }.RunAsync();
 
            await new VisualBasicCodeFixTest<SerializationRulesDiagnosticAnalyzer, BasicMarkAllNonSerializableFieldsFixer, DefaultVerifier>
            {
                TestCode = @"
Imports System
Public Class NonSerializableType
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields
    Friend {|CA2235:s1|} As NonSerializableType
End Class",
                FixedCode = @"
Imports System
 
<Serializable>
Public Class NonSerializableType
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields
    Friend s1 As NonSerializableType
End Class",
                CodeActionIndex = 1,
            }.RunAsync();
        }
 
        [Fact]
        public async Task CA2235WithNonSerializableFieldsWithFix2Async()
        {
            await VerifyCS.VerifyCodeFixAsync(@"
using System;
public class NonSerializableType { }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    internal NonSerializableType {|CA2235:s1|}, {|CA2235:s2|} = new NonSerializableType(), {|CA2235:s3|};
}",
@"
using System;
public class NonSerializableType { }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    [NonSerialized]
    internal NonSerializableType s1, s2 = new NonSerializableType(), s3;
}");
 
            await VerifyVB.VerifyCodeFixAsync(@"
Imports System
Public Class NonSerializableType
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields 
    Friend {|CA2235:s1|}, {|CA2235:s2|}, {|CA2235:s3|} As NonSerializableType
End Class",
@"
Imports System
Public Class NonSerializableType
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields
    <NonSerialized>
    Friend s1, s2, s3 As NonSerializableType
End Class");
        }
 
        [Fact]
        public async Task CA2235WithNonSerializableFieldsWithFix3Async()
        {
            await new CSharpCodeFixTest<SerializationRulesDiagnosticAnalyzer, CSharpMarkAllNonSerializableFieldsFixer, DefaultVerifier>
            {
                TestCode = @"
using System;
public partial class NonSerializableType { }
 
public partial class NonSerializableType { public void method() { } }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    internal NonSerializableType {|CA2235:s1|};
}",
                FixedCode = @"
using System;
 
[Serializable]
public partial class NonSerializableType { }
 
public partial class NonSerializableType { public void method() { } }
 
[Serializable]
public class CA2235WithNonPublicNonSerializableFields
{
    internal NonSerializableType s1;
}",
                CodeActionIndex = 1,
            }.RunAsync();
 
            await new VisualBasicCodeFixTest<SerializationRulesDiagnosticAnalyzer, BasicMarkAllNonSerializableFieldsFixer, DefaultVerifier>
            {
                TestCode = @"
Imports System
Public Partial Class NonSerializableType
End Class
 
Public Class NonSerializableType
    Sub method()
    End Sub
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields
    Friend {|CA2235:s1|} As NonSerializableType
End Class",
                FixedCode = @"
Imports System
 
<Serializable>
Public Partial Class NonSerializableType
End Class
 
Public Class NonSerializableType
    Sub method()
    End Sub
End Class
 
<Serializable>
Public Class CA2235WithNonPublicNonSerializableFields
    Friend s1 As NonSerializableType
End Class",
                CodeActionIndex = 1,
            }.RunAsync();
        }
    }
}