PageRenderTime 15ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/regressiontests/bash_completion/tests.py

https://code.google.com/p/mango-py/
Python | 87 lines | 68 code | 11 blank | 8 comment | 4 complexity | 39039ce2e4881fae51947eb8547fc20d MD5 | raw file
Possible License(s): BSD-3-Clause
  1. """
  2. A series of tests to establish that the command-line bash completion works.
  3. """
  4. import os
  5. import sys
  6. import StringIO
  7. from django.conf import settings
  8. from django.core.management import ManagementUtility
  9. from django.utils import unittest
  10. class BashCompletionTests(unittest.TestCase):
  11. """
  12. Testing the Python level bash completion code.
  13. This requires setting up the environment as if we got passed data
  14. from bash.
  15. """
  16. def setUp(self):
  17. self.old_DJANGO_AUTO_COMPLETE = os.environ.get('DJANGO_AUTO_COMPLETE')
  18. os.environ['DJANGO_AUTO_COMPLETE'] = '1'
  19. self.output = StringIO.StringIO()
  20. self.old_stdout = sys.stdout
  21. sys.stdout = self.output
  22. def tearDown(self):
  23. sys.stdout = self.old_stdout
  24. if self.old_DJANGO_AUTO_COMPLETE:
  25. os.environ['DJANGO_AUTO_COMPLETE'] = self.old_DJANGO_AUTO_COMPLETE
  26. else:
  27. del os.environ['DJANGO_AUTO_COMPLETE']
  28. def _user_input(self, input_str):
  29. os.environ['COMP_WORDS'] = input_str
  30. os.environ['COMP_CWORD'] = str(len(input_str.split()) - 1)
  31. sys.argv = input_str.split(' ')
  32. def _run_autocomplete(self):
  33. util = ManagementUtility(argv=sys.argv)
  34. try:
  35. util.autocomplete()
  36. except SystemExit:
  37. pass
  38. return self.output.getvalue().strip().split('\n')
  39. def test_django_admin_py(self):
  40. "django_admin.py will autocomplete option flags"
  41. self._user_input('django-admin.py sqlall --v')
  42. output = self._run_autocomplete()
  43. self.assertEqual(output, ['--verbosity='])
  44. def test_manage_py(self):
  45. "manage.py will autocomplete option flags"
  46. self._user_input('manage.py sqlall --v')
  47. output = self._run_autocomplete()
  48. self.assertEqual(output, ['--verbosity='])
  49. def test_custom_command(self):
  50. "A custom command can autocomplete option flags"
  51. self._user_input('django-admin.py test_command --l')
  52. output = self._run_autocomplete()
  53. self.assertEqual(output, ['--list'])
  54. def test_subcommands(self):
  55. "Subcommands can be autocompleted"
  56. self._user_input('django-admin.py sql')
  57. output = self._run_autocomplete()
  58. self.assertEqual(output, ['sql sqlall sqlclear sqlcustom sqlflush sqlindexes sqlinitialdata sqlreset sqlsequencereset'])
  59. def test_help(self):
  60. "No errors, just an empty list if there are no autocomplete options"
  61. self._user_input('django-admin.py help --')
  62. output = self._run_autocomplete()
  63. self.assertEqual(output, [''])
  64. def test_runfcgi(self):
  65. "Command arguments will be autocompleted"
  66. self._user_input('django-admin.py runfcgi h')
  67. output = self._run_autocomplete()
  68. self.assertEqual(output, ['host='])
  69. def test_app_completion(self):
  70. "Application names will be autocompleted for an AppCommand"
  71. self._user_input('django-admin.py sqlall a')
  72. output = self._run_autocomplete()
  73. app_labels = [name.split('.')[-1] for name in settings.INSTALLED_APPS]
  74. self.assertEqual(output, sorted(label for label in app_labels if label.startswith('a')))