diff --git a/Directory.Packages.props b/Directory.Packages.props index e772dbb..e45cef3 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -11,7 +11,7 @@ - + diff --git a/build.cake b/build.cake index 7eb2060..ab02548 100644 --- a/build.cake +++ b/build.cake @@ -1,5 +1,5 @@ // Load the recipe -#load nuget:?package=NUnit.Cake.Recipe&version=2.0.0-beta.4.11 +#load nuget:?package=NUnit.Cake.Recipe&version=2.0.0-beta.5 // Comment out above line and uncomment below for local tests of recipe changes //#load ../NUnit.Cake.Recipe/recipe/*.cake diff --git a/src/NUnit.Engine.Api.Tests/TestPackageTests.cs b/src/NUnit.Engine.Api.Tests/TestPackageTests.cs index 2c10c3b..d93eb95 100644 --- a/src/NUnit.Engine.Api.Tests/TestPackageTests.cs +++ b/src/NUnit.Engine.Api.Tests/TestPackageTests.cs @@ -1,6 +1,8 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt using System.IO; +using System.Security.Cryptography.X509Certificates; +using NUnit.Common; using NUnit.Framework; namespace NUnit.Engine.Api @@ -15,6 +17,11 @@ public class TestPackageTests public TestPackageTests(string fileNames) { _fileNames = fileNames.Split(','); + } + + [SetUp] + public void CreatePackage() + { _package = new TestPackage(_fileNames); } @@ -46,11 +53,200 @@ public void HasSubPackageForEachFile() } } - //[Test] + [Test] public void SubPackagesHaveNoSubPackages() { foreach (TestPackage subPackage in _package.SubPackages) Assert.That(subPackage.SubPackages.Count, Is.EqualTo(0)); } + + [Test] + public void SubPackagesHaveNoSettingsInitially() + { + foreach (TestPackage subPackage in _package.SubPackages) + Assert.That(subPackage.Settings.Count, Is.EqualTo(0)); + } + + private static readonly PackageSetting MAX_AGENTS_42 = SettingDefinitions.MaxAgents.WithValue(42); + private static readonly PackageSetting MAX_AGENTS_99 = SettingDefinitions.MaxAgents.WithValue(99); + + [Test] + public void AddStandardSettingToPackage([Values(false, true)] bool recursive) + { + _package.AddSetting(MAX_AGENTS_99, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting(MAX_AGENTS_99.Name), Is.EqualTo(99)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting(MAX_AGENTS_99.Name), Is.EqualTo(99)); + } + } + + [TestCase("setting1", "value1", false)] + [TestCase("setting1", "value1", true)] + public void AddCustomStringSettingToPackage(string settingName, string settingValue, bool recursive) + { + _package.AddSetting(settingName, settingValue, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting(settingName), Is.EqualTo(settingValue)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting(settingName), Is.EqualTo(settingValue)); + } + } + + [Test] + public void AddCustomBooleanSettingToPackage([Values(false, true)] bool recursive) + { + _package.AddSetting("setting1", true, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo(true)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo(true)); + } + } + + [Test] + public void AddCustomIntSettingToPackage([Values(false, true)] bool recursive) + { + _package.AddSetting("setting1", 42, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo(42)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo(42)); + } + } + + [Test] + public void ApplyStandardSettingToPackage([Values(false, true)] bool recursive) + { + _package.ApplySetting(MAX_AGENTS_99, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting(MAX_AGENTS_99.Name), Is.EqualTo(99)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting(MAX_AGENTS_99.Name), Is.EqualTo(99)); + } + + _package.ApplySetting(MAX_AGENTS_42, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting(MAX_AGENTS_42.Name), Is.EqualTo(42)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting(MAX_AGENTS_42.Name), Is.EqualTo(42)); + } + } + + [Test] + public void ApplyCustomStringSettingToPackage([Values(false, true)] bool recursive) + { + _package.ApplySetting("setting1", "value1", recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo("value1")); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo("value1")); + } + + _package.ApplySetting("setting1", "value2", recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo("value2")); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo("value2")); + } + } + + [Test] + public void ApplyCustomBooleanSettingToPackage([Values(false, true)] bool recursive) + { + _package.ApplySetting("setting1", true, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo(true)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo(true)); + } + + _package.ApplySetting("setting1", false, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo(false)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo(false)); + } + } + + [Test] + public void ApplyCustomIntSettingToPackage([Values(false, true)] bool recursive) + { + _package.ApplySetting("setting1", 99, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo(99)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo(99)); + } + + _package.ApplySetting("setting1", 42, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + Assert.That(_package.Settings.GetSetting("setting1"), Is.EqualTo(42)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(recursive ? 1 : 0)); + if (recursive) + Assert.That(subPackage.Settings.GetSetting("setting1"), Is.EqualTo(42)); + } + } + + [Test] + public void RemoveStandardSettingFromPackage([Values(false, true)] bool recursive) + { + _package.AddSetting(MAX_AGENTS_99, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + _package.RemoveSetting(MAX_AGENTS_99.Name, recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(0)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(0)); + } + } + + [Test] + public void RemoveCustomSettingFromPackage([Values(false, true)] bool recursive) + { + _package.AddSetting("setting1", "value1", recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(1)); + _package.RemoveSetting("setting1", recursive); + Assert.That(_package.Settings.Count, Is.EqualTo(0)); + foreach (TestPackage subPackage in _package.SubPackages) + { + Assert.That(subPackage.Settings.Count, Is.EqualTo(0)); + } + } } } diff --git a/src/NUnit.Engine.Api/NUnit.Engine.Api.csproj b/src/NUnit.Engine.Api/NUnit.Engine.Api.csproj index 5b1ebfc..9faa687 100644 --- a/src/NUnit.Engine.Api/NUnit.Engine.Api.csproj +++ b/src/NUnit.Engine.Api/NUnit.Engine.Api.csproj @@ -1,19 +1,23 @@  - - NUnit.Engine - net462;netstandard2.0 - true - + + NUnit.Engine + net462;netstandard2.0 + true + - - NUnit.Engine.Api - NUnit Engine API ($(TargetFramework)) - Defines the interfaces used by runners and engine extensions to access the NUnit Engine. Not normally needed by direct users who simply want to run tests. - + + + + + + NUnit.Engine.Api + NUnit Engine API ($(TargetFramework)) + Defines the interfaces used by runners and engine extensions to access the NUnit Engine. Not normally needed by direct users who simply want to run tests. + - - - + + + diff --git a/src/NUnit.Engine.Api/PackageSettings.cs b/src/NUnit.Engine.Api/PackageSettings.cs index 0d7e509..48bb2b1 100644 --- a/src/NUnit.Engine.Api/PackageSettings.cs +++ b/src/NUnit.Engine.Api/PackageSettings.cs @@ -65,7 +65,7 @@ public T GetValueOrDefault(SettingDefinition definition) /// Adds a setting to the list directly. /// /// A PackageSetting instance - public void Add(PackageSetting setting) => _settings.Add(setting.Name, setting); + internal void Add(PackageSetting setting) => _settings.Add(setting.Name, setting); /// /// Creates and adds a setting to the list, specified by the name and a string value. @@ -73,7 +73,7 @@ public T GetValueOrDefault(SettingDefinition definition) /// /// The name of the setting. /// The corresponding value to set. - public void Add(string name, string value) + internal void Add(string name, string value) { var definition = SettingDefinitions.Lookup(name); @@ -90,7 +90,7 @@ public void Add(string name, string value) /// /// The name of the setting. /// The corresponding value to set. - public void Add(string name, bool value) + internal void Add(string name, bool value) { var definition = SettingDefinitions.Lookup(name); @@ -106,7 +106,7 @@ public void Add(string name, bool value) /// /// The name of the setting. /// The corresponding value to set. - public void Add(string name, int value) + internal void Add(string name, int value) { var definition = SettingDefinitions.Lookup(name); @@ -120,14 +120,14 @@ public void Add(string name, int value) /// /// Adds or replaces a setting to the list. /// - public void Set(PackageSetting setting) => _settings[setting.Name] = setting; + internal void Set(PackageSetting setting) => _settings[setting.Name] = setting; /// /// Adds or replaces a setting to the list. /// /// The name of the setting. /// The corresponding value to set. - public void Set(string name, T value) + internal void Set(string name, T value) where T : notnull { Set(new PackageSetting(name, value)); @@ -137,7 +137,7 @@ public void Set(string name, T value) /// Remove a setting /// /// The setting to remove - public void Remove(SettingDefinition setting) + internal void Remove(SettingDefinition setting) { _settings.Remove(setting.Name); } @@ -146,7 +146,7 @@ public void Remove(SettingDefinition setting) /// Remove a setting /// /// The name of the setting to remove - public void Remove(string settingName) + internal void Remove(string settingName) { _settings.Remove(settingName); } diff --git a/src/NUnit.Engine.Api/TestPackage.cs b/src/NUnit.Engine.Api/TestPackage.cs index 085cb99..1e38790 100644 --- a/src/NUnit.Engine.Api/TestPackage.cs +++ b/src/NUnit.Engine.Api/TestPackage.cs @@ -137,7 +137,7 @@ public void AddSubPackage(TestPackage subPackage) foreach (var setting in Settings) if (!subPackage.Settings.HasSetting(setting.Name)) - subPackage.AddSetting(setting); + subPackage.AddSetting(setting, true); } /// @@ -154,9 +154,10 @@ public TestPackage AddSubPackage(string packageName) } /// - /// Add a setting to a package and all of its subpackages. + /// Add a setting to a package and optionally to all of its subpackages. /// /// The setting to be added + /// A flag indicating whether the setting should be added to all subpackages recursively /// /// Once a package is created, subpackages may have been created /// as well. If you add a setting directly to the Settings dictionary @@ -164,18 +165,22 @@ public TestPackage AddSubPackage(string packageName) /// used when the settings are intended to be reflected to all the /// subpackages under the package. /// - public void AddSetting(PackageSetting setting) + public void AddSetting(PackageSetting setting, bool recursive) { Settings.Add(setting); - foreach (var subPackage in SubPackages) - subPackage.AddSetting(setting); + if (recursive) + { + foreach (var subPackage in SubPackages) + subPackage.AddSetting(setting, true); + } } /// - /// Create and add a custom string setting to a package and all of its subpackages. + /// Create and add a custom string setting to a package and optionally to all of its subpackages. /// /// The name of the setting. /// The corresponding value to set. + /// A flag indicating whether the setting should be added to all subpackages recursively /// /// Once a package is created, subpackages may have been created /// as well. If you add a setting directly to the Settings dictionary @@ -183,16 +188,17 @@ public void AddSetting(PackageSetting setting) /// used when the settings are intended to be reflected to all the /// subpackages under the package. /// - public void AddSetting(string name, string value) + public void AddSetting(string name, string value, bool recursive) { - AddSetting(new PackageSetting(name, value)); + AddSetting(new PackageSetting(name, value), recursive); } /// - /// Create and add a custom boolean setting to a package and all of its subpackages. + /// Create and add a custom boolean setting to a package and optionally to all of its subpackages. /// /// The name of the setting. /// The corresponding value to set. + /// A flag indicating whether the setting should be added to all subpackages recursively /// /// Once a package is created, subpackages may have been created /// as well. If you add a setting directly to the Settings dictionary @@ -200,16 +206,17 @@ public void AddSetting(string name, string value) /// used when the settings are intended to be reflected to all the /// subpackages under the package. /// - public void AddSetting(string name, bool value) + public void AddSetting(string name, bool value, bool recursive) { - AddSetting(new PackageSetting(name, value)); + AddSetting(new PackageSetting(name, value), recursive); } /// - /// Create and add a custom int setting to a package and all of its subpackages. + /// Create and add a custom int setting to a package and optionally to all of its subpackages. /// /// The name of the setting. /// The corresponding value to set. + /// A flag indicating whether the setting should be added to all subpackages recursively /// /// Once a package is created, subpackages may have been created /// as well. If you add a setting directly to the Settings dictionary @@ -217,9 +224,82 @@ public void AddSetting(string name, bool value) /// used when the settings are intended to be reflected to all the /// subpackages under the package. /// - public void AddSetting(string name, int value) + public void AddSetting(string name, int value, bool recursive) + { + AddSetting(new PackageSetting(name, value), recursive); + } + + /// + /// Apply a setting to a package and optionally to all of its subpackages. + /// + /// The setting to be applied + /// A flag indicating whether the setting should be applied to all subpackages recursively + public void ApplySetting(PackageSetting setting, bool recursive) + { + Settings.Set(setting); + if (recursive) + { + foreach (var subPackage in SubPackages) + subPackage.ApplySetting(setting, true); + } + } + + /// + /// Apply a custom string setting to a package and optionally to all of its subpackages. + /// + /// The name of the setting. + /// The corresponding value to set. + /// A flag indicating whether the setting should be added to all subpackages recursively + public void ApplySetting(string name, string value, bool recursive) + { + ApplySetting(new PackageSetting(name, value), recursive); + } + + /// + /// Create and add a custom boolean setting to a package and optionally to all of its subpackages. + /// + /// The name of the setting. + /// The corresponding value to set. + /// A flag indicating whether the setting should be added to all subpackages recursively + public void ApplySetting(string name, bool value, bool recursive) { - AddSetting(new PackageSetting(name, value)); + ApplySetting(new PackageSetting(name, value), recursive); + } + + /// + /// Create and add a custom int setting to a package and optionally to all of its subpackages. + /// + /// The name of the setting. + /// The corresponding value to set. + /// A flag indicating whether the setting should be added to all subpackages recursively + public void ApplySetting(string name, int value, bool recursive) + { + ApplySetting(new PackageSetting(name, value), recursive); + } + + /// + /// Remove a setting from this package and, optionally, from all subpackages. + /// + /// The setting to remove. + /// If true, remove the setting recursively from all subpackages. + public void RemoveSetting(PackageSetting setting, bool recursive) + { + RemoveSetting(setting.Name, recursive); + } + + /// + /// Remove a setting from this package and, optionally, from all subpackages. + /// + /// The name of the setting to remove. + /// If true, remove the setting recursively from all subpackages. + public void RemoveSetting(string name, bool recursive) + { + Settings.Remove(name); + if (recursive) + { + foreach (var subPackage in SubPackages) + subPackage.RemoveSetting(name, true); + } } ///