Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions MobiFlight/Controllers/ControllerBindingService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public List<ControllerBinding> AnalyzeProjectBindings(Project project)
results.ForEach(b =>
{
// Only add if not already present (first occurrence wins)
if (!allResults.Any(existing => existing.OriginalController == b.OriginalController))
if (!allResults.Any(existing => existing.OriginalController.AreEqual(b.OriginalController)))
{
allResults.Add(b);
}
Expand Down Expand Up @@ -66,7 +66,7 @@ public virtual List<ControllerBinding> PerformAutoBinding(Project project)

foreach (var binding in results)
{
var bindingExists = allResults.FirstOrDefault(b => b.OriginalController == binding.OriginalController);
var bindingExists = allResults.FirstOrDefault(b => b.OriginalController.AreEqual(binding.OriginalController));
// Only add if not already present (first occurrence wins)
if (bindingExists != null) continue;

Expand All @@ -76,7 +76,7 @@ public virtual List<ControllerBinding> PerformAutoBinding(Project project)
// Update binding mappings for next config file
foreach (var mapping in serialMappings)
{
if (appliedBindingMappings.FirstOrDefault(b => b.BoundController == mapping.BoundController) != null) continue;
if (appliedBindingMappings.FirstOrDefault(b => b.BoundController.AreEqual(mapping.BoundController)) != null) continue;

appliedBindingMappings.Add(mapping);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,29 @@ public void AnalyzeProjectBindings_MultipleConfigFiles_AnalyzesAll()
Assert.AreEqual(ControllerBindingStatus.AutoBind, binding2.Status);
}

[TestMethod]
public void AnalyzeProjectBindings_MultipleConfigFileWithSameController_AnalyzesAll()
{
// Arrange
var project = new Project();
project.ConfigFiles.Add(CreateConfigFileWithController("Board1/ SN-111"));
project.ConfigFiles.Add(CreateConfigFileWithController("Board1/ SN-111"));

SetupConnectedControllers(new[]
{
("Board1", "SN-111"),
("Board2", "SN-333")
});

// Act
var result = service.AnalyzeProjectBindings(project);

// Assert
Assert.HasCount(1, result);
var binding1 = result.Find(b => b.OriginalController.Equals(SerialNumber.CreateController("Board1/ SN-111")));
Assert.AreEqual(ControllerBindingStatus.Match, binding1.Status);
}

[TestMethod]
public void PerformAutoBinding_MultipleConfigFiles_UpdatesAll()
{
Expand Down Expand Up @@ -597,6 +620,48 @@ public void AnalyzeProjectBindings_MixedControllerTypes_AnalyzesAll()

#endregion

#region Test with multiple configFiles in project
[TestMethod]
public void AnalyzeProjectBindings_MultipleConfigFiles_SameController_AutoBind()
{
// Arrange
var project = CreateProjectWithControllersAndMultipleConfigFiles(new[]
{
"X1-Pro/ SN-1111111111"
});

SetupConnectedController("X1-Pro", "SN-9876543210");

// Act
var result = service.AnalyzeProjectBindings(project);

// Assert
Assert.HasCount(1, result, "There should only be one controller binding");
var binding1 = result.Find(b => b.OriginalController.Equals(SerialNumber.CreateController("X1-Pro/ SN-1111111111")));
Assert.AreEqual(ControllerBindingStatus.AutoBind, binding1.Status);
}

[TestMethod]
public void AnalyzeProjectBindings_MultipleConfigFiles_SameController_Missing()
{
// Arrange
var project = CreateProjectWithControllersAndMultipleConfigFiles(new[]
{
"X1-Pro/ SN-1111111111"
});

SetupConnectedController("Other Controller", "JS-9876543210");

// Act
var result = service.AnalyzeProjectBindings(project);

// Assert
Assert.HasCount(1, result, "There should only be one controller binding");
var binding1 = result.Find(b => b.OriginalController.Equals(SerialNumber.CreateController("X1-Pro/ SN-1111111111")));
Assert.AreEqual(ControllerBindingStatus.Missing, binding1.Status);
}
#endregion

#region Helper Methods

private Project CreateProjectWithController(string moduleSerial)
Expand All @@ -613,6 +678,19 @@ private Project CreateProjectWithControllers(string[] moduleSerials)
return project;
}

private Project CreateProjectWithControllersAndMultipleConfigFiles(string[] moduleSerials)
{
var project = new Project();
var configFile = CreateConfigFileWithControllers(moduleSerials);
project.ConfigFiles.Add(configFile);

configFile = CreateConfigFileWithControllers(moduleSerials);
project.ConfigFiles.Add(configFile);

project.Sim = "msfs";
return project;
}

private ConfigFile CreateConfigFileWithController(string moduleSerial)
{
return CreateConfigFileWithControllers(new[] { moduleSerial });
Expand Down
Loading