public void MergesProjectConfigurationWithProjectReference_UsesOSCasingForMatching()
        {
            var errorMessages = new List <string>();
            var buildEngine   = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogErrorEvent(It.IsAny <BuildErrorEventArgs>()))
            .Callback <BuildErrorEventArgs>(args => errorMessages.Add(args.Message));

            var referenceProjectFile = Path.Combine("..", "reference", "myRcl.csproj");
            var task = new MergeConfigurationProperties
            {
                BuildEngine             = buildEngine.Object,
                CandidateConfigurations = new[] { CreateCandidateProjectConfiguration(Path.GetFullPath(referenceProjectFile)) },
                ProjectReferences       = new[]
                {
                    CreateProjectReference(
                        project: Path.Combine("..", "myRCL", "myRcl.csproj"),
                        msBuildSourceProjectFile: Path.GetFullPath(referenceProjectFile).ToUpperInvariant(),
                        undefineProperties: Path.Combine(";TargetFramework;RuntimeIdentifier"))
                }
            };

            // Act
            var result = task.Execute();

            // Assert
            result.Should().Be(OperatingSystem.IsWindows());
        }
        public void MergesProjectConfigurationRespectsGlobalPropertiesToRemove()
        {
            var errorMessages = new List <string>();
            var buildEngine   = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogErrorEvent(It.IsAny <BuildErrorEventArgs>()))
            .Callback <BuildErrorEventArgs>(args => errorMessages.Add(args.Message));

            var referenceProjectFile = Path.Combine("..", "reference", "myRcl.csproj");
            var task = new MergeConfigurationProperties
            {
                BuildEngine             = buildEngine.Object,
                CandidateConfigurations = new[] { CreateCandidateProjectConfiguration(Path.GetFullPath(referenceProjectFile)) },
                ProjectReferences       = new[] {
                    CreateProjectReference(
                        project: Path.Combine("..", "myRcl", "myRcl.csproj"),
                        msBuildSourceProjectFile: Path.GetFullPath(referenceProjectFile),
                        undefineProperties: "TargetFramework",
                        globalPropertiesToRemove: "RuntimeIdentifier")
                }
            };

            // Act
            var result = task.Execute();

            // Assert
            result.Should().Be(true);
            task.ProjectConfigurations.Should().HaveCount(1);
            var config = task.ProjectConfigurations[0];

            config.GetMetadata("Source").Should().Be("myRcl");
            config.GetMetadata("GetBuildAssetsTargets").Should().Be("GetCurrentProjectBuildStaticWebAssetItems");
            config.GetMetadata("GetPublishAssetsTargets").Should()
            .Be("ComputeReferencedStaticWebAssetsPublishManifest;GetCurrentProjectPublishStaticWebAssetItems");
            config.GetMetadata("Version").Should().Be("2");
            config.GetMetadata("AdditionalBuildProperties").Should().Be("");
            config.GetMetadata("AdditionalBuildPropertiesToRemove").Should().Be("RuntimeIdentifier;TargetFramework");
            config.GetMetadata("AdditionalPublishProperties").Should().Be("");
            config.GetMetadata("AdditionalPublishPropertiesToRemove").Should().Be("RuntimeIdentifier;TargetFramework");
        }
        public void FailswhenProjectReferenceNotFound()
        {
            var errorMessages = new List <string>();
            var buildEngine   = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogErrorEvent(It.IsAny <BuildErrorEventArgs>()))
            .Callback <BuildErrorEventArgs>(args => errorMessages.Add(args.Message));

            var referenceProjectFile = Path.Combine("..", "reference", "myRcl.csproj");
            var task = new MergeConfigurationProperties
            {
                BuildEngine             = buildEngine.Object,
                CandidateConfigurations = new[] { CreateCandidateProjectConfiguration(Path.GetFullPath(referenceProjectFile)) },
                ProjectReferences       = Array.Empty <ITaskItem>()
            };

            // Act
            var result = task.Execute();

            // Assert
            result.Should().Be(false);
        }