12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- # -*- coding: utf-8 -*-
- from concurrent.futures import ThreadPoolExecutor
- from os import path as osp
- import os
- import shutil
- import sys
- import subprocess
- from tornado.ioloop import IOLoop
- from notebook.notebookapp import flags, aliases
- from traitlets import Bool
- from .labapp import LabApp, get_app_dir
- here = osp.abspath(osp.dirname(__file__))
- test_flags = dict(flags)
- test_flags['core-mode'] = (
- {'BrowserApp': {'core_mode': True}},
- "Start the app in core mode."
- )
- test_flags['dev-mode'] = (
- {'BrowserApp': {'dev_mode': True}},
- "Start the app in dev mode."
- )
- test_aliases = dict(aliases)
- test_aliases['app-dir'] = 'BrowserApp.app_dir'
- class BrowserApp(LabApp):
- open_browser = Bool(False)
- base_url = '/foo/'
- ip = '127.0.0.1'
- flags = test_flags
- aliases = test_aliases
- def start(self):
- web_app = self.web_app
- web_app.settings.setdefault('page_config_data', dict())
- web_app.settings['page_config_data']['browserTest'] = True
- web_app.settings['page_config_data']['buildAvailable'] = False
- pool = ThreadPoolExecutor()
- future = pool.submit(run_browser, self.display_url)
- IOLoop.current().add_future(future, self._browser_finished)
- super(BrowserApp, self).start()
- def _browser_finished(self, future):
- try:
- sys.exit(future.result())
- except Exception as e:
- self.log.error(str(e))
- sys.exit(1)
- def run_browser(url):
- """Run the browser test and return an exit code.
- """
- target = osp.join(get_app_dir(), 'browser_test')
- if not osp.exists(osp.join(target, 'node_modules')):
- os.makedirs(target)
- subprocess.call(["jlpm"], cwd=target)
- subprocess.call(["jlpm", "add", "puppeteer"], cwd=target)
- shutil.copy(osp.join(here, 'chrome-test.js'), osp.join(target, 'chrome-test.js'))
- return subprocess.check_call(["node", "chrome-test.js", url], cwd=target)
- if __name__ == '__main__':
- BrowserApp.launch_instance()
|