<?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="Right to Left UI Test"
        onload="runTest()"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/javascript" 
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript" 
          src="chrome://mochikit/content/chrome-harness.js"></script>
  <script type="application/javascript" 
          src="RegisterUnregisterChrome.js"></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>

  <iframe id="subframe" width="100" height="100" onload="frameLoaded();"/>

  <script type="application/javascript">
    <![CDATA[

      SimpleTest.waitForExplicitFinish();

      let prefs = Cc["@mozilla.org/preferences-service;1"].
                  getService(Ci.nsIPrefBranch);
      const UI_DIRECTION_PREF = "intl.uidirection.ar";
      prefs.setCharPref(UI_DIRECTION_PREF, "rtl");

      let rootDir = getRootDirectory(window.location.href);
      registerManifestPermanently(rootDir + "rtltest/righttoleft.manifest");

      function runTest()
      {
        var subframe = document.getElementById("subframe");
        subframe.setAttribute("src", "chrome://ltrtest/content/dirtest.xul");
      }

      function frameLoaded()
      {
        var subframe = document.getElementById("subframe");
        var subwin = subframe.contentWindow;
        var subdoc = subframe.contentDocument;
        var url = String(subwin.location);
        if (url.indexOf("chrome://ltrtest") == 0) {
          is(subwin.getComputedStyle(subdoc.getElementById("hbox"), "").backgroundColor,
             "rgb(255, 255, 0)", "left to right with :-moz-locale-dir(ltr)");
          is(subwin.getComputedStyle(subdoc.getElementById("vbox"), "").backgroundColor,
             "rgb(255, 255, 255)", "left to right with :-moz-locale-dir(rtl)");

          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "ltr",
             "left to right direction");

          subdoc.documentElement.setAttribute("localedir", "rtl");

          is(subwin.getComputedStyle(subdoc.getElementById("hbox"), "").backgroundColor,
             "rgb(255, 255, 255)", "left to right with :-moz-locale-dir(ltr) and localedir='rtl'");
          is(subwin.getComputedStyle(subdoc.getElementById("vbox"), "").backgroundColor,
             "rgb(0, 128, 0)", "left to right with :-moz-locale-dir(rtl) and localedir='rtl'");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "rtl",
             "left to right direction with localedir='rtl'");

          subdoc.documentElement.removeAttribute("localedir");

          is(subwin.getComputedStyle(subdoc.getElementById("hbox"), "").backgroundColor,
             "rgb(255, 255, 0)", "left to right with :-moz-locale-dir(ltr) and localedir removed");
          is(subwin.getComputedStyle(subdoc.getElementById("vbox"), "").backgroundColor,
             "rgb(255, 255, 255)", "left to right with :-moz-locale-dir(rtl) and localedir removed");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "ltr",
             "left to right direction with localedir removed");

          subframe.setAttribute("src", "chrome://rtltest/content/dirtest.xul");
        }
        else if (url.indexOf("chrome://rtltest") == 0) {
          is(subwin.getComputedStyle(subdoc.getElementById("hbox"), "").backgroundColor,
             "rgb(255, 255, 255)", "right to left with :-moz-locale-dir(ltr)");
          is(subwin.getComputedStyle(subdoc.getElementById("vbox"), "").backgroundColor,
             "rgb(0, 128, 0)", "right to left with :-moz-locale-dir(rtl)");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "rtl",
             "right to left direction");

          subdoc.documentElement.setAttribute("localedir", "ltr");

          is(subwin.getComputedStyle(subdoc.getElementById("hbox"), "").backgroundColor,
             "rgb(255, 255, 0)", "right to left with :-moz-locale-dir(ltr) and localedir='ltr'");
          is(subwin.getComputedStyle(subdoc.getElementById("vbox"), "").backgroundColor,
             "rgb(255, 255, 255)", "right to left with :-moz-locale-dir(rtl) and localedir='ltr'");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "ltr",
             "right to left direction with localedir='ltr'");

          subdoc.documentElement.removeAttribute("localedir");

          prefs.setCharPref(UI_DIRECTION_PREF, "");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "ltr",
             "left to right direction with no preference set");
          prefs.setCharPref(UI_DIRECTION_PREF + "-QA", "rtl");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "rtl",
             "right to left direction with more specific preference set");
          prefs.setCharPref(UI_DIRECTION_PREF, "ltr");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "rtl",
             "right to left direction with less specific and more specific preference set");
          prefs.setCharPref(UI_DIRECTION_PREF, "rtl");
          prefs.setCharPref(UI_DIRECTION_PREF + "-QA", "ltr");
          is(subwin.getComputedStyle(subdoc.documentElement, "").direction, "ltr",
             "left to right direction specific preference overrides");
          if (prefs.prefHasUserValue(UI_DIRECTION_PREF + "-QA"))
            prefs.clearUserPref(UI_DIRECTION_PREF + "-QA");

          if (prefs.prefHasUserValue(UI_DIRECTION_PREF))
            prefs.clearUserPref(UI_DIRECTION_PREF);

          SimpleTest.finish();
        }
      }
    ]]>
  </script>

</window>