Skip to content

Commit 221b42f

Browse files
committed
Enhance unit tests part 2. Differentiate client handlers (LoadHandler etc).
1 parent 15fb9f8 commit 221b42f

File tree

2 files changed

+54
-35
lines changed

2 files changed

+54
-35
lines changed

api/Browser.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,7 +776,13 @@ Set client callback.
776776
| clientHandler | object |
777777
| __Return__ | void |
778778

779-
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.
779+
Set client handler object (class instance), its members will be inspected.
780+
Private methods that are not meant to be callbacks should have their names
781+
prepended with an underscore.
782+
783+
You can call this method multiple times with to set many handlers. For
784+
example you can create in your code several objects named LoadHandler,
785+
LifespanHandler etc.
780786

781787

782788
### SetFocus

unittests/main_test.py

Lines changed: 47 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212
# To show the window for an extended period of time increase this number.
1313
MESSAGE_LOOP_RANGE = 25 # each iteration is 0.01 sec
1414

15-
g_browser = None
16-
g_client_handler = None
17-
g_external = None
18-
1915
g_datauri_data = """
2016
<!DOCTYPE html>
2117
<html>
@@ -105,33 +101,32 @@ def test_main(self):
105101
})
106102
subtest_message("cef.Initialize() ok")
107103

108-
# Test global client callback
109-
global g_client_handler
110-
g_client_handler = ClientHandler(self)
104+
# Test global handler
105+
global_handler = GlobalHandler(self)
111106
cef.SetGlobalClientCallback("OnAfterCreated",
112-
g_client_handler._OnAfterCreated)
107+
global_handler._OnAfterCreated)
113108
subtest_message("cef.SetGlobalClientCallback() ok")
114109

115110
# Test creation of browser
116-
global g_browser
117-
g_browser = cef.CreateBrowserSync(url=g_datauri)
118-
self.assertIsNotNone(g_browser, "Browser object")
111+
browser = cef.CreateBrowserSync(url=g_datauri)
112+
self.assertIsNotNone(browser, "Browser object")
119113
subtest_message("cef.CreateBrowserSync() ok")
120114

121-
# Test client handler
122-
g_browser.SetClientHandler(g_client_handler)
115+
# Test other handlers: LoadHandler, DisplayHandler etc.
116+
client_handlers = [LoadHandler(self), DisplayHandler(self)]
117+
for handler in client_handlers:
118+
browser.SetClientHandler(handler)
123119
subtest_message("browser.SetClientHandler() ok")
124120

125121
# Test javascript bindings
126-
global g_external
127-
g_external = External(self)
122+
external = External(self)
128123
bindings = cef.JavascriptBindings(
129124
bindToFrames=False, bindToPopups=False)
130-
bindings.SetFunction("test_function", g_external.test_function)
131-
bindings.SetProperty("test_property1", g_external.test_property1)
132-
bindings.SetProperty("test_property2", g_external.test_property2)
133-
bindings.SetObject("external", g_external)
134-
g_browser.SetJavascriptBindings(bindings)
125+
bindings.SetFunction("test_function", external.test_function)
126+
bindings.SetProperty("test_property1", external.test_property1)
127+
bindings.SetProperty("test_property2", external.test_property2)
128+
bindings.SetObject("external", external)
129+
browser.SetJavascriptBindings(bindings)
135130
subtest_message("browser.SetJavascriptBindings() ok")
136131

137132
# Run message loop for 0.5 sec.
@@ -142,8 +137,8 @@ def test_main(self):
142137
subtest_message("cef.MessageLoopWork() ok")
143138

144139
# Test browser closing. Remember to clean reference.
145-
g_browser.CloseBrowser(True)
146-
g_browser = None
140+
browser.CloseBrowser(True)
141+
del browser
147142
subtest_message("browser.CloseBrowser() ok")
148143

149144
# Give it some time to close before calling shutdown.
@@ -152,20 +147,22 @@ def test_main(self):
152147
cef.MessageLoopWork()
153148
time.sleep(0.01)
154149

155-
# Client handler asserts and javascript External asserts
156-
for obj in [g_client_handler, g_external]:
150+
# Asserts in handlers and in external
151+
for obj in [] + client_handlers + [global_handler, external]:
157152
test_for_True = False # Test whether asserts are working correctly
158153
for key, value in obj.__dict__.items():
159154
if key == "test_for_True":
160155
test_for_True = True
161156
continue
162157
if "_True" in key:
163-
self.assertTrue(value, "Check assert: "+key)
158+
self.assertTrue(value, "Check assert: " +
159+
obj.__class__.__name__ + "." + key)
164160
subtest_message(obj.__class__.__name__ + "." +
165161
key.replace("_True", "") +
166162
" ok")
167163
elif "_False" in key:
168-
self.assertFalse(value, "Check assert: "+key)
164+
self.assertFalse(value, "Check assert: " +
165+
obj.__class__.__name__ + "." + key)
169166
subtest_message(obj.__class__.__name__ + "." +
170167
key.replace("_False", "") +
171168
" ok")
@@ -180,24 +177,30 @@ def test_main(self):
180177
sys.stdout.flush()
181178

182179

183-
class ClientHandler(object):
180+
class GlobalHandler(object):
184181
def __init__(self, test_case):
185182
self.test_case = test_case
186-
self.frame_source_visitor = None
187183

188184
# Asserts for True/False will be checked just before shutdown
189185
self.test_for_True = True # Test whether asserts are working correctly
190186
self.OnAfterCreated_True = False
191-
self.OnLoadStart_True = False
192-
self.OnLoadEnd_True = False
193-
self.FrameSourceVisitor_True = False
194-
self.javascript_errors_False = False
195-
self.OnConsoleMessage_True = False
196187

197188
# noinspection PyUnusedLocal
198189
def _OnAfterCreated(self, browser):
199190
self.OnAfterCreated_True = True
200191

192+
193+
class LoadHandler(object):
194+
def __init__(self, test_case):
195+
self.test_case = test_case
196+
self.frame_source_visitor = None
197+
198+
# Asserts for True/False will be checked just before shutdown
199+
self.test_for_True = True # Test whether asserts are working correctly
200+
self.OnLoadStart_True = False
201+
self.OnLoadEnd_True = False
202+
self.FrameSourceVisitor_True = False
203+
201204
# noinspection PyUnusedLocal
202205
def OnLoadStart(self, browser, frame):
203206
self.test_case.assertEqual(browser.GetUrl(), g_datauri)
@@ -209,9 +212,19 @@ def OnLoadEnd(self, browser, frame, http_code):
209212
self.frame_source_visitor = FrameSourceVisitor(self, self.test_case)
210213
frame.GetSource(self.frame_source_visitor)
211214
browser.ExecuteJavascript(
212-
"print('ClientHandler.OnLoadEnd() ok')")
215+
"print('LoadHandler.OnLoadEnd() ok')")
213216
self.OnLoadEnd_True = True
214217

218+
219+
class DisplayHandler(object):
220+
def __init__(self, test_case):
221+
self.test_case = test_case
222+
223+
# Asserts for True/False will be checked just before shutdown
224+
self.test_for_True = True # Test whether asserts are working correctly
225+
self.javascript_errors_False = False
226+
self.OnConsoleMessage_True = False
227+
215228
# noinspection PyUnusedLocal
216229
def OnConsoleMessage(self, browser, message, source, line):
217230
if "error" in message.lower() or "uncaught" in message.lower():

0 commit comments

Comments
 (0)