diff options
3 files changed, 122 insertions, 17 deletions
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetSettings.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetSettings.cs index 725ea709ef..b95f9535d1 100644 --- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetSettings.cs +++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetSettings.cs @@ -32,23 +32,13 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers { class FakeNuGetSettings : ISettings { - public string FileName { - get { - throw new NotImplementedException (); - } - } + public string FileName { get; set; } = "NuGet.Config"; public IEnumerable<ISettings> Priority { - get { - throw new NotImplementedException (); - } + get { yield return this; } } - public string Root { - get { - throw new NotImplementedException (); - } - } + public string Root { get; set; } = string.Empty; public event EventHandler SettingsChanged; @@ -69,12 +59,17 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers public IList<KeyValuePair<string, string>> GetNestedValues (string section, string subSection) { - throw new NotImplementedException (); + return new List<KeyValuePair<string, string>> (); } + public Dictionary<string, List<SettingValue>> SettingValues = new Dictionary<string, List<SettingValue>> (); + public IList<SettingValue> GetSettingValues (string section, bool isPath = false) { - throw new NotImplementedException (); + List<SettingValue> settings = null; + if (SettingValues.TryGetValue (section, out settings)) + return settings; + return new List<SettingValue> (); } public Dictionary<string, string> Values = new Dictionary<string, string> (); @@ -97,6 +92,11 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers Values [GetKey (section, key)] = value; } + public void SetValues (string section, List<SettingValue> values) + { + SettingValues [section] = values; + } + public void SetValues (string section, IReadOnlyList<SettingValue> values) { throw new NotImplementedException (); diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackageSpecCreatorTests.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackageSpecCreatorTests.cs index bd2e4c9fe1..e3a178a874 100644 --- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackageSpecCreatorTests.cs +++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/PackageSpecCreatorTests.cs @@ -24,6 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using System.Collections.Generic; using System.Linq; using MonoDevelop.Core.Assemblies; using MonoDevelop.PackageManagement.Tests.Helpers; @@ -99,6 +100,12 @@ namespace MonoDevelop.PackageManagement.Tests settings.SetValue (SettingsUtility.ConfigSection, "globalPackagesFolder", path); } + void AddFallbackFolder (params string[] folders) + { + var values = folders.Select (folder => new SettingValue (folder, folder, false)).ToList (); + settings.SetValues (ConfigurationConstants.FallbackPackageFolders, values); + } + [Test] public void CreatePackageSpec_NewProject_BaseIntermediatePathUsedForProjectAssetsJsonFile () { @@ -308,7 +315,7 @@ namespace MonoDevelop.PackageManagement.Tests } [Test] - public void CreatePackageSpec_NewProject_RestoreMetadataHasPackagesPathTakenFromSettings () + public void CreatePackageSpec_PackagesPath_RestoreMetadataHasPackagesPathTakenFromSettings () { CreateProject ("MyProject", @"d:\projects\MyProject\MyProject.csproj"); project.BaseIntermediateOutputPath = @"d:\projects\MyProject\obj".ToNativePath (); @@ -320,5 +327,89 @@ namespace MonoDevelop.PackageManagement.Tests Assert.AreEqual (packagesPath, spec.RestoreMetadata.PackagesPath); } + + [Test] + public void CreatePackageSpec_ConfigFilePaths_RestoreMetadataHasConfigFilesTakenFromSettings () + { + CreateProject ("MyProject", @"d:\projects\MyProject\MyProject.csproj"); + project.BaseIntermediateOutputPath = @"d:\projects\MyProject\obj".ToNativePath (); + AddTargetFramework ("netcoreapp1.0"); + string configFilePath = @"c:\users\test\.nuget\NuGet\NuGet.Config".ToNativePath (); + settings.FileName = configFilePath; + + CreatePackageSpec (); + + Assert.AreEqual (1, spec.RestoreMetadata.ConfigFilePaths.Count); + Assert.AreEqual (configFilePath, spec.RestoreMetadata.ConfigFilePaths[0]); + } + + [Test] + public void CreatePackageSpec_PackageSources_RestoreMetadataHasSourcesTakenFromSettings () + { + CreateProject ("MyProject", @"d:\projects\MyProject\MyProject.csproj"); + project.BaseIntermediateOutputPath = @"d:\projects\MyProject\obj".ToNativePath (); + AddTargetFramework ("netcoreapp1.0"); + var packageSource = new PackageSource ("https://nuget.org", "NuGet source"); + var sources = new List<SettingValue> (); + sources.Add (new SettingValue (packageSource.Name, packageSource.Source, false)); + settings.SetValues (ConfigurationConstants.PackageSources, sources); + + CreatePackageSpec (); + + Assert.AreEqual (1, spec.RestoreMetadata.Sources.Count); + Assert.AreEqual (packageSource.Name, spec.RestoreMetadata.Sources[0].Name); + Assert.AreEqual (packageSource.Source, spec.RestoreMetadata.Sources[0].Source); + } + + [Test] + public void CreatePackageSpec_FallbackFolders_RestoreMetadataHasFallbackFoldersTakenFromSettings () + { + CreateProject ("MyProject", @"d:\projects\MyProject\MyProject.csproj"); + project.BaseIntermediateOutputPath = @"d:\projects\MyProject\obj".ToNativePath (); + AddTargetFramework ("netcoreapp1.0"); + string folderPath = @"c:\users\test\packages".ToNativePath (); + AddFallbackFolder (folderPath); + + CreatePackageSpec (); + + Assert.AreEqual (1, spec.RestoreMetadata.FallbackFolders.Count); + Assert.AreEqual (folderPath, spec.RestoreMetadata.FallbackFolders[0]); + } + + [Test] + public void CreatePackageSpec_ProjectWideWarningProperties_RestoreMetadataHasProjectWideWarningProperties () + { + CreateProject ("MyProject", @"d:\projects\MyProject\MyProject.csproj"); + project.BaseIntermediateOutputPath = @"d:\projects\MyProject\obj".ToNativePath (); + AddTargetFramework ("netcoreapp1.0"); + + project.AddProperty ("TreatWarningsAsErrors", bool.TrueString); + project.AddProperty ("WarningsAsErrors", "NU1801"); + project.AddProperty ("NoWarn", "NU1701"); + + CreatePackageSpec (); + + Assert.IsTrue (spec.RestoreMetadata.ProjectWideWarningProperties.AllWarningsAsErrors); + Assert.IsTrue (spec.RestoreMetadata.ProjectWideWarningProperties.WarningsAsErrors.Contains (NuGet.Common.NuGetLogCode.NU1801)); + Assert.IsTrue (spec.RestoreMetadata.ProjectWideWarningProperties.NoWarn.Contains (NuGet.Common.NuGetLogCode.NU1701)); + } + + [Test] + public void CreatePackageSpec_TreatWarningsAsErrorsIsFalse_RestoreMetadataHasTreatWarningsAsErrorsSetToFalse () + { + CreateProject ("MyProject", @"d:\projects\MyProject\MyProject.csproj"); + project.BaseIntermediateOutputPath = @"d:\projects\MyProject\obj".ToNativePath (); + AddTargetFramework ("netcoreapp1.0"); + + project.AddProperty ("TreatWarningsAsErrors", bool.FalseString); + project.AddProperty ("WarningsAsErrors", "NU1801"); + project.AddProperty ("NoWarn", "NU1701"); + + CreatePackageSpec (); + + Assert.IsFalse (spec.RestoreMetadata.ProjectWideWarningProperties.AllWarningsAsErrors); + Assert.IsTrue (spec.RestoreMetadata.ProjectWideWarningProperties.WarningsAsErrors.Contains (NuGet.Common.NuGetLogCode.NU1801)); + Assert.IsTrue (spec.RestoreMetadata.ProjectWideWarningProperties.NoWarn.Contains (NuGet.Common.NuGetLogCode.NU1701)); + } } } diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageSpecCreator.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageSpecCreator.cs index 2b23939bee..cd236ff54a 100644 --- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageSpecCreator.cs +++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageSpecCreator.cs @@ -20,6 +20,7 @@ // limitations under the License. // // Based on parts of src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/MSBuildRestoreUtility.cs +// and src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Projects/LegacyPackageReferenceProject.cs using System; using System.Collections.Generic; @@ -95,13 +96,17 @@ namespace MonoDevelop.PackageManagement static ProjectRestoreMetadata CreateRestoreMetadata (PackageSpec packageSpec, IDotNetProject project, ISettings settings) { return new ProjectRestoreMetadata { + ConfigFilePaths = SettingsUtility.GetConfigFilePaths (settings).ToList (), + FallbackFolders = SettingsUtility.GetFallbackPackageFolders (settings).ToList (), PackagesPath = SettingsUtility.GetGlobalPackagesFolder (settings), ProjectStyle = ProjectStyle.PackageReference, ProjectPath = project.FileName, ProjectName = packageSpec.Name, ProjectUniqueName = project.FileName, + ProjectWideWarningProperties = GetWarningProperties (project), OutputPath = project.BaseIntermediateOutputPath, - OriginalTargetFrameworks = GetOriginalTargetFrameworks (project).ToList () + OriginalTargetFrameworks = GetOriginalTargetFrameworks (project).ToList (), + Sources = SettingsUtility.GetEnabledSources (settings).ToList () }; } @@ -367,5 +372,14 @@ namespace MonoDevelop.PackageManagement return new RuntimeGraph (runtimes, supports); } + + static WarningProperties GetWarningProperties (IDotNetProject project) + { + return MSBuildRestoreUtility.GetWarningProperties ( + project.EvaluatedProperties.GetValue ("TreatWarningsAsErrors"), + project.EvaluatedProperties.GetValue ("WarningsAsErrors"), + project.EvaluatedProperties.GetValue ("NoWarn") + ); + } } } |