Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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_MultipleConfigFiles_WithSameController_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