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"]
Exemple #32
0
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()
Exemple #34
0
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()