Source code for cis_interface.metaschema.properties.tests.test_MetaschemaProperty
from cis_interface.tests import CisTestClassInfo, assert_equal
from cis_interface.metaschema import get_validator, get_metaschema
from cis_interface.metaschema.datatypes import MetaschemaTypeError
from cis_interface.metaschema.properties.MetaschemaProperty import (
create_property)
[docs]def test_dynamic():
r"""Test dynamic creation of property."""
def encode(instance, typedef=None):
return None
def validate(validator, value, instance, schema):
return
def compare(prop1, prop2):
if not prop2:
yield 'Test error'
return
new_prop = create_property('invalid', None, encode, validate, compare)
assert_equal(new_prop.encode('hello'), None)
assert_equal(list(new_prop.validate(None, None, None, None)), [])
assert_equal(list(new_prop.compare(True, True)), [])
assert_equal(list(new_prop.compare(True, False)), ['Test error'])
[docs]class TestMetaschemaProperty(CisTestClassInfo):
r"""Test class for MetaschemaProperty class."""
_mod = 'MetaschemaProperty'
_cls = 'MetaschemaProperty'
def __init__(self, *args, **kwargs):
super(TestMetaschemaProperty, self).__init__(*args, **kwargs)
self._valid = []
self._invalid = []
self._encode_errors = []
self._valid_compare = [(0, 0)]
self._invalid_compare = [(0, 1)]
self._valid_normalize_schema = []
self.validator = get_validator()(get_metaschema())
@property
def mod(self):
r"""str: Absolute name of module containing class to be tested."""
return 'cis_interface.metaschema.properties.%s' % self._mod
@property
def inst_args(self):
r"""dict: Keyword arguments for creating a class instance."""
return tuple()
[docs] def test_encode(self):
r"""Test encode method for the class."""
for (instance, value) in self._valid:
x = self.import_cls.encode(instance)
errors = list(self.import_cls.compare(x, value))
assert(not errors)
if self.import_cls.name == 'base':
self.assert_raises(NotImplementedError, self.import_cls.encode, None)
[docs] def test_encode_errors(self):
r"""Test errors raised by encode."""
for instance in self._encode_errors:
self.assert_raises(MetaschemaTypeError, self.import_cls.encode, instance)
[docs] def test_validate_valid(self):
r"""Test validation method for the class on valid objects."""
validator = self.validator
for (instance, value) in self._valid:
schema = {self.import_cls.name: value}
errors = list(
self.import_cls.wrapped_validate(validator, value, instance, schema))
assert(not errors)
# Instances not of the associate type validate as true (skipped)
if self.import_cls.name == 'base':
errors = list(
self.import_cls.wrapped_validate(validator, None, None, {}))
assert(not errors)
[docs] def test_validate_invalid(self):
r"""Test validation method for the class on invalid objects."""
validator = self.validator
for (instance, value) in self._invalid:
schema = {self.import_cls.name: value}
errors = list(
self.import_cls.wrapped_validate(validator, value, instance, schema))
assert(errors)
[docs] def test_compare_valid(self):
r"""Test comparision method for the class on valid objects."""
for x in self._valid_compare:
errors = list(self.import_cls.compare(*x))
assert(not errors)
[docs] def test_compare_invalid(self):
r"""Test comparision method for the class on invalid objects."""
for x in self._invalid_compare:
errors = list(self.import_cls.compare(*x))
assert(errors)
[docs] def test_normalize_in_schema(self):
r"""Test normalization in schema."""
for x, y in self._valid_normalize_schema:
self.assert_equal(self.import_cls.normalize_in_schema(x), y)