interface_tests.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """Tests for cement.core.interface."""
  2. from cement.core import exc, interface, output, handler, meta
  3. from cement.utils import test
  4. class TestInterface(interface.Interface):
  5. class IMeta:
  6. label = 'test'
  7. class TestHandler(handler.CementBaseHandler):
  8. class Meta:
  9. interface = TestInterface
  10. label = 'test'
  11. class TestHandler2(handler.CementBaseHandler):
  12. class Meta:
  13. interface = output.IOutput
  14. label = 'test2'
  15. class TestHandler3():
  16. pass
  17. class InterfaceTestCase(test.CementCoreTestCase):
  18. def setUp(self):
  19. self.app = self.make_app()
  20. @test.raises(exc.InterfaceError)
  21. def test_interface_class(self):
  22. try:
  23. i = interface.Interface()
  24. except exc.InterfaceError as e:
  25. self.eq(e.msg, "Interfaces can not be used directly.")
  26. raise
  27. def test_attribute_class(self):
  28. i = interface.Attribute('Test attribute')
  29. self.eq(i.__repr__(), "<interface.Attribute - 'Test attribute'>")
  30. def test_validator(self):
  31. interface.validate(TestInterface, TestHandler(), [])
  32. @test.raises(exc.InterfaceError)
  33. def test_validate_bad_interface(self):
  34. han = TestHandler2()
  35. try:
  36. interface.validate(TestInterface, han, [])
  37. except exc.InterfaceError as e:
  38. self.eq(e.msg, "%s does not implement %s." % (han, TestInterface))
  39. raise
  40. @test.raises(exc.InterfaceError)
  41. def test_validate_bad_interface_no_meta(self):
  42. han = TestHandler3()
  43. try:
  44. interface.validate(TestInterface, han, [])
  45. except exc.InterfaceError as e:
  46. self.eq(e.msg, "Invalid or missing: ['_meta'] in %s" % han)
  47. raise
  48. @test.raises(exc.InterfaceError)
  49. def test_validate_bad_interface_missing_meta(self):
  50. han = TestHandler()
  51. try:
  52. interface.validate(TestInterface, han, [], ['missing_meta'])
  53. except exc.InterfaceError as e:
  54. self.eq(e.msg, "Invalid or missing: ['_meta.missing_meta'] in %s" % han)
  55. raise