diff --git a/MobiFlight/Controllers/ControllerBindingService.cs b/MobiFlight/Controllers/ControllerBindingService.cs index ecfd35fe4..c92ddd289 100644 --- a/MobiFlight/Controllers/ControllerBindingService.cs +++ b/MobiFlight/Controllers/ControllerBindingService.cs @@ -34,7 +34,7 @@ public List 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); } @@ -66,7 +66,7 @@ public virtual List 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; @@ -76,7 +76,7 @@ public virtual List 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); } diff --git a/MobiFlightUnitTests/MobiFlight/Controllers/ControllerBindingServiceTests.cs b/MobiFlightUnitTests/MobiFlight/Controllers/ControllerBindingServiceTests.cs index 889104818..6d1718764 100644 --- a/MobiFlightUnitTests/MobiFlight/Controllers/ControllerBindingServiceTests.cs +++ b/MobiFlightUnitTests/MobiFlight/Controllers/ControllerBindingServiceTests.cs @@ -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() { @@ -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) @@ -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 });