json_tests.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. """Tests for cement.ext.ext_json."""
  2. import json
  3. import sys
  4. from tempfile import mkstemp
  5. from cement.core import handler, backend, hook
  6. from cement.utils import test
  7. from cement.utils.misc import rando
  8. APP = rando()[:12]
  9. class JsonExtTestCase(test.CementExtTestCase):
  10. CONFIG = '''{
  11. "section": {
  12. "subsection": {
  13. "list": [
  14. "item1", "item2", "item3", "item4"],
  15. "key": "value"
  16. },
  17. "key1": "ok1",
  18. "key2": "ok2"
  19. }
  20. }
  21. '''
  22. CONFIG_PARSED = dict(
  23. section=dict(
  24. subsection=dict(
  25. list=['item1', 'item2', 'item3', 'item4'],
  26. key='value'),
  27. key1='ok1',
  28. key2='ok2',
  29. ),
  30. )
  31. def setUp(self):
  32. _, self.tmppath = mkstemp()
  33. f = open(self.tmppath, 'w+')
  34. f.write(self.CONFIG)
  35. f.close()
  36. self.app = self.make_app('tests',
  37. extensions=['json'],
  38. output_handler='json',
  39. config_handler='json',
  40. config_files=[self.tmppath],
  41. argv=['-o', 'json']
  42. )
  43. def test_json(self):
  44. self.app.setup()
  45. self.app.run()
  46. res = self.app.render(dict(foo='bar'))
  47. json_res = json.dumps(dict(foo='bar'))
  48. self.eq(res, json_res)
  49. def test_has_section(self):
  50. self.app.setup()
  51. self.ok(self.app.config.has_section('section'))
  52. def test_keys(self):
  53. self.app.setup()
  54. res = 'subsection' in self.app.config.keys('section')
  55. self.ok(res)
  56. def test_parse_file_bad_path(self):
  57. self.app._meta.config_files = ['./some_bogus_path']
  58. self.app.setup()
  59. def test_parse_file(self):
  60. self.app.setup()
  61. self.eq(self.app.config.get('section', 'key1'), 'ok1')
  62. self.eq(self.app.config.get_section_dict('section'),
  63. self.CONFIG_PARSED['section'])
  64. def test_handler_override_options_is_none(self):
  65. app = self.make_app(APP,
  66. extensions=['json'],
  67. core_handler_override_options={},
  68. handler_override_options={}
  69. )
  70. app.setup()
  71. app.run()
  72. app.render(dict(foo='bar'))