def test_validate_commands(self, *args): call_args = [ ["element"], ["window"], ] [numerical_identifier, untranslated_data, level, segmented] = [123, "whatever", 2, 10000] commands = call_args + [ ["method", ["element"], "method_name"] + call_args, ["function", ["element"]] + call_args, ["id", "untranslated"], ["bytes", u"12ff"], ["list"] + call_args, ["dict", { "key": ["element"] }], [ "callback", numerical_identifier, untranslated_data, level, segmented ], ["get", ["element"], "whatever"], ["set", ["element"], "whatever", ["window"]], ["null", ["element"]], dict, ] widget = proxy_widget.JSProxyWidget() widget.validate_commands(commands) with self.assertRaises(ValueError): widget.validate_commands([["BAD_INDICATOR", "OTHER", "STUFF"]]) with self.assertRaises(ValueError): widget.validate_command("TOP LEVEL COMMAND MUST BE A LIST", top=True)
def test_save_new(self, *mocks): widget = proxy_widget.JSProxyWidget() #m = widget.element.New = MagicMock() m2 = widget.save = MagicMock() widget.save_new("name", "constructor", [1, 2, 3]) #assert m.called assert m2.called
def test_widget_call(self): widget = proxy_widget.JSProxyWidget() m = widget.flush = MagicMock() widget.send_commands = MagicMock() widget.auto_flush = True widget("console.log('not executed')") assert m.called
def test_handle_custom_message(self, *mocks): i = proxy_widget.INDICATOR p = proxy_widget.PAYLOAD data_list = [ { i: proxy_widget.RESULTS, p: "bogus payload" }, { i: proxy_widget.CALLBACK_RESULTS, p: "bogus payload" }, { i: proxy_widget.JSON_CB_FINAL, p: "[1,2,3]" }, { i: proxy_widget.JSON_CB_FRAGMENT, p: "bogus payload" }, { i: "unknown indicator", p: "bogus payload" }, ] for data in data_list: widget = proxy_widget.JSProxyWidget() widget.handle_custom_message(None, data)
def test_seg_callback(self, *args): widget = proxy_widget.JSProxyWidget() def f(*args): return args data = (1, 2, 3) widget.seg_callback(f, data)
def test_require_js(self, *mocks): widget = proxy_widget.JSProxyWidget() def uses_require(action): action() widget.uses_require = uses_require widget.require_js("js/simple.css", "js/simple.css")
def test_get_value_async_smoke_test(self): "real test is in end_to_end_testing" js = "1 + 1" widget = proxy_widget.JSProxyWidget() m = widget.js_init = MagicMock(return_value=3) callback = None # never called in smoke test widget.get_value_async(callback, js, debug=True) assert m.called
def test_require_loads(self, *mocks): widget = proxy_widget.JSProxyWidget() e = widget.element = RequireMockElement() e.require_is_loaded = False proxy_widget.JSProxyWidget._require_checked = False action = MagicMock() widget.uses_require(action) assert action.called
def test_handle_rendered_error(self): widget = proxy_widget.JSProxyWidget() widget.buffered_commands = ["bogus"] m = widget.send_commands = MagicMock(side_effect=KeyError('foo')) with self.assertRaises(KeyError): #widget.handle_rendered("att", "old", "new") widget.rendered = True assert m.called
def test_handle_custom_message_error(self, *mocks): i = proxy_widget.INDICATOR p = proxy_widget.PAYLOAD data = {i: proxy_widget.RESULTS, p: "bogus payload"} widget = proxy_widget.JSProxyWidget() m = widget.handle_results = MagicMock(side_effect=KeyError('foo')) with self.assertRaises(KeyError): widget.handle_custom_message(None, data)
def test_element_wrapper(self, *args): widget = proxy_widget.JSProxyWidget() element = MagicMock() widget.get_element = MagicMock(returns=element) element._set = MagicMock() wrapper = proxy_widget.ElementWrapper(widget) get_attribute = wrapper.some_attribute set_attribute = wrapper._set("some_attribute", "some value") assert widget.get_element.called
def test_handle_rendered(self): widget = proxy_widget.JSProxyWidget() #widget.commands_awaiting_render = ["bogus"] widget.buffered_commands = ["bogus"] m = widget.send_commands = MagicMock() #widget.handle_rendered("att", "old", "new") widget.rendered = True assert m.called self.assertEqual(widget.status, "Rendered.")
def test_require_wont_load(self, *mocks): widget = proxy_widget.JSProxyWidget() e = widget.element = RequireMockElement() e.require_is_loaded = False proxy_widget.JSProxyWidget._require_checked = True action = MagicMock() with self.assertRaises(ImportError): widget.uses_require(action) assert not action.called
def test_lazy_get(self, *args): widget = proxy_widget.JSProxyWidget() get = widget.element["AnyAttribute"] method_call = get("called") self.assertIsInstance(method_call, proxy_widget.LazyMethodCall) call_attribute = method_call["someOtherAttribute"] self.assertIsInstance(call_attribute, proxy_widget.LazyGet) self.assertIsInstance(repr(call_attribute), str) # exercise the repr method
def test_set_element(self): "is this method used?" name = "name" value = "value" widget = proxy_widget.JSProxyWidget() m = widget.js_init = MagicMock(return_value=3) widget.set_element(name, value) m.assert_called_with("element[slot_name] = value;", slot_name=name, value=value)
def test_callback_results(self, *args): widget = proxy_widget.JSProxyWidget() widget.verbose = True new_results = [1, 2, [3], 4] [identifier, json_value, arguments, counter] = new_results cb = MagicMock() i2c = widget.identifier_to_callback = {identifier: cb} widget.handle_callback_results(new_results) assert cb.called assert len(i2c) == 1
def test_on_rendered(self, *args): widget = proxy_widget.JSProxyWidget() def fake_js_init(js, call_it): call_it() widget.js_init = fake_js_init m = MagicMock() widget.on_rendered(m, "some", "arguments") assert m.called
def test_evaluate_success(self, *args): widget = proxy_widget.JSProxyWidget() def fake_poll(*args): widget._synced_command_evaluated = True widget._synced_command_result = 42 proxy_widget.run_ui_poll_loop = fake_poll get_value = widget.element["AnyAttribute"].sync_value(ms_delay=10) self.assertEqual(get_value, 42)
def test_send_command_before_render(self, *args): widget = proxy_widget.JSProxyWidget() widget.rendered = False command = [1, 2, 3] cb = MagicMock() before = len(widget.buffered_commands) widget.send_command(command, cb) assert not cb.called assert len(widget.buffered_commands) == before + 1 return widget
def test_flush(self): widget = proxy_widget.JSProxyWidget() m = widget.send_commands = MagicMock() widget.flush() assert not m.called widget.rendered = True widget.flush() assert m.called widget.error_on_flush = True with self.assertRaises(ValueError): widget.flush()
def test_evaluate_exception(self, *args): widget = proxy_widget.JSProxyWidget() def fake_poll(*args): widget._synced_command_evaluated = True widget._synced_command_result = "SOMETHING WENT WRONG" widget.error_msg = "SOMETHING WENT WRONG" proxy_widget.run_ui_poll_loop = fake_poll with self.assertRaises(proxy_widget.JavascriptException): get_value = widget.element["AnyAttribute"].sync_value(ms_delay=10)
def test_save_function(self): widget = proxy_widget.JSProxyWidget() m = widget.save_new = MagicMock() class fakeWindow: Function = None m2 = widget.window = MagicMock(return_value=fakeWindow) widget.save_function("name", ("a", "b"), "return a+b") assert m.called assert m2.called
def test_handle_results(self, *args): widget = proxy_widget.JSProxyWidget() widget.verbose = True idnt = 1 cb = MagicMock() i2c = widget.identifier_to_callback = {idnt: cb} v = "the value" new_results = [idnt, v] widget.handle_results(new_results) assert cb.called assert len(i2c) == 0
def test_require_loads_action_fails(self, *mocks): widget = proxy_widget.JSProxyWidget() e = widget.element = RequireMockElement() e.require_is_loaded = False proxy_widget.JSProxyWidget._require_checked = False action = MagicMock(side_effect=KeyError('foo')) #with self.assertRaises(KeyError): widget.error_msg = "" widget.uses_require(action) assert action.called assert widget.error_msg.startswith( "require.js delayed action exception")
def test_handle_results_error(self, *args): widget = proxy_widget.JSProxyWidget() widget.verbose = True idnt = 1 cb = MagicMock(side_effect=KeyError('foo')) i2c = widget.identifier_to_callback = {idnt: cb} v = "the value" new_results = [idnt, v] with self.assertRaises(KeyError): widget.handle_results(new_results) assert cb.called assert len(i2c) == 0
def test_callback_results_error(self, *args): widget = proxy_widget.JSProxyWidget() widget.verbose = True new_results = [1, 2, [3], 4] [identifier, json_value, arguments, counter] = new_results cb = MagicMock(side_effect=KeyError('foo')) i2c = widget.identifier_to_callback = {identifier: cb} with self.assertRaises(KeyError): widget.handle_callback_results(new_results) assert cb.called assert len(i2c) == 1 assert widget.error_msg.startswith("Handle callback results")
def test_delay_flush(self): widget = proxy_widget.JSProxyWidget() m = widget.send_commands = MagicMock() widget.rendered = True widget.flush() assert m.called m = widget.send_commands = MagicMock() with widget.delay_flush(): widget.element.do_something_in_javascript() assert not m.called assert len(widget.buffered_commands) > 0 assert m.called assert len(widget.buffered_commands) == 0
def test_in_dialog(self, *args): widget = proxy_widget.JSProxyWidget() m = MagicMock() widget.element.dialog = m widget.in_dialog( title="A Counter", autoOpen=False, buttons=dict(Increment=MagicMock()), height=150, width=600, modal=True, show=dict(effect="blind", duration=1000), hide=dict(effect="fade", duration=1000), ) assert m.called
def test_load_js_files(self, *args): widget = proxy_widget.JSProxyWidget() def mock_callable(c): return c widget.callable = mock_callable def mock_test_js_loaded(paths, dummy, callback): callback() widget.element.test_js_loaded = mock_test_js_loaded widget.send_command = MagicMock() widget.load_js_files(["js/simple.js"], force=False) widget.load_js_files(["js/simple.js"], force=True)
def test_callable(self, *args): widget = proxy_widget.JSProxyWidget() def f(*args): #print("got args: " + repr(args)) return args c = widget.callable(f) c2 = widget.callable(c) assert c is c2 assert type(c) is jp_proxy_widget.CallMaker # call the callback identifier = c.args[0] callback = widget.identifier_to_callback[identifier] callback("dummy", {"0": "the first argument"})