From 86a7a27f001c84c012247ca8419eccd41e257809 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Thu, 22 Oct 2026 02:29:45 -0700 Subject: [PATCH] Keep SolarXiao native power in external Room profile checks --- test/test_onboard_qspi_profiles.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/test/test_onboard_qspi_profiles.py b/test/test_onboard_qspi_profiles.py index a04ba6d71..d48b9b4e8 100644 --- a/test/test_onboard_qspi_profiles.py +++ b/test/test_onboard_qspi_profiles.py @@ -185,7 +185,13 @@ class OnboardQspiProfilesTest(unittest.TestCase): self.assertEqual(parents, ["env:" + profile.parent]) self.assertEqual(options.get("board"), profile.board) self.assertEqual(options.get("board"), parent.get("board")) - self.assertEqual(role_defines(options), role_defines(parent)) + expected_role = role_defines(parent) + if profile in PREEXISTING_SOLAR_ROOMS: + # Canonical SolarXiao Room OTA adds native power support; its + # internal-only compatibility/recovery parent keeps legacy behavior. + self.assertNotIn("MESH_SOLARXIAO_POWER", expected_role) + expected_role["MESH_SOLARXIAO_POWER"] = "1" + self.assertEqual(role_defines(options), expected_role) self.assertEqual(variant_includes(options), {"variants/" + profile.variant}) self.assertEqual(variant_includes(options), variant_includes(parent)) self.assertEqual(options.get("board_build.ldscript"), profile.linker) @@ -225,6 +231,24 @@ class OnboardQspiProfilesTest(unittest.TestCase): self.assertNotIn(name, defines) self.assertNotEqual(profile.target, profile.parent) + def test_solar_room_role_override_rejects_missing_wrong_or_unrelated_changes(self): + for profile, suffix in ( + (PREEXISTING_SOLAR_ROOMS[0], "-UMESH_SOLARXIAO_POWER"), + (PREEXISTING_SOLAR_ROOMS[1], "-DMESH_SOLARXIAO_POWER=0"), + (PREEXISTING_SOLAR_ROOMS[0], "-DMESH_SOLARXIAO_POWER=2"), + (PREEXISTING_SOLAR_ROOMS[0], "-DUNRELATED_ROLE_CHANGE=1"), + (SUPPORTED[0], "-DMESH_SOLARXIAO_POWER=1"), + ): + with self.subTest(target=profile.target, suffix=suffix): + options = self.options(profile.target) + original = options["build_flags"] + try: + options["build_flags"] = text_option(original) + "\n" + suffix + with self.assertRaises(AssertionError): + self.assert_external_contract(profile) + finally: + options["build_flags"] = original + def test_linker_files_keep_the_checked_application_geometry(self): for linker, start, end, maximum_size in ( (V6, 0x26000, 0xED000, 815104),