Use ABCMeta for abstract classes
Signed-off-by: Werner Lewis <werner.lewis@arm.com>
This commit is contained in:
parent
169034ae63
commit
699e126942
2 changed files with 12 additions and 13 deletions
|
@ -24,7 +24,7 @@ import os
|
|||
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 build_tree
|
||||
|
@ -33,7 +33,7 @@ from mbedtls_dev import test_case
|
|||
T = TypeVar('T') #pylint: disable=invalid-name
|
||||
|
||||
|
||||
class BaseTarget:
|
||||
class BaseTarget(metaclass=ABCMeta):
|
||||
"""Base target for test case generation.
|
||||
|
||||
Attributes:
|
||||
|
@ -94,13 +94,12 @@ class BaseTarget:
|
|||
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()
|
||||
|
|
|
@ -48,7 +48,7 @@ of BaseTarget in test_generation.py.
|
|||
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 @@ def quote_str(val):
|
|||
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 @@ class BignumOperation(BignumTarget):
|
|||
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 @@ class BignumOperation(BignumTarget):
|
|||
"""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)"
|
||||
|
|
Loading…
Reference in a new issue