def test_fx7_nsIDOMFile(): """Test that nsIDOMFile methods are flagged.""" err = _do_real_test_raw(""" var x = Components.classes.createInstance( Components.interfaces.nsIDOMFile); x.getAsBinary(); """) assert not err.failed(fail_on_warnings=False) assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = Components.classes["foo"].createInstance( Components.interfaces.nsIDOMFile); x.getAsDataURL(); """, versions={FIREFOX_GUID: version_range("firefox", "7.0a1")}) assert not err.failed(fail_on_warnings=False) assert len(err.notices) == 1 assert err.compat_summary["errors"] err = _do_real_test_raw(""" var x = document.getElementById("whatever"); x.getAsDataURL(); """, versions={FIREFOX_GUID: version_range("firefox", "7.0a1")}) assert not err.failed() assert len(err.notices) == 1 assert err.compat_summary["errors"]
def test_tb11_compatibility(): """ Test that the changed/removed interfaces for Thunderbird 11 are flagged. """ err = _do_real_test_raw(""" var x = Components.classes["foo"].createInstance( Components.interfaces.nsIMsgQuote); x.quoteMessage(); var y = Components.classes["foo"].createInstance( Components.interfaces.nsIMailtoUrl); y.GetMessageContents(); """) assert not err.failed(fail_on_warnings=False) assert not err.warnings assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = Components.classes["foo"].createInstance( Components.interfaces.nsIMsgQuote); x.quoteMessage(); var y = Components.classes["foo"].createInstance( Components.interfaces.nsIMailtoUrl); y.GetMessageContents(); """, versions={TB_GUID: version_range("thunderbird", "11.0a1")}) assert err.failed assert len(err.notices) == 2 assert err.compat_summary["errors"]
def test_fx13_interfaces(): """ Test that the Gecko 13 compatibility warnings and errors for matched patterns are thrown when they're supposed to. """ err = _do_real_test_raw(""" var x = Components.interfaces.nsILivemarkService; """, versions={FIREFOX_GUID: version_range("firefox", "13.0a1")}) assert not err.failed(fail_on_warnings=False) assert err.compat_summary["errors"] err = _do_real_test_raw(""" var x = Components.interfaces.nsIPrefBranch2; """, versions={FIREFOX_GUID: version_range("firefox", "13.0a1")}) assert not err.failed(fail_on_warnings=False) assert err.compat_summary["warnings"] err = _do_real_test_raw(""" var x = Components.interfaces.nsIScriptableUnescapeHTML; """, versions={FIREFOX_GUID: version_range("firefox", "13.0a1")}) assert not err.failed(fail_on_warnings=False) assert err.compat_summary["warnings"] err = _do_real_test_raw(""" var x = Components.interfaces.nsIAccessNode; """, versions={FIREFOX_GUID: version_range("firefox", "13.0a1")}) assert not err.failed(fail_on_warnings=False) assert err.compat_summary["errors"]
def test_tb7_deRDF_addressbook(): """Test that addressbook rdf sources are flagged""" err = _do_real_test_raw(""" var x = 'datasources="rdf:addressdirectory" ref="moz-abdirectory://"'; """) assert not err.failed() assert not err.notices err = _do_real_test_raw(""" var x = 'datasources="rdf:addressdirectory" ref="moz-abdirectory://"'; """, versions={TB_GUID: version_range("thunderbird", "7.0a1")}) assert not err.failed() assert err.notices assert err.compat_summary["errors"] err = _do_real_test_raw(""" var x = 'GetResource(SomeText).QueryInterface(6inTestxnsIAbDirectory);'; """) assert not err.failed() assert not err.notices err = _do_real_test_raw(""" var x = "GetResource(SomeText).QueryInterface(Some8678StuffnsIAbDirectory)"; """, versions={TB_GUID: version_range("thunderbird", "7.0a1")}) assert not err.failed() assert err.notices assert err.compat_summary["errors"]
def test_pollution_jetpack_bootstrap(): """ Test that Jetpack addons and bootstrapped addons are not flagged for pollution. """ assert not _do_real_test_raw(""" a = "foo"; b = "foo"; c = "foo"; d = "foo"; """, path="foo.js", metadata={ "is_jetpack": True }).failed() assert not _do_real_test_raw(""" a = "foo"; b = "foo"; c = "foo"; d = "foo"; """, path="foo.js", resources={ "em:bootstrap": "true" }).failed()
def test_tb10_compatibility(): """ Test that MsgDeleteMessageFromMessageWindow, goToggleSplitter, AddMessageComposeOfflineObserver, and RemoveMessageComposeOfflineObserver are flagged. """ err = _do_real_test_raw(""" var x = ""; x = MsgDeleteMessageFromMessageWindow(); goToggleSplitter(); AddMessageComposeOfflineObserver(); RemoveMessageComposeOfflineObserver(); x = gDownloadManagerStrings.get(); """) assert not err.failed(fail_on_warnings=False) assert not err.warnings assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = ""; x = MsgDeleteMessageFromMessageWindow(); goToggleSplitter(); AddMessageComposeOfflineObserver(); RemoveMessageComposeOfflineObserver(); x = gDownloadManagerStrings.get(); """, versions={TB_GUID: version_range("thunderbird", "10.0a1")}) assert err.failed() assert len(err.warnings) == 1 assert len(err.notices) == 4 assert err.compat_summary["errors"]
def test_window_top(): """ Test that 'window.top' (a reserved global variable as of Firefox 6) is flagged as incompatible. """ err = _do_real_test_raw(""" window.top = "foo"; top = "bar"; """) print err.print_summary(verbose=True) assert not err.failed() assert not err.notices err = _do_real_test_raw(""" window.top = "foo"; """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "6.0a1")}) print err.print_summary(verbose=True) assert not err.failed() assert err.notices assert err.compat_summary["warnings"] err = _do_real_test_raw(""" top = "foo"; """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "6.0a1")}) print err.print_summary(verbose=True) assert not err.failed() assert err.notices assert err.compat_summary["warnings"]
def test_fx7_nsIDOMFile(): """Test that nsIDOMFile methods are flagged.""" err = _do_real_test_raw(""" var x = Components.classes.createInstance( Components.interfaces.nsIDOMFile); x.getAsBinary(); """) assert not err.failed() assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = Components.classes["foo"].createInstance( Components.interfaces.nsIDOMFile); x.getAsDataURL(); """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "7.0a1")}) assert not err.failed() assert len(err.notices) == 1 assert err.compat_summary["errors"] err = _do_real_test_raw(""" var x = document.getElementById("whatever"); x.getAsDataURL(); """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "7.0a1")}) assert not err.failed() assert len(err.notices) == 1 assert err.compat_summary["errors"]
def test_tb9_compatibility(): """ Test that gComposeBundle, FocusOnFirstAttachment, WhichPaneHasFocus are flagged. """ err = _do_real_test_raw(""" var x = ""; x = gComposeBundle(); FocusOnFirstAttachment(); WhichPaneHasFocus(); """) assert not err.failed(fail_on_warnings=False) assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = ""; x = gComposeBundle(); FocusOnFirstAttachment(); WhichPaneHasFocus(); """, versions={TB_GUID: version_range("thunderbird", "9.0a1")}) assert not err.failed(fail_on_warnings=False) assert len(err.notices) == 3 assert err.compat_summary["errors"]
def test_tb12_compatibility(): """ Test that the changed/removed interfaces for Thunderbird 12 are flagged. """ err = _do_real_test_raw(""" var x = Components.classes["foo"].createInstance( Components.interfaces.nsIMsgDBService); x.openMailDBFromFile(); var y = Components.classes["foo"].createInstance( Components.interfaces.nsIMsgDatabase); y.Open(); """) assert not err.failed(fail_on_warnings=False) assert not err.warnings assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = Components.classes["foo"].createInstance( Components.interfaces.nsIMsgDBService); x.openMailDBFromFile(); var y = Components.classes["foo"].createInstance( Components.interfaces.nsIMsgDatabase); y.Open(); """, versions={TB_GUID: version_range("thunderbird", "12.0a1")}) assert err.failed assert len(err.notices) == 2 assert err.compat_summary["errors"]
def test_tb7_mail_attachment_api(): """Test that the old mail attachment global functions are flagged.""" err = _do_real_test_raw(""" createNewAttachmentInfo(); saveAttachment(); attachmentIsEmpty(); openAttachment(); detachAttachment(); cloneAttachment(); """) assert not err.failed() assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" createNewAttachmentInfo(); saveAttachment(); attachmentIsEmpty(); openAttachment(); detachAttachment(); cloneAttachment(); """, versions={TB_GUID: version_range("thunderbird", "7.0a1")}) assert not err.failed() assert len(err.notices) == 6 assert err.compat_summary["errors"]
def futureCompatError(code, version): err = _do_real_test_raw(code) assert not err.failed() assert not any(err.compat_summary.values()) err = _do_real_test_raw( code, versions={FIREFOX_GUID: version_range("firefox", version)}) print err.print_summary() assert err.failed() assert err.compat_summary["errors"]
def futureCompatError(code, version): err = _do_real_test_raw(code) assert not err.failed(fail_on_warnings=False) assert not any(err.compat_summary.values()) err = _do_real_test_raw( code, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", version)}) assert err.failed(fail_on_warnings=False) assert err.compat_summary["errors"]
def futureCompatWarning(code, version, fails=True): err = _do_real_test_raw(code) assert not err.failed() assert not any(err.compat_summary.values()) err = _do_real_test_raw( code, versions={FIREFOX_GUID: version_range("firefox", version)}) if fails: assert err.failed() else: assert not err.failed() assert err.notices assert err.compat_summary["warnings"]
def test_fx7_markupdocumentviewer(): """Test that nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH is flagged.""" err = _do_real_test_raw(""" var x = "nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH"; """) assert not err.failed() assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = "nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH"; """, versions={FIREFOX_GUID: version_range("firefox", "7.0a1")}) assert not err.failed(fail_on_warnings=False) assert err.warnings assert err.compat_summary["warnings"]
def futureCompatWarning(code, version, fails=True): err = _do_real_test_raw(code) assert not err.failed() assert not any(err.compat_summary.values()) err = _do_real_test_raw( code, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", version)}) if fails: assert err.failed() else: assert not err.failed() assert err.notices assert err.compat_summary["warnings"]
def test_excludeItemsIfParentHasAnnotation(): """ Test that `excludeItemsIfParentHasAnnotation` is flagged for Gecko 13. """ err = _do_real_test_raw(""" var x = window.excludeItemsIfParentHasAnnotation; """) assert not err.failed() err = _do_real_test_raw(""" var x = window.excludeItemsIfParentHasAnnotation; """, versions={FIREFOX_GUID: version_range("firefox", "13.0a1")}) assert err.failed() assert err.compat_summary["errors"]
def test_tb7_dictUtils_removal(): """Test that dictUtils.js imports are flagged""" err = _do_real_test_raw(""" var x = 'Components.utils.import("resource:///modules/dictUtils.js");'; """) assert not err.failed() assert not err.warnings err = _do_real_test_raw(""" var x = 'Components.utils.import("resource:///modules/dictUtils.js");'; """, versions={TB_GUID: version_range("thunderbird", "7.0a1")}) assert err.failed() assert err.warnings assert err.compat_summary["errors"]
def test_fx11_compatibility(): """Test that changes in FX11 are flagged.""" err = _do_real_test_raw(""" var x = "nsICharsetResolver"; """) assert not err.failed() assert not err.warnings err = _do_real_test_raw(""" var x = "nsICharsetResolver"; """, versions={FIREFOX_GUID: version_range("firefox", "11.0a1")}) assert err.failed() assert err.warnings assert err.compat_summary["errors"]
def test_requestAnimationFrame(): """ Test that requestAnimationFrame requires at least one parameter. """ err = _do_real_test_raw(""" requestAnimationFrame(foo); """, versions={FIREFOX_GUID: version_range("firefox", "11.0a1")}) assert not err.failed() err = _do_real_test_raw(""" requestAnimationFrame(); """, versions={FIREFOX_GUID: version_range("firefox", "11.0a1")}) assert err.failed() assert err.compat_summary["errors"]
def test_fx11_compatibility(): """Test that changes in FX11 are flagged.""" err = _do_real_test_raw(""" var x = "nsICharsetResolver"; """) assert not err.failed() assert not err.warnings err = _do_real_test_raw(""" var x = "nsICharsetResolver"; """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "11.0a1")}) assert err.failed() assert err.warnings assert err.compat_summary["errors"]
def test_tb7_dictUtils_removal(): """Test that dictUtils.js imports are flagged""" err = _do_real_test_raw(""" var x = 'Components.utils.import("resource:///modules/dictUtils.js");'; """) assert not err.failed() assert not err.notices err = _do_real_test_raw(""" var x = 'Components.utils.import("resource:///modules/dictUtils.js");'; """, versions={'{3550f703-e582-4d05-9a08-453d09bdfdc6}': version_range("thunderbird", "7.0a1")}) assert not err.failed() assert err.notices assert err.compat_summary["errors"]
def test_globalStorage_flagged(): """ Test that all references to `globalStorage` are flagged with a warning and a compatibility error. """ err = _do_real_test_raw(""" var x = window.globalStorage["foo"]; """) assert not err.failed() err = _do_real_test_raw(""" var x = window.globalStorage["foo"]; """, versions={FIREFOX_GUID: version_range("firefox", "13.0a1")}) assert err.failed() assert err.compat_summary["errors"]
def test_fx7_nsinavhistoryobserver(): """Test that nsINavHistoryObserver is flagged.""" err = _do_real_test_raw(""" var x = "nsINavHistoryObserver"; """) assert not err.failed() assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = "nsINavHistoryObserver"; """, versions={FIREFOX_GUID: version_range("firefox", "7.0a1")}) assert not err.failed() assert err.notices assert err.compat_summary["errors"]
def test_fx9_nsIURLParser_parsePath(): """ nsIURLParser.parsePath takes 8 args instead of 10 now. """ futureCompatError( """ var URLi = Components.classes[ "@mozilla.org/network/url-parser;1?auth=maybe"]. createInstance(Components.interfaces.nsIURLParser); var filepathPos = {}, filepathLen = {}, paramPos = {}, paramLen = {}, queryPos = {}, queryLen = {}, refPos = {}, refLen = {}; URLi.parsePath(urlObj.path, -1, filepathPos, filepathLen, paramPos, paramLen, queryPos, queryLen, refPos, refLen); """, '9.0a1') err = _do_real_test_raw( """ var URLi = Components.classes[ "@mozilla.org/network/url-parser;1?auth=maybe"]. createInstance(Components.interfaces.nsIURLParser); var filepathPos = {}, filepathLen = {}, queryPos = {}, queryLen = {}, refPos = {}, refLen = {}; URLi.parsePath(urlObj.path, -1, filepathPos, filepathLen, queryPos, queryLen, refPos, refLen); """, versions={FIREFOX_GUID: version_range("firefox", "9.0a1")}) assert not err.failed(fail_on_warnings=False) assert not err.compat_summary["errors"]
def test_fx9_nsIBrowserHistory_removePages(): """ nsIBrowserHistory.removePages() takes 2 arguments instead of 3 in Firefox 9. """ futureCompatError( """ var browserHistory = Components.classes[ "@mozilla.org/browser/global-history;2"] .getService( Components.interfaces.nsIBrowserHistory); browserHistory.removePages(uriList, uriList.length, false); """, '9.0a1') err = _do_real_test_raw( """ var browserHistory = Components.classes[ "@mozilla.org/browser/global-history;2"] .getService( Components.interfaces.nsIBrowserHistory); browserHistory.removePages(uriList, uriList.length); """, versions={FIREFOX_GUID: version_range("firefox", "9.0a1")}) assert not err.failed(fail_on_warnings=False) assert not err.compat_summary["errors"]
def test_fx9_nsIEditor_updateDefaultDictionary(): """ nsIEditorSpellCheck.UpdateDefaultDictionary takes no arguments in Firefox 9. """ futureCompatError( """ var spellChecker = Components.classes[ '@mozilla.org/editor/editorspellchecker;1'] .createInstance( Components.interfaces.nsIEditorSpellCheck); spellChecker.UpdateCurrentDictionary(null); """, '9.0a1') err = _do_real_test_raw( """ var spellChecker = Components.classes[ '@mozilla.org/editor/editorspellchecker;1'] .createInstance( Components.interfaces.nsIEditorSpellCheck); spellChecker.UpdateCurrentDictionary(); """, versions={FIREFOX_GUID: version_range("firefox", "9.0a1")}) assert not err.failed(fail_on_warnings=False) assert not err.compat_summary["errors"]
def test_flag_getSelection(): """Test that document.getSelection is flagged in FX8.""" err = _do_real_test_raw(""" var x = document.getSelection(); """) assert not err.failed() assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = document.getSelection(); """, versions={FIREFOX_GUID: version_range("firefox", "8.0a1", "9.0a1")}) assert not err.failed() assert len(err.notices) == 1 assert err.compat_summary["errors"]
def test_navigator_language(): """ Test that 'navigator.language' is flagged as potentially incompatile with FX5. """ err = _do_real_test_raw(""" alert(navigator.language); """) assert not err.failed() assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" alert(navigator.language); """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "5.0")}) assert not err.failed() assert err.compat_summary["errors"]
def test_fx7_markupdocumentviewer(): """Test that nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH is flagged.""" err = _do_real_test_raw(""" var x = "nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH"; """) assert not err.failed() assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = "nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH"; """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "7.0a1")}) assert not err.failed() assert err.notices assert err.compat_summary["warnings"]
def test_fx7_nsinavhistoryobserver(): """Test that nsINavHistoryObserver is flagged.""" err = _do_real_test_raw(""" var x = "nsINavHistoryObserver"; """) assert not err.failed() assert not err.notices assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" var x = "nsINavHistoryObserver"; """, versions={'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': version_range("firefox", "7.0a1")}) assert not err.failed() assert err.notices assert err.compat_summary["errors"]
def test_banned_interfaces(): """Test that banned XPCOM interfaces are flagged.""" err = _do_real_test_raw(""" Components.classes[""].createInstance( Components.interfaces.nsIDOMDocumentTraversal); """) print err.print_summary(verbose=True) print err.compat_summary assert not err.failed(fail_on_warnings=False) assert not any(err.compat_summary.values()) err = _do_real_test_raw(""" Components.classes[""].createInstance( Components.interfaces.nsIDOMDocumentTraversal); """, versions={"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": ["6.0a1"]}) print err.print_summary(verbose=True) print err.compat_summary assert not err.failed(fail_on_warnings=False) assert err.compat_summary["errors"]
def test_assignment_with_pollution(): """ Access a bunch of identifiers, but do not write to them. Accessing undefined globals should not create scoped objects. """ assert not _do_real_test_raw(""" var x = ""; x = foo; x = bar; x = zap; x = baz; // would otherwise cause pollution errors. """).failed()
def test_js_banned(): """Test that JS is banned in themes.""" err = _do_real_test_raw("""foo();""", detected_type=PACKAGE_THEME) print err.print_summary(verbose=True) assert err.failed()