examples: Sort targets and modifiers when printing (#38366)

* examples: Sort targets and modifiers when printing

Signed-off-by: Maciej Grela <m.grela@samsung.com>

* examples: Fix target enumeration tests

Signed-off-by: Maciej Grela <m.grela@samsung.com>

* tests: fix whitespace

Signed-off-by: Maciej Grela <m.grela@samsung.com>

---------

Signed-off-by: Maciej Grela <m.grela@samsung.com>
diff --git a/scripts/build/build/target.py b/scripts/build/build/target.py
index b1435f0..a2dad06 100644
--- a/scripts/build/build/target.py
+++ b/scripts/build/build/target.py
@@ -276,11 +276,11 @@
         result = self.name
         for fixed in self.fixed_targets:
             if len(fixed) > 1:
-                result += '-{' + ",".join(map(lambda x: x.name, fixed)) + '}'
+                result += '-{' + ",".join(sorted(map(lambda x: x.name, fixed))) + '}'
             else:
                 result += '-' + fixed[0].name
 
-        for modifier in self.modifiers:
+        for modifier in sorted(self.modifiers, key=lambda m: m.name):
             result += f"[-{modifier.name}]"
 
         return result
diff --git a/scripts/build/build/test_target.py b/scripts/build/build/test_target.py
index 2ade0e3..d28932e 100755
--- a/scripts/build/build/test_target.py
+++ b/scripts/build/build/test_target.py
@@ -35,7 +35,8 @@
             TargetPart('bar', bar=2),
         ])
 
-        self.assertEqual(t.HumanString(), "fake-{foo,bar}")
+        # targets get sorted alphabetically for better readability
+        self.assertEqual(t.HumanString(), "fake-{bar,foo}")
 
         self.assertIsNotNone(t.StringIntoTargetParts('fake-foo'))
         self.assertIsNotNone(t.StringIntoTargetParts('fake-bar'))
@@ -60,7 +61,7 @@
 
         self.assertEqual(
             t.HumanString(),
-            "fake-{foo,bar}-{1,2,3}-{1,2,3}"
+            "fake-{bar,foo}-{1,2,3}-{1,2,3}"
         )
 
         self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-1-2'))
@@ -92,7 +93,7 @@
 
         self.assertEqual(
             t.HumanString(),
-            "fake-{foo,bar}-{one,two}[-m1][-m2][-x1][-y1]"
+            "fake-{bar,foo}-{one,two}[-m1][-m2][-x1][-y1]"
         )
 
         self.assertEqual(
diff --git a/scripts/build/testdata/all_targets_linux_x64.txt b/scripts/build/testdata/all_targets_linux_x64.txt
index 012adcf..9180ecc 100644
--- a/scripts/build/testdata/all_targets_linux_x64.txt
+++ b/scripts/build/testdata/all_targets_linux_x64.txt
@@ -1,27 +1,27 @@
 ameba-amebad-{all-clusters,all-clusters-minimal,light,light-switch,pigweed}
-asr-{asr582x,asr595x,asr550x}-{all-clusters,all-clusters-minimal,lighting,light-switch,lock,bridge,temperature-measurement,thermostat,ota-requestor,dishwasher,refrigerator}[-ota][-shell][-no_logging][-factory][-rotating_id][-rio]
-android-{arm,arm64,x86,x64,androidstudio-arm,androidstudio-arm64,androidstudio-x86,androidstudio-x64}-{chip-tool,chip-test,tv-server,tv-casting-app,java-matter-controller,kotlin-matter-controller,virtual-device-app}[-no-debug]
-bouffalolab-{bl602dk,bl616dk,bl704ldk,bl706dk,bl602-night-light,bl706-night-light,bl602-iot-matter-v1,xt-zb6-devkit}-{light,contact-sensor}-{ethernet,wifi,thread,thread-ftd,thread-mtd}-{easyflash,littlefs}[-shell][-mfd][-rotating_device_id][-rpc][-cdc][-mot][-memmonitor][-coredump]
-cc32xx-{lock,air-purifier}
-ti-cc13x4_26x4-{lighting,lock,pump,pump-controller}[-mtd][-ftd]
+asr-{asr550x,asr582x,asr595x}-{all-clusters,all-clusters-minimal,bridge,dishwasher,light-switch,lighting,lock,ota-requestor,refrigerator,temperature-measurement,thermostat}[-factory][-no_logging][-ota][-rio][-rotating_id][-shell]
+android-{androidstudio-arm,androidstudio-arm64,androidstudio-x64,androidstudio-x86,arm,arm64,x64,x86}-{chip-test,chip-tool,java-matter-controller,kotlin-matter-controller,tv-casting-app,tv-server,virtual-device-app}[-no-debug]
+bouffalolab-{bl602-iot-matter-v1,bl602-night-light,bl602dk,bl616dk,bl704ldk,bl706-night-light,bl706dk,xt-zb6-devkit}-{contact-sensor,light}-{ethernet,thread,thread-ftd,thread-mtd,wifi}-{easyflash,littlefs}[-cdc][-coredump][-memmonitor][-mfd][-mot][-rotating_device_id][-rpc][-shell]
+cc32xx-{air-purifier,lock}
+ti-cc13x4_26x4-{lighting,lock,pump,pump-controller}[-ftd][-mtd]
 cyw30739-{cyw30739b2_p5_evk_01,cyw30739b2_p5_evk_02,cyw30739b2_p5_evk_03,cyw930739m2evb_01,cyw930739m2evb_02}-{light,light-switch,lock,thermostat}
-efr32-{brd2704b,brd4316a,brd4317a,brd4318a,brd4319a,brd4186a,brd4187a,brd2601b,brd4187c,brd4186c,brd2703a,brd4338a,brd2605a,brd4343a,brd4342a}-{window-covering,switch,unit-test,light,lock,thermostat,pump,air-quality-sensor-app,closure}[-rpc][-with-ota-requestor][-icd][-low-power][-shell][-no-logging][-openthread-mtd][-heap-monitoring][-no-openthread-cli][-show-qr-code][-wifi][-rs9116][-wf200][-siwx917][-ipv4][-additional-data-advertising][-use-ot-lib][-use-ot-coap-lib][-no-version][-skip-rps-generation]
-esp32-{m5stack,c3devkit,devkitc,qemu}-{all-clusters,all-clusters-minimal,energy-management,ota-provider,ota-requestor,shell,light,lock,bridge,temperature-measurement,ota-requestor,tests}[-rpc][-ipv6only][-tracing]
+efr32-{brd2601b,brd2605a,brd2703a,brd2704b,brd4186a,brd4186c,brd4187a,brd4187c,brd4316a,brd4317a,brd4318a,brd4319a,brd4338a,brd4342a,brd4343a}-{air-quality-sensor-app,closure,light,lock,pump,switch,thermostat,unit-test,window-covering}[-additional-data-advertising][-heap-monitoring][-icd][-ipv4][-low-power][-no-logging][-no-openthread-cli][-no-version][-openthread-mtd][-rpc][-rs9116][-shell][-show-qr-code][-siwx917][-skip-rps-generation][-use-ot-coap-lib][-use-ot-lib][-wf200][-wifi][-with-ota-requestor]
+esp32-{c3devkit,devkitc,m5stack,qemu}-{all-clusters,all-clusters-minimal,bridge,energy-management,light,lock,ota-provider,ota-requestor,ota-requestor,shell,temperature-measurement,tests}[-ipv6only][-rpc][-tracing]
 genio-lighting-app
-linux-fake-tests[-mbedtls][-boringssl][-asan][-tsan][-ubsan][-libfuzzer][-ossfuzz][-pw-fuzztest][-coverage][-dmalloc][-clang]
-linux-{x64,arm64}-{rpc-console,all-clusters,all-clusters-minimal,chip-tool,thermostat,java-matter-controller,kotlin-matter-controller,minmdns,light,light-data-model-no-unique-id,lock,shell,ota-provider,ota-requestor,simulated-app1,simulated-app2,python-bindings,tv-app,tv-casting-app,bridge,fabric-admin,fabric-bridge,fabric-sync,tests,chip-cert,address-resolve-tool,contact-sensor,dishwasher,microwave-oven,refrigerator,rvc,air-purifier,lit-icd,air-quality-sensor,network-manager,energy-management,water-leak-detector,terms-and-conditions,camera,camera-controller}[-nodeps][-nlfaultinject][-platform-mdns][-minmdns-verbose][-libnl][-same-event-loop][-no-interactive][-ipv6only][-no-ble][-no-wifi][-no-thread][-no-shell][-mbedtls][-boringssl][-asan][-tsan][-ubsan][-libfuzzer][-ossfuzz][-pw-fuzztest][-coverage][-dmalloc][-clang][-test][-rpc][-with-ui][-evse-test-event][-enable-dnssd-tests][-disable-dnssd-tests][-chip-casting-simplified][-googletest][-terms-and-conditions]
+linux-fake-tests[-asan][-boringssl][-clang][-coverage][-dmalloc][-libfuzzer][-mbedtls][-ossfuzz][-pw-fuzztest][-tsan][-ubsan]
+linux-{arm64,x64}-{address-resolve-tool,air-purifier,air-quality-sensor,all-clusters,all-clusters-minimal,bridge,camera,camera-controller,chip-cert,chip-tool,contact-sensor,dishwasher,energy-management,fabric-admin,fabric-bridge,fabric-sync,java-matter-controller,kotlin-matter-controller,light,light-data-model-no-unique-id,lit-icd,lock,microwave-oven,minmdns,network-manager,ota-provider,ota-requestor,python-bindings,refrigerator,rpc-console,rvc,shell,simulated-app1,simulated-app2,terms-and-conditions,tests,thermostat,tv-app,tv-casting-app,water-leak-detector}[-asan][-boringssl][-chip-casting-simplified][-clang][-coverage][-disable-dnssd-tests][-dmalloc][-enable-dnssd-tests][-evse-test-event][-googletest][-ipv6only][-libfuzzer][-libnl][-mbedtls][-minmdns-verbose][-nlfaultinject][-no-ble][-no-interactive][-no-shell][-no-thread][-no-wifi][-nodeps][-ossfuzz][-platform-mdns][-pw-fuzztest][-rpc][-same-event-loop][-terms-and-conditions][-test][-tsan][-ubsan][-with-ui]
 linux-x64-efr32-test-runner[-clang]
-imx-{chip-tool,lighting-app,thermostat,all-clusters-app,all-clusters-minimal-app,ota-provider-app}[-release]
-infineon-psoc6-{lock,light,all-clusters,all-clusters-minimal}[-ota][-updateimage][-trustm]
-nxp-{k32w0,k32w1,rt1060,rt1170,rw61x,rw61x_eth,mcxw71}-{zephyr,freertos}-{lighting,contact-sensor,lock-app,all-clusters,laundry-washer,thermostat}[-factory][-low-power][-lit][-fro32k][-smu2][-dac-conversion][-rotating-id][-sw-v2][-ota][-wifi][-ethernet][-thread][-matter-shell][-factory-build][-frdm][-cmake][-evkc][-iw416][-w8801][-iwx12][-log-all][-log-progress][-log-error][-log-none]
-mbed-cy8cproto_062_4343w-{lock,light,all-clusters,all-clusters-minimal,pigweed,ota-requestor,shell}[-release][-develop][-debug]
+imx-{all-clusters-app,all-clusters-minimal-app,chip-tool,lighting-app,ota-provider-app,thermostat}[-release]
+infineon-psoc6-{all-clusters,all-clusters-minimal,light,lock}[-ota][-trustm][-updateimage]
+nxp-{k32w0,k32w1,mcxw71,rt1060,rt1170,rw61x,rw61x_eth}-{freertos,zephyr}-{all-clusters,contact-sensor,laundry-washer,lighting,lock-app,thermostat}[-cmake][-dac-conversion][-ethernet][-evkc][-factory][-factory-build][-frdm][-fro32k][-iw416][-iwx12][-lit][-log-all][-log-error][-log-none][-log-progress][-low-power][-matter-shell][-ota][-rotating-id][-smu2][-sw-v2][-thread][-w8801][-wifi]
+mbed-cy8cproto_062_4343w-{all-clusters,all-clusters-minimal,light,lock,ota-requestor,pigweed,shell}[-debug][-develop][-release]
 mw320-all-clusters-app
-nrf-{nrf5340dk,nrf52840dk,nrf52840dongle}-{all-clusters,all-clusters-minimal,lock,light,light-switch,shell,pump,pump-controller,window-covering}[-rpc]
+nrf-{nrf52840dk,nrf52840dongle,nrf5340dk}-{all-clusters,all-clusters-minimal,light,light-switch,lock,pump,pump-controller,shell,window-covering}[-rpc]
 nrf-native-sim-tests
 nuttx-x64-light
-qpg-qpg6105-{lock,light,shell,persistent-storage,light-switch,thermostat}[-updateimage]
-realtek-rtl8777g-{lighting,light-switch,lock,window}
+qpg-qpg6105-{light,light-switch,lock,persistent-storage,shell,thermostat}[-updateimage]
+realtek-rtl8777g-{light-switch,lighting,lock,window}
 stm32-stm32wb5mm-dk-light
-tizen-{arm,arm64}-{all-clusters,chip-tool,light,tests}[-no-ble][-no-thread][-no-wifi][-asan][-ubsan][-coverage][-with-ui]
-telink-{tlsr9118bdk40d,tlsr9518adk80d,tlsr9528a,tlsr9528a_retention,tl3218x,tl3218x_retention,tl7218x,tl7218x_retention}-{air-quality-sensor,all-clusters,all-clusters-minimal,bridge,contact-sensor,light,light-switch,lock,ota-requestor,pump,pump-controller,shell,smoke-co-alarm,temperature-measurement,thermostat,window-covering}[-ota][-dfu][-shell][-rpc][-factory-data][-4mb][-mars][-usb][-compress-lzma][-thread-analyzer][-precompiled-ot]
-openiotsdk-{shell,lock}[-mbedtls][-psa]
+tizen-{arm,arm64}-{all-clusters,chip-tool,light,tests}[-asan][-coverage][-no-ble][-no-thread][-no-wifi][-ubsan][-with-ui]
+telink-{tl3218x,tl3218x_retention,tl7218x,tl7218x_retention,tlsr9118bdk40d,tlsr9518adk80d,tlsr9528a,tlsr9528a_retention}-{air-quality-sensor,all-clusters,all-clusters-minimal,bridge,contact-sensor,light,light-switch,lock,ota-requestor,pump,pump-controller,shell,smoke-co-alarm,temperature-measurement,thermostat,window-covering}[-4mb][-compress-lzma][-dfu][-factory-data][-mars][-ota][-precompiled-ot][-rpc][-shell][-thread-analyzer][-usb]
+openiotsdk-{lock,shell}[-mbedtls][-psa]