content/xul/templates/tests/chrome/test_bug441785.xul

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/content/xul/templates/tests/chrome/test_bug441785.xul	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,148 @@
     1.4 +<?xml version="1.0" ?>
     1.5 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     1.6 +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
     1.7 +
     1.8 +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
     1.9 +   <tree flex="20" id="t" ref="urn:data:row" datasources="rdf:null" seltype="single">
    1.10 +     <treecols> 
    1.11 +      <treecol flex="1" id="id" label="id" sort="rdf:http://dummy/rdf#id" />
    1.12 +      <splitter class="tree-splitter"/>
    1.13 +      <treecol flex="1" id="title" label="title" sort="rdf:http://dummy/rdf#title" sortActive="true" sortDirection="ascending" /><splitter class="tree-splitter"/>
    1.14 +     </treecols>
    1.15 +     <template>
    1.16 +       <treechildren>
    1.17 +         <treeitem uri="rdf:*" seltype="single">
    1.18 +           <treerow >
    1.19 +             <treecell label="rdf:http://dummy/rdf#id"/>
    1.20 +             <treecell label="rdf:http://dummy/rdf#title"/>
    1.21 +           </treerow>
    1.22 +         </treeitem>
    1.23 +       </treechildren>
    1.24 +     </template>
    1.25 +   </tree>
    1.26 +   <tree flex="20" id="tc" ref="urn:data:row" datasources="rdf:null" seltype="single" flags="dont-build-content">
    1.27 +     <treecols> 
    1.28 +      <treecol flex="1" id="idc" label="id" sort="rdf:http://dummy/rdf#id" />
    1.29 +      <splitter class="tree-splitter"/>
    1.30 +      <treecol flex="1" id="titlec" label="title" sort="rdf:http://dummy/rdf#title" sortActive="true" sortDirection="ascending" /><splitter class="tree-splitter"/>
    1.31 +     </treecols>
    1.32 +     <template>
    1.33 +       <treechildren>
    1.34 +         <treeitem uri="rdf:*" seltype="single">
    1.35 +           <treerow >
    1.36 +             <treecell label="rdf:http://dummy/rdf#id"/>
    1.37 +             <treecell label="rdf:http://dummy/rdf#title"/>
    1.38 +           </treerow>
    1.39 +         </treeitem>
    1.40 +       </treechildren>
    1.41 +     </template>
    1.42 +   </tree>
    1.43 +
    1.44 +<body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
    1.45 +
    1.46 +<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>      
    1.47 +
    1.48 +<script type="application/x-javascript">
    1.49 +<![CDATA[
    1.50 +
    1.51 +var buildCount = 0;
    1.52 +
    1.53 +SimpleTest.waitForExplicitFinish();
    1.54 +
    1.55 +var TemplateBuilderListener = {
    1.56 +  willRebuild: function(aBuilder) {
    1.57 +  },
    1.58 +
    1.59 +  didRebuild: function(aBuilder) {
    1.60 +  ++buildCount;
    1.61 +    var remove = false;
    1.62 +    if (buildCount == 2) {
    1.63 +      remove =true;
    1.64 +      setTimeout(nextDataSource, 0);
    1.65 +    } else if (buildCount == 4) {
    1.66 +      remove = true;
    1.67 +      setTimeout(continueTest, 0);
    1.68 +    }
    1.69 +    if (remove) {
    1.70 +      var tree = document.getElementById('t');
    1.71 +      var treec = document.getElementById('tc');
    1.72 +      tree.builder.removeListener(TemplateBuilderListener);
    1.73 +      treec.builder.removeListener(TemplateBuilderListener);
    1.74 +    }
    1.75 +  },
    1.76 +
    1.77 +  QueryInterface: function (aIID)
    1.78 +  {
    1.79 +    if (!aIID.equals(Components.interfaces.nsIXULBuilderListener) &&
    1.80 +        !aIID.equals(Components.interfaces.nsISupports))
    1.81 +      throw Components.results.NS_ERROR_NO_INTERFACE;
    1.82 +    return this;
    1.83 +  }
    1.84 +};
    1.85 +
    1.86 +function runTest() {
    1.87 +  var tree = document.getElementById('t');
    1.88 +  var treec = document.getElementById('tc');
    1.89 +
    1.90 +  try {
    1.91 +    var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].
    1.92 +                       getService(Components.interfaces.nsIRDFService);
    1.93 +
    1.94 +    var s1 = window.location.href.replace(/test_bug441785.xul/, "bug441785-1.rdf");
    1.95 +    var ds1 = rdfService.GetDataSourceBlocking(s1);
    1.96 +
    1.97 +    var s2 = window.location.href.replace(/test_bug441785.xul/, "bug441785-2.rdf");
    1.98 +    var ds2 = rdfService.GetDataSourceBlocking(s2);
    1.99 +  } catch (ex) { }
   1.100 +
   1.101 +  tree.builder.addListener(TemplateBuilderListener);
   1.102 +  treec.builder.addListener(TemplateBuilderListener);
   1.103 +  tree.setAttribute('datasources', 'bug441785-1.rdf');
   1.104 +  treec.setAttribute('datasources', 'bug441785-1.rdf');
   1.105 +}
   1.106 +
   1.107 +var oldtreefirstrow, oldtreecfirstrow;
   1.108 +
   1.109 +function nextDataSource()
   1.110 +{
   1.111 +  var tree = document.getElementById('t');
   1.112 +  var treec = document.getElementById('tc');
   1.113 +  tree.treeBoxObject.scrollToRow(10);
   1.114 +  treec.treeBoxObject.scrollToRow(10);
   1.115 +
   1.116 +  is(tree.treeBoxObject.getFirstVisibleRow(), 10, "first tree row count datasource 1");
   1.117 +  is(treec.treeBoxObject.getFirstVisibleRow(), 10, "second tree row count datasource 1");
   1.118 +
   1.119 +  tree.builder.addListener(TemplateBuilderListener);
   1.120 +  treec.builder.addListener(TemplateBuilderListener);
   1.121 +  tree.setAttribute('datasources', 'bug441785-2.rdf');
   1.122 +  treec.setAttribute('datasources', 'bug441785-2.rdf');
   1.123 +}
   1.124 +
   1.125 +function continueTest() {
   1.126 +  var tree = document.getElementById('t');
   1.127 +  var treec = document.getElementById('tc');
   1.128 +
   1.129 +  is(tree.treeBoxObject.getFirstVisibleRow(), 0, "first tree row count datasource 2");
   1.130 +  is(treec.treeBoxObject.getFirstVisibleRow(), 0, "second tree row count datasource 2");
   1.131 +
   1.132 +  try {
   1.133 +    window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
   1.134 +            .getInterface(Components.interfaces.nsIDOMWindowUtils)
   1.135 +            .garbageCollect();
   1.136 +  } 
   1.137 +  catch (e) { }
   1.138 +
   1.139 +  // Hit the bug, crash 
   1.140 +  // (not exactly the same kind of crash as 441785, but from the same cause)
   1.141 +  tree.parentNode.removeChild(tree);
   1.142 +  treec.parentNode.removeChild(treec);
   1.143 +
   1.144 +  SimpleTest.finish();
   1.145 +}
   1.146 +
   1.147 +window.addEventListener("load", runTest, false);
   1.148 +
   1.149 +]]>
   1.150 +</script>
   1.151 +</window>

mercurial