browser_check.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # -*- coding: utf-8 -*-
  2. from concurrent.futures import ThreadPoolExecutor
  3. from os import path as osp
  4. import os
  5. import shutil
  6. import sys
  7. import subprocess
  8. from tornado.ioloop import IOLoop
  9. from notebook.notebookapp import flags, aliases
  10. from traitlets import Bool
  11. from .labapp import LabApp, get_app_dir
  12. here = osp.abspath(osp.dirname(__file__))
  13. test_flags = dict(flags)
  14. test_flags['core-mode'] = (
  15. {'BrowserApp': {'core_mode': True}},
  16. "Start the app in core mode."
  17. )
  18. test_flags['dev-mode'] = (
  19. {'BrowserApp': {'dev_mode': True}},
  20. "Start the app in dev mode."
  21. )
  22. test_aliases = dict(aliases)
  23. test_aliases['app-dir'] = 'BrowserApp.app_dir'
  24. class BrowserApp(LabApp):
  25. open_browser = Bool(False)
  26. base_url = '/foo/'
  27. ip = '127.0.0.1'
  28. flags = test_flags
  29. aliases = test_aliases
  30. def start(self):
  31. web_app = self.web_app
  32. web_app.settings.setdefault('page_config_data', dict())
  33. web_app.settings['page_config_data']['browserTest'] = True
  34. web_app.settings['page_config_data']['buildAvailable'] = False
  35. pool = ThreadPoolExecutor()
  36. future = pool.submit(run_browser, self.display_url)
  37. IOLoop.current().add_future(future, self._browser_finished)
  38. super(BrowserApp, self).start()
  39. def _browser_finished(self, future):
  40. try:
  41. sys.exit(future.result())
  42. except Exception as e:
  43. self.log.error(str(e))
  44. sys.exit(1)
  45. def run_browser(url):
  46. """Run the browser test and return an exit code.
  47. """
  48. target = osp.join(get_app_dir(), 'browser_test')
  49. if not osp.exists(osp.join(target, 'node_modules')):
  50. os.makedirs(target)
  51. subprocess.call(["jlpm"], cwd=target)
  52. subprocess.call(["jlpm", "add", "puppeteer"], cwd=target)
  53. shutil.copy(osp.join(here, 'chrome-test.js'), osp.join(target, 'chrome-test.js'))
  54. return subprocess.check_call(["node", "chrome-test.js", url], cwd=target)
  55. if __name__ == '__main__':
  56. BrowserApp.launch_instance()