123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- namespace Microsoft.NET.Pack.Tests
- {
- public class GivenThatThereAreImplicitPackageReferences : SdkTest
- {
- public GivenThatThereAreImplicitPackageReferences(ITestOutputHelper log) : base(log)
- {
- }
- [Fact]
- public void Packing_a_netstandard_1_x_library_includes_the_implicit_dependency()
- {
- TestProject testProject = new()
- {
- Name = "PackNetStandard1x",
- TargetFrameworks = "netstandard1.4",
- IsExe = false
- };
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Count().Should().Be(1);
- dependencies.Single().Attribute("id").Value
- .Should().Be("NETStandard.Library");
- dependencies.Single().Attribute("version").Value
- .Should().Be("1.6.1");
- }
- [Fact]
- public void Packing_a_netstandard_2_0_library_does_not_include_the_implicit_dependency()
- {
- TestProject testProject = new()
- {
- Name = "PackNetStandard20",
- TargetFrameworks = "netstandard2.0",
- IsExe = false
- };
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Should().BeEmpty();
- }
- [Fact]
- public void Packing_a_netcoreapp_1_1_library_includes_the_implicit_dependency()
- {
- TestProject testProject = new()
- {
- Name = "PackNetCoreApp11Library",
- TargetFrameworks = "netcoreapp1.1",
- IsExe = false
- };
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Count().Should().Be(1);
- dependencies.Single().Attribute("id").Value
- .Should().Be("Microsoft.NETCore.App");
- // Don't check the exact version so that the test doesn't break if we roll forward to new patch versions of the package
- dependencies.Single().Attribute("version").Value
- .Should().StartWith("1.1.");
- }
- [Fact]
- public void Packing_a_netcoreapp_2_0_library_does_not_include_the_implicit_dependency()
- {
- TestProject testProject = new()
- {
- Name = "PackNetCoreApp20Library",
- TargetFrameworks = "netcoreapp2.0",
- IsExe = false
- };
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Should().BeEmpty();
- }
- [Fact]
- public void Packing_a_netcoreapp_1_1_app_includes_the_implicit_dependency()
- {
- TestProject testProject = new()
- {
- Name = "PackNetCoreApp11App",
- TargetFrameworks = "netcoreapp1.1",
- IsExe = true
- };
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Count().Should().Be(1);
- dependencies.Single().Attribute("id").Value
- .Should().Be("Microsoft.NETCore.App");
- // Don't check the exact version so that the test doesn't break if we roll forward to new patch versions of the package
- dependencies.Single().Attribute("version").Value
- .Should().StartWith("1.1.");
- }
- [WindowsOnlyFact]
- public void Packing_an_app_exclude_dependencies_framework_assemblies_dependency()
- {
- TestProject testProject = new()
- {
- Name = "Packnet462App",
- TargetFrameworks = "net462",
- };
- testProject.PackageReferences.Add(
- new TestPackageReference(
- "System.IO.Compression",
- "4.3.0",
- null));
- testProject.References.Add("System.Web");
- var dependencies = GetFrameworkAssemblies(PackAndGetNuspec(testProject), out var _);
- dependencies.Count().Should().Be(1);
- dependencies.Single().Attribute("assemblyName").Value.Should().Be("System.Web");
- }
- [Theory]
- [InlineData("netcoreapp2.0")]
- [InlineData("netcoreapp3.0")]
- public void Packing_a_netcoreapp_2_0_app_includes_no_dependencies(string targetFramework)
- {
- TestProject testProject = new()
- {
- Name = "PackApp_" + targetFramework,
- TargetFrameworks = targetFramework,
- IsExe = true
- };
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Should().BeEmpty();
- }
- [Theory]
- [InlineData("Microsoft.AspNetCore.App")]
- [InlineData("Microsoft.AspNetCore.All")]
- public void Package_an_aspnetcore_2_1_app_does_not_include_the_implicit_dependency(string packageId)
- {
- TestProject testProject = new()
- {
- Name = "PackAspNetCoreApp21App",
- TargetFrameworks = "netcoreapp2.1",
- IsExe = true
- };
- testProject.PackageReferences.Add(new TestPackageReference(packageId, ""));
- var dependencies = PackAndGetDependencies(testProject, packageId);
- dependencies.Should().BeEmpty();
- }
- [Fact]
- public void Packing_a_netcoreapp_2_0_DotnetCliTool_app_includes_the_implicit_dependency()
- {
- TestProject testProject = new()
- {
- Name = "PackNetCoreApp20App",
- TargetFrameworks = "netcoreapp2.0",
- IsExe = true
- };
- testProject.AdditionalProperties.Add("PackageType", "DotnetCliTool");
- var dependencies = PackAndGetDependencies(testProject);
- dependencies.Count().Should().Be(1);
- dependencies.Single().Attribute("id").Value
- .Should().Be("Microsoft.NETCore.App");
- // Don't check the exact version so that the test doesn't break if we roll forward to new patch versions of the package
- dependencies.Single().Attribute("version").Value
- .Should().StartWith("2.0.");
- }
- [Fact]
- public void Packing_a_multitargeted_library_includes_implicit_dependencies_when_appropriate()
- {
- TestProject testProject = new()
- {
- Name = "PackMultiTargetedLibrary",
- TargetFrameworks = $"netstandard1.1;netstandard2.0;netcoreapp1.1;{ToolsetInfo.CurrentTargetFramework}",
- IsExe = false
- };
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- testProject.TargetFrameworks += ";net462";
- }
- var dependencyGroups = GetDependencyGroups(PackAndGetNuspec(testProject), out var ns);
- void ExpectDependencyGroup(string targetFramework, string dependencyId)
- {
- var matchingGroups = dependencyGroups.Where(dg => dg.Attribute("targetFramework").Value == targetFramework).ToList();
- matchingGroups.Count().Should().Be(1);
- var dependencies = matchingGroups.Single().Elements(ns + "dependency");
- if (dependencyId == null)
- {
- dependencies.Should().BeEmpty();
- }
- else
- {
- dependencies.Count().Should().Be(1);
- dependencies.Single().Attribute("id").Value
- .Should().Be(dependencyId);
- }
- }
- ExpectDependencyGroup(".NETStandard1.1", "NETStandard.Library");
- ExpectDependencyGroup(".NETStandard2.0", null);
- ExpectDependencyGroup(".NETCoreApp1.1", "Microsoft.NETCore.App");
- ExpectDependencyGroup(ToolsetInfo.CurrentTargetFramework, null);
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- ExpectDependencyGroup(".NETFramework4.6.2", null);
- }
- }
- private List<XElement> GetDependencyGroups(XDocument nuspec, out XNamespace ns)
- {
- ns = nuspec.Root.Name.Namespace;
- var dependencyGroups = nuspec.Root
- .Element(ns + "metadata")
- .Element(ns + "dependencies")
- .Elements()
- .ToList();
- return dependencyGroups;
- }
- private List<XElement> GetFrameworkAssemblies(XDocument nuspec, out XNamespace ns)
- {
- ns = nuspec.Root.Name.Namespace;
- return nuspec.Root
- .Element(ns + "metadata")
- .Element(ns + "frameworkAssemblies")
- .Elements()
- .ToList();
- }
- private XDocument PackAndGetNuspec(TestProject testProject, string identifier = null)
- {
- var testProjectInstance = _testAssetsManager.CreateTestProject(testProject, testProject.Name, identifier);
- var packCommand = new PackCommand(Log, testProjectInstance.TestRoot, testProject.Name);
- packCommand.Execute()
- .Should()
- .Pass();
- string nuspecPath = packCommand.GetIntermediateNuspecPath();
- var nuspec = XDocument.Load(nuspecPath);
- return nuspec;
- }
- private List<XElement> PackAndGetDependencies(TestProject testProject, string identifier = null)
- {
- var dependencyGroups = GetDependencyGroups(PackAndGetNuspec(testProject, identifier), out var ns);
- // There should be only one dependency group for these tests
- dependencyGroups.Count().Should().Be(1);
- // It should have the right element name
- dependencyGroups.Single().Name.Should().Be(ns + "group");
- var dependencies = dependencyGroups.Single().Elements(ns + "dependency").ToList();
- return dependencies;
- }
- private List<XElement> PackAndGetFrameworkAssemblies(TestProject testProject)
- {
- var frameworkAssemblies = GetFrameworkAssemblies(PackAndGetNuspec(testProject), out var ns);
- // There should be only one dependency group for these tests
- frameworkAssemblies.Count().Should().Be(1);
- frameworkAssemblies.Should().Contain(f => f.Name == "frameworkAssembly");
- return frameworkAssemblies.Elements(ns + "frameworkAssembly").ToList();
- }
- }
- }
|