Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/toolkit/content/tests/chrome/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 19 kB image not shown  

Quelle  test_preferences.xhtml   Sprache: unbekannt

 
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>

<window title="Preferences Window Tests"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        onload="RunTest();">

  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>

  <script type="application/javascript">
  <![CDATA[
    SimpleTest.waitForExplicitFinish();

    const kPref = SpecialPowers.Services.prefs;

    // preference values, set 1
    const kPrefValueSet1 = {
      int: 23,
      bool: true,
      string: "rheeet!",
      unichar: "äöüßÄÖÜ",
      wstring_data: "日本語",
      file_data: "/",

      wstring: Cc["@mozilla.org/pref-localizedstring;1"].createInstance(
        Ci.nsIPrefLocalizedString
      ),
      file: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile),
    };
    kPrefValueSet1.wstring.data = kPrefValueSet1.wstring_data;
    SafeFileInit(kPrefValueSet1.file, kPrefValueSet1.file_data);

    // preference values, set 2
    const kPrefValueSet2 = {
      int: 42,
      bool: false,
      string: "Mozilla",
      unichar: "áôùšŽ",
      wstring_data: "헤드라인A",
      file_data: "/home",

      wstring: Cc["@mozilla.org/pref-localizedstring;1"].createInstance(
        Ci.nsIPrefLocalizedString
      ),
      file: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile),
    };
    kPrefValueSet2.wstring.data = kPrefValueSet2.wstring_data;
    SafeFileInit(kPrefValueSet2.file, kPrefValueSet2.file_data);

    function SafeFileInit(aFile, aPath) {
      // set file path without dying for exceptions
      try {
        aFile.initWithPath(aPath);
      } catch {}
    }

    function CreateEmptyPrefValueSet() {
      var result = {
        int: undefined,
        bool: undefined,
        string: undefined,
        unichar: undefined,
        wstring_data: undefined,
        file_data: undefined,
        wstring: undefined,
        file: undefined,
      };
      return result;
    }

    function WritePrefsToSystem(aPrefValueSet) {
      // write preference data via XPCOM
      kPref.setIntPref("tests.static_preference_int", aPrefValueSet.int);
      kPref.setBoolPref("tests.static_preference_bool", aPrefValueSet.bool);
      kPref.setCharPref("tests.static_preference_string", aPrefValueSet.string);
      kPref.setStringPref("tests.static_preference_unichar", aPrefValueSet.unichar);
      kPref.setComplexValue(
        "tests.static_preference_wstring",
        Ci.nsIPrefLocalizedString,
        aPrefValueSet.wstring
      );
      kPref.setComplexValue(
        "tests.static_preference_file",
        Ci.nsIFile,
        aPrefValueSet.file
      );
    }

    function ReadPrefsFromSystem() {
      // read preference data via XPCOM
      var result = CreateEmptyPrefValueSet();
      // eslint-disable-next-line mozilla/use-default-preference-values
      try {
        result.int = kPref.getIntPref("tests.static_preference_int");
      } catch {}
      // eslint-disable-next-line mozilla/use-default-preference-values
      try {
        result.bool = kPref.getBoolPref("tests.static_preference_bool");
      } catch {}
      // eslint-disable-next-line mozilla/use-default-preference-values
      try {
        result.string = kPref.getCharPref("tests.static_preference_string");
      } catch {}
      try {
        result.unichar = kPref.getStringPref("tests.static_preference_unichar");
      } catch {}
      try {
        result.wstring = kPref.getComplexValue(
          "tests.static_preference_wstring",
          Ci.nsIPrefLocalizedString
        );
        result.wstring_data = result.wstring.data;
      } catch {}
      try {
        result.file = kPref.getComplexValue(
          "tests.static_preference_file",
          Ci.nsIFile
        );
        result.file_data = result.file.data;
      } catch {}
      return result;
    }

    function GetXULElement(aPrefWindow, aID) {
      return aPrefWindow.document.getElementById(aID);
    }

    function GetPreference(aPrefWindow, aID) {
      return aPrefWindow.Preferences.get(aID);
    }

    function WritePrefsToPreferences(aPrefWindow, aPrefValueSet) {
      // write preference data into Preference instances
      GetPreference(aPrefWindow, "tests.static_preference_int").value =
        aPrefValueSet.int;
      GetPreference(aPrefWindow, "tests.static_preference_bool").value =
        aPrefValueSet.bool;
      GetPreference(aPrefWindow, "tests.static_preference_string").value =
        aPrefValueSet.string;
      GetPreference(aPrefWindow, "tests.static_preference_unichar").value =
        aPrefValueSet.unichar;
      GetPreference(aPrefWindow, "tests.static_preference_wstring").value =
        aPrefValueSet.wstring_data;
      GetPreference(aPrefWindow, "tests.static_preference_file").value =
        aPrefValueSet.file_data;
    }

    function ReadPrefsFromPreferences(aPrefWindow) {
      // read preference data from Preference instances
      var result = {
        int: GetPreference(aPrefWindow, "tests.static_preference_int").value,
        bool: GetPreference(aPrefWindow, "tests.static_preference_bool").value,
        string: GetPreference(aPrefWindow, "tests.static_preference_string").value,
        unichar: GetPreference(aPrefWindow, "tests.static_preference_unichar")
          .value,
        wstring_data: GetPreference(aPrefWindow, "tests.static_preference_wstring")
          .value,
        file_data: GetPreference(aPrefWindow, "tests.static_preference_file").value,
        wstring: Cc["@mozilla.org/pref-localizedstring;1"].createInstance(
          Ci.nsIPrefLocalizedString
        ),
        file: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile),
      };
      result.wstring.data = result.wstring_data;
      SafeFileInit(result.file, result.file_data);
      return result;
    }

    function WritePrefsToUI(aPrefWindow, aPrefValueSet) {
      // write preference data into UI elements
      GetXULElement(aPrefWindow, "static_element_int").value = aPrefValueSet.int;
      GetXULElement(aPrefWindow, "static_element_bool").checked =
        aPrefValueSet.bool;
      GetXULElement(aPrefWindow, "static_element_string").value =
        aPrefValueSet.string;
      GetXULElement(aPrefWindow, "static_element_unichar").value =
        aPrefValueSet.unichar;
      GetXULElement(aPrefWindow, "static_element_wstring").value =
        aPrefValueSet.wstring_data;
      GetXULElement(aPrefWindow, "static_element_file").value =
        aPrefValueSet.file_data;
    }

    function ReadPrefsFromUI(aPrefWindow) {
      // read preference data from Preference instances
      var result = {
        int: GetXULElement(aPrefWindow, "static_element_int").value,
        bool: GetXULElement(aPrefWindow, "static_element_bool").checked,
        string: GetXULElement(aPrefWindow, "static_element_string").value,
        unichar: GetXULElement(aPrefWindow, "static_element_unichar").value,
        wstring_data: GetXULElement(aPrefWindow, "static_element_wstring").value,
        file_data: GetXULElement(aPrefWindow, "static_element_file").value,
        wstring: Cc["@mozilla.org/pref-localizedstring;1"].createInstance(
          Ci.nsIPrefLocalizedString
        ),
        file: Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile),
      };
      result.wstring.data = result.wstring_data;
      SafeFileInit(result.file, result.file_data);
      return result;
    }

    function RunInstantPrefTest(aPrefWindow) {
      // remark: there's currently no UI element binding for files

      // were all Preference instances correctly initialized?
      var expected = kPrefValueSet1;
      var found = ReadPrefsFromPreferences(aPrefWindow);
      ok(found.int === expected.int, "instant pref init int");
      ok(found.bool === expected.bool, "instant pref init bool");
      ok(found.string === expected.string, "instant pref init string");
      ok(found.unichar === expected.unichar, "instant pref init unichar");
      ok(found.wstring_data === expected.wstring_data, "instant pref init wstring");
      todo(found.file_data === expected.file_data, "instant pref init file");

      // were all elements correctly initialized? (loose check)
      found = ReadPrefsFromUI(aPrefWindow);
      is(found.int, "" + expected.int, "instant element init int");
      is(found.bool, expected.bool, "instant element init bool");
      is(found.string, expected.string, "instant element init string");
      is(found.unichar, expected.unichar, "instant element init unichar");
      is(
        found.wstring_data, expected.wstring_data,
        "instant element init wstring"
      );
      todo_is(found.file_data == expected.file_data, "instant element init file");

      // do some changes in the UI
      expected = kPrefValueSet2;
      WritePrefsToUI(aPrefWindow, expected);

      // UI changes should get passed to the Preference instances,
      // but currently they aren't if the changes are made programmatically
      // (the handlers preference.change/prefpane.input and prefpane.change
      // are called for manual changes, though).
      found = ReadPrefsFromPreferences(aPrefWindow);
      todo(found.int === expected.int, "instant change pref int");
      todo(found.bool === expected.bool, "instant change pref bool");
      todo(found.string === expected.string, "instant change pref string");
      todo(found.unichar === expected.unichar, "instant change pref unichar");
      todo(
        found.wstring_data === expected.wstring_data,
        "instant change pref wstring"
      );
      todo(found.file_data === expected.file_data, "instant change pref file");

      // and these changes should get passed to the system instantly
      // (which obviously can't pass with the above failing)
      found = ReadPrefsFromSystem();
      todo(found.int === expected.int, "instant change element int");
      todo(found.bool === expected.bool, "instant change element bool");
      todo(found.string === expected.string, "instant change element string");
      todo(found.unichar === expected.unichar, "instant change element unichar");
      todo(
        found.wstring_data === expected.wstring_data,
        "instant change element wstring"
      );
      todo(found.file_data === expected.file_data, "instant change element file");

      // try resetting the prefs to default values (which should be empty here)
      GetPreference(aPrefWindow, "tests.static_preference_int").reset();
      GetPreference(aPrefWindow, "tests.static_preference_bool").reset();
      GetPreference(aPrefWindow, "tests.static_preference_string").reset();
      GetPreference(aPrefWindow, "tests.static_preference_unichar").reset();
      GetPreference(aPrefWindow, "tests.static_preference_wstring").reset();
      GetPreference(aPrefWindow, "tests.static_preference_file").reset();

      // check system
      expected = CreateEmptyPrefValueSet();
      found = ReadPrefsFromSystem();
      ok(found.int === expected.int, "instant reset system int");
      ok(found.bool === expected.bool, "instant reset system bool");
      ok(found.string === expected.string, "instant reset system string");
      ok(found.unichar === expected.unichar, "instant reset system unichar");
      ok(
        found.wstring_data === expected.wstring_data,
        "instant reset system wstring"
      );
      ok(found.file_data === expected.file_data, "instant reset system file");

      // check UI
      expected = {
        // alas, we don't have XUL elements with typeof(value) == int :(
        // int:         0,
        int: "",
        bool: false,
        string: "",
        unichar: "",
        wstring_data: "",
        file_data: "",
        wstring: {},
        file: {},
      };
      found = ReadPrefsFromUI(aPrefWindow);
      ok(found.int === expected.int, "instant reset element int");
      ok(found.bool === expected.bool, "instant reset element bool");
      ok(found.string === expected.string, "instant reset element string");
      ok(found.unichar === expected.unichar, "instant reset element unichar");
      ok(
        found.wstring_data === expected.wstring_data,
        "instant reset element wstring"
      );
      ok(found.file_data === expected.file_data, "instant reset element file");

      // check hasUserValue
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_int").hasUserValue,
        "instant reset hasUserValue int"
      );
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_bool").hasUserValue,
        "instant reset hasUserValue bool"
      );
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_string").hasUserValue,
        "instant reset hasUserValue string"
      );
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_unichar").hasUserValue,
        "instant reset hasUserValue unichar"
      );
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_wstring").hasUserValue,
        "instant reset hasUserValue wstring"
      );
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_file").hasUserValue,
        "instant reset hasUserValue file"
      );
    }

    function RunCheckCommandRedirect(aPrefWindow) {
      ok(
        GetPreference(aPrefWindow, "tests.static_preference_bool").value,
        "redirected command bool"
      );
      GetXULElement(aPrefWindow, "checkbox").click();
      ok(
        !GetPreference(aPrefWindow, "tests.static_preference_bool").value,
        "redirected command bool"
      );
      GetXULElement(aPrefWindow, "checkbox").click();
      ok(
        GetPreference(aPrefWindow, "tests.static_preference_bool").value,
        "redirected command bool"
      );
    }

    function RunCheckDisabled(aPrefWindow) {
      ok(
        !GetXULElement(aPrefWindow, "disabled_checkbox").disabled,
        "Checkbox should be enabled"
      );
      GetPreference(
        aPrefWindow,
        "tests.disabled_preference_bool"
      ).updateControlDisabledState(true);
      ok(
        GetXULElement(aPrefWindow, "disabled_checkbox").disabled,
        "Checkbox should be disabled"
      );
      GetPreference(
        aPrefWindow,
        "tests.locked_preference_bool"
      ).updateControlDisabledState(false);
      ok(
        GetXULElement(aPrefWindow, "locked_checkbox").disabled,
        "Locked checkbox should stay disabled"
      );
      SimpleTest.finish();
    }

    function RunResetPrefTest(aPrefWindow) {
      // try resetting the prefs to default values
      GetPreference(aPrefWindow, "tests.static_preference_int").reset();
      GetPreference(aPrefWindow, "tests.static_preference_bool").reset();
      GetPreference(aPrefWindow, "tests.static_preference_string").reset();
      GetPreference(aPrefWindow, "tests.static_preference_unichar").reset();
      GetPreference(aPrefWindow, "tests.static_preference_wstring").reset();
      GetPreference(aPrefWindow, "tests.static_preference_file").reset();
    }

    function RunTestApplyPref() {
      // Test in parent window.
      WritePrefsToSystem(kPrefValueSet1);
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences.xhtml",
        "",
        "modal",
        RunInstantPrefTest,
        false
      );

      // Test deferred reset in child window.
      WritePrefsToSystem(kPrefValueSet1);
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences2.xhtml",
        "",
        "modal",
        RunResetPrefTest,
        false
      );
      let expected = kPrefValueSet1;
      let found = ReadPrefsFromSystem();
      is(found.int, expected.int, "instant reset deferred int");
      is(found.bool, expected.bool, "instant reset deferred bool");
      is(found.string, expected.string, "instant reset deferred string");
      is(found.unichar, expected.unichar, "instant reset deferred unichar");
      is(
        found.wstring_data, expected.wstring_data,
        "instant reset deferred wstring"
      );
      todo_is(found.file_data, expected.file_data, "instant reset deferred file");

      // Test cancel in child window.
      WritePrefsToSystem(kPrefValueSet1);
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences2.xhtml",
        "",
        "modal",
        aPrefWindow => WritePrefsToPreferences(aPrefWindow, kPrefValueSet2),
        false
      );
      expected = kPrefValueSet1;
      found = ReadPrefsFromSystem();
      ok(found.int === expected.int, "non-instant cancel system int");
      ok(found.bool === expected.bool, "non-instant cancel system bool");
      ok(found.string === expected.string, "non-instant cancel system string");
      ok(found.unichar === expected.unichar, "non-instant cancel system unichar");
      ok(
        found.wstring_data === expected.wstring_data,
        "non-instant cancel system wstring"
      );
      todo(
        found.file_data === expected.file_data,
        "non-instant cancel system file"
      );

      // Test accept in child window.
      WritePrefsToSystem(kPrefValueSet1);
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences2.xhtml",
        "",
        "modal",
        aPrefWindow => WritePrefsToPreferences(aPrefWindow, kPrefValueSet2),
        true
      );
      expected = kPrefValueSet2;
      found = ReadPrefsFromSystem();
      ok(found.int === expected.int, "non-instant accept system int");
      ok(found.bool === expected.bool, "non-instant accept system bool");
      ok(found.string === expected.string, "non-instant accept system string");
      ok(found.unichar === expected.unichar, "non-instant accept system unichar");
      ok(
        found.wstring_data === expected.wstring_data,
        "non-instant accept system wstring"
      );
      todo(
        found.file_data === expected.file_data,
        "non-instant accept system file"
      );

      // Test deferred reset in child window.
      WritePrefsToSystem(kPrefValueSet1);
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences2.xhtml",
        "",
        "modal",
        RunResetPrefTest,
        true
      );
      expected = CreateEmptyPrefValueSet();
      found = ReadPrefsFromSystem();
      ok(found.int === expected.int, "non-instant reset deferred int");
      ok(found.bool === expected.bool, "non-instant reset deferred bool");
      ok(found.string === expected.string, "non-instant reset deferred string");
      ok(found.unichar === expected.unichar, "non-instant reset deferred unichar");
      ok(
        found.wstring_data === expected.wstring_data,
        "non-instant reset deferred wstring"
      );
      ok(found.file_data === expected.file_data, "non-instant reset deferred file");
    }

    function RunTestCommandRedirect() {
      WritePrefsToSystem(kPrefValueSet1);
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences_commandretarget.xhtml",
        "",
        "modal",
        RunCheckCommandRedirect,
        true
      );
    }

    function RunTestDisabled() {
      // Because this pref is on the default branch and locked, we need to set it before opening the dialog.
      const defaultBranch = kPref.getDefaultBranch("");
      defaultBranch.setBoolPref("tests.locked_preference_bool", true);
      defaultBranch.lockPref("tests.locked_preference_bool");
      window.browsingContext.topChromeWindow.openDialog(
        "window_preferences_disabled.xhtml",
        "",
        "modal",
        RunCheckDisabled,
        true
      );
    }

    function RunTest() {
      RunTestApplyPref();
      RunTestCommandRedirect();
      RunTestDisabled();
    }
  ]]>
  </script>

  <body xmlns="http://www.w3.org/1999/xhtml">
    <p id="display"></p>
    <div id="content" style="display: none"></div>
    <pre id="test"></pre>
  </body>

</window>

[ Dauer der Verarbeitung: 0.46 Sekunden  (vorverarbeitet)  ]