Esempio n. 1
0
        public void ProcessTests(ProjectComponents components, ProjectOutputType outputType, string startingTfmString, string expectedTfmString, bool tryUpdate)
        {
            // Arrange
            var fixture = new Fixture();

            using var mock = AutoMock.GetLoose();

            var tfm         = ParseTfm(startingTfmString);
            var expectedTfm = ParseTfm(expectedTfmString);

            var project = new Mock <IProject>();

            project.Setup(p => p.OutputType).Returns(outputType);

            var state = new Mock <ITargetFrameworkSelectorFilterState>();

            state.Setup(s => s.Current).Returns(tfm);
            state.Setup(s => s.Project).Returns(project.Object);
            state.Setup(s => s.Components).Returns(components);

            var filter = mock.Create <WindowsSdkTargetFrameworkSelectorFilter>();

            // Act
            filter.Process(state.Object);

            // Assert
            var count = tryUpdate ? Times.Once() : Times.Never();

            state.Verify(s => s.TryUpdate(expectedTfm), count);
        }
        public async Task SdkTypesAsync(string[] sdk, ProjectComponents expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(true);
            projectFile.Setup(f => f.Sdk).Returns(new HashSet <string>(sdk, StringComparer.OrdinalIgnoreCase));
            projectFile.Setup(f => f.GetPropertyValue(It.IsAny <string>())).Returns(string.Empty);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.TargetFrameworks).Returns(Array.Empty <TargetFrameworkMoniker>());
            project.Setup(p => p.NuGetReferences).Returns(mock.Mock <INuGetReferences>().Object);

            var componentIdentifier = mock.Create <WebComponentIdentifier>();

            // Act
            var components = await componentIdentifier.GetComponentsAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 3
0
        public async Task IsApplicableTests(ProjectComponents component, bool expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            var logger  = mock.Mock <ILogger <WinformsDefaultFontUpdater> >();
            var updater = new WinformsDefaultFontUpdater(logger.Object);

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(true);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.FileInfo).Returns(new FileInfo("./test"));
            project.Setup(p => p.GetComponentsAsync(CancellationToken.None)).ReturnsAsync(component);

            var context = mock.Mock <IUpgradeContext>();

            context.Setup(c => c.Projects).Returns(new[] { project.Object });

            // Act
            var updaterResult = await updater.IsApplicableAsync(context.Object, ImmutableArray <IProject> .Empty.Add(project.Object), CancellationToken.None).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, updaterResult.Result);
        }
Esempio n. 4
0
        public async Task SdkPropertiesAsync(string propertyName, string value, ProjectComponents expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            mock.Mock <ITransitiveDependencyIdentifier>()
            .Setup(p => p.GetTransitiveDependenciesAsync(It.IsAny <IEnumerable <NuGetReference> >(), It.IsAny <IEnumerable <TargetFrameworkMoniker> >(), default))
            .ReturnsAsync(TransitiveClosureCollection.Empty);

            var projectFile = new Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(true);
            projectFile.Setup(f => f.Sdk).Returns(Array.Empty <string>());
            projectFile.Setup(f => f.GetPropertyValue(It.IsAny <string>())).Returns(string.Empty);
            projectFile.Setup(f => f.GetPropertyValue(propertyName)).Returns(value);

            var project = new Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.NuGetReferences).Returns(mock.Mock <INuGetReferences>().Object);
            project.Setup(p => p.TargetFrameworks).Returns(Array.Empty <TargetFrameworkMoniker>());

            var componentIdentifier = mock.Create <WindowsComponentIdentifier>();

            // Act
            var components = await componentIdentifier.GetComponentsAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 5
0
        public async Task TransitiveDependenciesAsync(string name, ProjectComponents expected)
        {
            // Arrange
            var fixture = new Fixture();

            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(false);

            var nugetPackages = mock.Mock <INuGetReferences>();

            nugetPackages.Setup(p => p.IsTransitivelyAvailableAsync(name, default)).ReturnsAsync(true);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.NuGetReferences).Returns(nugetPackages.Object);

            var componentIdentifier = mock.Create <WindowsComponentIdentifier>();

            // Act
            var components = await componentIdentifier.GetComponentsAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 6
0
        public void NonSdkImports(string import, ProjectComponents expected)
        {
            // Arrange
            const int Count   = 10;
            var       fixture = new Fixture();
            var       imports = fixture.CreateMany <string>(Count).ToList();

            imports.Insert(Count / 2, import);

            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(false);
            projectFile.Setup(p => p.Imports).Returns(imports);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);

            var componentIdentifier = mock.Create <ComponentIdentifier>();

            // Act
            var components = componentIdentifier.GetComponents(project.Object);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 7
0
 protected override bool OnSaveCanExecute()
 {
     return(Project != null &&
            !Project.HasErrors &&
            ProjectComponents.All(pc => !pc.HasErrors) &&
            HasChanges);
 }
Esempio n. 8
0
        public void SdkFrameworkReferences(string frameworkReference, ProjectComponents expected)
        {
            // Arrange
            const int Count               = 10;
            var       fixture             = new Fixture();
            var       frameworkReferences = fixture.CreateMany <Reference>(Count).ToList();

            frameworkReferences.Insert(Count / 2, new Reference(frameworkReference));

            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(true);
            projectFile.Setup(f => f.Sdk).Returns(string.Empty);
            projectFile.Setup(f => f.GetPropertyValue(It.IsAny <string>())).Returns(string.Empty);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.FrameworkReferences).Returns(frameworkReferences);

            var componentIdentifier = mock.Create <ComponentIdentifier>();

            // Act
            var components = componentIdentifier.GetComponents(project.Object);

            // Assert
            Assert.Equal(expected, components);
        }
        public async Task NonSdkReferencesAsync(string reference, ProjectComponents expected)
        {
            // Arrange
            const int Count      = 10;
            var       fixture    = new Fixture();
            var       references = fixture.CreateMany <Reference>(Count).ToList();

            references.Insert(Count / 2, new Reference(reference));

            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.References).Returns(references);
            project.Setup(p => p.TargetFrameworks).Returns(Array.Empty <TargetFrameworkMoniker>());
            project.Setup(p => p.NuGetReferences).Returns(mock.Mock <INuGetReferences>().Object);

            var componentIdentifier = mock.Create <WebComponentIdentifier>();

            // Act
            var components = await componentIdentifier.GetComponentsAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 10
0
        private void OnAddComponentExecute()
        {
            var newComponent = new ProjectComponentWrapper(new ProjectComponent());

            newComponent.PropertyChanged += ProjectComponentWrapper_PropertyChanged;
            ProjectComponents.Add(newComponent);
            Project.Model.ProjectComponents.Add(newComponent.Model);
            newComponent.ComponentName = ""; // Trigger validation :-)
        }
Esempio n. 11
0
 private void OnRemoveComponentExecute()
 {
     SelectedProjectComponent.PropertyChanged -= ProjectComponentWrapper_PropertyChanged;
     _projectRepository.RemoveProjectComponent(SelectedProjectComponent.Model);
     ProjectComponents.Remove(SelectedProjectComponent);
     SelectedProjectComponent = null;
     HasChanges = _projectRepository.HasChanges();
     ((DelegateCommand)SaveCommand).RaiseCanExecuteChanged();
 }
Esempio n. 12
0
        public void TransitiveDependencies(string name, ProjectComponents expected)
        {
            // Arrange
            const int Count        = 10;
            var       fixture      = new Fixture();
            var       dependencies = fixture.CreateMany <NuGetReference>(Count).ToList();

            dependencies.Insert(Count / 2, fixture.Create <NuGetReference>() with {
                Name = name
            });
Esempio n. 13
0
 private void InitializeProjectComponents(ICollection <ProjectComponent> projectComponents)
 {
     foreach (var wrapper in ProjectComponents)
     {
         wrapper.PropertyChanged -= ProjectComponentWrapper_PropertyChanged;
     }
     ProjectComponents.Clear();
     foreach (var projectComponent in projectComponents)
     {
         var wrapper = new ProjectComponentWrapper(projectComponent);
         ProjectComponents.Add(wrapper);
         wrapper.PropertyChanged += ProjectComponentWrapper_PropertyChanged;
     }
 }
Esempio n. 14
0
        public async Task NoneMarkedOnItem(ProjectComponents components, bool expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();
            var testobj = new TestObjectNone();
            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetComponentsAsync(It.IsAny <CancellationToken>()))
            .ReturnsAsync(components);

            // Act
            var actual = await project.Object.IsApplicableAsync(testobj, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, actual);
        }
Esempio n. 15
0
        public async Task SdkPropertiesAsync(string propertyName, string value, ProjectComponents expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(true);
            projectFile.Setup(f => f.Sdk).Returns(string.Empty);
            projectFile.Setup(f => f.GetPropertyValue(It.IsAny <string>())).Returns(string.Empty);
            projectFile.Setup(f => f.GetPropertyValue(propertyName)).Returns(value);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.GetNuGetReferencesAsync(default)).ReturnsAsync(mock.Mock <INuGetReferences>().Object);
        public async Task ComponentIdentificationByTfmAsync(string[] tfms, ProjectComponents expectedComponents)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            var projectFile = new Mock <IProjectFile>();

            var project = new Mock <IProject>();

            project.Setup(p => p.GetProjectPropertyElements()).Returns(new Mock <IProjectPropertyElements>().Object);
            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.TargetFrameworks).Returns(tfms.Select(ParseTfm).ToArray() !);
            project.Setup(p => p.NuGetReferences).Returns(new Mock <INuGetReferences>().Object);

            // Act
            var components = await mock.Create <MauiComponentIdentifier>().GetComponentsAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expectedComponents, components);
        }
Esempio n. 17
0
        public async Task IsApplicableMultiProjectTests(ProjectComponents component1, ProjectComponents component2, bool expected, string[] expectedFileLocations)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            var logger  = mock.Mock <ILogger <WinformsDefaultFontUpdater> >();
            var updater = new WinformsDefaultFontUpdater(logger.Object);

            var projectFile1 = new Mock <IProjectFile>();

            projectFile1.Setup(f => f.IsSdk).Returns(true);

            var projectFile2 = new Mock <IProjectFile>();

            projectFile2.Setup(f => f.IsSdk).Returns(true);

            var project1 = new Mock <IProject>();

            project1.Setup(p => p.GetFile()).Returns(projectFile1.Object);
            project1.Setup(p => p.FileInfo).Returns(new FileInfo("./test1"));
            project1.Setup(p => p.GetComponentsAsync(CancellationToken.None)).ReturnsAsync(component1);

            var project2 = new Mock <IProject>();

            project2.Setup(p => p.GetFile()).Returns(projectFile2.Object);
            project2.Setup(p => p.FileInfo).Returns(new FileInfo("./test2"));
            project2.Setup(p => p.GetComponentsAsync(CancellationToken.None)).ReturnsAsync(component2);

            var context = mock.Mock <IUpgradeContext>();

            context.Setup(c => c.Projects).Returns(new[] { project1.Object, project2.Object });

            // Act
            var updaterResult = (WindowsDesktopUpdaterResult)await updater.IsApplicableAsync(context.Object, context.Object.Projects.ToImmutableArray(), CancellationToken.None).ConfigureAwait(false);

            var fileLocations = updaterResult.FileLocations.Select(i => Path.GetFileNameWithoutExtension(i));

            // Assert
            Assert.Equal(expected, updaterResult.Result);
            Assert.Equal(expectedFileLocations, fileLocations);
        }
Esempio n. 18
0
        public void ProcessTests(ProjectComponents components, string expectedTfmString, bool tryUpdate)
        {
            // Arrange
            var fixture = new Fixture();

            using var mock = AutoMock.GetLoose();

            var expectedTfm = ParseTfm(expectedTfmString);

            var state = new Mock <ITargetFrameworkSelectorFilterState>();

            state.Setup(s => s.Components).Returns(components);

            var filter = mock.Create <MauiTargetFrameworkSelectorFilter>();

            // Act
            filter.Process(state.Object);

            // Assert
            var count = tryUpdate ? Times.Once() : Times.Never();

            state.Verify(s => s.TryUpdate(expectedTfm), count);
        }
Esempio n. 19
0
        public void SdkTypes(string sdk, ProjectComponents expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();

            var projectFile = mock.Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(true);
            projectFile.Setup(f => f.Sdk).Returns(sdk);
            projectFile.Setup(f => f.GetPropertyValue(It.IsAny <string>())).Returns(string.Empty);

            var project = mock.Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);

            var componentIdentifier = mock.Create <ComponentIdentifier>();

            // Act
            var components = componentIdentifier.GetComponents(project.Object);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 20
0
        public async Task DoesWebNamespaceConfigUpdaterShowForCSharpAspNetCoreAsync(ProjectComponents components, Language language, bool expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();
            var webNamespaceConfigUpdater = mock.Create <WebNamespaceConfigUpdater>();
            var project = new Mock <IProject>();

            project.Setup(p => p.Language).Returns(language);
            project.Setup(p => p.GetComponentsAsync(It.IsAny <CancellationToken>()))
            .ReturnsAsync(components);

            // Act
            var actual = await project.Object.IsApplicableAsync(webNamespaceConfigUpdater, default).ConfigureAwait(false);

            // Assert
            if (expected)
            {
                Assert.True(actual, "WebNamespaceConfigUpdater should apply to C# ASP.NET Core");
            }
            else
            {
                Assert.False(actual, "WebNamespaceConfigUpdater only applies to C# ASP.NET Core");
            }
        }
Esempio n. 21
0
        public async Task TransitiveDependenciesAsync(string name, ProjectComponents expected)
        {
            // Arrange
            var fixture = new Fixture();

            using var mock = AutoMock.GetLoose();

            var projectFile = new Mock <IProjectFile>();

            projectFile.Setup(f => f.IsSdk).Returns(false);

            var transitive = mock.Mock <ITransitiveDependencyIdentifier>();
            var result     = new TransitiveClosureCollection(new[] { new NuGetReference(name, string.Empty) }.ToLookup(t => t));

            transitive
            .Setup(p => p.GetTransitiveDependenciesAsync(It.IsAny <IEnumerable <NuGetReference> >(), It.IsAny <IEnumerable <TargetFrameworkMoniker> >(), default))
            .ReturnsAsync(result);

            var nugetPackages = new Mock <INuGetReferences>();

            nugetPackages.Setup(n => n.PackageReferences).Returns(Enumerable.Empty <NuGetReference>());

            var project = new Mock <IProject>();

            project.Setup(p => p.GetFile()).Returns(projectFile.Object);
            project.Setup(p => p.TargetFrameworks).Returns(Array.Empty <TargetFrameworkMoniker>());
            project.Setup(p => p.NuGetReferences).Returns(nugetPackages.Object);

            var componentIdentifier = mock.Create <WindowsComponentIdentifier>();

            // Act
            var components = await componentIdentifier.GetComponentsAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, components);
        }
Esempio n. 22
0
        public async Task CanCodeFixersApplyToMultipleLanguagesAsync(ProjectComponents components, Language language, bool expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();
            var testCodefixer = typeof(TestCodeFixer);
            var project       = mock.Mock <IProject>();

            project.Setup(p => p.Language).Returns(language);
            project.Setup(p => p.GetComponentsAsync(It.IsAny <CancellationToken>()))
            .Returns(new ValueTask <ProjectComponents>(Task.FromResult(components)));

            // Act
            var actual = await testCodefixer.AppliesToProjectAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            if (expected)
            {
                Assert.True(actual, "TestCodeFixer should apply to C# and F# for ASP.NET Core");
            }
            else
            {
                Assert.False(actual, "TestCodeFixer only applies to C# and F# for ASP.NET Core");
            }
        }
Esempio n. 23
0
        public async Task CanConfigUpdaterApplyToMultipleLanguagesAsync(ProjectComponents components, Language language, bool expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();
            var testobj = new TestObjectMultipleLanguage();
            var project = mock.Mock <IProject>();

            project.Setup(p => p.Language).Returns(language);
            project.Setup(p => p.GetComponentsAsync(It.IsAny <CancellationToken>()))
            .ReturnsAsync(components);

            // Act
            var actual = await project.Object.IsApplicableAsync(testobj, default).ConfigureAwait(false);

            // Assert
            if (expected)
            {
                Assert.True(actual, "TestConfigUpdater should apply to C# and F# for ASP.NET Core");
            }
            else
            {
                Assert.False(actual, "TestConfigUpdater only applies to C# and F# for ASP.NET Core");
            }
        }
        public void ProcessTests(ProjectComponents components, bool tryUpdate)
        {
            // Arrange
            var fixture = new Fixture();

            using var mock = AutoMock.GetLoose();

            var tfm = fixture.Create <TargetFrameworkMoniker>();

            var state = new Mock <ITargetFrameworkSelectorFilterState>();

            state.Setup(s => s.Components).Returns(components);
            state.Setup(s => s.AppBase).Returns(tfm);

            var filter = mock.Create <WebProjectTargetFrameworkSelectorFilter>();

            // Act
            filter.Process(state.Object);

            // Assert
            var count = tryUpdate ? Times.Once() : Times.Never();

            state.Verify(s => s.TryUpdate(tfm), count);
        }
Esempio n. 25
0
        public async Task NoDependencies(string[] currentTfms, string current, UpgradeTarget target, ProjectComponents components)
        {
            // Arrange
            var fixture  = new Fixture();
            var tfm      = fixture.Create <TargetFrameworkMoniker>();
            var finalTfm = fixture.Create <TargetFrameworkMoniker>();
            var filter   = new TestFilter(tfm);

            using var mock = AutoMock.GetLoose(b => b.RegisterInstance(filter).As <ITargetFrameworkSelectorFilter>());

            var project = mock.Mock <IProject>();

            project.Setup(p => p.TargetFrameworks).Returns(currentTfms.Select(t => ParseTfm(t)).ToArray());
            project.Setup(p => p.GetComponentsAsync(default)).Returns(new ValueTask <ProjectComponents>(components));
Esempio n. 26
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ApplicableComponentsAttribute"/> class.
 /// </summary>
 /// <param name="components">The components that a project must contain for the attributed
 /// code fix provider to apply to it.</param>
 public ApplicableComponentsAttribute(ProjectComponents components)
 {
     Components = components;
 }
Esempio n. 27
0
        public async Task DoesHttpContextCurrentCodeFixerShowForAspNetCoreCSharpAsync(ProjectComponents components, Language language, bool expected)
        {
            // Arrange
            using var mock = AutoMock.GetLoose();
            var httpCommonCodeFixer = typeof(HttpContextCurrentCodeFixer);
            var project             = mock.Mock <IProject>();

            project.Setup(p => p.Language).Returns(language);
            project.Setup(p => p.GetComponentsAsync(It.IsAny <CancellationToken>()))
            .Returns(new ValueTask <ProjectComponents>(Task.FromResult(components)));

            // Act
            var actual = await httpCommonCodeFixer.AppliesToProjectAsync(project.Object, default).ConfigureAwait(false);

            // Assert
            if (expected)
            {
                Assert.True(actual, "HttpContextCurrentCodeFixer should apply to C# ASP.NET Core");
            }
            else
            {
                Assert.False(actual, "HttpContextCurrentCodeFixer only applies to C# ASP.NET Core");
            }
        }