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 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 ItShouldCombineSdkReferencesWithImplicitPackageReferences() { // Arrange var sdkReference1 = new MockTaskItem( itemSpec: "SdkReference1", metadata: new Dictionary <string, string> { { MetadataKeys.Version, "2.0.1" } }); var sdkReference2 = new MockTaskItem( itemSpec: "SdkReference2", metadata: new Dictionary <string, string> { { MetadataKeys.Version, "1.0.1" } }); var packageReference1 = new MockTaskItem( itemSpec: "tfm1/PackageReference1/3.0.1", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Package" }, { MetadataKeys.IsTopLevelDependency, "True" }, { MetadataKeys.IsImplicitlyDefined, "True" }, { MetadataKeys.SDKPackageItemSpec, "tfm1/PackageReference1/3.0.1" }, { MetadataKeys.Name, "PackageReference1" }, { MetadataKeys.OriginalItemSpec, "PackageReference1" }, { MetadataKeys.Path, @"x:\folder\subfolder" }, { MetadataKeys.Version, @"3.0.1" } }); var packageReference1_otherTFM = new MockTaskItem( itemSpec: "tfm2/PackageReference1/3.0.1", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Package" }, { MetadataKeys.IsTopLevelDependency, "True" }, { MetadataKeys.IsImplicitlyDefined, "True" }, { MetadataKeys.SDKPackageItemSpec, "tfm2/PackageReference1/3.0.1" }, { MetadataKeys.Name, "PackageReference1" }, { MetadataKeys.OriginalItemSpec, "PackageReference1" }, { MetadataKeys.Path, @"x:\folder\subfolder\tfm2" } }); var packageReference_Target = new MockTaskItem( itemSpec: "packageReference_Target", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Target" }, { MetadataKeys.IsTopLevelDependency, "True" }, { MetadataKeys.IsImplicitlyDefined, "True" }, { MetadataKeys.Name, "packageReference_Target" } }); var packageReference_Unknown = new MockTaskItem( itemSpec: "packageReference_Unknown", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Xxx" }, { MetadataKeys.IsTopLevelDependency, "True" }, { MetadataKeys.IsImplicitlyDefined, "True" }, { MetadataKeys.Name, "packageReference_Unknown" } }); var packageReference_NotTopLevel = new MockTaskItem( itemSpec: "packageReference_NotTopLevel", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Package" }, { MetadataKeys.IsTopLevelDependency, "False" }, { MetadataKeys.IsImplicitlyDefined, "True" }, { MetadataKeys.Name, "packageReference_NotTopLevel" } }); var packageReference_NotTopLevel2 = new MockTaskItem( itemSpec: "packageReference_NotTopLevel2", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Package" }, { MetadataKeys.IsTopLevelDependency, "xxxx" }, { MetadataKeys.IsImplicitlyDefined, "True" }, { MetadataKeys.Name, "packageReference_NotTopLevel2" } }); var packageReference_NotImplicit = new MockTaskItem( itemSpec: "packageReference_NotImplicit", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Package" }, { MetadataKeys.IsTopLevelDependency, "True" }, { MetadataKeys.IsImplicitlyDefined, "False" }, { MetadataKeys.Name, "packageReference_NotImplicit" } }); var packageReference_NotImplicit2 = new MockTaskItem( itemSpec: "packageReference_NotImplicit2", metadata: new Dictionary <string, string> { { MetadataKeys.Type, "Package" }, { MetadataKeys.IsTopLevelDependency, "True" }, { MetadataKeys.IsImplicitlyDefined, "Xxxx" }, { MetadataKeys.Name, "packageReference_NotImplicit2" } }); var task = new CollectResolvedSDKReferencesDesignTime(); task.ResolvedSdkReferences = new[] { sdkReference1, sdkReference2 }; task.DependenciesDesignTime = new ITaskItem[] { packageReference1, packageReference1_otherTFM, packageReference_Target, packageReference_Unknown, packageReference_NotTopLevel, packageReference_NotTopLevel2, packageReference_NotImplicit, packageReference_NotImplicit2 }; // Act var result = task.Execute(); // Assert result.Should().BeTrue(); task.ResolvedSDKReferencesDesignTime.Count().Should().Be(3); VerifyTaskItem(sdkReference1, task.ResolvedSDKReferencesDesignTime[0]); VerifyTaskItem(sdkReference2, task.ResolvedSDKReferencesDesignTime[1]); var path = packageReference1.GetMetadata(MetadataKeys.Path); packageReference1.RemoveMetadata(MetadataKeys.Path); packageReference1.SetMetadata(MetadataKeys.SDKRootFolder, path); VerifyTaskItem(packageReference1, task.ResolvedSDKReferencesDesignTime[2], "PackageReference1"); }