Пример #1
0
        public void ItShouldOnlyReturnTopLevelPackages()
        {
            var task = new PreprocessPackageDependenciesDesignTime
            {
                TargetFrameworkMoniker  = ".Net Framework,Version=v4.5",
                DefaultImplicitPackages = string.Empty,
                PackageDefinitions      = new ITaskItem[] {
                    new MockTaskItem(
                        itemSpec: "Package1/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "Package1" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "" },
                        { MetadataKeys.Type, "Package" }
                    }),
                    new MockTaskItem(
                        itemSpec: "ChildPackage1/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "ChildPackage1" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Package" }
                    })
                },
                PackageDependencies = new ITaskItem[] {
                    new MockTaskItem(
                        itemSpec: "Package1/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "ChildPackage1/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                        { MetadataKeys.ParentPackage, "Package1/1.0.0" }
                    })
                }
            };

            Assert.True(task.Execute());

            var item = Assert.Single(task.PackageDependenciesDesignTime);

            Assert.Equal("Package1/1.0.0", item.ItemSpec);
        }
Пример #2
0
        public void ItShouldNotReturnPackagesWithUnknownTypes()
        {
            var task = new PreprocessPackageDependenciesDesignTime
            {
                TargetFrameworkMoniker  = ".Net Framework,Version=v4.5",
                DefaultImplicitPackages = string.Empty,
                PackageDefinitions      = new ITaskItem[]
                {
                    new MockTaskItem(
                        itemSpec: "mockPackageNoType/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageNoType" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some path" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageUnknown/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageUnknown" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "qqqq" }
                    })
                },
                PackageDependencies = new ITaskItem[]
                {
                    new MockTaskItem(
                        itemSpec: "mockPackageNoType/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageUnknown/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    })
                }
            };

            Assert.True(task.Execute());

            Assert.Empty(task.PackageDependenciesDesignTime);
        }
Пример #3
0
        public void ItShouldReturnUnresolvedPackageDependenciesWithTypePackage()
        {
            var task = new PreprocessPackageDependenciesDesignTime
            {
                TargetFrameworkMoniker  = ".Net Framework,Version=v4.5",
                DefaultImplicitPackages = string.Empty,
                PackageDefinitions      = new ITaskItem[]
                {
                    new MockTaskItem(
                        itemSpec: "mockPackageUnresolved/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageUnresolved" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "" },
                        { MetadataKeys.Type, "Unresolved" },
                        { MetadataKeys.DiagnosticLevel, "Warning" }
                    })
                },
                PackageDependencies = new ITaskItem[]
                {
                    new MockTaskItem(
                        itemSpec: "mockPackageUnresolved/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    })
                }
            };

            Assert.True(task.Execute());

            var item = Assert.Single(task.PackageDependenciesDesignTime);

            Assert.Equal("mockPackageUnresolved/1.0.0", item.ItemSpec);
            Assert.Equal("mockPackageUnresolved", item.GetMetadata(MetadataKeys.Name));
            Assert.Equal("1.0.0", item.GetMetadata(MetadataKeys.Version));
            Assert.Equal("some path", item.GetMetadata(MetadataKeys.Path));
            Assert.Equal("", item.GetMetadata(MetadataKeys.ResolvedPath));
            Assert.Equal("Warning", item.GetMetadata(MetadataKeys.DiagnosticLevel));
            Assert.False(item.GetBooleanMetadata(MetadataKeys.IsImplicitlyDefined));
            Assert.False(item.GetBooleanMetadata(PreprocessPackageDependenciesDesignTime.ResolvedMetadata));
        }
Пример #4
0
        public void ItShouldIdentifyDefaultImplicitPackages()
        {
            var task = new PreprocessPackageDependenciesDesignTime
            {
                TargetFrameworkMoniker  = ".Net Framework,Version=v4.5",
                DefaultImplicitPackages = "DefaultImplicit",
                PackageDefinitions      = new ITaskItem[]
                {
                    new MockTaskItem(
                        itemSpec: "DefaultImplicit/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "DefaultImplicit" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "" },
                        { MetadataKeys.Type, "Package" }
                    })
                },
                PackageDependencies = new ITaskItem[]
                {
                    new MockTaskItem(
                        itemSpec: "DefaultImplicit/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    })
                }
            };

            Assert.True(task.Execute());

            var item = Assert.Single(task.PackageDependenciesDesignTime);

            Assert.Equal("DefaultImplicit/1.0.0", item.ItemSpec);
            Assert.True(item.GetBooleanMetadata(MetadataKeys.IsImplicitlyDefined));
        }
        public void ItShouldNotReturnPackagesWithUnknownTypes()
        {
            // Arrange
            // target definitions
            var mockTarget = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.5",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "net45" },
                { MetadataKeys.TargetFrameworkMoniker, ".Net Framework,Version=v4.5" },
                { MetadataKeys.FrameworkName, ".Net Framework" },
                { MetadataKeys.FrameworkVersion, "4.5" },
                { MetadataKeys.Type, "Target" }
            });

            // package definitions
            var mockPackageNoType = new MockTaskItem(
                itemSpec: "mockPackageNoType/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockPackageNoType" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some path" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockPackageUnknown = new MockTaskItem(
                itemSpec: "mockPackageUnknown/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockPackageUnknown" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "qqqq" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            // package dependencies
            var mockPackageDepNoType = new MockTaskItem(
                itemSpec: "mockPackageNoType/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockPackageDepUnknown = new MockTaskItem(
                itemSpec: "mockPackageUnknown/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var task = new PreprocessPackageDependenciesDesignTime();

            task.TargetDefinitions   = new[] { mockTarget };
            task.PackageDefinitions  = new ITaskItem[] { mockPackageNoType, mockPackageUnknown };
            task.FileDefinitions     = new ITaskItem[] { };
            task.PackageDependencies = new ITaskItem[] { mockPackageDepNoType, mockPackageDepUnknown };
            task.FileDependencies    = new ITaskItem[] { };
            task.PackageReferences   = new ITaskItem[] { };

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

            // Assert
            result.Should().BeTrue();
            task.DependenciesDesignTime.Count().Should().Be(1);

            var resultTargets = task.DependenciesDesignTime
                                .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5")).ToArray();

            resultTargets.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Target, mockTarget, resultTargets[0]);
        }
        public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyOrAnalyzerDependencies()
        {
            // Arrange
            // target definitions
            var mockTarget = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.5",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "net45" },
                { MetadataKeys.TargetFrameworkMoniker, ".Net Framework,Version=v4.5" },
                { MetadataKeys.FrameworkName, ".Net Framework" },
                { MetadataKeys.FrameworkVersion, "4.5" },
                { MetadataKeys.Type, "Target" }
            });

            // package definitions
            var mockPackage = new MockTaskItem(
                itemSpec: "Package3/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "Package3" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Package" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" },
                { PreprocessPackageDependenciesDesignTime.DependenciesMetadata,
                  @"mockChildAssembly1;somepath/mockChildAssembly2;somepath/mockChildAnalyzerAssembly" },
                { MetadataKeys.IsImplicitlyDefined, "True" }
            });

            var mockChildAssembly1 = new MockTaskItem(
                itemSpec: @"mockChildAssembly1",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockChildAssembly1" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Assembly" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" }
            });

            var mockChildAssembly2 = new MockTaskItem(
                itemSpec: @"somepath/mockChildAssembly2",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockChildAssembly2" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "FrameworkAssembly" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" }
            });

            var mockChildAssemblyNoCompileMetadata = new MockTaskItem(
                itemSpec: @"somepath/mockChildAssemblyNoCompileMetadata",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockChildAssemblyNoCompileMetadata" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Assembly" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" }
            });

            var mockChildAnalyzerAssembly = new MockTaskItem(
                itemSpec: @"somepath/mockChildAnalyzerAssembly",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockChildAnalyzerAssembly" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "AnalyzerAssembly" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" }
            });

            // package dependencies
            var mockPackageDep = new MockTaskItem(
                itemSpec: "Package3/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.IsImplicitlyDefined, "True" }
            });

            var mockChildAssemblyDep1 = new MockTaskItem(
                itemSpec: "mockChildAssembly1",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "Package3/1.0.0" },
                { MetadataKeys.FileGroup, PreprocessPackageDependenciesDesignTime.CompileTimeAssemblyMetadata }
            });

            var mockChildAssemblyDep2 = new MockTaskItem(
                itemSpec: @"somepath/mockChildAssembly2",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "Package3/1.0.0" },
                { MetadataKeys.FileGroup, PreprocessPackageDependenciesDesignTime.CompileTimeAssemblyMetadata }
            });

            var mockChildAssemblyNoCompileMetadataDep = new MockTaskItem(
                itemSpec: "somepath/mockChildAssemblyNoCompileMetadata",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "Package3/1.0.0" }
            });

            var mockChildAnalyzerAssemblyDep = new MockTaskItem(
                itemSpec: "somepath/mockChildAnalyzerAssembly",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "Package3/1.0.0" }
            });

            var task = new PreprocessPackageDependenciesDesignTime();

            task.TargetDefinitions  = new[] { mockTarget };
            task.PackageDefinitions = new ITaskItem[] {
                mockPackage
            };
            task.FileDefinitions = new ITaskItem[] {
                mockChildAssembly1,
                mockChildAssembly2,
                mockChildAssemblyNoCompileMetadata,
                mockChildAnalyzerAssembly
            };
            task.PackageDependencies = new ITaskItem[] {
                mockPackageDep
            };
            task.FileDependencies = new ITaskItem[] {
                mockChildAssemblyDep1,
                mockChildAssemblyDep2,
                mockChildAssemblyNoCompileMetadataDep,
                mockChildAnalyzerAssemblyDep
            };
            task.PackageReferences = new ITaskItem[] { new MockTaskItem(
                                                           itemSpec: "Package3",
                                                           metadata: new Dictionary <string, string>
                {
                    { MetadataKeys.IsImplicitlyDefined, "True" }
                }) };

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

            // Assert
            result.Should().BeTrue();
            task.DependenciesDesignTime.Count().Should().Be(5);

            var resultTargets = task.DependenciesDesignTime
                                .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5")).ToArray();

            resultTargets.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Target, mockTarget, resultTargets[0]);

            mockPackage.SetMetadata(MetadataKeys.Path, mockPackage.GetMetadata(MetadataKeys.ResolvedPath));
            var resultPackage = task.DependenciesDesignTime
                                .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/Package3/1.0.0")).ToArray();

            resultPackage.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Package, mockPackage, resultPackage[0]);

            mockChildAssembly1.SetMetadata(MetadataKeys.Path, mockChildAssembly1.GetMetadata(MetadataKeys.ResolvedPath));
            var resultChildAssembly1 = task.DependenciesDesignTime
                                       .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/mockChildAssembly1")).ToArray();

            resultChildAssembly1.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Assembly, mockChildAssembly1, resultChildAssembly1[0]);

            mockChildAssembly2.SetMetadata(MetadataKeys.Path, mockChildAssembly2.GetMetadata(MetadataKeys.ResolvedPath));
            var resultChildAssembly2 = task.DependenciesDesignTime
                                       .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/somepath/mockChildAssembly2")).ToArray();

            resultChildAssembly2.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.FrameworkAssembly, mockChildAssembly2, resultChildAssembly2[0]);

            mockChildAnalyzerAssembly.SetMetadata(MetadataKeys.Path, mockChildAnalyzerAssembly.GetMetadata(MetadataKeys.ResolvedPath));
            var resultChildAnalyzerAssembly = task.DependenciesDesignTime
                                              .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/somepath/mockChildAnalyzerAssembly")).ToArray();

            resultChildAnalyzerAssembly.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.AnalyzerAssembly, mockChildAnalyzerAssembly, resultChildAnalyzerAssembly[0]);
        }
        public void ItShouldIgnoreFileDependenciesThatAre_NotAssemblies_And_DontBelongToCompileTimeAssemblyGroup()
        {
            // Arrange
            // target definitions
            var mockTarget = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.5",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "net45" },
                { MetadataKeys.TargetFrameworkMoniker, ".Net Framework,Version=v4.5" },
                { MetadataKeys.FrameworkName, ".Net Framework" },
                { MetadataKeys.FrameworkVersion, "4.5" },
                { MetadataKeys.Type, "Target" }
            });

            // package definitions
            var mockExternalProject = new MockTaskItem(
                itemSpec: "mockExternalProject/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockExternalProject" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some path" },
                { MetadataKeys.Type, "ExternalProject" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockProject = new MockTaskItem(
                itemSpec: "mockProject/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockProject" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Project" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockContent = new MockTaskItem(
                itemSpec: "mockContent/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockContent" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Content" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockPackage = new MockTaskItem(
                itemSpec: "mockPackage/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockAssembly" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Assembly" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockDiagnostic = new MockTaskItem(
                itemSpec: "mockDiagnostic/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockDiagnostic" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Diagnostic" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockWinmd = new MockTaskItem(
                itemSpec: "mockWinmd/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockWinmd" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Winmd" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            var mockReference = new MockTaskItem(
                itemSpec: "mockReference/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "mockReference" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Reference" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "False" }
            });

            // package dependencies
            var mockExternalProjectDep = new MockTaskItem(
                itemSpec: "mockExternalProject/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockProjectDep = new MockTaskItem(
                itemSpec: "mockProject/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockContentDep = new MockTaskItem(
                itemSpec: "mockContent/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockPackageDep = new MockTaskItem(
                itemSpec: "mockPackage/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockDiagnosticDep = new MockTaskItem(
                itemSpec: "mockDiagnostic/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockWinmdDep = new MockTaskItem(
                itemSpec: "mockWinmd/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockReferenceDep = new MockTaskItem(
                itemSpec: "mockReference/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var task = new PreprocessPackageDependenciesDesignTime();

            task.TargetDefinitions  = new[] { mockTarget };
            task.PackageDefinitions = new ITaskItem[] { };
            task.FileDefinitions    = new ITaskItem[] {
                mockExternalProject,
                mockProject,
                mockContent,
                mockPackage,
                mockWinmd,
                mockReference
            };
            task.PackageDependencies = new ITaskItem[] { };
            task.FileDependencies    = new ITaskItem[] {
                mockExternalProjectDep,
                mockProjectDep,
                mockContentDep,
                mockPackageDep,
                mockWinmdDep,
                mockReferenceDep
            };
            task.PackageReferences = new ITaskItem[] { };

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

            // Assert
            result.Should().BeTrue();
            task.DependenciesDesignTime.Count().Should().Be(1);

            // Target with type
            var resultTargets = task.DependenciesDesignTime
                                .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5")).ToArray();

            resultTargets.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Target, mockTarget, resultTargets[0]);
        }
        public void ItReturnsCorrectHierarchyOfDependenciesThatHaveChildren()
        {
            // Arrange
            // target definitions
            var mockTarget = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.5",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "net45" },
                { MetadataKeys.TargetFrameworkMoniker, ".Net Framework,Version=v4.5" },
                { MetadataKeys.FrameworkName, ".Net Framework" },
                { MetadataKeys.FrameworkVersion, "4.5" },
                { MetadataKeys.Type, "Target" }
            });

            // package definitions
            var mockPackage = new MockTaskItem(
                itemSpec: "Package3/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "Package3" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Package" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" },
                { PreprocessPackageDependenciesDesignTime.DependenciesMetadata, "ChildPackage1/1.0.0;ChildPackage2/2.0.0" },
                { MetadataKeys.IsTopLevelDependency, "True" }
            });

            var mockChildPackage1 = new MockTaskItem(
                itemSpec: "ChildPackage1/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "ChildPackage1" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Package" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" },
                { PreprocessPackageDependenciesDesignTime.DependenciesMetadata, "ChildPackage11/1.0.0" },
                { MetadataKeys.IsTopLevelDependency, "False" }
            });

            var mockChildPackage11 = new MockTaskItem(
                itemSpec: "ChildPackage11/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "ChildPackage11" },
                { MetadataKeys.Version, "1.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Package" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" },
                { MetadataKeys.IsTopLevelDependency, "False" }
            });

            var mockChildPackage2 = new MockTaskItem(
                itemSpec: "ChildPackage2/2.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.Name, "ChildPackage2" },
                { MetadataKeys.Version, "2.0.0" },
                { MetadataKeys.Path, "some path" },
                { MetadataKeys.ResolvedPath, "some resolved path" },
                { MetadataKeys.Type, "Package" },
                { PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" },
                { MetadataKeys.IsTopLevelDependency, "False" }
            });

            // package dependencies
            var mockPackageDep = new MockTaskItem(
                itemSpec: "Package3/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
            });

            var mockChildPackageDep1 = new MockTaskItem(
                itemSpec: "ChildPackage1/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "Package3/1.0.0" }
            });

            var mockChildPackageDep11 = new MockTaskItem(
                itemSpec: "ChildPackage11/1.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "ChildPackage1/1.0.0" }
            });

            var mockChildPackageDep2 = new MockTaskItem(
                itemSpec: "ChildPackage2/2.0.0",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
                { MetadataKeys.ParentPackage, "Package3/1.0.0" }
            });

            var task = new PreprocessPackageDependenciesDesignTime();

            task.TargetDefinitions  = new[] { mockTarget };
            task.PackageDefinitions = new ITaskItem[] {
                mockPackage,
                mockChildPackage1,
                mockChildPackage11,
                mockChildPackage2
            };
            task.FileDefinitions     = new ITaskItem[] { };
            task.PackageDependencies = new ITaskItem[] {
                mockPackageDep,
                mockChildPackageDep1,
                mockChildPackageDep11,
                mockChildPackageDep2
            };
            task.FileDependencies  = new ITaskItem[] { };
            task.PackageReferences = new ITaskItem[] { };

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

            // Assert
            result.Should().BeTrue();
            task.DependenciesDesignTime.Count().Should().Be(5);

            var resultTargets = task.DependenciesDesignTime
                                .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5")).ToArray();

            resultTargets.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Target, mockTarget, resultTargets[0]);

            mockPackage.SetMetadata(MetadataKeys.Path, mockPackage.GetMetadata(MetadataKeys.ResolvedPath));
            var resultPackage = task.DependenciesDesignTime
                                .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/Package3/1.0.0")).ToArray();

            resultPackage.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Package, mockPackage, resultPackage[0]);

            mockChildPackage1.SetMetadata(MetadataKeys.Path, mockChildPackage1.GetMetadata(MetadataKeys.ResolvedPath));
            var resultChildPackage1 = task.DependenciesDesignTime
                                      .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/ChildPackage1/1.0.0")).ToArray();

            resultChildPackage1.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Package, mockChildPackage1, resultChildPackage1[0]);

            mockChildPackage11.SetMetadata(MetadataKeys.Path, mockChildPackage11.GetMetadata(MetadataKeys.ResolvedPath));
            var resultChildPackage11 = task.DependenciesDesignTime
                                       .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/ChildPackage11/1.0.0")).ToArray();

            resultChildPackage11.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Package, mockChildPackage11, resultChildPackage11[0]);

            mockChildPackage2.SetMetadata(MetadataKeys.Path, mockChildPackage2.GetMetadata(MetadataKeys.ResolvedPath));
            var resultChildPackage2 = task.DependenciesDesignTime
                                      .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/ChildPackage2/2.0.0")).ToArray();

            resultChildPackage2.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Package, mockChildPackage2, resultChildPackage2[0]);
        }
        public void ItShouldReturnOnlyValidTargetsWithoutRIDs()
        {
            // Arrange
            // target definitions
            var mockTargetWithType = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.5",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "net45" },
                { MetadataKeys.TargetFrameworkMoniker, ".Net Framework,Version=v4.5" },
                { MetadataKeys.FrameworkName, ".Net Framework" },
                { MetadataKeys.FrameworkVersion, "4.5" },
                { MetadataKeys.Type, "target" }     // lower case just in case
            });

            var mockTargetWithRidToBeSkipped = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.5/win7x86",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "" },
                { MetadataKeys.TargetFrameworkMoniker, "" },
                { MetadataKeys.FrameworkName, "" },
                { MetadataKeys.FrameworkVersion, "" },
                { MetadataKeys.Type, "" }
            });

            var mockTargetWithoutType = new MockTaskItem(
                itemSpec: ".Net Framework,Version=v4.6",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "net46" },
                { MetadataKeys.TargetFrameworkMoniker, ".Net Framework,Version=v4.6" },
                { MetadataKeys.FrameworkName, ".Net Framework" },
                { MetadataKeys.FrameworkVersion, "4.6" },
            });

            var mockTargetWithEmptyItemSpecToBeSkipped = new MockTaskItem(
                itemSpec: "",
                metadata: new Dictionary <string, string>
            {
                { MetadataKeys.RuntimeIdentifier, "" },
                { MetadataKeys.TargetFrameworkMoniker, "" },
                { MetadataKeys.FrameworkName, "" },
                { MetadataKeys.FrameworkVersion, "" }
            });

            var task = new PreprocessPackageDependenciesDesignTime();

            task.TargetDefinitions = new[] {
                mockTargetWithType,
                mockTargetWithRidToBeSkipped,
                mockTargetWithoutType,
                mockTargetWithEmptyItemSpecToBeSkipped
            };
            task.PackageDefinitions  = new ITaskItem[] { };
            task.FileDefinitions     = new ITaskItem[] { };
            task.PackageDependencies = new ITaskItem[] { };
            task.FileDependencies    = new ITaskItem[] { };
            task.PackageReferences   = new ITaskItem[] { };

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

            // Assert
            result.Should().BeTrue();
            task.DependenciesDesignTime.Count().Should().Be(1);

            var resultTargetsWithType = task.DependenciesDesignTime
                                        .Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5")).ToArray();

            resultTargetsWithType.Length.Should().Be(1);
            VerifyTargetTaskItem(DependencyType.Target, mockTargetWithType, resultTargetsWithType[0]);
        }
Пример #10
0
        public void ItShouldIgnoreAllDependenciesWithTypeNotEqualToPackageOrUnresolved()
        {
            var task = new PreprocessPackageDependenciesDesignTime
            {
                TargetFrameworkMoniker  = ".Net Framework,Version=v4.5",
                DefaultImplicitPackages = string.Empty,
                PackageDefinitions      = new ITaskItem[] {
                    new MockTaskItem(
                        itemSpec: "mockPackageExternalProject/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageExternalProject" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some path" },
                        { MetadataKeys.Type, "ExternalProject" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageProject/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageProject" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Project" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageContent/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageContent" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Content" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageAssembly/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageAssembly" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Assembly" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageFrameworkAssembly/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageFrameworkAssembly" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "FrameworkAssembly" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageDiagnostic/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageDiagnostic" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Diagnostic" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageWinmd/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageWinmd" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Winmd" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageReference/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.Name, "mockPackageReference" },
                        { MetadataKeys.Version, "1.0.0" },
                        { MetadataKeys.Path, "some path" },
                        { MetadataKeys.ResolvedPath, "some resolved path" },
                        { MetadataKeys.Type, "Reference" }
                    })
                },
                PackageDependencies = new ITaskItem[] {
                    new MockTaskItem(
                        itemSpec: "mockPackageExternalProject/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageProject/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageContent/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageAssembly/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageFrameworkAssembly/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageDiagnostic/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageWinmd/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    }),
                    new MockTaskItem(
                        itemSpec: "mockPackageReference/1.0.0",
                        metadata: new Dictionary <string, string>
                    {
                        { MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" }
                    })
                }
            };

            Assert.True(task.Execute());

            Assert.Empty(task.PackageDependenciesDesignTime);
        }