import_test.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # flake8: noqa
  2. from __future__ import absolute_import, division, print_function
  3. import subprocess
  4. import sys
  5. from tornado.test.util import unittest
  6. _import_everything = b"""
  7. # The event loop is not fork-safe, and it's easy to initialize an asyncio.Future
  8. # at startup, which in turn creates the default event loop and prevents forking.
  9. # Explicitly disallow the default event loop so that an error will be raised
  10. # if something tries to touch it.
  11. try:
  12. import asyncio
  13. except ImportError:
  14. pass
  15. else:
  16. asyncio.set_event_loop(None)
  17. import tornado.auth
  18. import tornado.autoreload
  19. import tornado.concurrent
  20. import tornado.escape
  21. import tornado.gen
  22. import tornado.http1connection
  23. import tornado.httpclient
  24. import tornado.httpserver
  25. import tornado.httputil
  26. import tornado.ioloop
  27. import tornado.iostream
  28. import tornado.locale
  29. import tornado.log
  30. import tornado.netutil
  31. import tornado.options
  32. import tornado.process
  33. import tornado.simple_httpclient
  34. import tornado.stack_context
  35. import tornado.tcpserver
  36. import tornado.tcpclient
  37. import tornado.template
  38. import tornado.testing
  39. import tornado.util
  40. import tornado.web
  41. import tornado.websocket
  42. import tornado.wsgi
  43. try:
  44. import pycurl
  45. except ImportError:
  46. pass
  47. else:
  48. import tornado.curl_httpclient
  49. """
  50. class ImportTest(unittest.TestCase):
  51. def test_import_everything(self):
  52. # Test that all Tornado modules can be imported without side effects,
  53. # specifically without initializing the default asyncio event loop.
  54. # Since we can't tell which modules may have already beein imported
  55. # in our process, do it in a subprocess for a clean slate.
  56. proc = subprocess.Popen([sys.executable], stdin=subprocess.PIPE)
  57. proc.communicate(_import_everything)
  58. self.assertEqual(proc.returncode, 0)
  59. def test_import_aliases(self):
  60. # Ensure we don't delete formerly-documented aliases accidentally.
  61. import tornado.ioloop
  62. import tornado.gen
  63. import tornado.util
  64. self.assertIs(tornado.ioloop.TimeoutError, tornado.util.TimeoutError)
  65. self.assertIs(tornado.gen.TimeoutError, tornado.util.TimeoutError)