summaryrefslogtreecommitdiffstats
path: root/layout/xul/test/test_splitter.xul
diff options
context:
space:
mode:
Diffstat (limited to 'layout/xul/test/test_splitter.xul')
-rw-r--r--layout/xul/test/test_splitter.xul117
1 files changed, 117 insertions, 0 deletions
diff --git a/layout/xul/test/test_splitter.xul b/layout/xul/test/test_splitter.xul
new file mode 100644
index 000000000..697ad4be8
--- /dev/null
+++ b/layout/xul/test/test_splitter.xul
@@ -0,0 +1,117 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="/tests/SimpleTest/test.css" type="text/css"?>
+<?xml-stylesheet href="data:text/css, hbox { border: 1px solid red; } vbox { border: 1px solid green }" type="text/css"?>
+<!--
+XUL <splitter> collapsing tests
+-->
+<window title="XUL splitter collapsing tests"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ orient="horizontal">
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"/>
+ <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"/>
+
+ <!-- test results are displayed in the html:body -->
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ </body>
+
+ <!-- test code goes here -->
+ <script type="application/javascript"><![CDATA[
+ SimpleTest.waitForExplicitFinish();
+
+ function dragSplitter(offsetX, callback) {
+ var splitterWidth = splitter.boxObject.width;
+ synthesizeMouse(splitter, splitterWidth / 2, 2, {type: "mousedown"});
+ synthesizeMouse(splitter, splitterWidth / 2, 1, {type: "mousemove"});
+ SimpleTest.executeSoon(function() {
+ SimpleTest.is(splitter.getAttribute("state"), "dragging", "The splitter should be dragged");
+ synthesizeMouse(splitter, offsetX, 1, {type: "mousemove"});
+ synthesizeMouse(splitter, offsetX, 1, {type: "mouseup"});
+ SimpleTest.executeSoon(callback);
+ });
+ }
+
+ function shouldBeCollapsed(where) {
+ SimpleTest.is(splitter.getAttribute("state"), "collapsed", "The splitter should be collapsed");
+ SimpleTest.is(splitter.getAttribute("substate"), where, "The splitter should be collapsed " + where);
+ }
+
+ function shouldNotBeCollapsed() {
+ SimpleTest.is(splitter.getAttribute("state"), "", "The splitter should not be collapsed");
+ }
+
+ function runPass(rightCollapsed, leftCollapsed, callback) {
+ var containerWidth = container.boxObject.width;
+ var isRTL = getComputedStyle(splitter, null).direction == "rtl";
+ dragSplitter(containerWidth, function() {
+ if (rightCollapsed) {
+ shouldBeCollapsed(isRTL ? "before" : "after");
+ } else {
+ shouldNotBeCollapsed();
+ }
+ dragSplitter(-containerWidth * 2, function() {
+ if (leftCollapsed) {
+ shouldBeCollapsed(isRTL ? "after" : "before");
+ } else {
+ shouldNotBeCollapsed();
+ }
+ dragSplitter(containerWidth / 2, function() {
+ // the splitter should never be collapsed in the middle
+ shouldNotBeCollapsed();
+ callback();
+ });
+ });
+ });
+ }
+
+ var splitter, container;
+ function runLTRTests(callback) {
+ splitter = document.getElementById("ltr-splitter");
+ container = splitter.parentNode;
+ splitter.setAttribute("collapse", "before");
+ runPass(false, true, function() {
+ splitter.setAttribute("collapse", "after");
+ runPass(true, false, function() {
+ splitter.setAttribute("collapse", "both");
+ runPass(true, true, callback);
+ });
+ });
+ }
+
+ function runRTLTests(callback) {
+ splitter = document.getElementById("rtl-splitter");
+ container = splitter.parentNode;
+ splitter.setAttribute("collapse", "before");
+ runPass(true, false, function() {
+ splitter.setAttribute("collapse", "after");
+ runPass(false, true, function() {
+ splitter.setAttribute("collapse", "both");
+ runPass(true, true, callback);
+ });
+ });
+ }
+
+ function runTests() {
+ runLTRTests(function() {
+ runRTLTests(function() {
+ SimpleTest.finish();
+ });
+ });
+ }
+
+ addLoadEvent(function() {SimpleTest.executeSoon(runTests);});
+ ]]></script>
+
+ <hbox style="max-width: 200px; height: 300px; direction: ltr;">
+ <vbox style="width: 100px; height: 300px;" flex="1"/>
+ <splitter id="ltr-splitter"/>
+ <vbox style="width: 100px; height: 300px;" flex="1"/>
+ </hbox>
+
+ <hbox style="max-width: 200px; height: 300px; direction: rtl;">
+ <vbox style="width: 100px; height: 300px;" flex="1"/>
+ <splitter id="rtl-splitter"/>
+ <vbox style="width: 100px; height: 300px;" flex="1"/>
+ </hbox>
+
+</window>