|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Testing;
using Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
Roslyn.Diagnostics.Analyzers.PartsExportedWithMEFv2MustBeMarkedAsSharedAnalyzer,
Roslyn.Diagnostics.CSharp.Analyzers.CSharpPartsExportedWithMEFv2MustBeMarkedAsSharedFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
Roslyn.Diagnostics.Analyzers.PartsExportedWithMEFv2MustBeMarkedAsSharedAnalyzer,
Roslyn.Diagnostics.VisualBasic.Analyzers.BasicPartsExportedWithMEFv2MustBeMarkedAsSharedFixer>;
namespace Roslyn.Diagnostics.Analyzers.UnitTests
{
public class PartsExportedWithMEFv2MustBeMarkedAsSharedTests
{
private const string CSharpWellKnownAttributesDefinition = @"
namespace System.Composition
{
public class ExportAttribute : System.Attribute
{
public ExportAttribute(System.Type contractType){ }
}
public class SharedAttribute : System.Attribute
{
}
}
";
private const string BasicWellKnownAttributesDefinition = @"
Namespace System.Composition
Public Class ExportAttribute
Inherits System.Attribute
Public Sub New(contractType As System.Type)
End Sub
End Class
Public Class SharedAttribute
Inherits System.Attribute
End Class
End Namespace
";
#region No Diagnostic Tests
[Fact]
public async Task NoDiagnosticCases_ResolvedTypesAsync()
{
await VerifyCS.VerifyAnalyzerAsync(@"
using System;
using System.Composition;
[Export(typeof(C)), Shared]
public class C
{
}
" + CSharpWellKnownAttributesDefinition);
await VerifyVB.VerifyAnalyzerAsync(@"
Imports System
Imports System.Composition
<Export(GetType(C)), [Shared]> _
Public Class C
End Class
" + BasicWellKnownAttributesDefinition);
}
[Fact]
public async Task NoDiagnosticCases_UnresolvedTypesAsync()
{
await new VerifyCS.Test
{
TestState =
{
Sources =
{
@"
using System;
using System.{|CS0234:Composition|};
[{|CS0246:{|CS0246:Export|}|}(typeof(C)), {|CS0246:{|CS0246:Shared|}|}]
public class C
{
}
",
},
},
ReferenceAssemblies = ReferenceAssemblies.Default,
}.RunAsync();
await new VerifyVB.Test
{
TestState =
{
Sources =
{
@"
Imports System
Imports System.Composition
<{|BC30002:Export|}(GetType(C)), {|BC30002:[Shared]|}> _
Public Class C
End Class
"
},
},
ReferenceAssemblies = ReferenceAssemblies.Default,
}.RunAsync();
}
#endregion
#region Diagnostic Tests
[Fact]
public async Task DiagnosticCases_NoSharedAttributeAsync()
{
await VerifyCS.VerifyCodeFixAsync(@"
using System;
using System.Composition;
[[|Export(typeof(C))|]]
public class C
{
}
" + CSharpWellKnownAttributesDefinition, @"
using System;
using System.Composition;
[Export(typeof(C))]
[Shared]
public class C
{
}
" + CSharpWellKnownAttributesDefinition);
await VerifyVB.VerifyCodeFixAsync(@"
Imports System
Imports System.Composition
<[|Export(GetType(C))|]> _
Public Class C
End Class
" + BasicWellKnownAttributesDefinition, @"
Imports System
Imports System.Composition
<Export(GetType(C))> _
<[Shared]>
Public Class C
End Class
" + BasicWellKnownAttributesDefinition);
}
[Fact]
public async Task DiagnosticCases_DifferentSharedAttributeAsync()
{
await VerifyCS.VerifyCodeFixAsync(@"
using System;
[[|System.Composition.Export(typeof(C))|], Shared]
public class C
{
}
public class SharedAttribute: Attribute
{
}
" + CSharpWellKnownAttributesDefinition, @"
using System;
[System.Composition.Export(typeof(C)), Shared]
[System.Composition.Shared]
public class C
{
}
public class SharedAttribute: Attribute
{
}
" + CSharpWellKnownAttributesDefinition);
await VerifyVB.VerifyCodeFixAsync(@"
Imports System
<[|System.Composition.Export(GetType(C))|], [Shared]> _
Public Class C
End Class
Public Class SharedAttribute
Inherits Attribute
End Class
" + BasicWellKnownAttributesDefinition, @"
Imports System
<System.Composition.Export(GetType(C)), [Shared]> _
<Composition.Shared>
Public Class C
End Class
Public Class SharedAttribute
Inherits Attribute
End Class
" + BasicWellKnownAttributesDefinition);
}
#endregion
}
}
|