def test_registry_class_lookup(): reg = Registry() class Document(object): pass class SpecialDocument(Document): pass linecount = 'linecount' reg.register_predicates(linecount, [class_predicate('obj')]) reg.register_value(linecount, [Document], 'document line count') reg.register_value(linecount, [SpecialDocument], 'special document line count') assert (reg.component(linecount, Document) == 'document line count') assert (reg.component(linecount, SpecialDocument) == 'special document line count') class AnotherDocument(Document): pass assert (reg.component(linecount, AnotherDocument) == 'document line count') class Other(object): pass assert reg.component(linecount, Other) is None
def test_registry_target_find_specific(): reg = Registry() class Document(object): pass class SpecialDocument(Document): pass def linecount(obj): pass def special_linecount(obj): pass reg.register_predicates(linecount, [class_predicate('obj')]) reg.register_value(linecount, [Document], 'line count') reg.register_predicates(special_linecount, [class_predicate('obj')]) reg.register_value(special_linecount, [Document], 'special line count') assert reg.component(linecount, Document) == 'line count' assert (reg.component(special_linecount, Document) == 'special line count') assert reg.component(linecount, SpecialDocument) == 'line count' assert (reg.component(special_linecount, SpecialDocument) == 'special line count')
def test_register_twice_without_predicates(): reg = Registry() def linecount(obj): pass reg.register_predicates(linecount, []) reg.register_value(linecount, (), 'once') with pytest.raises(RegistrationError): reg.register_value(linecount, (), 'twice')
def test_clear(): reg = Registry() def linecount(): pass reg.register_predicates(linecount, []) reg.register_value(linecount, (), 'once') assert reg.component(linecount, ()) == 'once' reg.clear() reg.register_predicates(linecount, []) assert reg.component(linecount, ()) is None
def test_registry_no_sources(): reg = Registry() class Animal(object): pass def something(): pass reg.register_predicates(something, []) reg.register_value(something, (), 'elephant') assert reg.component(something, ()) == 'elephant'
def test_register_twice_with_predicate(): reg = Registry() class Document(object): pass def linecount(obj): pass reg.register_predicates(linecount, [class_predicate('obj')]) reg.register_value(linecount, [Document], 'document line count') with pytest.raises(RegistrationError): reg.register_value(linecount, [Document], 'another line count')