コード例 #1
0
        public void GetRestoreSettingsTask_VerifyEmptyPerFrameworkSettings()
        {
            using (var testDir = TestDirectory.CreateInTemp())
            {
                // Arrange
                var buildEngine = new TestBuildEngine();
                var testLogger  = buildEngine.TestLogger;

                var task = new GetRestoreSettingsTask()
                {
                    BuildEngine                 = buildEngine,
                    ProjectUniqueName           = Path.Combine(testDir, "a.csproj"),
                    RestoreSources              = new[] { Path.Combine(testDir, "base") },
                    RestoreFallbackFolders      = new[] { Path.Combine(testDir, "base") },
                    RestoreSettingsPerFramework = new ITaskItem[0]
                };

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

                // Assert
                result.Should().BeTrue();
                task.OutputSources.ShouldBeEquivalentTo(new[] { Path.Combine(testDir, "base") });
                task.OutputFallbackFolders.ShouldBeEquivalentTo(new[] { Path.Combine(testDir, "base") });
            }
        }
コード例 #2
0
        public void GetRestoreSettingsTask_VerifyDisabledSourcesAreExcluded()
        {
            using (var testDir = TestDirectory.CreateInTemp())
            {
                // Arrange
                var buildEngine = new TestBuildEngine();
                var testLogger  = buildEngine.TestLogger;


                var configFile = Path.Combine(testDir, Settings.DefaultSettingsFileName);

                var projectDirectory = Path.GetDirectoryName(configFile);
                Directory.CreateDirectory(projectDirectory);

                File.WriteAllText(configFile, DisableSourceConfig);

                var task = new GetRestoreSettingsTask()
                {
                    BuildEngine                 = buildEngine,
                    ProjectUniqueName           = Path.Combine(testDir, "a.csproj"),
                    RestoreFallbackFolders      = new[] { Path.Combine(testDir, "base") },
                    RestoreSettingsPerFramework = new ITaskItem[0]
                };

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

                // Assert
                result.Should().BeTrue();
                task.OutputSources.ShouldBeEquivalentTo(new[] { @"https://nuget.org/v2/api" });
            }
        }
コード例 #3
0
        public void GetReferenceNearestTargetFrameworkTask_WithTargetFrameworkInformation_WhenATFMatches_Warns(
            string currentProjectTFM, string currentProjectTPM, string refTargetFrameworks, string refTargetFrameworkMonikers, string refTargetPlatformMonikers, string atf, string expected)
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var references = new List <ITaskItem>();
            var reference  = new Mock <ITaskItem>();

            reference.SetupGet(e => e.ItemSpec).Returns("a.csproj");
            reference.Setup(e => e.GetMetadata("TargetFrameworks")).Returns(refTargetFrameworks);
            reference.Setup(e => e.GetMetadata("TargetFrameworkMonikers")).Returns(refTargetFrameworkMonikers);
            reference.Setup(e => e.GetMetadata("TargetPlatformMonikers")).Returns(refTargetPlatformMonikers);
            references.Add(reference.Object);

            var task = new GetReferenceNearestTargetFrameworkTask
            {
                BuildEngine = buildEngine,
                CurrentProjectTargetFramework = currentProjectTFM,
                CurrentProjectTargetPlatform  = currentProjectTPM,
                FallbackTargetFrameworks      = atf.Split(';'),
                AnnotatedProjectReferences    = references.ToArray()
            };

            var result = task.Execute();

            result.Should().BeTrue();

            task.AssignedProjects.Should().HaveCount(1);
            task.AssignedProjects[0].GetMetadata("NearestTargetFramework").Should().Be(expected);

            testLogger.Warnings.Should().Be(1);
            testLogger.Errors.Should().Be(0);
            testLogger.DebugMessages.Count.Should().Be(DEBUG_MESSAGE_COUNT_INPUT_OUTPUT);
        }
コード例 #4
0
        public void Execute_AllowMultiRangeVersion()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX = new TaskItem();

            packageX.ItemSpec = "x";
            packageX.SetMetadata("Version", "[1.0.0];[2.0.0]");

            var packageDownloads = new List <ITaskItem>()
            {
                packageX
            };

            var task = new GetRestorePackageDownloadsTask()
            {
                BuildEngine       = buildEngine,
                ProjectUniqueName = "MyProj",
                TargetFrameworks  = "netstandard2.0",
                PackageDownloads  = packageDownloads.ToArray()
            };

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

            // Assert
            Assert.True(result, "Task failed");
            Assert.Equal(1, task.RestoreGraphItems.Length);
            Assert.Equal("x", task.RestoreGraphItems[0].GetMetadata("Id"));
            Assert.Equal("[1.0.0];[2.0.0]", task.RestoreGraphItems[0].GetMetadata("VersionRange"));
        }
コード例 #5
0
        public void GetReferenceNearestTargetFrameworkTask_NoCompatibleTargetTF()
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var references = new List <ITaskItem>();
            var reference  = new Mock <ITaskItem>();

            reference.SetupGet(e => e.ItemSpec).Returns("a.csproj");
            reference.Setup(e => e.GetMetadata("TargetFrameworks")).Returns("net461");
            reference.Setup(e => e.GetMetadata("HasSingleTargetFramework")).Returns("true");
            references.Add(reference.Object);

            var task = new GetReferenceNearestTargetFrameworkTask
            {
                BuildEngine = buildEngine,
                CurrentProjectTargetFramework = "net46",
                AnnotatedProjectReferences    = references.ToArray()
            };

            var result = task.Execute();

            result.Should().BeFalse();

            task.AssignedProjects.Should().HaveCount(1);

            testLogger.Warnings.Should().Be(0);
            testLogger.Errors.Should().Be(1);
            testLogger.DebugMessages.Count.Should().Be(DEBUG_MESSAGE_COUNT_INPUT_OUTPUT);
        }
コード例 #6
0
        public void GetReferenceNearestTargetFrameworkTask_WithSingleTfmAndSingleAtfAndNoMatch(string referenceProjectFramework)
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var references = new List <ITaskItem>();
            var reference  = new Mock <ITaskItem>();

            reference.SetupGet(e => e.ItemSpec).Returns("a.csproj");
            reference.Setup(e => e.GetMetadata("TargetFrameworks")).Returns(referenceProjectFramework);
            references.Add(reference.Object);

            var task = new GetReferenceNearestTargetFrameworkTask
            {
                BuildEngine = buildEngine,
                CurrentProjectTargetFramework = "netcoreapp1.0",
                FallbackTargetFrameworks      = new string[] { "net45" },
                AnnotatedProjectReferences    = references.ToArray()
            };

            var result = task.Execute();

            result.Should().BeFalse();

            task.AssignedProjects.Should().HaveCount(1);

            testLogger.Warnings.Should().Be(0);
            testLogger.Errors.Should().Be(1);
            testLogger.DebugMessages.Count.Should().Be(DEBUG_MESSAGE_COUNT_INPUT_OUTPUT);
        }
コード例 #7
0
        public void GetReferenceNearestTargetFrameworkTask_BadSourceTF()
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var references = new List <ITaskItem>();
            var reference  = new Mock <ITaskItem>();

            reference.SetupGet(e => e.ItemSpec).Returns("a.csproj");
            references.Add(reference.Object);

            var task = new GetReferenceNearestTargetFrameworkTask
            {
                BuildEngine = buildEngine,
                CurrentProjectTargetFramework = "abadframework",
                AnnotatedProjectReferences    = references.ToArray()
            };

            var result = task.Execute();

            result.Should().BeFalse();

            task.AssignedProjects.Should().BeNullOrEmpty();

            testLogger.Warnings.Should().Be(0);
            testLogger.Errors.Should().Be(1);
            testLogger.DebugMessages.Count.Should().Be(DEBUG_MESSAGE_COUNT_INPUT);
        }
コード例 #8
0
        public void GetReferenceNearestTargetFrameworkTask_BadAtf()
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var references = new List <ITaskItem>();
            var reference  = new Mock <ITaskItem>();

            reference.SetupGet(e => e.ItemSpec).Returns("a.csproj");
            reference.Setup(e => e.GetMetadata("TargetFrameworks")).Returns("netcoreapp2.0");
            reference.Setup(e => e.GetMetadata("HasSingleTargetFramework")).Returns("true");
            references.Add(reference.Object);

            var task = new GetReferenceNearestTargetFrameworkTask
            {
                BuildEngine = buildEngine,
                CurrentProjectTargetFramework = "netcoreapp2.0",
                FallbackTargetFrameworks      = new string[] { "abcdef" },
                AnnotatedProjectReferences    = references.ToArray()
            };

            var result = task.Execute();

            result.Should().BeFalse();
            task.AssignedProjects.Should().BeNullOrEmpty();
            testLogger.Warnings.Should().Be(0);
            testLogger.Errors.Should().Be(1);
            testLogger.DebugMessages.Count.Should().Be(DEBUG_MESSAGE_COUNT_INPUT);
        }
コード例 #9
0
        public void GetRestoreSettingsTask_VerifyRestoreAdditionalProjectFallbackFoldersWithExcludeAreNotAdded()
        {
            using (var testDir = TestDirectory.CreateInTemp())
            {
                // Arrange
                var buildEngine = new TestBuildEngine();
                var testLogger  = buildEngine.TestLogger;

                var settingsPerFramework = new List <ITaskItem>();
                var settings1            = new Mock <ITaskItem>();
                settings1.SetupGet(e => e.ItemSpec).Returns("a");
                settings1.Setup(e => e.GetMetadata("RestoreAdditionalProjectFallbackFolders")).Returns(Path.Combine(testDir, "sourceC"));
                settingsPerFramework.Add(settings1.Object);

                var settings2 = new Mock <ITaskItem>();
                settings2.SetupGet(e => e.ItemSpec).Returns("b");
                settings2.Setup(e => e.GetMetadata("RestoreAdditionalProjectFallbackFoldersExcludes")).Returns(Path.Combine(testDir, "sourceC"));
                settingsPerFramework.Add(settings2.Object);

                var task = new GetRestoreSettingsTask()
                {
                    BuildEngine                 = buildEngine,
                    ProjectUniqueName           = Path.Combine(testDir, "a.csproj"),
                    RestoreFallbackFolders      = new[] { Path.Combine(testDir, "sourceA"), Path.Combine(testDir, "sourceB") },
                    RestoreSettingsPerFramework = settingsPerFramework.ToArray()
                };

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

                // Assert
                result.Should().BeTrue();
                task.OutputFallbackFolders.ShouldBeEquivalentTo(new[] { Path.Combine(testDir, "sourceA"), Path.Combine(testDir, "sourceB") });
            }
        }
コード例 #10
0
        public void GetRestoreSettingsTask_VerifyAggregationAcrossFrameworks()
        {
            using (var testDir = TestDirectory.CreateInTemp())
            {
                // Arrange
                var buildEngine = new TestBuildEngine();
                var testLogger  = buildEngine.TestLogger;

                var settingsPerFramework = new List <ITaskItem>();
                var settings1            = new Mock <ITaskItem>();
                settings1.SetupGet(e => e.ItemSpec).Returns("a");
                settings1.Setup(e => e.GetMetadata("RestoreAdditionalProjectSources")).Returns($"{Path.Combine(testDir, "a")};{Path.Combine(testDir, "b")}");
                settings1.Setup(e => e.GetMetadata("RestoreAdditionalProjectFallbackFolders")).Returns($"{Path.Combine(testDir, "m")};{Path.Combine(testDir, "n")}");
                settingsPerFramework.Add(settings1.Object);

                var settings2 = new Mock <ITaskItem>();
                settings2.SetupGet(e => e.ItemSpec).Returns("b");
                settings2.Setup(e => e.GetMetadata("RestoreAdditionalProjectSources")).Returns(Path.Combine(testDir, "c"));
                settings2.Setup(e => e.GetMetadata("RestoreAdditionalProjectFallbackFolders")).Returns(Path.Combine(testDir, "s"));
                settingsPerFramework.Add(settings2.Object);

                var settings3 = new Mock <ITaskItem>();
                settings3.SetupGet(e => e.ItemSpec).Returns("c");
                settings3.Setup(e => e.GetMetadata("RestoreAdditionalProjectSources")).Returns(Path.Combine(testDir, "d"));
                settingsPerFramework.Add(settings3.Object);

                var settings4 = new Mock <ITaskItem>();
                settings4.SetupGet(e => e.ItemSpec).Returns("d");
                settings4.Setup(e => e.GetMetadata("RestoreAdditionalProjectFallbackFolders")).Returns(Path.Combine(testDir, "t"));
                settingsPerFramework.Add(settings4.Object);

                var settings5 = new Mock <ITaskItem>();
                settings5.SetupGet(e => e.ItemSpec).Returns("e");
                settingsPerFramework.Add(settings5.Object);

                var task = new GetRestoreSettingsTask()
                {
                    BuildEngine                 = buildEngine,
                    ProjectUniqueName           = Path.Combine(testDir, "a.csproj"),
                    RestoreSources              = new[] { Path.Combine(testDir, "base") },
                    RestoreFallbackFolders      = new[] { Path.Combine(testDir, "base") },
                    RestoreSettingsPerFramework = settingsPerFramework.ToArray()
                };

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

                // Assert
                result.Should().BeTrue();
                task.OutputSources.Should().BeEquivalentTo(new[] { Path.Combine(testDir, "base"), Path.Combine(testDir, "a"), Path.Combine(testDir, "b"), Path.Combine(testDir, "c"), Path.Combine(testDir, "d") });
                task.OutputFallbackFolders.Should().BeEquivalentTo(new[] { Path.Combine(testDir, "base"), Path.Combine(testDir, "m"), Path.Combine(testDir, "n"), Path.Combine(testDir, "s"), Path.Combine(testDir, "t") });
            }
        }
コード例 #11
0
        public void TaskLoggingQueue_Process_HandleBadMessage()
        {
            const string badMessage = "{ 'Importance': [] }";

            var buildEngine = new TestBuildEngine();

            using (var loggingQueue = new TaskLoggingQueue(new TaskLoggingHelper(buildEngine, nameof(TaskLoggingQueueTests))))
            {
                loggingQueue.Enqueue(badMessage);
            }

            buildEngine.TestLogger.DebugMessages.Should().ContainSingle()
            .Which.Should().Be(badMessage);
        }
コード例 #12
0
        public void Execute_CheckMetadata()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX = new TaskItem();

            packageX.ItemSpec = "x";
            packageX.SetMetadata("Version", "[1.0.0]");

            var packageY = new TaskItem();

            packageY.ItemSpec = "y";
            packageY.SetMetadata("Version", "2.0.0");
            packageY.SetMetadata("Dummy", "someDummyValue");

            var centralPackageVersions = new List <ITaskItem>()
            {
                packageX, packageY
            };

            var task = new GetCentralPackageVersionsTask()
            {
                BuildEngine            = buildEngine,
                ProjectUniqueName      = "MyProj",
                TargetFrameworks       = "netstandard2.0",
                CentralPackageVersions = centralPackageVersions.ToArray()
            };

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

            // Assert
            Assert.True(result, "Task failed");
            Assert.Equal(2, task.RestoreGraphItems.Length);
            var graphItems = task.RestoreGraphItems.OrderBy(item => item.GetMetadata("Id")).ToList();

            Assert.Equal("x", graphItems[0].GetMetadata("Id"));
            Assert.Equal(task.ProjectUniqueName, task.RestoreGraphItems[0].GetMetadata("ProjectUniqueName"));
            Assert.Equal("CentralPackageVersion", graphItems[0].GetMetadata("Type"));
            Assert.Equal("[1.0.0]", graphItems[0].GetMetadata("VersionRange"));
            Assert.Equal("netstandard2.0", graphItems[0].GetMetadata("TargetFrameworks"));

            Assert.Equal("y", graphItems[1].GetMetadata("Id"));
            Assert.Equal("CentralPackageVersion", graphItems[1].GetMetadata("Type"));
            Assert.Equal("2.0.0", graphItems[1].GetMetadata("VersionRange"));
            Assert.Equal("netstandard2.0", graphItems[1].GetMetadata("TargetFrameworks"));
            Assert.Equal(task.ProjectUniqueName, task.RestoreGraphItems[1].GetMetadata("ProjectUniqueName"));
            Assert.Equal(0, graphItems[1].MetadataNames.Cast <string>().Where(n => string.Equals(n, "Dummy")).Count());
        }
コード例 #13
0
        public void Execute_WhenProjectHasPackageReferenceItems_ReturnsPackageReference()
        {
            var buildEngine = new TestBuildEngine();

            var task = new GetRestoreProjectStyleTask
            {
                BuildEngine = buildEngine,
                HasPackageReferenceItems = true
            };

            task.Execute().Should().BeTrue();

            task.ProjectStyle.Should().Be(ProjectStyle.PackageReference);
            task.IsPackageReferenceCompatibleProjectStyle.Should().BeTrue();
        }
コード例 #14
0
        public void Execute_WhenProjectJsonPathSpecified_ReturnsProjectJson()
        {
            var buildEngine = new TestBuildEngine();

            var task = new GetRestoreProjectStyleTask
            {
                BuildEngine     = buildEngine,
                ProjectJsonPath = "SomePath"
            };

            task.Execute().Should().BeTrue();

            task.ProjectStyle.Should().Be(ProjectStyle.ProjectJson);
            task.IsPackageReferenceCompatibleProjectStyle.Should().BeFalse();
        }
コード例 #15
0
        public void GetCommandLineArguments_WhenOptionsSpecified_CorrectValuesReturned()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                string msbuildBinPath = Path.Combine(testDirectory, "MSBuild", "Current", "Bin");
                string projectPath    = Path.Combine(testDirectory, "src", "project1", "project1.csproj");

                var globalProperties = new Dictionary <string, string>
                {
                    ["Property1"] = "Value1",
                    ["Property2"] = "  Value2  "
                };

                var buildEngine = new TestBuildEngine(globalProperties);

                using (var task = new RestoreTaskEx
                {
                    BuildEngine = buildEngine,
                    DisableParallel = true,
                    Force = true,
                    ForceEvaluate = true,
                    HideWarningsAndErrors = true,
                    IgnoreFailedSources = true,
                    Interactive = true,
                    MSBuildBinPath = msbuildBinPath,
                    NoCache = true,
                    ProjectFullPath = projectPath,
                    Recursive = true,
                    RestorePackagesConfig = true,
                    MSBuildStartupDirectory = testDirectory,
                })
                {
                    var arguments = task.GetCommandLineArguments().ToList();
                    arguments.Should().BeEquivalentTo(
#if IS_CORECLR
                        Path.ChangeExtension(typeof(RestoreTaskEx).Assembly.Location, ".Console.dll"),
#endif
                        "CleanupAssetsForUnsupportedProjects=True;DisableParallel=True;Force=True;ForceEvaluate=True;HideWarningsAndErrors=True;IgnoreFailedSources=True;Interactive=True;NoCache=True;Recursive=True;RestorePackagesConfig=True",
#if IS_CORECLR
                        Path.Combine(msbuildBinPath, "MSBuild.dll"),
#else
                        Path.Combine(msbuildBinPath, "MSBuild.exe"),
#endif
                        projectPath,
                        $"Property1=Value1;Property2=  Value2  ;ExcludeRestorePackageImports=true;OriginalMSBuildStartupDirectory={testDirectory}");
                }
            }
        }
コード例 #16
0
        public void TaskLoggingQueue_Process_ThrowsIfInvalidMessageType()
        {
            const string badMessage = "{ 'MessageType': 200 }";

            var buildEngine = new TestBuildEngine();

            Action act = () =>
            {
                using (var loggingQueue = new TaskLoggingQueue(new TaskLoggingHelper(buildEngine, nameof(TaskLoggingQueueTests))))
                {
                    loggingQueue.Enqueue(badMessage);
                }
            };

            act.ShouldThrow <ArgumentOutOfRangeException>();
        }
コード例 #17
0
        public void WarnForInvalidProjectsTask_NullItemsVerifyNoErrors()
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;
            var task        = new WarnForInvalidProjectsTask
            {
                BuildEngine = buildEngine
            };

            var result = task.Execute();

            result.Should().BeTrue();

            testLogger.Warnings.Should().Be(0);
            testLogger.Errors.Should().Be(0);
            testLogger.DebugMessages.Count.Should().Be(2);
        }
コード例 #18
0
        public void Execute_AllowMultiplePackages()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX = new TaskItem();

            packageX.ItemSpec = "x";
            packageX.SetMetadata("Version", "[1.0.0]");

            var packageY = new TaskItem();

            packageY.ItemSpec = "y";
            packageY.SetMetadata("Version", "[2.0.0]");

            var packageDownloads = new List <ITaskItem>()
            {
                packageX,
                packageY
            };

            var task = new GetRestorePackageDownloadsTask()
            {
                BuildEngine       = buildEngine,
                ProjectUniqueName = "MyProj",
                TargetFrameworks  = "netstandard2.0",
                PackageDownloads  = packageDownloads.ToArray()
            };

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

            // Assert
            Assert.True(result, "Task failed");
            Assert.Equal(2, task.RestoreGraphItems.Length);

            var package = task.RestoreGraphItems.SingleOrDefault(i => i.GetMetadata("Id") == "x");

            Assert.NotNull(package);
            Assert.Equal("[1.0.0]", package.GetMetadata("VersionRange"));

            package = task.RestoreGraphItems.SingleOrDefault(i => i.GetMetadata("Id") == "y");
            Assert.NotNull(package);
            Assert.Equal("[2.0.0]", package.GetMetadata("VersionRange"));
        }
コード例 #19
0
        public void Execute_WithWarningsAsErrors_ReturnsFalse()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX1 = new TaskItem
            {
                ItemSpec = "x"
            };

            packageX1.SetMetadata("Version", "[1.0.0]");

            var packageX2 = new TaskItem
            {
                ItemSpec = "x",
            };

            packageX2.SetMetadata("Version", "2.0.0");

            var items = new ITaskItem[]
            {
                packageX1,
                packageX2,
            };

            var task = new CheckForDuplicateNuGetItemsTask()
            {
                BuildEngine           = buildEngine,
                ItemName              = "PackageReference",
                Items                 = items,
                LogCode               = "NU1504",
                NoWarn                = "1234;5678",
                TreatWarningsAsErrors = "false",
                WarningsAsErrors      = "NU1504"
            };

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

            // Assert
            result.Should().BeFalse();
            task.DeduplicatedItems.Length.Should().Be(1);
            buildEngine.TestLogger.WarningMessages.Should().HaveCount(0);
            buildEngine.TestLogger.ErrorMessages.Should().HaveCount(1);
        }
コード例 #20
0
        public void Execute_WithDuplicateItems_SelectsFirstItem()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX1 = new TaskItem
            {
                ItemSpec = "x"
            };

            packageX1.SetMetadata("Version", "[1.0.0]");

            var packageX2 = new TaskItem
            {
                ItemSpec = "x",
            };

            packageX2.SetMetadata("Version", "2.0.0");

            var items = new ITaskItem[]
            {
                packageX1,
                packageX2,
            };

            var task = new CheckForDuplicateNuGetItemsTask()
            {
                BuildEngine = buildEngine,
                ItemName    = "PackageReference",
                Items       = items,
                LogCode     = "NU1504"
            };

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

            // Assert
            result.Should().BeTrue();
            buildEngine.TestLogger.WarningMessages.Should().HaveCount(1);
            task.DeduplicatedItems.Length.Should().Be(1);
            var item = task.DeduplicatedItems.Single();

            item.ItemSpec.Should().Be("x");
            item.GetMetadata("Version").Should().Be("[1.0.0]");
        }
コード例 #21
0
        public void Execute_WithoutSpecialGlobalProperties_ReturnsNull()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var task = new GetGlobalPropertyValueTask()
            {
                BuildEngine  = buildEngine,
                PropertyName = "TargetFramework",
            };

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

            // Assert
            result.Should().BeTrue();
            task.GlobalPropertyValue.Should().Be(null);
            task.CheckCompleted.Should().Be(true);
        }
コード例 #22
0
        public void Execute_WhenNothingMatches_ReturnsUnknown(string restoreStyle)
        {
            var buildEngine = new TestBuildEngine();

            var task = new GetRestoreProjectStyleTask
            {
                BuildEngine              = buildEngine,
                RestoreProjectStyle      = restoreStyle,
                ProjectJsonPath          = string.Empty,
                HasPackageReferenceItems = false,
                MSBuildProjectName       = "ProjectA",
                MSBuildProjectDirectory  = "SomeDirectory"
            };

            task.Execute().Should().BeTrue();

            task.ProjectStyle.Should().Be(ProjectStyle.Unknown);
            task.IsPackageReferenceCompatibleProjectStyle.Should().BeFalse();
        }
コード例 #23
0
        public void Execute_RemoveDuplicates()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX = new TaskItem();

            packageX.ItemSpec = "x";
            packageX.SetMetadata("Version", "[1.0.0]");

            var packageY = new TaskItem();

            packageY.ItemSpec = "x";
            packageY.SetMetadata("Version", "2.0.0");

            var centralPackageVersions = new List <ITaskItem>()
            {
                packageX, packageY
            };

            var task = new GetCentralPackageVersionsTask()
            {
                BuildEngine            = buildEngine,
                ProjectUniqueName      = "MyProj",
                TargetFrameworks       = "netstandard2.0",
                CentralPackageVersions = centralPackageVersions.ToArray()
            };

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

            // Assert
            Assert.True(result, "Task failed");
            Assert.Equal(1, task.RestoreGraphItems.Length);
            var graphItems = task.RestoreGraphItems.OrderBy(item => item.GetMetadata("Id")).ToList();

            Assert.Equal("x", graphItems[0].GetMetadata("Id"));
            Assert.Equal(task.ProjectUniqueName, task.RestoreGraphItems[0].GetMetadata("ProjectUniqueName"));
            Assert.Equal("CentralPackageVersion", graphItems[0].GetMetadata("Type"));
            Assert.Equal("[1.0.0]", graphItems[0].GetMetadata("VersionRange"));
            Assert.Equal("netstandard2.0", graphItems[0].GetMetadata("TargetFrameworks"));
        }
コード例 #24
0
        public void Execute_WithoutDuplicateItems_ReturnsTrue()
        {
            // Arrange
            var buildEngine = new TestBuildEngine();

            var packageX = new TaskItem
            {
                ItemSpec = "x"
            };

            packageX.SetMetadata("Version", "[1.0.0]");

            var packageY = new TaskItem
            {
                ItemSpec = "y"
            };

            packageY.SetMetadata("Version", "2.0.0");

            var items = new ITaskItem[]
            {
                packageX,
                packageY,
            };

            var task = new CheckForDuplicateNuGetItemsTask()
            {
                BuildEngine = buildEngine,
                ItemName    = "PackageReference",
                Items       = items,
                LogCode     = "NU1504"
            };

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

            // Assert
            result.Should().BeTrue();
            task.DeduplicatedItems.Length.Should().Be(0);
            buildEngine.TestLogger.Messages.Should().HaveCount(0);
        }
コード例 #25
0
        public void GetCommandLineArguments_WhenOptionsSpecified_CorrectValuesReturned()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                string msbuildBinPath         = Path.Combine(testDirectory, "MSBuild", "Current", "Bin");
                string projectPath            = Path.Combine(testDirectory, "src", "project1", "project1.csproj");
                string restoreGraphOutputPath = Path.Combine(testDirectory, "out.dgspec.json");
                var    globalProperties       = new Dictionary <string, string>
                {
                    ["Property1"] = "Value1",
                    ["Property2"] = "  Value2  "
                };

                var buildEngine = new TestBuildEngine(globalProperties);

                using (var task = new GenerateRestoreGraphFileTask
                {
                    BuildEngine = buildEngine,
                    MSBuildBinPath = msbuildBinPath,
                    ProjectFullPath = projectPath,
                    Recursive = true,
                    MSBuildStartupDirectory = testDirectory,
                    RestoreGraphOutputPath = restoreGraphOutputPath,
                })
                {
                    var arguments = task.GetCommandLineArguments().ToList();
                    arguments.Should().BeEquivalentTo(
#if IS_CORECLR
                        Path.ChangeExtension(typeof(RestoreTaskEx).Assembly.Location, ".Console.dll"),
#endif
                        $"GenerateRestoreGraphFile=True;Recursive=True;RestoreGraphOutputPath={restoreGraphOutputPath}",
#if IS_CORECLR
                        Path.Combine(msbuildBinPath, "MSBuild.dll"),
#else
                        Path.Combine(msbuildBinPath, "MSBuild.exe"),
#endif
                        projectPath,
                        $"Property1=Value1;Property2=  Value2  ;ExcludeRestorePackageImports=true;OriginalMSBuildStartupDirectory={testDirectory}");
                }
            }
        }
コード例 #26
0
        public void GetReferenceNearestTargetFrameworkTask_NoReferences()
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var task = new GetReferenceNearestTargetFrameworkTask
            {
                BuildEngine = buildEngine,
                CurrentProjectTargetFramework = "net46"
            };

            var result = task.Execute();

            result.Should().BeTrue();

            task.AssignedProjects.Should().BeNullOrEmpty();

            testLogger.Warnings.Should().Be(0);
            testLogger.Errors.Should().Be(0);
            testLogger.DebugMessages.Count.Should().Be(DEBUG_MESSAGE_COUNT_INPUT);
        }
コード例 #27
0
        public void Execute_WhenProjectHasPackagesConfigFile_ReturnsPackagesConfig(string packagesConfigFileName)
        {
            using (var testDirectory = TestDirectory.Create())
            {
                File.WriteAllText(Path.Combine(testDirectory, packagesConfigFileName), string.Empty);

                var buildEngine = new TestBuildEngine();

                var task = new GetRestoreProjectStyleTask
                {
                    BuildEngine             = buildEngine,
                    MSBuildProjectDirectory = testDirectory,
                    MSBuildProjectName      = "ProjectA"
                };

                task.Execute().Should().BeTrue();

                task.ProjectStyle.Should().Be(ProjectStyle.PackagesConfig);
                task.IsPackageReferenceCompatibleProjectStyle.Should().BeFalse();
            }
        }
コード例 #28
0
        public void GetRestoreSettingsTask_WithRestoreRootDirectory_ProjectLevelConfigIsIgnored()
        {
            using (var testDir = TestDirectory.CreateInTemp())
            {
                var projectDir = Path.Combine(testDir, "project");
                Directory.CreateDirectory(projectDir);
                // Arrange
                var buildEngine = new TestBuildEngine();
                var testLogger  = buildEngine.TestLogger;

                var settingsPerFramework = new List <ITaskItem>();
                var settings1            = new Mock <ITaskItem>();
                settings1.SetupGet(e => e.ItemSpec).Returns("a");
                settingsPerFramework.Add(settings1.Object);

                var task = new GetRestoreSettingsTask()
                {
                    BuildEngine                 = buildEngine,
                    ProjectUniqueName           = Path.Combine(projectDir, "a.csproj"),
                    RestoreRootConfigDirectory  = testDir,
                    RestoreSettingsPerFramework = settingsPerFramework.ToArray()
                };

                var rootConfigFile         = Path.Combine(testDir, Settings.DefaultSettingsFileName);
                var projectLevelConfigFile = Path.Combine(projectDir, Settings.DefaultSettingsFileName);
                File.WriteAllText(rootConfigFile, RootConfig);
                File.WriteAllText(projectLevelConfigFile, ProjectLevelConfig);
                // Act
                var result = task.Execute();

                // Assert
                result.Should().BeTrue();
                task.OutputSources.Should().BeEquivalentTo(new[] { "https://api.nuget.org/v3/index.json" });
                task.OutputFallbackFolders.Should().BeEmpty();
                task.OutputConfigFilePaths.Should().Contain(rootConfigFile);
                task.OutputConfigFilePaths.Should().NotContain(projectLevelConfigFile);
            }
        }
コード例 #29
0
        public void Execute_WithArgs_LogsMessageWithCorrectReplacements()
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var task = new NuGetMessageTask
            {
                BuildEngine = buildEngine,
                Name        = nameof(TestStrings.Execute_WithArgs_LogsMessageWithCorrectReplacements),
                Args        = new[] { "One", "two" }
            };

            task.Log.TaskResources = TestStrings.ResourceManager;

            var result = task.Execute();

            result.Should().BeTrue();

            var message = testLogger.LogMessages.Should().ContainSingle().Which;

            message.Level.Should().Be(LogLevel.Information);
            message.Message.Should().Be("This is One two");
        }
コード例 #30
0
        public void Execute_WithImportance_LogsMessageWithCorrectLogLevel(string importance, LogLevel expectedLogLevel)
        {
            var buildEngine = new TestBuildEngine();
            var testLogger  = buildEngine.TestLogger;

            var task = new NuGetMessageTask
            {
                BuildEngine = buildEngine,
                Name        = nameof(TestStrings.Execute_WithImportance_LogsMessageWithCorrectLogLevel),
                Importance  = importance
            };

            task.Log.TaskResources = TestStrings.ResourceManager;

            var result = task.Execute();

            result.Should().BeTrue();

            var message = testLogger.LogMessages.Should().ContainSingle().Which;

            message.Level.Should().Be(expectedLogLevel);
            message.Message.Should().Be(TestStrings.Execute_WithImportance_LogsMessageWithCorrectLogLevel);
        }