<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[192960] trunk/LayoutTests</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/192960">192960</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2015-12-02 13:33:32 -0800 (Wed, 02 Dec 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Modern IDB: Remove all traces of IDBObjectStore::openKeyCursor from tests.
https://bugs.webkit.org/show_bug.cgi?id=151772

Reviewed by Alex Christensen.

IDBObjectStore::openKeyCursor no longer exists, so testing it is inherently bogus.

* platform/mac-wk1/TestExpectations: Two tests now pass with small expectations changes.
* storage/indexeddb/cursor-basics-expected.txt:
* storage/indexeddb/cursor-overloads-expected.txt:

* storage/indexeddb/cursor-overloads.html:
* storage/indexeddb/optional-arguments.html:
* storage/indexeddb/resources/cursor-basics.js:
* storage/indexeddb/resources/deleted-objects.js:
* storage/indexeddb/resources/exceptions.js:
* storage/indexeddb/resources/objectstore-basics.js:

* storage/indexeddb/objectstore-keycursor-expected.txt: Removed.
* storage/indexeddb/objectstore-keycursor.html: Removed.
* storage/indexeddb/resources/objectstore-keycursor.js: Removed.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1TestExpectations">trunk/LayoutTests/platform/mac-wk1/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorbasicsexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-basics-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursoroverloadsexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-overloads-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursoroverloadshtml">trunk/LayoutTests/storage/indexeddb/cursor-overloads.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddboptionalargumentshtml">trunk/LayoutTests/storage/indexeddb/optional-arguments.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcescursorbasicsjs">trunk/LayoutTests/storage/indexeddb/resources/cursor-basics.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcesdeletedobjectsjs">trunk/LayoutTests/storage/indexeddb/resources/deleted-objects.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcesexceptionsjs">trunk/LayoutTests/storage/indexeddb/resources/exceptions.js</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcesobjectstorebasicsjs">trunk/LayoutTests/storage/indexeddb/resources/objectstore-basics.js</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsstorageindexeddbobjectstorekeycursorexpectedtxt">trunk/LayoutTests/storage/indexeddb/objectstore-keycursor-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbobjectstorekeycursorhtml">trunk/LayoutTests/storage/indexeddb/objectstore-keycursor.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbresourcesobjectstorekeycursorjs">trunk/LayoutTests/storage/indexeddb/resources/objectstore-keycursor.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/ChangeLog        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2015-12-02  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Modern IDB: Remove all traces of IDBObjectStore::openKeyCursor from tests.
+        https://bugs.webkit.org/show_bug.cgi?id=151772
+
+        Reviewed by Alex Christensen.
+        
+        IDBObjectStore::openKeyCursor no longer exists, so testing it is inherently bogus.
+
+        * platform/mac-wk1/TestExpectations: Two tests now pass with small expectations changes.
+        * storage/indexeddb/cursor-basics-expected.txt:
+        * storage/indexeddb/cursor-overloads-expected.txt:
+
+        * storage/indexeddb/cursor-overloads.html:
+        * storage/indexeddb/optional-arguments.html:
+        * storage/indexeddb/resources/cursor-basics.js:
+        * storage/indexeddb/resources/deleted-objects.js:
+        * storage/indexeddb/resources/exceptions.js:
+        * storage/indexeddb/resources/objectstore-basics.js:
+        
+        * storage/indexeddb/objectstore-keycursor-expected.txt: Removed.
+        * storage/indexeddb/objectstore-keycursor.html: Removed.
+        * storage/indexeddb/resources/objectstore-keycursor.js: Removed.
+
</ins><span class="cx"> 2015-12-02  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add some more picture element layout tests
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/TestExpectations        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -75,8 +75,10 @@
</span><span class="cx"> storage/indexeddb/basics.html [ Pass ]
</span><span class="cx"> storage/indexeddb/create-and-remove-object-store.html [ Pass ]
</span><span class="cx"> storage/indexeddb/create-object-store-options.html [ Pass ]
</span><ins>+storage/indexeddb/cursor-basics.html [ Pass ]
</ins><span class="cx"> storage/indexeddb/cursor-cast.html [ Pass ]
</span><span class="cx"> storage/indexeddb/cursor-finished.html [ Pass ]
</span><ins>+storage/indexeddb/cursor-overloads.html [ Pass ]
</ins><span class="cx"> storage/indexeddb/modern [ Pass ]
</span><span class="cx"> storage/indexeddb/mozilla [ Pass ]
</span><span class="cx"> storage/indexeddb/transaction-abort.html [ Pass ]
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorbasicsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-basics-expected.txt (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-basics-expected.txt        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/cursor-basics-expected.txt        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -14,7 +14,6 @@
</span><span class="cx"> index = store.createIndex('indexName', 'indexOn')
</span><span class="cx"> store.put({indexOn: 'a'}, 0)
</span><span class="cx"> store.openCursor()
</span><del>-store.openKeyCursor()
</del><span class="cx"> index.openCursor()
</span><span class="cx"> index.openKeyCursor()
</span><span class="cx"> 
</span><span class="lines">@@ -26,8 +25,8 @@
</span><span class="cx"> PASS 'primaryKey' in cursor is true
</span><span class="cx"> PASS 'continue' in cursor is true
</span><span class="cx"> PASS typeof cursor.continue is &quot;function&quot;
</span><del>-PASS 'continuePrimaryKey' in cursor is true
-PASS typeof cursor.continuePrimaryKey is &quot;function&quot;
</del><ins>+FAIL 'continuePrimaryKey' in cursor should be true. Was false.
+FAIL typeof cursor.continuePrimaryKey should be function. Was undefined.
</ins><span class="cx"> PASS 'advance' in cursor is true
</span><span class="cx"> PASS typeof cursor.advance is &quot;function&quot;
</span><span class="cx"> PASS 'update' in cursor is true
</span><span class="lines">@@ -40,28 +39,6 @@
</span><span class="cx"> PASS 'value' in cursor is true
</span><span class="cx"> PASS JSON.stringify(cursor.value) is &quot;{\&quot;indexOn\&quot;:\&quot;a\&quot;}&quot;
</span><span class="cx"> 
</span><del>-onStoreOpenKeyCursor():
-cursor = event.target.result
-PASS cursor is non-null.
-PASS cursor instanceof IDBCursor is true
-PASS 'key' in cursor is true
-PASS 'primaryKey' in cursor is true
-PASS 'continue' in cursor is true
-PASS typeof cursor.continue is &quot;function&quot;
-PASS 'continuePrimaryKey' in cursor is true
-PASS typeof cursor.continuePrimaryKey is &quot;function&quot;
-PASS 'advance' in cursor is true
-PASS typeof cursor.advance is &quot;function&quot;
-PASS 'update' in cursor is true
-PASS typeof cursor.update is &quot;function&quot;
-PASS 'delete' in cursor is true
-PASS typeof cursor.delete is &quot;function&quot;
-PASS cursor.key is 0
-PASS 'primaryKey' in cursor is true
-PASS cursor.primaryKey is 0
-PASS cursor instanceof IDBCursorWithValue is false
-PASS 'value' in cursor is false
-
</del><span class="cx"> onIndexOpenCursor():
</span><span class="cx"> cursor = event.target.result
</span><span class="cx"> PASS cursor is non-null.
</span><span class="lines">@@ -70,8 +47,8 @@
</span><span class="cx"> PASS 'primaryKey' in cursor is true
</span><span class="cx"> PASS 'continue' in cursor is true
</span><span class="cx"> PASS typeof cursor.continue is &quot;function&quot;
</span><del>-PASS 'continuePrimaryKey' in cursor is true
-PASS typeof cursor.continuePrimaryKey is &quot;function&quot;
</del><ins>+FAIL 'continuePrimaryKey' in cursor should be true. Was false.
+FAIL typeof cursor.continuePrimaryKey should be function. Was undefined.
</ins><span class="cx"> PASS 'advance' in cursor is true
</span><span class="cx"> PASS typeof cursor.advance is &quot;function&quot;
</span><span class="cx"> PASS 'update' in cursor is true
</span><span class="lines">@@ -92,8 +69,8 @@
</span><span class="cx"> PASS 'primaryKey' in cursor is true
</span><span class="cx"> PASS 'continue' in cursor is true
</span><span class="cx"> PASS typeof cursor.continue is &quot;function&quot;
</span><del>-PASS 'continuePrimaryKey' in cursor is true
-PASS typeof cursor.continuePrimaryKey is &quot;function&quot;
</del><ins>+FAIL 'continuePrimaryKey' in cursor should be true. Was false.
+FAIL typeof cursor.continuePrimaryKey should be function. Was undefined.
</ins><span class="cx"> PASS 'advance' in cursor is true
</span><span class="cx"> PASS typeof cursor.advance is &quot;function&quot;
</span><span class="cx"> PASS 'update' in cursor is true
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursoroverloadsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-overloads-expected.txt (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-overloads-expected.txt        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/cursor-overloads-expected.txt        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -49,39 +49,6 @@
</span><span class="cx"> store.openCursor(IDBKeyRange.only(0), 'prevunique')
</span><span class="cx"> PASS event.target.result is non-null.
</span><span class="cx"> PASS event.target.result.direction is &quot;prevunique&quot;
</span><del>-store.openKeyCursor()
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;next&quot;
-store.openKeyCursor(0)
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;next&quot;
-store.openKeyCursor(0, 'next')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;next&quot;
-store.openKeyCursor(0, 'nextunique')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;nextunique&quot;
-store.openKeyCursor(0, 'prev')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;prev&quot;
-store.openKeyCursor(0, 'prevunique')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;prevunique&quot;
-store.openKeyCursor(IDBKeyRange.only(0))
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;next&quot;
-store.openKeyCursor(IDBKeyRange.only(0), 'next')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;next&quot;
-store.openKeyCursor(IDBKeyRange.only(0), 'nextunique')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;nextunique&quot;
-store.openKeyCursor(IDBKeyRange.only(0), 'prev')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;prev&quot;
-store.openKeyCursor(IDBKeyRange.only(0), 'prevunique')
-PASS event.target.result is non-null.
-PASS event.target.result.direction is &quot;prevunique&quot;
</del><span class="cx"> index.openCursor()
</span><span class="cx"> PASS event.target.result is non-null.
</span><span class="cx"> PASS event.target.result.direction is &quot;next&quot;
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursoroverloadshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-overloads.html (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-overloads.html        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/cursor-overloads.html        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -35,19 +35,6 @@
</span><span class="cx">     checkCursorDirection(&quot;store.openCursor(IDBKeyRange.only(0), 'prev')&quot;, &quot;prev&quot;);
</span><span class="cx">     checkCursorDirection(&quot;store.openCursor(IDBKeyRange.only(0), 'prevunique')&quot;, &quot;prevunique&quot;);
</span><span class="cx"> 
</span><del>-    checkCursorDirection(&quot;store.openKeyCursor()&quot;, &quot;next&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(0)&quot;, &quot;next&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(0, 'next')&quot;, &quot;next&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(0, 'nextunique')&quot;, &quot;nextunique&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(0, 'prev')&quot;, &quot;prev&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(0, 'prevunique')&quot;, &quot;prevunique&quot;);
-
-    checkCursorDirection(&quot;store.openKeyCursor(IDBKeyRange.only(0))&quot;, &quot;next&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(IDBKeyRange.only(0), 'next')&quot;, &quot;next&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(IDBKeyRange.only(0), 'nextunique')&quot;, &quot;nextunique&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(IDBKeyRange.only(0), 'prev')&quot;, &quot;prev&quot;);
-    checkCursorDirection(&quot;store.openKeyCursor(IDBKeyRange.only(0), 'prevunique')&quot;, &quot;prevunique&quot;);
-
</del><span class="cx">     checkCursorDirection(&quot;index.openCursor()&quot;, &quot;next&quot;);
</span><span class="cx">     checkCursorDirection(&quot;index.openCursor(0)&quot;, &quot;next&quot;);
</span><span class="cx">     checkCursorDirection(&quot;index.openCursor(0, 'next')&quot;, &quot;next&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbobjectstorekeycursorexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/storage/indexeddb/objectstore-keycursor-expected.txt (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/objectstore-keycursor-expected.txt        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/objectstore-keycursor-expected.txt        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -1,335 +0,0 @@
</span><del>-Test IndexedDB's objectStore.openKeyCursor + the cursor it produces in depth.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
-
-dbname = &quot;objectstore-keycursor.html&quot;
-indexedDB.deleteDatabase(dbname)
-indexedDB.open(dbname)
-objectStore = db.createObjectStore('someObjectStore')
-
-Verify that specifying an invalid direction raises an exception:
-Expecting TypeError exception from objectStore.openKeyCursor(0, 'invalid-direction')
-PASS Exception was thrown.
-PASS objectStore.openKeyCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The direction provided ('invalid-direction') is not one of 'next', 'nextunique', 'prev', or 'prevunique'.
-
-objectStore.add('', testData[nextToAdd])
-objectStore.add('', testData[nextToAdd])
-objectStore.add('', testData[nextToAdd])
-objectStore.add('', testData[nextToAdd])
-objectStore.add('', testData[nextToAdd])
-objectStore.add('', testData[nextToAdd])
-Scheduling tests...
-Running tests...
-
-Next test: lower open bound is 0; sorted ascending.
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower bound is 0; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 0; sorted ascending.
-PASS event.target.result is null
-
-Next test: upper bound is 0; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: lower open bound is 0; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result is null
-
-Next test: lower bound is 0; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper open bound is 0; sorted descending.
-PASS event.target.result is null
-
-Next test: upper bound is 0; sorted descending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: lower open bound is 1; sorted ascending.
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower bound is 1; sorted ascending.
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 1; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper bound is 1; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result is null
-
-Next test: lower open bound is 1; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result is null
-
-Next test: lower bound is 1; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result is null
-
-Next test: upper open bound is 1; sorted descending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper bound is 1; sorted descending.
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: lower open bound is 2; sorted ascending.
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower bound is 2; sorted ascending.
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 2; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result is null
-
-Next test: upper bound is 2; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result is null
-
-Next test: lower open bound is 2; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result is null
-
-Next test: lower bound is 2; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result is null
-
-Next test: upper open bound is 2; sorted descending.
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper bound is 2; sorted descending.
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: lower open bound is 3; sorted ascending.
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower bound is 3; sorted ascending.
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 3; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result is null
-
-Next test: upper bound is 3; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result is null
-
-Next test: lower open bound is 3; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result is null
-
-Next test: lower bound is 3; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result is null
-
-Next test: upper open bound is 3; sorted descending.
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper bound is 3; sorted descending.
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: lower open bound is 4; sorted ascending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower bound is 4; sorted ascending.
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 4; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result is null
-
-Next test: upper bound is 4; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result is null
-
-Next test: lower open bound is 4; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower bound is 4; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result is null
-
-Next test: upper open bound is 4; sorted descending.
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper bound is 4; sorted descending.
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: lower open bound is 5; sorted ascending.
-PASS event.target.result is null
-
-Next test: lower bound is 5; sorted ascending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 5; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result is null
-
-Next test: upper bound is 5; sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: lower open bound is 5; sorted descending.
-PASS event.target.result is null
-
-Next test: lower bound is 5; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: upper open bound is 5; sorted descending.
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: upper bound is 5; sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-
-Next test: null key path sorted ascending.
-PASS event.target.result.key is testData[0]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[5]
-PASS event.target.result is null
-
-Next test: null key path sorted descending.
-PASS event.target.result.key is testData[5]
-PASS event.target.result.key is testData[4]
-PASS event.target.result.key is testData[3]
-PASS event.target.result.key is testData[2]
-PASS event.target.result.key is testData[1]
-PASS event.target.result.key is testData[0]
-PASS event.target.result is null
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbobjectstorekeycursorhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/storage/indexeddb/objectstore-keycursor.html (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/objectstore-keycursor.html        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/objectstore-keycursor.html        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-&lt;html&gt;
-&lt;head&gt;
-&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;resources/shared.js&quot;&gt;&lt;/script&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;script src=&quot;resources/objectstore-keycursor.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddboptionalargumentshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/optional-arguments.html (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/optional-arguments.html        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/optional-arguments.html        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -45,11 +45,6 @@
</span><span class="cx">         function(callback) { verifyCursor(&quot;store.openCursor(IDBKeyRange.lowerBound(4))&quot;, &quot;next&quot;, 2, callback); },
</span><span class="cx">         function(callback) { verifyCursor(&quot;store.openCursor(3)&quot;, &quot;next&quot;, 1, callback); },
</span><span class="cx"> 
</span><del>-        function(callback) { verifyCursor(&quot;store.openKeyCursor()&quot;, &quot;next&quot;, 5, callback); },
-        function(callback) { verifyCursor(&quot;store.openKeyCursor(null)&quot;, &quot;next&quot;, 5, callback); },
-        function(callback) { verifyCursor(&quot;store.openKeyCursor(IDBKeyRange.lowerBound(4))&quot;, &quot;next&quot;, 2, callback); },
-        function(callback) { verifyCursor(&quot;store.openKeyCursor(3)&quot;, &quot;next&quot;, 1, callback); },
-
</del><span class="cx">         function(callback) { verifyCursor(&quot;index.openCursor()&quot;, &quot;next&quot;, 5, callback); },
</span><span class="cx">         function(callback) { verifyCursor(&quot;index.openCursor(null)&quot;, &quot;next&quot;, 5, callback); },
</span><span class="cx">         function(callback) { verifyCursor(&quot;index.openCursor(IDBKeyRange.lowerBound('b'))&quot;, &quot;next&quot;, 4, callback); },
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcescursorbasicsjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/cursor-basics.js (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/cursor-basics.js        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/resources/cursor-basics.js        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -19,10 +19,6 @@
</span><span class="cx">     request.onsuccess = onStoreOpenCursor;
</span><span class="cx">     request.onerror = unexpectedErrorCallback;
</span><span class="cx"> 
</span><del>-    request = evalAndLog(&quot;store.openKeyCursor()&quot;);
-    request.onsuccess = onStoreOpenKeyCursor;
-    request.onerror = unexpectedErrorCallback;
-
</del><span class="cx">     request = evalAndLog(&quot;index.openCursor()&quot;);
</span><span class="cx">     request.onsuccess = onIndexOpenCursor;
</span><span class="cx">     request.onerror = unexpectedErrorCallback;
</span><span class="lines">@@ -65,20 +61,6 @@
</span><span class="cx">     shouldBeEqualToString(&quot;JSON.stringify(cursor.value)&quot;, '{&quot;indexOn&quot;:&quot;a&quot;}');
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function onStoreOpenKeyCursor(evt) {
-    preamble(evt);
-    evalAndLog(&quot;cursor = event.target.result&quot;);
-    shouldBeNonNull(&quot;cursor&quot;);
-    checkCursorProperties();
-
-    shouldBe(&quot;cursor.key&quot;, &quot;0&quot;);
-    shouldBeTrue(&quot;'primaryKey' in cursor&quot;);
-    shouldBe(&quot;cursor.primaryKey&quot;, &quot;0&quot;);
-
-    shouldBeFalse(&quot;cursor instanceof IDBCursorWithValue&quot;);
-    shouldBeFalse(&quot;'value' in cursor&quot;);
-}
-
</del><span class="cx"> function onIndexOpenCursor(evt) {
</span><span class="cx">     preamble(evt);
</span><span class="cx">     evalAndLog(&quot;cursor = event.target.result&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcesdeletedobjectsjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/deleted-objects.js (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/deleted-objects.js        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/resources/deleted-objects.js        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -35,11 +35,6 @@
</span><span class="cx">     evalAndExpectException(&quot;deletedStore.openCursor(0, 'next')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</span><span class="cx">     evalAndExpectException(&quot;deletedStore.openCursor(IDBKeyRange.only(0))&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</span><span class="cx">     evalAndExpectException(&quot;deletedStore.openCursor(IDBKeyRange.only(0), 'next')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</span><del>-    evalAndExpectException(&quot;deletedStore.openKeyCursor()&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
-    evalAndExpectException(&quot;deletedStore.openKeyCursor(0)&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
-    evalAndExpectException(&quot;deletedStore.openKeyCursor(0, 'next')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
-    evalAndExpectException(&quot;deletedStore.openKeyCursor(IDBKeyRange.only(0))&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
-    evalAndExpectException(&quot;deletedStore.openKeyCursor(IDBKeyRange.only(0), 'next')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</del><span class="cx">     evalAndExpectException(&quot;deletedStore.createIndex('name', 'path')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</span><span class="cx">     evalAndExpectException(&quot;deletedStore.index('name')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</span><span class="cx">     evalAndExpectException(&quot;deletedStore.deleteIndex('name')&quot;, &quot;DOMException.INVALID_STATE_ERR&quot;, &quot;'InvalidStateError'&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcesexceptionsjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/exceptions.js (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/exceptions.js        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/resources/exceptions.js        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -199,16 +199,6 @@
</span><span class="cx">     // &quot;Occurs if a request is made on a source object that has been deleted or removed.&quot; - covered in deleted-objects.html
</span><span class="cx"> 
</span><span class="cx">     debug(&quot;&quot;);
</span><del>-    debug(&quot;IDBObjectStore.openKeyCursor()&quot;);
-    debug(&quot;If the range parameter is specified but is not a valid key or a key range, this method throws a DOMException of type DataError.&quot;);
-    evalAndExpectException(&quot;store.openKeyCursor({})&quot;, &quot;0&quot;, &quot;'DataError'&quot;);
-    debug(&quot;The transaction this IDBObjectStore belongs to is not active.&quot;);
-    evalAndExpectException(&quot;storeFromInactiveTransaction.openKeyCursor()&quot;, &quot;0&quot;, &quot;'TransactionInactiveError'&quot;);
-    debug(&quot;The value for the direction parameter is invalid.&quot;);
-    evalAndExpectExceptionClass(&quot;store.openKeyCursor(0, 'invalid-direction')&quot;, &quot;TypeError&quot;);
-    // &quot;Occurs if a request is made on a source object that has been deleted or removed.&quot; - covered in deleted-objects.html
-
-    debug(&quot;&quot;);
</del><span class="cx">     debug(&quot;IDBObjectStore.put()&quot;);
</span><span class="cx">     debug('This method throws a DOMException of type ReadOnlyError if the transaction which this IDBObjectStore belongs to is has its mode set to &quot;readonly&quot;.');
</span><span class="cx">     evalAndExpectException(&quot;storeFromReadOnlyTransaction.put(0, 0)&quot;, &quot;0&quot;, &quot;'ReadOnlyError'&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcesobjectstorebasicsjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/resources/objectstore-basics.js (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/objectstore-basics.js        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/resources/objectstore-basics.js        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -31,8 +31,6 @@
</span><span class="cx">     shouldBeEqualToString(&quot;typeof store.clear&quot;, &quot;function&quot;);
</span><span class="cx">     shouldBeTrue(&quot;'openCursor' in store&quot;);
</span><span class="cx">     shouldBeEqualToString(&quot;typeof store.openCursor&quot;, &quot;function&quot;);
</span><del>-    shouldBeTrue(&quot;'openKeyCursor' in store&quot;);
-    shouldBeEqualToString(&quot;typeof store.openKeyCursor&quot;, &quot;function&quot;);
</del><span class="cx">     shouldBeTrue(&quot;'createIndex' in store&quot;);
</span><span class="cx">     shouldBeEqualToString(&quot;typeof store.createIndex&quot;, &quot;function&quot;);
</span><span class="cx">     shouldBeTrue(&quot;'index' in store&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbresourcesobjectstorekeycursorjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/storage/indexeddb/resources/objectstore-keycursor.js (192959 => 192960)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/resources/objectstore-keycursor.js        2015-12-02 20:57:34 UTC (rev 192959)
+++ trunk/LayoutTests/storage/indexeddb/resources/objectstore-keycursor.js        2015-12-02 21:33:32 UTC (rev 192960)
</span><span class="lines">@@ -1,209 +0,0 @@
</span><del>-if (this.importScripts) {
-    importScripts('../../../resources/js-test.js');
-    importScripts('shared.js');
-}
-
-description(&quot;Test IndexedDB's objectStore.openKeyCursor + the cursor it produces in depth.&quot;);
-
-// In order of how it should be sorted by IndexedDB.
-self.testData = [
-    1,
-    2,
-    3,
-    &quot;a&quot;,
-    &quot;b&quot;,
-    &quot;c&quot;
-];
-
-indexedDBTest(prepareDatabase);
-function prepareDatabase()
-{
-    db = event.target.result;
-    event.target.transaction.onabort = unexpectedAbortCallback;
-
-    evalAndLog(&quot;objectStore = db.createObjectStore('someObjectStore')&quot;);
-
-    debug(&quot;&quot;);
-    debug(&quot;Verify that specifying an invalid direction raises an exception:&quot;);
-    evalAndExpectExceptionClass(&quot;objectStore.openKeyCursor(0, 'invalid-direction')&quot;, &quot;TypeError&quot;);
-    debug(&quot;&quot;);
-
-    self.nextToAdd = 0;
-    addData();
-}
-
-function addData()
-{
-    request = evalAndLog(&quot;objectStore.add('', testData[nextToAdd])&quot;);
-    request.onsuccess = ++self.nextToAdd &lt; testData.length ? addData : scheduleTests;
-    request.onerror = unexpectedErrorCallback;
-}
-
-function scheduleTests()
-{
-    debug(&quot;Scheduling tests...&quot;);
-    self.scheduledTests = [];
-    for (var i = 0; i &lt; testData.length; ++i) {
-        /* left bound, is open, right bound, is open, ascending */
-        scheduledTests.unshift([i, true, null, null, true]);
-        scheduledTests.unshift([i, false, null, null, true]);
-        scheduledTests.unshift([null, null, i, true, true]);
-        scheduledTests.unshift([null, null, i, false, true]);
-        scheduledTests.unshift([i, true, null, null, false]);
-        scheduledTests.unshift([i, false, null, null, false]);
-        scheduledTests.unshift([null, null, i, true, false]);
-        scheduledTests.unshift([null, null, i, false, false]);
-        for (var j = 6; j &lt; testData.length; ++j) {
-            scheduledTests.unshift([i, true, j, true, true]);
-            scheduledTests.unshift([i, true, j, false, true]);
-            scheduledTests.unshift([i, false, j, true, true]);
-            scheduledTests.unshift([i, false, j, false, true]);
-            scheduledTests.unshift([i, true, j, true, false]);
-            scheduledTests.unshift([i, true, j, false, false]);
-            scheduledTests.unshift([i, false, j, true, false]);
-            scheduledTests.unshift([i, false, j, false, false]);
-        }
-    }
-
-    debug(&quot;Running tests...&quot;);
-    runNextTest();
-}
-
-function runNextTest()
-{
-    if (!scheduledTests.length) {
-        testNullKeyRange();
-        return;
-    }
-
-    var test = scheduledTests.pop();
-    self.lower = test[0];
-    self.lowerIsOpen = test[1];
-    self.upper = test[2];
-    self.upperIsOpen = test[3];
-    self.ascending = test[4];
-
-    str = &quot;Next test: &quot;;
-    if (lower !== null) {
-        str += &quot;lower &quot;;
-        if (lowerIsOpen)
-            str += &quot;open &quot;;
-        str += &quot;bound is &quot; + lower + &quot;; &quot;;
-    }
-    if (upper !== null) {
-        str += &quot;upper &quot;;
-        if (upperIsOpen)
-            str += &quot;open &quot;;
-        str += &quot;bound is &quot; + upper + &quot;; &quot;;
-    }
-    if (ascending)
-        str += &quot;sorted ascending.&quot;;
-    else
-        str += &quot;sorted descending.&quot;;
-
-    debug(&quot;&quot;);
-    debug(str);
-
-    if (ascending) {
-        if (lower !== null) {
-            if (!lowerIsOpen)
-                self.expectedIndex = lower;
-            else
-                self.expectedIndex = lower+1;
-        } else
-            self.expectedIndex = 0;
-    } else {
-        if (upper !== null) {
-            if (!upperIsOpen)
-                self.expectedIndex = upper;
-            else
-                self.expectedIndex = upper-1;
-        } else
-            self.expectedIndex = testData.length-1;
-    }
-    testWithinBounds();
-
-    if (testData[lower] === testData[upper] &amp;&amp; (lowerIsOpen || upperIsOpen)) {
-        debug(&quot;Skipping illegal key range.&quot;);
-        runNextTest();
-        return;
-    }
-
-    var keyRange;
-    if (lower !== null &amp;&amp; upper !== null)
-        keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
-    else if (lower !== null)
-        keyRange = IDBKeyRange.lowerBound(testData[lower], lowerIsOpen);
-    else
-        keyRange = IDBKeyRange.upperBound(testData[upper], upperIsOpen);
-
-    var request = objectStore.openKeyCursor(keyRange, ascending ? 'next' : 'prev');
-    request.onsuccess = cursorIteration;
-    request.onerror = unexpectedErrorCallback;
-}
-
-function testWithinBounds()
-{
-    if (expectedIndex &lt; 0 || testData.length &lt;= expectedIndex)
-        self.expectedIndex = null;
-    if (lower !== null &amp;&amp; expectedIndex &lt; lower)
-        self.expectedIndex = null;
-    if (upper !== null &amp;&amp; upper &lt; expectedIndex)
-        self.expectedIndex = null;
-    if (lower !== null &amp;&amp; lowerIsOpen &amp;&amp; expectedIndex &lt;= lower)
-        self.expectedIndex = null;
-    if (upper !== null &amp;&amp; upperIsOpen &amp;&amp; upper &lt;= expectedIndex)
-        self.expectedIndex = null;
-}
-
-function cursorIteration()
-{
-    if (expectedIndex === null) {
-        shouldBeNull(&quot;event.target.result&quot;);
-        runNextTest();
-        return;
-    }
-    if (event.target.result === null) {
-        testFailed(&quot;event.target.result should not be null.&quot;);
-        runNextTest();
-        return;
-    }
-
-    shouldBe(&quot;event.target.result.key&quot;, &quot;testData[&quot; + expectedIndex + &quot;]&quot;);
-    self.expectedIndex = ascending ? expectedIndex+1 : expectedIndex-1;
-    testWithinBounds();
-
-    event.target.result.continue();
-}
-
-self.nullKeyRangeStep = 0;
-function testNullKeyRange()
-{
-    self.lower = 0;
-    self.lowerIsOpen = false;
-    self.upper = testData.length-1;
-    self.upperIsOpen = false;
-
-    str = &quot;Next test: null key path &quot;;
-    if (self.nullKeyRangeStep == 0) {
-        str += &quot;sorted ascending.&quot;;
-        self.ascending = true;
-        self.expectedIndex = lower;
-        self.nullKeyRangeStep = 1;
-    } else if (self.nullKeyRangeStep == 1) {
-        str += &quot;sorted descending.&quot;;
-        self.ascending = false;
-        self.expectedIndex = upper;
-        self.nullKeyRangeStep = 2;
-    } else {
-        finishJSTest();
-        return;
-    }
-
-    debug(&quot;&quot;);
-    debug(str);
-
-    var request = objectStore.openKeyCursor(null, ascending ? 'next' : 'prev');
-    request.onsuccess = cursorIteration;
-    request.onerror = unexpectedErrorCallback;
-}
</del></span></pre>
</div>
</div>

</body>
</html>