Steven Silvester 6 年之前
父节点
当前提交
fc20e3d199
共有 3 个文件被更改,包括 33 次插入38 次删除
  1. 3 1
      examples/chrome-example-test.js
  2. 2 18
      examples/example_check.py
  3. 28 19
      jupyterlab/browser_check.py

+ 3 - 1
examples/chrome-example-test.js

@@ -58,7 +58,9 @@ async function main() {
 
 // Stop the process if an error is raised in the async function.
 process.on('unhandledRejection', up => {
-  throw up;
+  if (String(up).indexOf('Target closed') === -1) {
+    throw up;
+  }
 });
 
 main();

+ 2 - 18
examples/example_check.py

@@ -9,7 +9,6 @@ string being printed.
 
 e.g. python example_check.py ./app
 """
-from concurrent.futures import ThreadPoolExecutor
 import importlib.util
 import logging
 from os import path as osp
@@ -21,7 +20,7 @@ import subprocess
 from tornado.ioloop import IOLoop
 from traitlets import Bool, Unicode
 from jupyterlab.labapp import get_app_dir
-from jupyterlab.browser_check import LogErrorHandler
+from jupyterlab.browser_check import run_test
 
 here = osp.abspath(osp.dirname(__file__))
 
@@ -44,24 +43,9 @@ class ExampleCheckApp(mod.ExampleApp):
     ip = '127.0.0.1'
 
     def start(self):
-        self.log.addHandler(LogErrorHandler(self))
-
-        pool = ThreadPoolExecutor()
-        future = pool.submit(run_browser, self.display_url)
-        IOLoop.current().add_future(future, self._browser_finished)
-
+        run_test(run_browser)
         super().start()
 
-    def _browser_finished(self, future):
-        try:
-            result = future.result()
-        except Exception as e:
-            self.log.error(str(e))
-        if self.errored:
-            sys.exit(1)
-        else:
-            sys.exit(result)
-
 
 def run_browser(url):
     """Run the browser test and return an exit code.

+ 28 - 19
jupyterlab/browser_check.py

@@ -38,10 +38,9 @@ test_aliases['app-dir'] = 'BrowserApp.app_dir'
 class LogErrorHandler(logging.Handler):
     """A handler that exits with 1 on a logged error."""
 
-    def __init__(self, app):
+    def __init__(self):
         super().__init__(level=logging.ERROR)
-        self.app = app
-        self.app.errored = False
+        self.errored = False
 
     def filter(self, record):
         # known startup error message
@@ -51,7 +50,30 @@ class LogErrorHandler(logging.Handler):
 
     def emit(self, record):
         print(record.msg, file=sys.stderr)
-        self.app.errored = True
+        self.errored = True
+
+
+def run_test(app, func):
+    """Run a test against the application.
+
+    func is a function that accepts an app url as a parameter and returns a result.
+    """
+    handler = LogErrorHandler()
+
+    def finished(future):
+        try:
+            result = future.result()
+        except Exception as e:
+            self.log.error(str(e))
+        if handler.errored:
+            sys.exit(1)
+        else:
+            sys.exit(result)
+
+    app.log.addHandler(handler)
+    pool = ThreadPoolExecutor()
+    future = pool.submit(run_browser, app.display_url)
+    IOLoop.current().add_future(future, finished)
 
 
 class BrowserApp(LabApp):
@@ -69,21 +91,8 @@ class BrowserApp(LabApp):
         web_app.settings.setdefault('page_config_data', dict())
         web_app.settings['page_config_data']['browserTest'] = True
         web_app.settings['page_config_data']['buildAvailable'] = False
-        self.log.addHandler(LogErrorHandler(self))
-        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:
-            result = future.result()
-        except Exception as e:
-            self.log.error(str(e))
-        if self.errored:
-            sys.exit(1)
-        else:
-            sys.exit(result)
+        run_test(self, run_browser)
+        super().start()
 
 
 def run_browser(url):