Skip to content

Commit 2c2f8b8

Browse files
author
Wolff, Roald (DI FA HMI EE PRC3)
committed
Add support to differ between top level and sub package settings
1 parent 328c1f0 commit 2c2f8b8

File tree

9 files changed

+135
-59
lines changed

9 files changed

+135
-59
lines changed

src/GuiRunner/TestCentric.Gui.Tests/Dialogs/SettingsDialogBaseTests.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,33 @@ namespace TestCentric.Gui.Dialogs
1515
internal class SettingsDialogBaseTests
1616
{
1717
[Test]
18-
public void ApplySettings_IsAppliedToProject()
18+
public void ApplySettings_SubPackageChanges_AreAppliedToProject()
1919
{
2020
// 1. Arrange
2121
ITestModel model = Substitute.For<ITestModel>();
2222
TestCentricProject project = new TestCentricProject(model);
2323
model.TestCentricProject.Returns(project);
2424

2525
SettingsDialogBase settingsDialog = new SettingsDialogBase(null, model);
26-
settingsDialog.PackageSettingChanges.Add(SettingDefinitions.DebugTests.WithValue(true));
26+
settingsDialog.SubPackageSettingChanges.Add(SettingDefinitions.DebugTests.WithValue(true));
27+
28+
// 2. Act
29+
settingsDialog.ApplySettings();
30+
31+
// 3. Assert
32+
Assert.That(project.Settings.HasSetting(SettingDefinitions.DebugTests.Name), Is.True);
33+
}
34+
35+
[Test]
36+
public void ApplySettings_TopLevelPackageChanges_AreAppliedToProject()
37+
{
38+
// 1. Arrange
39+
ITestModel model = Substitute.For<ITestModel>();
40+
TestCentricProject project = new TestCentricProject(model);
41+
model.TestCentricProject.Returns(project);
42+
43+
SettingsDialogBase settingsDialog = new SettingsDialogBase(null, model);
44+
settingsDialog.TopLevelPackageSettingChanges.Add(SettingDefinitions.DebugTests.WithValue(true));
2745

2846
// 2. Act
2947
settingsDialog.ApplySettings();
@@ -41,7 +59,8 @@ public void ApplySettings_ProjectIsNull_SettingIsNotApplied()
4159
model.TestCentricProject.Returns((TestCentricProject)null);
4260

4361
SettingsDialogBase settingsDialog = new SettingsDialogBase(null, model);
44-
settingsDialog.PackageSettingChanges.Add(SettingDefinitions.DebugTests.WithValue(true));
62+
settingsDialog.TopLevelPackageSettingChanges.Add(SettingDefinitions.DebugTests.WithValue(true));
63+
settingsDialog.SubPackageSettingChanges.Add(SettingDefinitions.DebugTests.WithValue(true));
4564

4665
// 2. Act
4766
settingsDialog.ApplySettings();

src/GuiRunner/TestCentric.Gui.Tests/Presenters/AgentSelectionControllerTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ public void UpdateMenuItems_SpecificAgentIsSelected_ChecksAgentMenuItem()
320320
"NUnit.TestAdapter.Agent2"
321321
});
322322

323-
project.AddSetting(SettingDefinitions.SelectedAgentName.WithValue("NUnit.TestAdapter.Agent2"));
323+
project.SetSubPackageSetting(SettingDefinitions.SelectedAgentName.WithValue("NUnit.TestAdapter.Agent2"));
324324

325325
_model.AvailableAgents.Returns(new List<string>
326326
{
@@ -479,8 +479,8 @@ public void ClickingDefaultMenuItem_RemovesAgentSettings()
479479
// 1. Arrange
480480
var project = new TestCentricProject(_model);
481481
_model.TestCentricProject.Returns(project);
482-
project.AddSetting(SettingDefinitions.SelectedAgentName.WithValue("SomeAgent"));
483-
project.AddSetting(SettingDefinitions.RequestedAgentName.WithValue("SomeAgent"));
482+
project.SetSubPackageSetting(SettingDefinitions.SelectedAgentName.WithValue("SomeAgent"));
483+
project.SetSubPackageSetting(SettingDefinitions.RequestedAgentName.WithValue("SomeAgent"));
484484

485485
_model.GetAgentsForPackage(project).Returns(new List<string>
486486
{

src/GuiRunner/TestCentric.Gui/Dialogs/SettingsDialogBase.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,16 @@ public SettingsDialogBase(TestCentricPresenter presenter, ITestModel model) : th
4444
Presenter = presenter;
4545
Model = model;
4646
Settings = model.Settings;
47-
PackageSettingChanges = new List<PackageSetting>();
47+
SubPackageSettingChanges = new List<PackageSetting>();
48+
TopLevelPackageSettingChanges = new List<PackageSetting>();
4849
}
4950

5051
protected override void OnActivated(EventArgs e)
5152
{
5253
base.OnActivated(e);
5354

54-
PackageSettingChanges.Clear();
55+
SubPackageSettingChanges.Clear();
56+
TopLevelPackageSettingChanges.Clear();
5557
}
5658

5759
public SettingsDialogBase()
@@ -144,7 +146,9 @@ private void InitializeComponent()
144146

145147
public IUserSettings Settings { get; }
146148

147-
public IList<PackageSetting> PackageSettingChanges { get; }
149+
public IList<PackageSetting> SubPackageSettingChanges { get; }
150+
151+
public IList<PackageSetting> TopLevelPackageSettingChanges { get; }
148152

149153
public SettingsPageCollection SettingsPages
150154
{
@@ -160,11 +164,11 @@ public void ApplySettings()
160164
if (page.SettingsLoaded)
161165
page.ApplySettings();
162166

163-
foreach(PackageSetting setting in PackageSettingChanges)
164-
{
165-
Model.TestCentricProject?.RemoveSetting(setting.Name);
166-
Model.TestCentricProject?.AddSetting(setting);
167-
}
167+
foreach(PackageSetting setting in SubPackageSettingChanges)
168+
Model.TestCentricProject?.SetSubPackageSetting(setting);
169+
170+
foreach (PackageSetting setting in TopLevelPackageSettingChanges)
171+
Model.TestCentricProject?.SetTopLevelSetting(setting);
168172
}
169173
#endregion
170174

@@ -182,7 +186,7 @@ private void okButton_Click(object sender, System.EventArgs e)
182186

183187
// NOTE: Currently, all changes require reload. If this changes
184188
// we will need to add some filtering here.
185-
if (Model.IsProjectLoaded && PackageSettingChanges.Count > 0)
189+
if (Model.IsProjectLoaded && (SubPackageSettingChanges.Count > 0 || TopLevelPackageSettingChanges.Count > 0))
186190
{
187191
if (MessageDisplay.YesNo("Some changes will only take effect when you reload the test project. Do you want to reload now?"))
188192
_reloadProjectOnClose = true;

src/GuiRunner/TestCentric.Gui/Presenters/AgentSelectionController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ private void OnAgentMenuItemClicked(object sender, EventArgs e)
9393
string itemTag = item.Tag as string;
9494
if (itemTag is not null && itemTag != "DEFAULT")
9595
{
96-
_model.TestCentricProject.AddSetting(SettingDefinitions.SelectedAgentName.WithValue(itemTag));
97-
_model.TestCentricProject.AddSetting(SettingDefinitions.RequestedAgentName.WithValue(itemTag));
96+
_model.TestCentricProject.SetSubPackageSetting(SettingDefinitions.SelectedAgentName.WithValue(itemTag));
97+
_model.TestCentricProject.SetSubPackageSetting(SettingDefinitions.RequestedAgentName.WithValue(itemTag));
9898
}
9999

100100
// Even though the _model has a Reload method, we cannot use it because Reload

src/GuiRunner/TestCentric.Gui/SettingsPages/AdvancedLoaderSettingsPage.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,19 +258,19 @@ public override void ApplySettings()
258258
int numAgents = numberOfAgentsCheckBox.Checked
259259
? (int)numberOfAgentsUpDown.Value : 0;
260260
if (numAgents != Settings.Engine.Agents)
261-
PackageSettingChanges.Add(SettingDefinitions.MaxAgents.WithValue(numAgents));
261+
TopLevelPackageSettingChanges.Add(SettingDefinitions.MaxAgents.WithValue(numAgents));
262262
Settings.Engine.Agents = numAgents;
263263

264264
bool shadowCopyFiles = !disableShadowCopyCheckBox.Checked;
265265
if (shadowCopyFiles != Settings.Engine.ShadowCopyFiles)
266-
PackageSettingChanges.Add(SettingDefinitions.ShadowCopyFiles.WithValue(shadowCopyFiles));
266+
SubPackageSettingChanges.Add(SettingDefinitions.ShadowCopyFiles.WithValue(shadowCopyFiles));
267267
Settings.Engine.ShadowCopyFiles = shadowCopyFiles;
268268

269269
string principalPolicy = principalPolicyCheckBox.Checked
270270
? (string)principalPolicyListBox.SelectedItem
271271
: nameof(PrincipalPolicy.UnauthenticatedPrincipal);
272272
if (principalPolicy != Settings.Engine.PrincipalPolicy)
273-
PackageSettingChanges.Add(SettingDefinitions.PrincipalPolicy.WithValue(principalPolicy));
273+
SubPackageSettingChanges.Add(SettingDefinitions.PrincipalPolicy.WithValue(principalPolicy));
274274
Settings.Engine.PrincipalPolicy = principalPolicy;
275275

276276
Settings.Engine.SetPrincipalPolicy = principalPolicyCheckBox.Checked;

src/GuiRunner/TestCentric.Gui/SettingsPages/SettingsPage.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ public IMessageDisplay MessageDisplay
9090
protected ITestModel Model { get; private set; }
9191
protected IUserSettings Settings { get; private set; }
9292

93-
protected IList<PackageSetting> PackageSettingChanges { get; private set; }
93+
protected IList<PackageSetting> SubPackageSettingChanges { get; private set; }
94+
protected IList<PackageSetting> TopLevelPackageSettingChanges { get; private set; }
9495

9596
#endregion
9697

@@ -135,7 +136,8 @@ protected override void OnLoad(EventArgs e)
135136

136137
Model = dlg.Model;
137138
Settings = dlg.Settings;
138-
PackageSettingChanges = dlg.PackageSettingChanges;
139+
SubPackageSettingChanges = dlg.SubPackageSettingChanges;
140+
TopLevelPackageSettingChanges = dlg.TopLevelPackageSettingChanges;
139141

140142
LoadSettings();
141143
}

src/GuiRunner/TestModel.Tests/CreateNewProjectTests.cs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
namespace TestCentric.Gui.Model
1616
{
17+
using NUnit.Engine;
18+
1719
public class CreateNewProjectTests
1820
{
1921
private TestModel _model;
@@ -41,17 +43,21 @@ public void PackageContainsOneSubPackagePerTestFile(params string[] testFiles)
4143
Assert.That(_model.TestCentricProject.TestFiles, Is.EqualTo(testFiles));
4244
}
4345

44-
// TODO: Remove? Use and test fluent methods?
45-
[TestCase(nameof(SettingDefinitions.RequestedRuntimeFramework), "net-2.0")]
46-
[TestCase(nameof(SettingDefinitions.MaxAgents), 8)]
47-
[TestCase(nameof(SettingDefinitions.ShadowCopyFiles), false)]
48-
public void PackageReflectsPackageSettings(string key, object value)
46+
private static TestCaseData[] PackageSettingTestCases = new TestCaseData[]
47+
{
48+
new TestCaseData(SettingDefinitions.RequestedFrameworkName.WithValue("net-2.0")),
49+
new TestCaseData(SettingDefinitions.MaxAgents.WithValue(8)),
50+
new TestCaseData(SettingDefinitions.ShadowCopyFiles.WithValue(false)),
51+
};
52+
53+
[TestCaseSource(nameof(PackageSettingTestCases))]
54+
public void PackageReflectsPackageSettings(PackageSetting setting)
4955
{
5056
var package = _model.CreateNewProject(new[] { "my.dll" });
51-
package.AddSetting(key, value);
57+
package.SetTopLevelSetting(setting);
5258

53-
Assert.That(package.Settings.HasSetting(key));
54-
Assert.That(package.Settings.GetSetting(key), Is.EqualTo(value));
59+
Assert.That(package.Settings.HasSetting(setting.Name));
60+
Assert.That(package.Settings.GetSetting(setting.Name), Is.EqualTo(setting.Value));
5561
}
5662

5763
// TODO: Remove? Use and test fluent methods?
@@ -64,8 +70,7 @@ public void PackageReflectsTestParameters()
6470
{ "parm2", "value2" }
6571
};
6672
var package = _model.CreateNewProject(new[] { "my.dll" });
67-
package.AddSetting("TestParametersDictionary", testParms);
68-
73+
package.SetTopLevelSetting(SettingDefinitions.TestParametersDictionary.WithValue(testParms));
6974
Assert.That(package.Settings.HasSetting("TestParametersDictionary"));
7075
var parms = package.Settings.GetSetting("TestParametersDictionary") as IDictionary<string, string>;
7176
Assert.That(parms, Is.Not.Null);

src/GuiRunner/TestModel.Tests/TestCentricProjectTests.cs

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,39 @@ public void IsDirty_NewProject_IsFalse()
133133
}
134134

135135
[Test]
136-
public void IsDirty_AfterAddSetting_IsTrue()
136+
public void IsDirty_AfterSetTopLevelSetting_IsTrue()
137137
{
138138
// 1. Arrange
139139
TestCentricProject project = new TestCentricProject(_model);
140140

141141
// 2. Act
142-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
142+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
143+
144+
// 3. Assert
145+
Assert.That(project.IsDirty, Is.True);
146+
}
147+
148+
[Test]
149+
public void IsDirty_AfterRemoveSetting_IsTrue()
150+
{
151+
// 1. Arrange
152+
TestCentricProject project = new TestCentricProject(_model);
153+
154+
// 2. Act
155+
project.RemoveSetting(SettingDefinitions.DebugTests.Name);
156+
157+
// 3. Assert
158+
Assert.That(project.IsDirty, Is.True);
159+
}
160+
161+
[Test]
162+
public void IsDirty_AfterSetSubPackageSetting_IsTrue()
163+
{
164+
// 1. Arrange
165+
TestCentricProject project = new TestCentricProject(_model);
166+
167+
// 2. Act
168+
project.SetSubPackageSetting(SettingDefinitions.DebugTests.WithValue(true));
143169

144170
// 3. Assert
145171
Assert.That(project.IsDirty, Is.True);
@@ -152,7 +178,7 @@ public void IsDirty_AfterAddPackageSetting_IsTrue()
152178
TestCentricProject project = new TestCentricProject(_model);
153179

154180
// 2. Act
155-
project.AddSetting(SettingDefinitions.DebugTests.WithValue(true));
181+
project.SetSubPackageSetting(SettingDefinitions.DebugTests.WithValue(true));
156182

157183
// 3. Assert
158184
Assert.That(project.IsDirty, Is.True);
@@ -190,7 +216,7 @@ public void IsDirty_AfterSave_IsFalse()
190216
{
191217
// 1. Arrange
192218
TestCentricProject project = new TestCentricProject(_model);
193-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
219+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
194220
Assert.That(project.IsDirty, Is.True);
195221

196222
// 2. Act
@@ -205,10 +231,10 @@ public void IsDirty_AfterLoad_IsFalse()
205231
{
206232
// 1. Arrange
207233
TestCentricProject project = new TestCentricProject(_model);
208-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
234+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
209235
project.SaveAs("TestCentricTestProject.tcproj");
210236

211-
project.AddSetting(SettingDefinitions.MaxAgents.Name, 5);
237+
project.SetTopLevelSetting(SettingDefinitions.MaxAgents.WithValue(5));
212238
Assert.That(project.IsDirty, Is.True);
213239

214240
// 2. Act
@@ -237,13 +263,27 @@ public void AddSetting_AddsSettingToProject()
237263
}
238264

239265
[Test]
240-
public void AddPackageSetting_AddsSettingToProject()
266+
public void SetTopLevelSetting_Setting_IsSetInProject()
241267
{
242268
// 1. Arrange
243269
TestCentricProject project = new TestCentricProject(_model);
244270

245271
// 2. Act
246-
project.AddSetting(SettingDefinitions.DebugTests.WithValue(true));
272+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
273+
274+
// 3. Assert
275+
Assert.That(project.Settings.HasSetting(SettingDefinitions.DebugTests.Name), Is.True);
276+
Assert.That(project.Settings.GetSetting(SettingDefinitions.DebugTests.Name), Is.EqualTo(true));
277+
}
278+
279+
[Test]
280+
public void SetSubPackageSetting_Setting_IsSetInProject()
281+
{
282+
// 1. Arrange
283+
TestCentricProject project = new TestCentricProject(_model);
284+
285+
// 2. Act
286+
project.SetSubPackageSetting(SettingDefinitions.DebugTests.WithValue(true));
247287

248288
// 3. Assert
249289
Assert.That(project.Settings.HasSetting(SettingDefinitions.DebugTests.Name), Is.True);
@@ -272,7 +312,7 @@ public void RemoveSetting_ByName_RemovesSettingFromProject()
272312
{
273313
// 1. Arrange
274314
TestCentricProject project = new TestCentricProject(_model);
275-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
315+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
276316
Assert.That(project.Settings.HasSetting(SettingDefinitions.DebugTests.Name), Is.True);
277317

278318
// 2. Act
@@ -287,7 +327,7 @@ public void RemoveSetting_ByDefinition_RemovesSettingFromProject()
287327
{
288328
// 1. Arrange
289329
TestCentricProject project = new TestCentricProject(_model);
290-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
330+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
291331
Assert.That(project.Settings.HasSetting(SettingDefinitions.DebugTests.Name), Is.True);
292332

293333
// 2. Act
@@ -377,7 +417,7 @@ public void SaveAs_CreatesFileWithProjectPath()
377417
{
378418
// 1. Arrange
379419
TestCentricProject project = new TestCentricProject(_model);
380-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
420+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
381421

382422
// 2. Act
383423
project.SaveAs("TestCentricTestProject.tcproj");
@@ -395,7 +435,7 @@ public void Save_UpdatesExistingFile()
395435
project.SaveAs("TestCentricTestProject.tcproj");
396436

397437
// 2. Act
398-
project.AddSetting(SettingDefinitions.MaxAgents.Name, 5);
438+
project.SetTopLevelSetting(SettingDefinitions.MaxAgents.WithValue(5));
399439
project.Save();
400440

401441
// 3. Assert
@@ -408,7 +448,7 @@ public void Load_SavedProject_SettingsAreRestored()
408448
{
409449
// 1. Arrange
410450
TestCentricProject project = new TestCentricProject(_model);
411-
project.AddSetting(SettingDefinitions.DebugTests.Name, true);
451+
project.SetTopLevelSetting(SettingDefinitions.DebugTests.WithValue(true));
412452
project.SaveAs("TestCentricTestProject.tcproj");
413453

414454
// 2. Act

0 commit comments

Comments
 (0)