diff --git a/tests/test_js_instanceproperties.py b/tests/test_js_instanceproperties.py index 19d17e546..64b093aef 100644 --- a/tests/test_js_instanceproperties.py +++ b/tests/test_js_instanceproperties.py @@ -136,3 +136,18 @@ def test_on_event_handleEvent_fail(self): """) self.assert_failed(with_errors=True) + def test_on_event_handleEvent_ignore(self): + """ + Test that dirty objects don't trigger handleEvent errors. + """ + + self.setup_err(for_appversions=FX18_DEFINITION) + + self.run_script(""" + var dirty = this_creates_a_dirty_object(); + foo.onclick = dirty; + """) + self.assert_silent() + + + diff --git a/validator/testcases/javascript/instanceproperties.py b/validator/testcases/javascript/instanceproperties.py index c5ece3d74..a2f46c9b8 100644 --- a/validator/testcases/javascript/instanceproperties.py +++ b/validator/testcases/javascript/instanceproperties.py @@ -104,7 +104,8 @@ def set_on_event(new_value, traverser): line=traverser.line, column=traverser.position, context=traverser.context) - elif not is_literal and new_value.has_property("handleEvent"): + elif (not is_literal and isinstance(new_value.value, jstypes.JSObject) and + "handleEvent" in new_value.value.data): mess_type = (traverser.err.error if traverser.err.supports_version(FX18_DEFINITION) else traverser.err.warning)