diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index 5002a36cf..7cbc970d8 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -129,7 +129,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules itemGroup.Condition = condition; foreach (var packageDependency in packageDependencies) - { + { MigrationTrace.Instance.WriteLine(packageDependency.Name); AddItemTransform transform; @@ -140,7 +140,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules else { transform = PackageDependencyTransform(); - if (packageDependency.Type == LibraryDependencyType.Build) + if (packageDependency.Type.Equals(LibraryDependencyType.Build)) { transform = transform.WithMetadata("PrivateAssets", "All"); } @@ -163,11 +163,16 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules private string ReadLibraryIncludeFlags(LibraryIncludeFlags includeFlags) { - if ((includeFlags & LibraryIncludeFlags.All) == LibraryIncludeFlags.All) + if ((includeFlags ^ LibraryIncludeFlags.All) == 0) { return "All"; } + if ((includeFlags ^ LibraryIncludeFlags.None) == 0) + { + return "None"; + } + var flagString = ""; var allFlagsAndNames = new List> { diff --git a/src/Microsoft.DotNet.ProjectModel/ProjectReader.cs b/src/Microsoft.DotNet.ProjectModel/ProjectReader.cs index a99ef4a30..739d6a3a6 100644 --- a/src/Microsoft.DotNet.ProjectModel/ProjectReader.cs +++ b/src/Microsoft.DotNet.ProjectModel/ProjectReader.cs @@ -885,7 +885,7 @@ namespace Microsoft.DotNet.ProjectModel } else { - values = token.Value(); + values = token.Values(); } result = values .SelectMany(value => value.Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)); diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 36ca01a99..f93ab9939 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -6,6 +6,7 @@ using Microsoft.DotNet.Tools.Test.Utilities; using System.Linq; using Xunit; using FluentAssertions; +using Microsoft.DotNet.ProjectJsonMigration; using Microsoft.DotNet.ProjectJsonMigration.Rules; using System; @@ -27,6 +28,126 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests EmitsPackageReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview", ""), Tuple.Create("BPackage", "1.0.0", "")); } + [Fact] + public void It_migrates_type_build_to_PrivateAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""APackage"" : { + ""version"": ""1.0.0-preview"", + ""type"": ""build"" + } + } + }"); + + + var packageRef = mockProj.Items.First(i => i.Include == "APackage" && i.ItemType == "PackageReference"); + + var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets"); + privateAssetsMetadata.Value.Should().NotBeNull(); + privateAssetsMetadata.Value.Should().Be("All"); + } + + [Fact] + public void It_migrates_suppress_parent_array_to_PrivateAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""APackage"" : { + ""version"": ""1.0.0-preview"", + ""suppressParent"":[ ""runtime"", ""native"" ] + } + } + }"); + var packageRef = mockProj.Items.First(i => i.Include == "APackage" && i.ItemType == "PackageReference"); + + var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets"); + privateAssetsMetadata.Value.Should().NotBeNull(); + privateAssetsMetadata.Value.Should().Be("Native;Runtime"); + } + + [Fact] + public void It_migrates_suppress_parent_string_to_PrivateAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""APackage"" : { + ""version"": ""1.0.0-preview"", + ""suppressParent"":""runtime"" + } + } + }"); + var packageRef = mockProj.Items.First(i => i.Include == "APackage" && i.ItemType == "PackageReference"); + + var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets"); + privateAssetsMetadata.Value.Should().NotBeNull(); + privateAssetsMetadata.Value.Should().Be("Runtime"); + } + + [Fact] + public void It_migrates_include_exclude_arrays_to_IncludeAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""APackage"" : { + ""version"": ""1.0.0-preview"", + ""include"": [ ""compile"", ""runtime"", ""native"" ], + ""exclude"": [ ""native"" ] + } + } + }"); + var packageRef = mockProj.Items.First(i => i.Include == "APackage" && i.ItemType == "PackageReference"); + + var includeAssetsMetadata = packageRef.GetMetadataWithName("IncludeAssets"); + includeAssetsMetadata.Value.Should().NotBeNull(); + includeAssetsMetadata.Value.Should().Be("Compile;Runtime"); + } + + [Fact] + public void It_migrates_include_string_to_IncludeAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""APackage"" : { + ""version"": ""1.0.0-preview"", + ""include"": ""compile"", + ""exclude"": ""runtime"" + } + } + }"); + var packageRef = mockProj.Items.First(i => i.Include == "APackage" && i.ItemType == "PackageReference"); + + var includeAssetsMetadata = packageRef.GetMetadataWithName("IncludeAssets"); + includeAssetsMetadata.Value.Should().NotBeNull(); + includeAssetsMetadata.Value.Should().Be("Compile"); + } + + [Fact] + public void It_migrates_include_exclude_overlapping_strings_to_IncludeAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""APackage"" : { + ""version"": ""1.0.0-preview"", + ""include"": ""compile"", + ""exclude"": ""compile"", + } + } + }"); + var packageRef = mockProj.Items.First(i => i.Include == "APackage" && i.ItemType == "PackageReference"); + + var includeAssetsMetadata = packageRef.GetMetadataWithName("IncludeAssets"); + includeAssetsMetadata.Value.Should().NotBeNull(); + includeAssetsMetadata.Value.Should().Be("None"); + } + + [Fact] public void It_migrates_Tools() {