public void UniqueSourceFilesPushedToWorkspace() { var sourceFilesPushedToWorkspace = new HashSet <string>(StringComparers.Paths); void onSourceFileAdded(string s) => Assert.True(sourceFilesPushedToWorkspace.Add(s)); void onSourceFileRemoved(string s) => sourceFilesPushedToWorkspace.Remove(s); var project = UnconfiguredProjectFactory.Create(fullPath: @"C:\Myproject.csproj"); var context = IWorkspaceProjectContextMockFactory.CreateForSourceFiles(project, onSourceFileAdded, onSourceFileRemoved); var logger = Mock.Of <IProjectLogger>(); var handler = CreateInstance(project, context); var projectDir = Path.GetDirectoryName(project.FullPath); var added = BuildOptions.FromCommandLineArguments(CSharpCommandLineParser.Default.Parse(args: new[] { @"C:\file1.cs", @"C:\file2.cs", @"C:\file1.cs" }, baseDirectory: projectDir, sdkDirectory: null)); var empty = BuildOptions.FromCommandLineArguments(CSharpCommandLineParser.Default.Parse(args: new string[] { }, baseDirectory: projectDir, sdkDirectory: null)); handler.Handle(10, added: added, removed: empty, isActiveContext: true, logger: logger); AssertEx.CollectionLength(sourceFilesPushedToWorkspace, 2); Assert.Contains(@"C:\file1.cs", sourceFilesPushedToWorkspace); Assert.Contains(@"C:\file2.cs", sourceFilesPushedToWorkspace); var removed = BuildOptions.FromCommandLineArguments(CSharpCommandLineParser.Default.Parse(args: new[] { @"C:\file1.cs", @"C:\file1.cs" }, baseDirectory: projectDir, sdkDirectory: null)); handler.Handle(10, added: empty, removed: removed, isActiveContext: true, logger: logger); Assert.Single(sourceFilesPushedToWorkspace); Assert.Contains(@"C:\file2.cs", sourceFilesPushedToWorkspace); }
public void DuplicateMetadataReferencesPushedToWorkspace() { var referencesPushedToWorkspace = new HashSet <string>(StringComparers.Paths); void onReferenceAdded(string s) => referencesPushedToWorkspace.Add(s); void onReferenceRemoved(string s) => referencesPushedToWorkspace.Remove(s); var project = UnconfiguredProjectFactory.Create(fullPath: @"C:\Myproject.csproj"); var context = IWorkspaceProjectContextMockFactory.CreateForMetadataReferences(project, onReferenceAdded, onReferenceRemoved); var logger = Mock.Of <IProjectDiagnosticOutputService>(); var handler = CreateInstance(project, context); var projectDir = Path.GetDirectoryName(project.FullPath); var added = BuildOptions.FromCommandLineArguments(CSharpCommandLineParser.Default.Parse(args: new[] { @"/reference:C:\Assembly1.dll", @"/reference:C:\Assembly2.dll", @"/reference:C:\Assembly1.dll" }, baseDirectory: projectDir, sdkDirectory: null)); var empty = BuildOptions.FromCommandLineArguments(CSharpCommandLineParser.Default.Parse(args: new string[] { }, baseDirectory: projectDir, sdkDirectory: null)); handler.Handle(10, added: added, removed: empty, new ContextState(isActiveEditorContext: true, isActiveConfiguration: false), logger: logger); AssertEx.CollectionLength(referencesPushedToWorkspace, 2); Assert.Contains(@"C:\Assembly1.dll", referencesPushedToWorkspace); Assert.Contains(@"C:\Assembly2.dll", referencesPushedToWorkspace); var removed = BuildOptions.FromCommandLineArguments(CSharpCommandLineParser.Default.Parse(args: new[] { @"/reference:C:\Assembly1.dll", @"/reference:C:\Assembly1.dll" }, baseDirectory: projectDir, sdkDirectory: null)); handler.Handle(10, added: empty, removed: removed, new ContextState(isActiveEditorContext: true, isActiveConfiguration: false), logger: logger); Assert.Single(referencesPushedToWorkspace); Assert.Contains(@"C:\Assembly2.dll", referencesPushedToWorkspace); }
public void Handle_RazorAndCshtmlFiles_InDifferentItemTypes_IgnoresDuplicates() { var dynamicFiles = new HashSet <string>(StringComparers.Paths); void onDynamicFileAdded(string s) => Assert.True(dynamicFiles.Add(s)); var project = UnconfiguredProjectFactory.Create(fullPath: @"C:\Myproject.csproj"); var context = IWorkspaceProjectContextMockFactory.CreateForDynamicFiles(project, onDynamicFileAdded); var handler = CreateInstance(project, context); var projectChanges = ImmutableDictionary <string, IProjectChangeDescription> .Empty.Add( "None", IProjectChangeDescriptionFactory.FromJson( @"{ ""Difference"": { ""AnyChanges"": true, ""AddedItems"": [ ""File1.razor"", ""File1.cs"" ] } }")).Add( "Content", IProjectChangeDescriptionFactory.FromJson( @"{ ""Difference"": { ""AnyChanges"": true, ""AddedItems"": [ ""File1.razor"", ""File1.cshtml"", ""File2.cs"" ] } }")); Handle(handler, projectChanges); Assert.Equal(2, dynamicFiles.Count); Assert.Contains(@"C:\File1.razor", dynamicFiles); Assert.Contains(@"C:\File1.cshtml", dynamicFiles); }
public void Handle_RazorAndCshtmlFiles_AddsToContext() { var dynamicFiles = new HashSet <string>(StringComparers.Paths); void onDynamicFileAdded(string s) => Assert.True(dynamicFiles.Add(s)); var project = UnconfiguredProjectFactory.Create(filePath: @"C:\Myproject.csproj"); var context = IWorkspaceProjectContextMockFactory.CreateForDynamicFiles(project, onDynamicFileAdded); var handler = CreateInstance(project, context); var projectChange = IProjectChangeDescriptionFactory.FromJson( @"{ ""Difference"": { ""AnyChanges"": true, ""AddedItems"": [ ""File1.razor"", ""File1.cshtml"", ""File1.cs"" ] } }"); Handle(handler, projectChange); Assert.Equal(2, dynamicFiles.Count); Assert.Contains(@"C:\File1.razor", dynamicFiles); Assert.Contains(@"C:\File1.cshtml", dynamicFiles); }
public void Handle_WhenTargetPathIsNotChanged_DoesNotSetBinOutputPath() { var context = IWorkspaceProjectContextMockFactory.Create(); context.BinOutputPath = @"BinOutputPath"; var handler = CreateInstance(context: context); var projectChange = IProjectChangeDescriptionFactory.FromJson( @"{ ""Difference"": { ""AnyChanges"": true, ""ChangedProperties"": [ ] }, ""After"": { ""Properties"": { ""TargetPath"": ""NewBinOutputPath"" } } }"); Handle(handler, projectChange); Assert.Equal("BinOutputPath", context.BinOutputPath); }
public void Handle_WhenPropertyIsChanged_CallsSetProperty() { string?nameResult = null; string?valueResult = null; var context = IWorkspaceProjectContextMockFactory.ImplementSetProperty((name, value) => { nameResult = name; valueResult = value; }); var handler = CreateInstance(context: context); var projectChange = IProjectChangeDescriptionFactory.FromJson( @"{ ""Difference"": { ""AnyChanges"": true, ""ChangedProperties"": [ ""RootNamespace"" ] }, ""After"": { ""Properties"": { ""RootNamespace"": ""value"" } } }"); Handle(handler, projectChange); Assert.Equal("RootNamespace", nameResult); Assert.Equal("value", valueResult); }
public void Handle_WhenMSBuildProjectFullPathPropertyChanged_SetsProjectFilePath() { var context = IWorkspaceProjectContextMockFactory.Create(); context.ProjectFilePath = @"ProjectFilePath"; var handler = CreateInstance(context: context); var projectChange = IProjectChangeDescriptionFactory.FromJson( @"{ ""Difference"": { ""AnyChanges"": true, ""ChangedProperties"": [ ""MSBuildProjectFullPath"" ] }, ""After"": { ""Properties"": { ""MSBuildProjectFullPath"": ""NewProjectFilePath"" } } }"); Handle(handler, projectChange); Assert.Equal(@"NewProjectFilePath", context.ProjectFilePath); }
public void Constructor_NullAsProject_ThrowsArgumentNull() { var context = IWorkspaceProjectContextMockFactory.Create(); Assert.Throws <ArgumentNullException>("project", () => { new MetadataReferenceItemHandler((UnconfiguredProject)null); }); }
private static ApplyChangesToWorkspaceContext CreateInitializedInstance(out IWorkspaceProjectContext context, ConfiguredProject?project = null, ICommandLineParserService?commandLineParser = null, IProjectLogger?logger = null, params IWorkspaceContextHandler[] handlers) { var applyChangesToWorkspace = CreateInstance(project, commandLineParser, logger, handlers); context = IWorkspaceProjectContextMockFactory.Create(); applyChangesToWorkspace.Initialize(context); return(applyChangesToWorkspace); }
public void RegisterContext_EmptyAsContextId_ThrowsArgument() { var instance = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); Assert.Throws <ArgumentException>("contextId", () => { instance.RegisterContext(context, string.Empty); }); }
public async Task ReleaseProjectContextAsync_DisposesContext() { var provider = CreateInstance(); int callCount = 0; var projectContext = IWorkspaceProjectContextMockFactory.ImplementDispose(() => callCount++); await provider.ReleaseProjectContextAsync(projectContext); Assert.Equal(1, callCount); }
public void Handle_WhenMSBuildProjectFullPathPropertyChanged_SetsDisplayNameToFileNameWithoutExtension() { var context = IWorkspaceProjectContextMockFactory.Create(); var handler = CreateInstance(context: context); var projectChange = SetupProjectChanges(true, "C:\\Project\\Project.csproj", true); Handle(handler, projectChange); Assert.Equal(@"Project", context.DisplayName); }
public async Task DisposeAsync_WhenInitializedWithNoHandlers_DoesNotThrow() { var applyChangesToWorkspace = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); applyChangesToWorkspace.Initialize(context); await applyChangesToWorkspace.DisposeAsync(); Assert.True(applyChangesToWorkspace.IsDisposed); }
public void IsActiveEditorContext_UnregisteredContextAsContext_ThrowsInvalidOperation() { var instance = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); Assert.Throws <InvalidOperationException>(() => { instance.IsActiveEditorContext(context); }); }
public void RegisterContext_NullAsContextId_ThrowsArgumentNull() { var instance = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); Assert.Throws <ArgumentNullException>("contextId", () => { instance.RegisterContext(context, (string)null); }); }
public void Handle_WhenMSBuildProjectFullPathPropertyChangedAndMultitargeting_IncludeDimensionValuesInDisplayName(string dimensionNames, string dimensionValues, string implicitDimensionNames, string expected) { var context = IWorkspaceProjectContextMockFactory.Create(); var implicitlyActiveDimensionProvider = IImplicitlyActiveDimensionProviderFactory.ImplementGetImplicitlyActiveDimensions(n => implicitDimensionNames.SplitReturningEmptyIfEmpty('|')); var configuration = ProjectConfigurationFactory.Create(dimensionNames, dimensionValues); var handler = CreateInstance(configuration, implicitlyActiveDimensionProvider, context); var projectChange = SetupProjectChanges(true, "C:\\Project\\Project.csproj", true); Handle(handler, projectChange); Assert.Equal(expected, context.DisplayName); }
public void Initialize_WhenAlreadyInitialized_ThrowsInvalidOperation() { var applyChangesToWorkspace = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); applyChangesToWorkspace.Initialize(context); Assert.Throws <InvalidOperationException>(() => { applyChangesToWorkspace.Initialize(context); }); }
public void Initialize_InitializesHandlers() { IWorkspaceProjectContext?result = null; var handler = IWorkspaceContextHandlerFactory.ImplementInitialize((c) => { result = c; }); var applyChangesToWorkspace = CreateInstance(handlers: handler); var context = IWorkspaceProjectContextMockFactory.Create(); applyChangesToWorkspace.Initialize(context); Assert.Same(context, result); }
public async Task Initialize_WhenDisposed_ThrowsObjectDisposed() { var applyChangesToWorkspace = CreateInstance(); await applyChangesToWorkspace.DisposeAsync(); var context = IWorkspaceProjectContextMockFactory.Create(); Assert.Throws <ObjectDisposedException>(() => { applyChangesToWorkspace.Initialize(context); }); }
public void Handle_WhenMSBuildProjectFullPathPropertyChanged_SetsProjectFilePath() { var context = IWorkspaceProjectContextMockFactory.Create(); context.ProjectFilePath = @"ProjectFilePath"; var handler = CreateInstance(context: context); var projectChange = SetupProjectChanges(true, "NewProjectFilePath", true); Handle(handler, projectChange); Assert.Equal(@"NewProjectFilePath", context.ProjectFilePath); }
public async Task ReleaseProjectContextAsync_UnregistersContextWithTracker() { IWorkspaceProjectContext result = null; var activeWorkspaceProjectContextTracker = IActiveWorkspaceProjectContextTrackerFactory.ImplementReleaseContext(c => { result = c; }); var provider = CreateInstance(activeWorkspaceProjectContextTracker: activeWorkspaceProjectContextTracker); var projectContext = IWorkspaceProjectContextMockFactory.Create(); await provider.ReleaseProjectContextAsync(projectContext); Assert.Same(projectContext, result); }
public async Task GetDesignTimeRules_WhenDisposed_ThrowsObjectDisposed() { var applyChangesToWorkspace = CreateInstance(); await applyChangesToWorkspace.DisposeAsync(); var context = IWorkspaceProjectContextMockFactory.Create(); Assert.Throws <ObjectDisposedException>(() => { applyChangesToWorkspace.GetProjectBuildRules(); }); }
public async Task CreateProjectContextAsync_ReturnsContextWithLastDesignTimeBuildSucceededSetToFalse() { var context = IWorkspaceProjectContextMockFactory.Create(); var workspaceProjectContextFactory = IWorkspaceProjectContextFactoryFactory.ImplementCreateProjectContext((_, __, ___, ____, ______, _______) => context); var provider = CreateInstance(workspaceProjectContextFactory: workspaceProjectContextFactory); var project = ConfiguredProjectFactory.ImplementProjectConfiguration("Debug|AnyCPU"); var result = await provider.CreateProjectContextAsync(project); Assert.NotNull(context); Assert.False(context.LastDesignTimeBuildSucceeded); }
public void UnregisterContext_RegisteredContextAsContext_CanUnregister() { var instance = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); instance.RegisterContext(context, "ContextId"); instance.UnregisterContext(context); // Should be unregistered Assert.Throws <InvalidOperationException>(() => instance.IsActiveEditorContext(context)); }
public void GetProjectName_WhenActiveIntellisenseProjectContextNotSet_ReturnsActiveHostContextId(string contextId) { var activeWorkspaceProjectContextHost = IActiveWorkspaceProjectContextHostFactory.ImplementContextId(contextId); var instance = CreateInstance(activeWorkspaceProjectContextHost); var context = IWorkspaceProjectContextMockFactory.Create(); instance.RegisterContext(context, contextId); instance.GetProjectName(HierarchyId.Root, out string result); Assert.Equal(contextId, result); }
public void Initialize_WhenAlreadyInitialized_ThrowsInvalidOperation() { var handler = CreateInstance(); var workspaceContext = IWorkspaceProjectContextMockFactory.Create(); handler.Initialize(workspaceContext); Assert.Throws <InvalidOperationException>(() => { handler.Initialize(workspaceContext); }); }
public void Handle_WhenPropertyIsNotChanged_DoesNotCallSetProperty(string input) { int callCount = 0; var context = IWorkspaceProjectContextMockFactory.ImplementSetProperty((name, value) => { callCount++; }); var handler = CreateInstance(context: context); var projectChange = IProjectChangeDescriptionFactory.FromJson(input); Handle(handler, projectChange); Assert.Equal(0, callCount); }
public void RegisteredContext_AlreadyRegisteredContextAsContext_ThrowsInvalidOperation() { var instance = CreateInstance(); var context = IWorkspaceProjectContextMockFactory.Create(); instance.RegisterContext(context, "ContextId"); Assert.Throws <InvalidOperationException>(() => { instance.RegisterContext(context, "ContextId"); }); }
[InlineData("contextId")] // Case-sensitive public void IsActiveEditorContext_WhenActiveIntellisenseProjectContextNotSet_UsesActiveHostContextId(string contextId) { var activeWorkspaceProjectContextHost = IActiveWorkspaceProjectContextHostFactory.ImplementContextId(contextId); var instance = CreateInstance(activeWorkspaceProjectContextHost); var context = IWorkspaceProjectContextMockFactory.Create(); instance.RegisterContext(context, contextId); var result = instance.IsActiveEditorContext(context); Assert.True(result); }
public async Task DisposeAsync_DisposesHandlers() { int callCount = 0; var handler = IWorkspaceContextHandlerFactory.ImplementDispose(() => { callCount++; }); var applyChangesToWorkspace = CreateInstance(handlers: handler); var context = IWorkspaceProjectContextMockFactory.Create(); applyChangesToWorkspace.Initialize(context); await applyChangesToWorkspace.DisposeAsync(); Assert.Equal(1, callCount); }