Skip to content

Commit

Permalink
Add tests for experiment service
Browse files Browse the repository at this point in the history
  • Loading branch information
genlu committed Apr 17, 2019
1 parent 0160f43 commit 42fe72d
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 16 deletions.
@@ -1,15 +1,21 @@
// 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.Composition;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.CSharp.Completion.Providers;
using Microsoft.CodeAnalysis.Editor.UnitTests;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.CodeAnalysis.Experiments;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.VisualStudio.Composition;
using Roslyn.Test.Utilities;
using Xunit;

namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Completion.CompletionProviders
{
[UseExportProvider]
public class TypeImportCompletionProviderTests : AbstractCSharpCompletionProviderTests
{
public TypeImportCompletionProviderTests(CSharpTestWorkspaceFixture workspaceFixture) : base(workspaceFixture)
Expand All @@ -29,25 +35,63 @@ protected override void SetWorkspaceOptions(TestWorkspace workspace)
.WithChangedOption(CompletionOptions.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp, ShowImportCompletionItemsOptionValue);
}

ExportProvider _exportProvider = null;
protected override ExportProvider ExportProvider
{
get
{
if (_exportProvider == null)
{
_exportProvider = ExportProviderCache
.GetOrCreateExportProviderFactory(TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithPart(typeof(MockTypeImportCompletionExperimentationService)))
.CreateExportProvider();
}
return _exportProvider;
}
}

#region "Option tests"

[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task OptionSetToNull()
public async Task OptionSetToNull_ExpEnabled()
{
var mockExperimentService = ExportProvider.GetExportedValue<MockTypeImportCompletionExperimentationService>();
mockExperimentService.ExperimentEnabled = true;

ShowImportCompletionItemsOptionValue = null;

var markup = @"
class Bar
{
$$
}";

await VerifyNoItemsExistAsync(markup);
await VerifyAnyItemExistsAsync(markup);
}

[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task OptionSetToFalse()
public async Task OptionSetToNull_ExpDisabled()
{
ShowImportCompletionItemsOptionValue = null;
var markup = @"
class Bar
{
$$
}";

await VerifyNoItemsExistAsync(markup);
}

[InlineData(true)]
[InlineData(false)]
[Theory, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task OptionSetToFalse(bool isExperimentEnabled)
{
var mockExperimentService = ExportProvider.GetExportedValue<MockTypeImportCompletionExperimentationService>();
mockExperimentService.ExperimentEnabled = isExperimentEnabled;

ShowImportCompletionItemsOptionValue = false;

var markup = @"
class Bar
{
Expand All @@ -57,10 +101,16 @@ class Bar
await VerifyNoItemsExistAsync(markup);
}

[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task OptionSetToTrue()
[InlineData(true)]
[InlineData(false)]
[Theory, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task OptionSetToTrue(bool isExperimentEnabled)
{
var mockExperimentService = ExportProvider.GetExportedValue<MockTypeImportCompletionExperimentationService>();
mockExperimentService.ExperimentEnabled = isExperimentEnabled;

ShowImportCompletionItemsOptionValue = true;

var markup = @"
class Bar
{
Expand Down Expand Up @@ -816,5 +866,18 @@ private Task VerifyTypeImportItemIsAbsentAsync(string markup, string expectedIte
{
return VerifyItemIsAbsentAsync(markup, expectedItem, displayTextSuffix: displayTextSuffix, inlineDescription: inlineDescription);
}

[Shared]
[Export(typeof(MockTypeImportCompletionExperimentationService))]
[ExportWorkspaceService(typeof(IExperimentationService), WorkspaceKind.Test)]
private class MockTypeImportCompletionExperimentationService : IExperimentationService
{
public bool ExperimentEnabled { get; set; } = false;

public bool IsExperimentEnabled(string experimentName)
{
return ExperimentEnabled && WellKnownExperimentNames.TypeImportCompletion.Equals(experimentName);
}
}
}
}
Expand Up @@ -15,6 +15,7 @@
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.Composition;
using Microsoft.VisualStudio.Language.Intellisense;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
Expand Down Expand Up @@ -149,12 +150,14 @@ internal static CompletionHelper GetCompletionHelper(Document document)
}
}

protected virtual ExportProvider ExportProvider => null;

private Task VerifyAsync(
string markup, string expectedItemOrNull, string expectedDescriptionOrNull,
SourceCodeKind sourceCodeKind, bool usePreviousCharAsTrigger, bool checkForAbsence,
int? glyph, int? matchPriority, bool? hasSuggestionModeItem, string displayTextSuffix, string inlineDescription)
{
var workspace = WorkspaceFixture.GetWorkspace(markup);
var workspace = WorkspaceFixture.GetWorkspace(markup, ExportProvider);
var code = WorkspaceFixture.Code;
var position = WorkspaceFixture.Position;
SetWorkspaceOptions(workspace);
Expand Down
Expand Up @@ -2,16 +2,18 @@

using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.VisualStudio.Composition;

namespace Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
{
public class CSharpTestWorkspaceFixture : TestWorkspaceFixture
{
protected override TestWorkspace CreateWorkspace()
protected override TestWorkspace CreateWorkspace(ExportProvider exportProvider = null)
{
return TestWorkspace.CreateCSharp2(
new string[] { string.Empty, },
new CSharpParseOptions[] { new CSharpParseOptions(kind: SourceCodeKind.Regular), });
new CSharpParseOptions[] { new CSharpParseOptions(kind: SourceCodeKind.Regular), },
exportProvider: exportProvider);
}
}
}
Expand Up @@ -5,6 +5,7 @@
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using Microsoft.VisualStudio.Composition;
using Microsoft.VisualStudio.Text;
using Roslyn.Test.Utilities;

Expand All @@ -20,17 +21,17 @@ public abstract class TestWorkspaceFixture : IDisposable

public TestHostDocument CurrentDocument => _currentDocument ?? _workspace.Documents.Single();

public TestWorkspace GetWorkspace()
public TestWorkspace GetWorkspace(ExportProvider exportProvider = null)
{
_workspace = _workspace ?? CreateWorkspace();
_workspace = _workspace ?? CreateWorkspace(exportProvider);
return _workspace;
}

public TestWorkspace GetWorkspace(string markup)
public TestWorkspace GetWorkspace(string markup, ExportProvider exportProvider = null)
{
if (TryParseXElement(markup, out var workspaceElement) && workspaceElement.Name == "Workspace")
{
_workspace = TestWorkspace.CreateWorkspace(workspaceElement);
_workspace = TestWorkspace.CreateWorkspace(workspaceElement, exportProvider: exportProvider);
_currentDocument = _workspace.Documents.First(d => d.CursorPosition.HasValue);
Position = _currentDocument.CursorPosition.Value;
Code = _currentDocument.TextBuffer.CurrentSnapshot.GetText();
Expand All @@ -39,7 +40,7 @@ public TestWorkspace GetWorkspace(string markup)
else
{
MarkupTestFile.GetPosition(markup.NormalizeLineEndings(), out Code, out Position);
var workspace = GetWorkspace();
var workspace = GetWorkspace(exportProvider);
_currentDocument = workspace.Documents.Single();
return workspace;
}
Expand All @@ -49,7 +50,7 @@ public TestWorkspaceFixture()
{
}

protected abstract TestWorkspace CreateWorkspace();
protected abstract TestWorkspace CreateWorkspace(ExportProvider exportProvider);

public void Dispose()
{
Expand Down
Expand Up @@ -6,17 +6,19 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.VisualBasic;
using Microsoft.VisualStudio.Composition;

namespace Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
{
public class VisualBasicTestWorkspaceFixture : TestWorkspaceFixture
{
protected override TestWorkspace CreateWorkspace()
protected override TestWorkspace CreateWorkspace(ExportProvider exportProvider = null)
{
return TestWorkspace.CreateVisualBasic(
new string[] { string.Empty },
new VisualBasicParseOptions[] { new VisualBasicParseOptions(kind: SourceCodeKind.Regular) },
new VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
new VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
exportProvider: exportProvider);
}
}
}

0 comments on commit 42fe72d

Please sign in to comment.