Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        public void Constructor_NullAsProject_ThrowsArgumentNull()
        {
            var context = IWorkspaceProjectContextMockFactory.Create();

            Assert.Throws <ArgumentNullException>("project", () =>
            {
                new MetadataReferenceItemHandler((UnconfiguredProject)null);
            });
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        public async Task DisposeAsync_WhenInitializedWithNoHandlers_DoesNotThrow()
        {
            var applyChangesToWorkspace = CreateInstance();
            var context = IWorkspaceProjectContextMockFactory.Create();

            applyChangesToWorkspace.Initialize(context);

            await applyChangesToWorkspace.DisposeAsync();

            Assert.True(applyChangesToWorkspace.IsDisposed);
        }
Esempio n. 14
0
        public void IsActiveEditorContext_UnregisteredContextAsContext_ThrowsInvalidOperation()
        {
            var instance = CreateInstance();

            var context = IWorkspaceProjectContextMockFactory.Create();

            Assert.Throws <InvalidOperationException>(() =>
            {
                instance.IsActiveEditorContext(context);
            });
        }
Esempio n. 15
0
        public void RegisterContext_NullAsContextId_ThrowsArgumentNull()
        {
            var instance = CreateInstance();

            var context = IWorkspaceProjectContextMockFactory.Create();

            Assert.Throws <ArgumentNullException>("contextId", () =>
            {
                instance.RegisterContext(context, (string)null);
            });
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        public void Initialize_WhenAlreadyInitialized_ThrowsInvalidOperation()
        {
            var applyChangesToWorkspace = CreateInstance();
            var context = IWorkspaceProjectContextMockFactory.Create();

            applyChangesToWorkspace.Initialize(context);

            Assert.Throws <InvalidOperationException>(() =>
            {
                applyChangesToWorkspace.Initialize(context);
            });
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        public async Task Initialize_WhenDisposed_ThrowsObjectDisposed()
        {
            var applyChangesToWorkspace = CreateInstance();

            await applyChangesToWorkspace.DisposeAsync();

            var context = IWorkspaceProjectContextMockFactory.Create();

            Assert.Throws <ObjectDisposedException>(() =>
            {
                applyChangesToWorkspace.Initialize(context);
            });
        }
Esempio n. 20
0
        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);
        }
Esempio n. 24
0
        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));
        }
Esempio n. 25
0
        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);
        }
Esempio n. 26
0
        public void Initialize_WhenAlreadyInitialized_ThrowsInvalidOperation()
        {
            var handler = CreateInstance();

            var workspaceContext = IWorkspaceProjectContextMockFactory.Create();

            handler.Initialize(workspaceContext);

            Assert.Throws <InvalidOperationException>(() =>
            {
                handler.Initialize(workspaceContext);
            });
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        public void RegisteredContext_AlreadyRegisteredContextAsContext_ThrowsInvalidOperation()
        {
            var instance = CreateInstance();

            var context = IWorkspaceProjectContextMockFactory.Create();

            instance.RegisterContext(context, "ContextId");

            Assert.Throws <InvalidOperationException>(() =>
            {
                instance.RegisterContext(context, "ContextId");
            });
        }
Esempio n. 29
0
        [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);
        }
Esempio n. 30
0
        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);
        }