提交 e13ee7ab 编写于 作者: C CyrusNajmabadi

Add tests around new 'add null check' behavior.

上级 ea49087e
// 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 System.Collections.Immutable;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeRefactorings;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CodeRefactorings;
using Microsoft.CodeAnalysis.GenerateConstructorFromMembers;
using Microsoft.CodeAnalysis.PickMembers;
......@@ -729,6 +727,79 @@ public Z(string b, int a)
chosenSymbols: new string[] { "b", "a" });
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateConstructorFromMembers)]
public async Task TestAddNullChecks1()
{
await TestWithPickMembersDialogAsync(
@"
using System;
using System.Collections.Generic;
class Z
{
int a;
string b;
[||]
}",
@"
using System;
using System.Collections.Generic;
class Z
{
int a;
string b;
public Z(int a, string b)
{
this.a = a;
this.b = b ?? throw new ArgumentNullException(nameof(b));
}
}",
chosenSymbols: new string[] { "a", "b" },
optionsCallback: options => options[0].Value = true);
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateConstructorFromMembers)]
public async Task TestAddNullChecks2()
{
await TestWithPickMembersDialogAsync(
@"
using System;
using System.Collections.Generic;
class Z
{
int a;
string b;
[||]
}",
@"
using System;
using System.Collections.Generic;
class Z
{
int a;
string b;
public Z(int a, string b)
{
if (b == null)
{
throw new ArgumentNullException(nameof(b));
}
this.a = a;
this.b = b;
}
}",
chosenSymbols: new string[] { "a", "b" },
optionsCallback: options => options[0].Value = true,
parameters: new TestParameters(options:
Option(CodeStyleOptions.PreferThrowExpression, CodeStyleOptions.FalseWithNoneEnforcement)));
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateConstructorFromMembers)]
public async Task TestMissingOnMember1()
{
......
......@@ -113,21 +113,26 @@ public abstract class AbstractCodeActionTest : AbstractCodeActionOrUserDiagnosti
}
protected static Document GetDocument(TestWorkspace workspace)
{
return workspace.CurrentSolution.GetDocument(workspace.Documents.First().Id);
}
=> workspace.CurrentSolution.GetDocument(workspace.Documents.First().Id);
private class TestPickMembersService : IPickMembersService
{
private readonly ImmutableArray<string> _memberNames;
private readonly Action<ImmutableArray<PickMembersOption>> _optionsCallback;
public TestPickMembersService(ImmutableArray<string> memberNames)
=> _memberNames = memberNames;
public TestPickMembersService(
ImmutableArray<string> memberNames,
Action<ImmutableArray<PickMembersOption>> optionsCallback)
{
_memberNames = memberNames;
_optionsCallback = optionsCallback;
}
public PickMembersResult PickMembers(
string title, ImmutableArray<ISymbol> members,
ImmutableArray<PickMembersOption> options)
{
_optionsCallback?.Invoke(options);
return new PickMembersResult(
_memberNames.IsDefault
? members
......@@ -140,12 +145,13 @@ public TestPickMembersService(ImmutableArray<string> memberNames)
string initialMarkup,
string expectedMarkup,
string[] chosenSymbols,
Action<ImmutableArray<PickMembersOption>> optionsCallback = null,
int index = 0,
bool ignoreTrivia = true,
CodeActionPriority? priority = null,
TestParameters parameters = default(TestParameters))
{
var pickMembersService = new TestPickMembersService(chosenSymbols.AsImmutableOrNull());
var pickMembersService = new TestPickMembersService(chosenSymbols.AsImmutableOrNull(), optionsCallback);
return TestInRegularAndScript1Async(
initialMarkup, expectedMarkup,
index, ignoreTrivia, priority,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册