Use an iterator when constructing test cases

It's more pythonic, and more importantly more readable.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/tests/scripts/generate_psa_tests.py b/tests/scripts/generate_psa_tests.py
index 79ceed2..21a5a81 100755
--- a/tests/scripts/generate_psa_tests.py
+++ b/tests/scripts/generate_psa_tests.py
@@ -24,7 +24,7 @@
 import os
 import re
 import sys
-from typing import Callable, Dict, FrozenSet, Iterable, List, Optional, TypeVar
+from typing import Callable, Dict, FrozenSet, Iterable, Iterator, List, Optional, TypeVar
 
 import scripts_path # pylint: disable=unused-import
 from mbedtls_dev import crypto_knowledge
@@ -139,7 +139,7 @@
             kt: crypto_knowledge.KeyType,
             param: Optional[int] = None,
             param_descr: str = '',
-    ) -> List[test_case.TestCase]:
+    ) -> Iterator[test_case.TestCase]:
         """Return test cases exercising key creation when the given type is unsupported.
 
         If param is present and not None, emit test cases conditioned on this
@@ -149,7 +149,7 @@
         if kt.name in self.ALWAYS_SUPPORTED:
             # Don't generate test cases for key types that are always supported.
             # They would be skipped in all configurations, which is noise.
-            return []
+            return
         import_dependencies = [('!' if param is None else '') +
                                psa_want_symbol(kt.name)]
         if kt.params is not None:
@@ -160,44 +160,39 @@
             generate_dependencies = []
         else:
             generate_dependencies = import_dependencies
-        test_cases = []
         for bits in kt.sizes_to_test():
-            test_cases.append(test_case_for_key_type_not_supported(
+            yield test_case_for_key_type_not_supported(
                 'import', kt.expression, bits,
                 finish_family_dependencies(import_dependencies, bits),
                 test_case.hex_string(kt.key_material(bits)),
                 param_descr=param_descr,
-            ))
+            )
             if not generate_dependencies and param is not None:
                 # If generation is impossible for this key type, rather than
                 # supported or not depending on implementation capabilities,
                 # only generate the test case once.
                 continue
-            test_cases.append(test_case_for_key_type_not_supported(
+            yield test_case_for_key_type_not_supported(
                 'generate', kt.expression, bits,
                 finish_family_dependencies(generate_dependencies, bits),
                 str(bits),
                 param_descr=param_descr,
-            ))
+            )
             # To be added: derive
-        return test_cases
 
-    def generate_not_supported(self) -> List[test_case.TestCase]:
+    def test_cases_for_not_supported(self) -> Iterator[test_case.TestCase]:
         """Generate test cases that exercise the creation of keys of unsupported types."""
-        test_cases = []
         for key_type in sorted(self.constructors.key_types):
             kt = crypto_knowledge.KeyType(key_type)
-            test_cases += self.test_cases_for_key_type_not_supported(kt)
-        # To be added: parametrized key types FFDH
+            yield from self.test_cases_for_key_type_not_supported(kt)
         for curve_family in sorted(self.constructors.ecc_curves):
             for constr in ('PSA_KEY_TYPE_ECC_KEY_PAIR',
                            'PSA_KEY_TYPE_ECC_PUBLIC_KEY'):
                 kt = crypto_knowledge.KeyType(constr, [curve_family])
-                test_cases += self.test_cases_for_key_type_not_supported(
+                yield from self.test_cases_for_key_type_not_supported(
                     kt, param_descr='type')
-                test_cases += self.test_cases_for_key_type_not_supported(
+                yield from self.test_cases_for_key_type_not_supported(
                     kt, 0, param_descr='curve')
-        return test_cases
 
 
 class TestGenerator:
@@ -228,7 +223,7 @@
 
     TARGETS = {
         'test_suite_psa_crypto_not_supported.generated':
-        lambda info: NotSupported(info).generate_not_supported(),
+        lambda info: NotSupported(info).test_cases_for_not_supported(),
     } #type: Dict[str, Callable[[Information], Iterable[test_case.TestCase]]]
 
     def generate_target(self, name: str) -> None: