Skip to content

Commit

Permalink
[GH-70] - remaining tests for visual basic code fix providers
Browse files Browse the repository at this point in the history
  • Loading branch information
tpodolak committed Feb 26, 2019
1 parent fc9855f commit 2394916
Show file tree
Hide file tree
Showing 9 changed files with 1,852 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeActions;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using NSubstitute.Analyzers.CSharp.Refactorings;
Expand All @@ -16,14 +14,16 @@ internal class InternalSetupSpecificationCodeFixProvider : AbstractInternalSetup
{
public override ImmutableArray<string> FixableDiagnosticIds { get; } = ImmutableArray.Create(DiagnosticIdentifiers.InternalSetupSpecification);

protected override Task<Document> AddModifierRefactoring(Document document, SyntaxNode node)
protected override string ReplaceModifierCodeFixTitle { get; } = "Replace internal with public modifier";

protected override Task<Document> AddModifierRefactoring(Document document, SyntaxNode node, Accessibility accessibility)
{
return Refactorings.AddModifierRefactoring.RefactorAsync(document, node, Accessibility.Protected);
return Refactorings.AddModifierRefactoring.RefactorAsync(document, node, accessibility);
}

protected override Task<Document> ReplaceModifierRefactoring(Document document, SyntaxNode node)
protected override Task<Document> ReplaceModifierRefactoring(Document document, SyntaxNode node, Accessibility fromAccessibility, Accessibility toAccessibility)
{
return Refactorings.ReplaceModifierRefactoring.RefactorAsync(document, node, Accessibility.Internal, Accessibility.Public);
return Refactorings.ReplaceModifierRefactoring.RefactorAsync(document, node, fromAccessibility, toAccessibility);
}

protected override void RegisterAddInternalsVisibleToAttributeCodeFix(CodeFixContext context, Diagnostic diagnostic, CompilationUnitSyntax compilationUnitSyntax)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ internal abstract class AbstractInternalSetupSpecificationCodeFixProvider<TCompi
{
public override ImmutableArray<string> FixableDiagnosticIds { get; } = ImmutableArray.Create(DiagnosticIdentifiers.InternalSetupSpecification);

protected abstract string ReplaceModifierCodeFixTitle { get; }

public override async Task RegisterCodeFixesAsync(CodeFixContext context)
{
var diagnostic =
Expand All @@ -38,8 +40,8 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
return;
}

context.RegisterCodeFix(CodeAction.Create("Add protected modifier", token => AddModifierRefactoring(context.Document, syntaxNode)), diagnostic);
context.RegisterCodeFix(CodeAction.Create("Replace internal with public modifier", token => ReplaceModifierRefactoring(context.Document, syntaxNode)), diagnostic);
context.RegisterCodeFix(CodeAction.Create("Add protected modifier", token => AddModifierRefactoring(context.Document, syntaxNode, Accessibility.Protected)), diagnostic);
context.RegisterCodeFix(CodeAction.Create(ReplaceModifierCodeFixTitle, token => ReplaceModifierRefactoring(context.Document, syntaxNode, Accessibility.Internal, Accessibility.Public)), diagnostic);

var compilationUnitSyntax = FindCompilationUnitSyntax(syntaxNode);

Expand All @@ -51,9 +53,9 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
RegisterAddInternalsVisibleToAttributeCodeFix(context, diagnostic, compilationUnitSyntax);
}

protected abstract Task<Document> AddModifierRefactoring(Document document, SyntaxNode node);
protected abstract Task<Document> AddModifierRefactoring(Document document, SyntaxNode node, Accessibility accessibility);

protected abstract Task<Document> ReplaceModifierRefactoring(Document document, SyntaxNode node);
protected abstract Task<Document> ReplaceModifierRefactoring(Document document, SyntaxNode node, Accessibility fromAccessibility, Accessibility toAccessibility);

protected abstract void RegisterAddInternalsVisibleToAttributeCodeFix(CodeFixContext context, Diagnostic diagnostic, TCompilationUnitSyntax compilationUnitSyntax);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@ internal class InternalSetupSpecificationCodeFixProvider : AbstractInternalSetup
{
public override ImmutableArray<string> FixableDiagnosticIds { get; } = ImmutableArray.Create(DiagnosticIdentifiers.InternalSetupSpecification);

protected override Task<Document> AddModifierRefactoring(Document document, SyntaxNode node)
protected override string ReplaceModifierCodeFixTitle { get; } = "Replace friend with public modifier";

protected override Task<Document> AddModifierRefactoring(Document document, SyntaxNode node, Accessibility accessibility)
{
return Refactorings.AddModifierRefactoring.RefactorAsync(document, node, Accessibility.Protected);
return Refactorings.AddModifierRefactoring.RefactorAsync(document, node, accessibility);
}

protected override Task<Document> ReplaceModifierRefactoring(Document document, SyntaxNode node)
protected override Task<Document> ReplaceModifierRefactoring(Document document, SyntaxNode node, Accessibility fromAccessibility, Accessibility toAccessibility)
{
return Refactorings.ReplaceModifierRefactoring.RefactorAsync(document, node, Accessibility.Internal, Accessibility.Public);
return Refactorings.ReplaceModifierRefactoring.RefactorAsync(document, node, fromAccessibility, toAccessibility);
}

protected override void RegisterAddInternalsVisibleToAttributeCodeFix(CodeFixContext context, Diagnostic diagnostic, CompilationUnitSyntax compilationUnitSyntax)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.Diagnostics;
using NSubstitute.Analyzers.Tests.Shared.CodeFixProviders;
using NSubstitute.Analyzers.VisualBasic.CodeFixProviders;
using NSubstitute.Analyzers.VisualBasic.DiagnosticAnalyzers;
using Xunit;

namespace NSubstitute.Analyzers.Tests.VisualBasic.CodeFixProvidersTests.InternalSetupSpecificationCodeFixProviderTests
{
public class InternalSetupSpecificationCodeFixActionsTests : VisualBasicCodeFixActionsVerifier, IInternalSetupSpecificationCodeFixActionsVerifier
{
[Fact]
public async Task CreateCodeActions_InProperOrder()
{
var source = @"Imports NSubstitute
Imports System.Runtime.CompilerServices
Namespace MyNamespace
Public Class Foo
Friend Overridable Function Bar() As Integer
Return 1
End Function
End Class
Public Class FooTests
Public Sub Test()
Dim substitute = NSubstitute.Substitute.[For](Of Foo)()
Dim x = substitute.Bar().Returns(1)
End Sub
End Class
End Namespace
";
await VerifyCodeActions(source, "Add protected modifier", "Replace friend with public modifier", "Add InternalsVisibleTo attribute");
}

[Fact]
public async Task DoesNotCreateCodeActions_WhenSymbol_DoesNotBelongToCompilation()
{
var source = @"Imports NSubstitute
Namespace MyNamespace
Public Class FooTests
Public Sub Test()
Dim substitute = NSubstitute.Substitute.[For](Of Object)()
Dim x = substitute.ToString().Returns(String.Empty)
End Sub
End Class
End Namespace";
await VerifyCodeActions(source);
}

protected override DiagnosticAnalyzer GetDiagnosticAnalyzer()
{
return new NonSubstitutableMemberAnalyzer();
}

protected override CodeFixProvider GetCodeFixProvider()
{
return new InternalSetupSpecificationCodeFixProvider();
}
}
}
Loading

0 comments on commit 2394916

Please sign in to comment.