Use ABCMeta for abstract classes

Signed-off-by: Werner Lewis <werner.lewis@arm.com>
diff --git a/scripts/mbedtls_dev/test_generation.py b/scripts/mbedtls_dev/test_generation.py
index ea391c3..896f86e 100644
--- a/scripts/mbedtls_dev/test_generation.py
+++ b/scripts/mbedtls_dev/test_generation.py
@@ -24,7 +24,7 @@
 import posixpath
 import re
 
-from abc import abstractmethod
+from abc import ABCMeta, abstractmethod
 from typing import Callable, Dict, Iterable, List, Type, TypeVar
 
 from mbedtls_dev import test_case
@@ -32,7 +32,7 @@
 T = TypeVar('T') #pylint: disable=invalid-name
 
 
-class BaseTarget:
+class BaseTarget(metaclass=ABCMeta):
     """Base target for test case generation.
 
     Attributes:
@@ -93,13 +93,12 @@
     def generate_tests(cls):
         """Generate test cases for the target subclasses.
 
-        Classes will iterate over its subclasses, calling this method in each.
-        In abstract classes, no further changes are needed, as there is no
+        During generation, each class will iterate over any subclasses, calling
+        this method in each.
+        In abstract classes, no tests will be generated, as there is no
         function to generate tests for.
-        In classes which do implement a test function, this should be overrided
-        and a means to use `create_test_case()` should be added. In most cases
-        the subclasses can still be iterated over, as either the class will
-        have none, or it may continue.
+        In classes which do implement a test function, this should be overridden
+        and a means to use `create_test_case()` should be added.
         """
         for subclass in sorted(cls.__subclasses__(), key=lambda c: c.__name__):
             yield from subclass.generate_tests()
diff --git a/tests/scripts/generate_bignum_tests.py b/tests/scripts/generate_bignum_tests.py
index 7a8ebd1..3f556ce 100755
--- a/tests/scripts/generate_bignum_tests.py
+++ b/tests/scripts/generate_bignum_tests.py
@@ -48,7 +48,7 @@
 import itertools
 import sys
 
-from abc import abstractmethod
+from abc import ABCMeta, abstractmethod
 from typing import Callable, Dict, Iterator, List, Optional, Tuple, TypeVar
 
 import scripts_path # pylint: disable=unused-import
@@ -64,12 +64,12 @@
     return "\"{}\"".format(val)
 
 
-class BignumTarget(test_generation.BaseTarget):
+class BignumTarget(test_generation.BaseTarget, metaclass=ABCMeta):
     """Target for bignum (mpi) test case generation."""
     target_basename = 'test_suite_mpi.generated'
 
 
-class BignumOperation(BignumTarget):
+class BignumOperation(BignumTarget, metaclass=ABCMeta):
     """Common features for test cases covering binary bignum operations.
 
     This adds functionality common in binary operation tests. This includes
@@ -118,7 +118,7 @@
         return super().description()
 
     @abstractmethod
-    def result(self) -> Optional[str]:
+    def result(self) -> str:
         """Get the result of the operation.
 
         This may be calculated during initialization and stored as `_result`,
@@ -131,7 +131,7 @@
         """Generate a description of the argument val.
 
         This produces a simple description of the value, which are used in test
-        case naming, to avoid most generated cases only being numbered.
+        case naming, to add context to the test cases.
         """
         if val == "":
             return "0 (null)"