From 221b42f8549b088d3775ac52ae09c828ff6e1748 Mon Sep 17 00:00:00 2001 From: cztomczak Date: Mon, 19 Sep 2016 11:18:58 +0200 Subject: [PATCH] Enhance unit tests part 2. Differentiate client handlers (LoadHandler etc). --- api/Browser.md | 8 ++++- unittests/main_test.py | 81 ++++++++++++++++++++++++------------------ 2 files changed, 54 insertions(+), 35 deletions(-) diff --git a/api/Browser.md b/api/Browser.md index 6cfb292c..b41183ce 100644 --- a/api/Browser.md +++ b/api/Browser.md @@ -776,7 +776,13 @@ Set client callback. | clientHandler | object | | __Return__ | void | -Set client handler object (class instance), its members will be inspected. Private methods that are not meant to be callbacks should have their names prepended with an underscore. +Set client handler object (class instance), its members will be inspected. +Private methods that are not meant to be callbacks should have their names +prepended with an underscore. + +You can call this method multiple times with to set many handlers. For +example you can create in your code several objects named LoadHandler, +LifespanHandler etc. ### SetFocus diff --git a/unittests/main_test.py b/unittests/main_test.py index f7da66f1..0c1284cf 100644 --- a/unittests/main_test.py +++ b/unittests/main_test.py @@ -12,10 +12,6 @@ # To show the window for an extended period of time increase this number. MESSAGE_LOOP_RANGE = 25 # each iteration is 0.01 sec -g_browser = None -g_client_handler = None -g_external = None - g_datauri_data = """ @@ -105,33 +101,32 @@ def test_main(self): }) subtest_message("cef.Initialize() ok") - # Test global client callback - global g_client_handler - g_client_handler = ClientHandler(self) + # Test global handler + global_handler = GlobalHandler(self) cef.SetGlobalClientCallback("OnAfterCreated", - g_client_handler._OnAfterCreated) + global_handler._OnAfterCreated) subtest_message("cef.SetGlobalClientCallback() ok") # Test creation of browser - global g_browser - g_browser = cef.CreateBrowserSync(url=g_datauri) - self.assertIsNotNone(g_browser, "Browser object") + browser = cef.CreateBrowserSync(url=g_datauri) + self.assertIsNotNone(browser, "Browser object") subtest_message("cef.CreateBrowserSync() ok") - # Test client handler - g_browser.SetClientHandler(g_client_handler) + # Test other handlers: LoadHandler, DisplayHandler etc. + client_handlers = [LoadHandler(self), DisplayHandler(self)] + for handler in client_handlers: + browser.SetClientHandler(handler) subtest_message("browser.SetClientHandler() ok") # Test javascript bindings - global g_external - g_external = External(self) + external = External(self) bindings = cef.JavascriptBindings( bindToFrames=False, bindToPopups=False) - bindings.SetFunction("test_function", g_external.test_function) - bindings.SetProperty("test_property1", g_external.test_property1) - bindings.SetProperty("test_property2", g_external.test_property2) - bindings.SetObject("external", g_external) - g_browser.SetJavascriptBindings(bindings) + bindings.SetFunction("test_function", external.test_function) + bindings.SetProperty("test_property1", external.test_property1) + bindings.SetProperty("test_property2", external.test_property2) + bindings.SetObject("external", external) + browser.SetJavascriptBindings(bindings) subtest_message("browser.SetJavascriptBindings() ok") # Run message loop for 0.5 sec. @@ -142,8 +137,8 @@ def test_main(self): subtest_message("cef.MessageLoopWork() ok") # Test browser closing. Remember to clean reference. - g_browser.CloseBrowser(True) - g_browser = None + browser.CloseBrowser(True) + del browser subtest_message("browser.CloseBrowser() ok") # Give it some time to close before calling shutdown. @@ -152,20 +147,22 @@ def test_main(self): cef.MessageLoopWork() time.sleep(0.01) - # Client handler asserts and javascript External asserts - for obj in [g_client_handler, g_external]: + # Asserts in handlers and in external + for obj in [] + client_handlers + [global_handler, external]: test_for_True = False # Test whether asserts are working correctly for key, value in obj.__dict__.items(): if key == "test_for_True": test_for_True = True continue if "_True" in key: - self.assertTrue(value, "Check assert: "+key) + self.assertTrue(value, "Check assert: " + + obj.__class__.__name__ + "." + key) subtest_message(obj.__class__.__name__ + "." + key.replace("_True", "") + " ok") elif "_False" in key: - self.assertFalse(value, "Check assert: "+key) + self.assertFalse(value, "Check assert: " + + obj.__class__.__name__ + "." + key) subtest_message(obj.__class__.__name__ + "." + key.replace("_False", "") + " ok") @@ -180,24 +177,30 @@ def test_main(self): sys.stdout.flush() -class ClientHandler(object): +class GlobalHandler(object): def __init__(self, test_case): self.test_case = test_case - self.frame_source_visitor = None # Asserts for True/False will be checked just before shutdown self.test_for_True = True # Test whether asserts are working correctly self.OnAfterCreated_True = False - self.OnLoadStart_True = False - self.OnLoadEnd_True = False - self.FrameSourceVisitor_True = False - self.javascript_errors_False = False - self.OnConsoleMessage_True = False # noinspection PyUnusedLocal def _OnAfterCreated(self, browser): self.OnAfterCreated_True = True + +class LoadHandler(object): + def __init__(self, test_case): + self.test_case = test_case + self.frame_source_visitor = None + + # Asserts for True/False will be checked just before shutdown + self.test_for_True = True # Test whether asserts are working correctly + self.OnLoadStart_True = False + self.OnLoadEnd_True = False + self.FrameSourceVisitor_True = False + # noinspection PyUnusedLocal def OnLoadStart(self, browser, frame): self.test_case.assertEqual(browser.GetUrl(), g_datauri) @@ -209,9 +212,19 @@ def OnLoadEnd(self, browser, frame, http_code): self.frame_source_visitor = FrameSourceVisitor(self, self.test_case) frame.GetSource(self.frame_source_visitor) browser.ExecuteJavascript( - "print('ClientHandler.OnLoadEnd() ok')") + "print('LoadHandler.OnLoadEnd() ok')") self.OnLoadEnd_True = True + +class DisplayHandler(object): + def __init__(self, test_case): + self.test_case = test_case + + # Asserts for True/False will be checked just before shutdown + self.test_for_True = True # Test whether asserts are working correctly + self.javascript_errors_False = False + self.OnConsoleMessage_True = False + # noinspection PyUnusedLocal def OnConsoleMessage(self, browser, message, source, line): if "error" in message.lower() or "uncaught" in message.lower():