diff options
author | Steve Block <steveblock@google.com> | 2010-09-29 17:32:26 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-09-29 17:35:08 +0100 |
commit | 68513a70bcd92384395513322f1b801e7bf9c729 (patch) | |
tree | 161b50f75a5921d61731bb25e730005994fcec85 /LayoutTests | |
parent | fd5c6425ce58eb75211be7718d5dee960842a37e (diff) | |
download | external_webkit-68513a70bcd92384395513322f1b801e7bf9c729.zip external_webkit-68513a70bcd92384395513322f1b801e7bf9c729.tar.gz external_webkit-68513a70bcd92384395513322f1b801e7bf9c729.tar.bz2 |
Merge WebKit at r67908: Initial merge by Git
Change-Id: I43a553e7b3299b28cb6ee8aa035ed70fe342b972
Diffstat (limited to 'LayoutTests')
11 files changed, 3016 insertions, 7 deletions
diff --git a/LayoutTests/fast/dom/Geolocation/script-tests/clear-watch-invalid-id-crash.js b/LayoutTests/fast/dom/Geolocation/script-tests/clear-watch-invalid-id-crash.js index 6176da0..0f9cb58 100644 --- a/LayoutTests/fast/dom/Geolocation/script-tests/clear-watch-invalid-id-crash.js +++ b/LayoutTests/fast/dom/Geolocation/script-tests/clear-watch-invalid-id-crash.js @@ -6,9 +6,11 @@ if (window.layoutTestController) { } else debug('This test can not be run without the LayoutTestController'); -navigator.geolocation.watchPosition(function() {}); -navigator.geolocation.clearWatch(0); -location = "data:text/html,TEST COMPLETE<script>layoutTestController.notifyDone();</script>"; +document.body.onload = function() { + navigator.geolocation.watchPosition(function() {}); + navigator.geolocation.clearWatch(0); + location = "data:text/html,TEST COMPLETE<script>if(window.layoutTestController) layoutTestController.notifyDone();</script>"; +} window.jsTestIsAsync = true; window.successfullyParsed = true; diff --git a/LayoutTests/fast/dom/HTMLFontElement/script-tests/size-attribute.js b/LayoutTests/fast/dom/HTMLFontElement/script-tests/size-attribute.js index 3e090b1..2e32331 100644 --- a/LayoutTests/fast/dom/HTMLFontElement/script-tests/size-attribute.js +++ b/LayoutTests/fast/dom/HTMLFontElement/script-tests/size-attribute.js @@ -24,7 +24,7 @@ shouldBe('fontSizeAttributeEffect("5")', '"24px"'); shouldBe('fontSizeAttributeEffect("6")', '"32px"'); shouldBe('fontSizeAttributeEffect("7")', '"48px"'); -shouldBe('fontSizeAttributeEffect("0")', '"16px"'); // Gecko and WebKit do not agree on this result. Which matches IE? +shouldBe('fontSizeAttributeEffect("0")', '"10px"'); shouldBe('fontSizeAttributeEffect("-1")', '"13px"'); shouldBe('fontSizeAttributeEffect("-2")', '"10px"'); @@ -37,6 +37,41 @@ shouldBe('fontSizeAttributeEffect("-8")', '"10px"'); shouldBe('fontSizeAttributeEffect("-9")', '"10px"'); shouldBe('fontSizeAttributeEffect("-10")', '"10px"'); +shouldBe('fontSizeAttributeEffect("x6")', 'null'); +shouldBe('fontSizeAttributeEffect(" 6")', '"32px"'); +shouldBe('fontSizeAttributeEffect("\\t6")', '"32px"'); +shouldBe('fontSizeAttributeEffect("\\r6")', '"32px"'); +shouldBe('fontSizeAttributeEffect("\\n6")', '"32px"'); +shouldBe('fontSizeAttributeEffect("\\u20086")', 'null'); + +shouldBe('fontSizeAttributeEffect("x-6")', 'null'); +shouldBe('fontSizeAttributeEffect(" -6")', '"10px"'); +shouldBe('fontSizeAttributeEffect("\\t-6")', '"10px"'); +shouldBe('fontSizeAttributeEffect("\\r-6")', '"10px"'); +shouldBe('fontSizeAttributeEffect("\\n-6")', '"10px"'); +shouldBe('fontSizeAttributeEffect("\\u2008-6")', 'null'); + +shouldBe('fontSizeAttributeEffect("x+6")', 'null'); +shouldBe('fontSizeAttributeEffect(" +6")', '"48px"'); +shouldBe('fontSizeAttributeEffect("\\t+6")', '"48px"'); +shouldBe('fontSizeAttributeEffect("\\r+6")', '"48px"'); +shouldBe('fontSizeAttributeEffect("\\n+6")', '"48px"'); +shouldBe('fontSizeAttributeEffect("\\u2008+6")', 'null'); + +shouldBe('fontSizeAttributeEffect("x+x6")', 'null'); +shouldBe('fontSizeAttributeEffect(" + 6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\t+\\t6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\r+\\r6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\n+\\n6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\u2008+\\u20086")', 'null'); + +shouldBe('fontSizeAttributeEffect("x-x6")', 'null'); +shouldBe('fontSizeAttributeEffect(" - 6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\t-\\t6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\r-\\r6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\n-\\n6")', 'null'); +shouldBe('fontSizeAttributeEffect("\\u2008-\\u20086")', 'null'); + shouldBe('fontSizeAttributeEffect("8")', '"48px"'); shouldBe('fontSizeAttributeEffect("9")', '"48px"'); shouldBe('fontSizeAttributeEffect("10")', '"48px"'); diff --git a/LayoutTests/fast/dom/HTMLFontElement/size-attribute-expected.txt b/LayoutTests/fast/dom/HTMLFontElement/size-attribute-expected.txt index 28d44af..53d19e4 100644 --- a/LayoutTests/fast/dom/HTMLFontElement/size-attribute-expected.txt +++ b/LayoutTests/fast/dom/HTMLFontElement/size-attribute-expected.txt @@ -11,7 +11,7 @@ PASS fontSizeAttributeEffect("4") is "18px" PASS fontSizeAttributeEffect("5") is "24px" PASS fontSizeAttributeEffect("6") is "32px" PASS fontSizeAttributeEffect("7") is "48px" -PASS fontSizeAttributeEffect("0") is "16px" +PASS fontSizeAttributeEffect("0") is "10px" PASS fontSizeAttributeEffect("-1") is "13px" PASS fontSizeAttributeEffect("-2") is "10px" PASS fontSizeAttributeEffect("-3") is "10px" @@ -22,6 +22,36 @@ PASS fontSizeAttributeEffect("-7") is "10px" PASS fontSizeAttributeEffect("-8") is "10px" PASS fontSizeAttributeEffect("-9") is "10px" PASS fontSizeAttributeEffect("-10") is "10px" +PASS fontSizeAttributeEffect("x6") is null +PASS fontSizeAttributeEffect(" 6") is "32px" +PASS fontSizeAttributeEffect("\t6") is "32px" +PASS fontSizeAttributeEffect("\r6") is "32px" +PASS fontSizeAttributeEffect("\n6") is "32px" +PASS fontSizeAttributeEffect("\u20086") is null +PASS fontSizeAttributeEffect("x-6") is null +PASS fontSizeAttributeEffect(" -6") is "10px" +PASS fontSizeAttributeEffect("\t-6") is "10px" +PASS fontSizeAttributeEffect("\r-6") is "10px" +PASS fontSizeAttributeEffect("\n-6") is "10px" +PASS fontSizeAttributeEffect("\u2008-6") is null +PASS fontSizeAttributeEffect("x+6") is null +PASS fontSizeAttributeEffect(" +6") is "48px" +PASS fontSizeAttributeEffect("\t+6") is "48px" +PASS fontSizeAttributeEffect("\r+6") is "48px" +PASS fontSizeAttributeEffect("\n+6") is "48px" +PASS fontSizeAttributeEffect("\u2008+6") is null +PASS fontSizeAttributeEffect("x+x6") is null +PASS fontSizeAttributeEffect(" + 6") is null +PASS fontSizeAttributeEffect("\t+\t6") is null +PASS fontSizeAttributeEffect("\r+\r6") is null +PASS fontSizeAttributeEffect("\n+\n6") is null +PASS fontSizeAttributeEffect("\u2008+\u20086") is null +PASS fontSizeAttributeEffect("x-x6") is null +PASS fontSizeAttributeEffect(" - 6") is null +PASS fontSizeAttributeEffect("\t-\t6") is null +PASS fontSizeAttributeEffect("\r-\r6") is null +PASS fontSizeAttributeEffect("\n-\n6") is null +PASS fontSizeAttributeEffect("\u2008-\u20086") is null PASS fontSizeAttributeEffect("8") is "48px" PASS fontSizeAttributeEffect("9") is "48px" PASS fontSizeAttributeEffect("10") is "48px" diff --git a/LayoutTests/fast/dom/beforeload/remove-frame-in-beforeload-listener.html b/LayoutTests/fast/dom/beforeload/remove-frame-in-beforeload-listener.html index fe45195..8d0f514 100644 --- a/LayoutTests/fast/dom/beforeload/remove-frame-in-beforeload-listener.html +++ b/LayoutTests/fast/dom/beforeload/remove-frame-in-beforeload-listener.html @@ -8,6 +8,10 @@ document.addEventListener("beforeload", function(event) { if (event.target && event.target.parentElement) event.target.parentElement.removeChild(event.target); + // Note, we intentionally do not cancel the load here, + // WebCore should automatically cancel it. + // Otherwise DRT will print: + // Blocked access to external URL http://webkit.org/ }, true); </script> </head> diff --git a/LayoutTests/http/tests/resources/last-modified.php b/LayoutTests/http/tests/resources/last-modified.php new file mode 100644 index 0000000..55c5222 --- /dev/null +++ b/LayoutTests/http/tests/resources/last-modified.php @@ -0,0 +1,7 @@ +<?php + $date = $_GET['date']; + header("Last-Modified: $date"); +?> +<script> +document.write(document.lastModified); +</script> diff --git a/LayoutTests/storage/indexeddb/index-basics-expected.txt b/LayoutTests/storage/indexeddb/index-basics-expected.txt new file mode 100644 index 0000000..a99bc86 --- /dev/null +++ b/LayoutTests/storage/indexeddb/index-basics-expected.txt @@ -0,0 +1,331 @@ +Test the basics of IndexedDB's IDBIndex. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +indexedDB.open('name', 'description') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +db = event.result +db.createObjectStore('storeName', null) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +store = event.result +event.result.createIndex('indexName', 'x') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is false +indexObject = event.result +PASS 'name' in indexObject is true +PASS indexObject.name is "indexName" +PASS 'storeName' in indexObject is true +PASS indexObject.storeName is "storeName" +PASS 'keyPath' in indexObject is true +PASS indexObject.keyPath is "x" +PASS 'unique' in indexObject is true +PASS indexObject.unique is false +PASS 'openObjectCursor' in indexObject is true +PASS 'openCursor' in indexObject is true +PASS 'getObject' in indexObject is true +PASS 'get' in indexObject is true +event.source.add({x: 'value', y: 'zzz'}, 'key') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +event.source.add({x: 'value2', y: 'zzz2'}, 'key2') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +indexObject.get('value') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result is "key" +indexObject.getObject('value') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result.x is "value" +PASS event.result.y is "zzz" +indexObject.get('does not exist') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Error event fired: +PASS 'result' in event is false +PASS 'code' in event is true +PASS 'message' in event is true +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.code is IDBDatabaseException.NOT_FOUND_ERR +indexObject.getObject('does not exist') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Error event fired: +PASS 'result' in event is false +PASS 'code' in event is true +PASS 'message' in event is true +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.code is IDBDatabaseException.NOT_FOUND_ERR +indexObject.openCursor() +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is false +PASS event.result.key is "value" +PASS event.result.value is "key" +event.result.continue() +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is false +PASS event.result.key is "value2" +PASS event.result.value is "key2" +event.result.continue() +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is true +indexObject.openObjectCursor() +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is false +PASS event.result.key is "value" +PASS event.result.value.x is "value" +PASS event.result.value.y is "zzz" +event.result.continue() +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is false +PASS event.result.key is "value2" +PASS event.result.value.x is "value2" +PASS event.result.value.y is "zzz2" +event.result.continue() +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.result === null is true +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/storage/indexeddb/index-basics.html b/LayoutTests/storage/indexeddb/index-basics.html new file mode 100644 index 0000000..c23f141 --- /dev/null +++ b/LayoutTests/storage/indexeddb/index-basics.html @@ -0,0 +1,217 @@ +<html> +<head> +<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> +<script src="../../fast/js/resources/js-test-pre.js"></script> +<script src="../../fast/js/resources/js-test-post-function.js"></script> +<script src="resources/shared.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script> + +description("Test the basics of IndexedDB's IDBIndex."); +if (window.layoutTestController) + layoutTestController.waitUntilDone(); + +function test() +{ + result = evalAndLog("indexedDB.open('name', 'description')"); + verifyResult(result); + result.onsuccess = createObjectStore; + result.onerror = unexpectedErrorCallback; +} + +function createObjectStore() +{ + verifySuccessEvent(event); + db = evalAndLog("db = event.result"); + + deleteAllObjectStores(db); + + result = evalAndLog("db.createObjectStore('storeName', null)"); + verifyResult(result); + result.onsuccess = createIndex; + result.onerror = unexpectedErrorCallback; +} + +function createIndex() +{ + verifySuccessEvent(event); + window.store = evalAndLog("store = event.result"); + + result = evalAndLog("event.result.createIndex('indexName', 'x')"); + verifyResult(result); + result.onsuccess = addData; + result.onerror = unexpectedErrorCallback; +} + +function addData() +{ + verifySuccessEvent(event); + shouldBeFalse("event.result === null"); + window.indexObject = evalAndLog("indexObject = event.result"); + shouldBeTrue("'name' in indexObject"); + shouldBeEqualToString("indexObject.name", "indexName"); + shouldBeTrue("'storeName' in indexObject"); + shouldBeEqualToString("indexObject.storeName", "storeName"); + shouldBeTrue("'keyPath' in indexObject"); + shouldBeEqualToString("indexObject.keyPath", "x"); + shouldBeTrue("'unique' in indexObject"); + shouldBeFalse("indexObject.unique"); + shouldBeTrue("'openObjectCursor' in indexObject"); + shouldBeTrue("'openCursor' in indexObject"); + shouldBeTrue("'getObject' in indexObject"); + shouldBeTrue("'get' in indexObject"); + + result = evalAndLog("event.source.add({x: 'value', y: 'zzz'}, 'key')"); + verifyResult(result); + result.onsuccess = addMore; + result.onerror = unexpectedErrorCallback; +} + +function addMore() +{ + verifySuccessEvent(event); + + result = evalAndLog("event.source.add({x: 'value2', y: 'zzz2'}, 'key2')"); + verifyResult(result); + result.onsuccess = getData; + result.onerror = unexpectedErrorCallback; +} + +function getData() +{ + verifySuccessEvent(event); + + result = evalAndLog("indexObject.get('value')"); + verifyResult(result); + result.onsuccess = getObjectData; + result.onerror = unexpectedErrorCallback; +} + +function getObjectData() +{ + verifySuccessEvent(event); + shouldBeEqualToString("event.result", "key"); + + result = evalAndLog("indexObject.getObject('value')"); + verifyResult(result); + result.onsuccess = getDataFail; + result.onerror = unexpectedErrorCallback; +} + +function getDataFail() +{ + verifySuccessEvent(event); + shouldBeEqualToString("event.result.x", "value"); + shouldBeEqualToString("event.result.y", "zzz"); + + result = evalAndLog("indexObject.get('does not exist')"); + verifyResult(result); + result.onsuccess = unexpectedSuccessCallback; + result.onerror = getObjectDataFail; +} + +function getObjectDataFail() +{ + verifyErrorEvent(event); + shouldBe("event.code", "IDBDatabaseException.NOT_FOUND_ERR"); + + result = evalAndLog("indexObject.getObject('does not exist')"); + verifyResult(result); + result.onsuccess = unexpectedSuccessCallback; + result.onerror = openCursor; +} + +function openCursor() +{ + verifyErrorEvent(event); + shouldBe("event.code", "IDBDatabaseException.NOT_FOUND_ERR"); + + window.result = evalAndLog("indexObject.openCursor()"); + verifyResult(result); + result.onsuccess = cursor1Continue; + result.onerror = unexpectedErrorCallback; +} + +function cursor1Continue() +{ + verifySuccessEvent(event); + shouldBeFalse("event.result === null"); + shouldBeEqualToString("event.result.key", "value"); + shouldBeEqualToString("event.result.value", "key"); + + // We re-use the last result object. + evalAndLog("event.result.continue()"); + verifyResult(window.result); + window.result.onsuccess = cursor1Continue2; +} + +function cursor1Continue2() +{ + verifySuccessEvent(event); + shouldBeFalse("event.result === null"); + shouldBeEqualToString("event.result.key", "value2"); + shouldBeEqualToString("event.result.value", "key2"); + + // We re-use the last result object. + evalAndLog("event.result.continue()"); + verifyResult(window.result); + window.result.onsuccess = openObjectCursor; +} + +function openObjectCursor() +{ + verifySuccessEvent(event); + shouldBeTrue("event.result === null"); + + window.result = evalAndLog("indexObject.openObjectCursor()"); + verifyResult(result); + result.onsuccess = cursor2Continue; + result.onerror = unexpectedErrorCallback; +} + +function cursor2Continue() +{ + verifySuccessEvent(event); + shouldBeFalse("event.result === null"); + shouldBeEqualToString("event.result.key", "value"); + shouldBeEqualToString("event.result.value.x", "value"); + shouldBeEqualToString("event.result.value.y", "zzz"); + + // We re-use the last result object. + evalAndLog("event.result.continue()"); + verifyResult(window.result); + window.result.onsuccess = cursor2Continue2; +} + +function cursor2Continue2() +{ + verifySuccessEvent(event); + shouldBeFalse("event.result === null"); + shouldBeEqualToString("event.result.key", "value2"); + shouldBeEqualToString("event.result.value.x", "value2"); + shouldBeEqualToString("event.result.value.y", "zzz2"); + + // We re-use the last result object. + evalAndLog("event.result.continue()"); + verifyResult(window.result); + window.result.onsuccess = last; +} + +function last() +{ + verifySuccessEvent(event); + shouldBeTrue("event.result === null"); + + done(); +} + +test(); + +var successfullyParsed = true; + +</script> +</body> +</html> diff --git a/LayoutTests/storage/indexeddb/index-cursor-expected.txt b/LayoutTests/storage/indexeddb/index-cursor-expected.txt new file mode 100644 index 0000000..1442ad4 --- /dev/null +++ b/LayoutTests/storage/indexeddb/index-cursor-expected.txt @@ -0,0 +1,2111 @@ +Test IndexedDB's IDBIndex.openCursor + the cursor it produces in depth. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +indexedDB.open('someDB', 'some description') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +db = event.result +db.createObjectStore('someObjectStore') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore = event.result +objectStore.createIndex('someIndex', 'x') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +indexObject = event.result +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Success event fired: +PASS 'result' in event is true +PASS 'code' in event is false +PASS 'message' in event is false +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add({'x': testData[nextToAdd]}, nextToAdd) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Scheduling tests... +Running tests... + +Next test: lower open bound is 0; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 0; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 0; sorted ascending. +PASS event.result is null + +Next test: upper bound is 0; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower open bound is 0; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 0; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper open bound is 0; sorted descending. +PASS event.result is null + +Next test: upper bound is 0; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 0; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 0; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 0; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 0; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 0; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 0; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 0; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower bound is 0; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 0; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 0; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 0; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 0; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 0; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 0; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 0; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower bound is 0; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 1; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 1; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 1; sorted ascending. +PASS event.result is null + +Next test: upper bound is 1; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower open bound is 1; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 1; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper open bound is 1; sorted descending. +PASS event.result is null + +Next test: upper bound is 1; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 1; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 1; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 1; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 1; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 1; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 1; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 1; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower bound is 1; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 1; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 1; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 1; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 1; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 1; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 1; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 1; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower bound is 1; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 2; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 2; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 2; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: upper bound is 2; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower open bound is 2; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 2; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: upper open bound is 2; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 2; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 2; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 2; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 2; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 2; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 2; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 2; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 2; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 2; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 2; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 2; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 2; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 2; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 2; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 2; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 2; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 2; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 3; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 3; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 3; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: upper bound is 3; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower open bound is 3; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 3; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: upper open bound is 3; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 3; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 3; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 3; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 3; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 3; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 3; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 3; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 3; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 3; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 3; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 3; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 3; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 3; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 3; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 3; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 3; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 3; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 4; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 4; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 4; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: upper bound is 4; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 4; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: upper open bound is 4; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 4; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 4; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 4; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 4; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 4; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 4; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 4; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 4; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 4; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 4; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 4; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 4; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 4; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 5; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 5; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 5; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: upper bound is 5; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 5; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: upper open bound is 5; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 5; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 5; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 5; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 5; upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 5; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 5; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower open bound is 5; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 5; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 5; upper open bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 5; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower bound is 5; upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 5; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 5; upper open bound is 7; sorted descending. +PASS event.result is null + +Next test: lower open bound is 5; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 5; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 6; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 6; upper bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 6; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower open bound is 6; upper bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 6; upper open bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 6; upper bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; upper open bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 6; upper open bound is 7; sorted descending. +PASS event.result is null + +Next test: lower open bound is 6; upper bound is 7; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; upper open bound is 7; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: upper open bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 7; sorted descending. +PASS event.result is null + +Next test: lower bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[5] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[4] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[3] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[2] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[1] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 7; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 7; upper bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 7; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 7; upper bound is 6; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 7; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower open bound is 7; upper bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 7; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 7; upper bound is 6; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 7; upper open bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 7; upper bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower bound is 7; upper open bound is 7; sorted ascending. +PASS event.result is null + +Next test: lower bound is 7; upper bound is 7; sorted ascending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result is null + +Next test: lower open bound is 7; upper open bound is 7; sorted descending. +PASS event.result is null + +Next test: lower open bound is 7; upper bound is 7; sorted descending. +PASS event.result is null + +Next test: lower bound is 7; upper open bound is 7; sorted descending. +PASS event.result is null + +Next test: lower bound is 7; upper bound is 7; sorted descending. +PASS event.result.value is expectedIndex +PASS event.result.key is testData[7] +PASS event.result.value is expectedIndex +PASS event.result.key is testData[6] +PASS event.result is null +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/storage/indexeddb/index-cursor.html b/LayoutTests/storage/indexeddb/index-cursor.html new file mode 100644 index 0000000..9541d60 --- /dev/null +++ b/LayoutTests/storage/indexeddb/index-cursor.html @@ -0,0 +1,238 @@ +<html> +<head> +<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> +<script src="../../fast/js/resources/js-test-pre.js"></script> +<script src="../../fast/js/resources/js-test-post-function.js"></script> +<script src="resources/shared.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script> + +description("Test IndexedDB's IDBIndex.openCursor + the cursor it produces in depth."); +if (window.layoutTestController) + layoutTestController.waitUntilDone(); + +// In order of how it should be sorted by IndexedDB. +window.testData = [ + null, + null, + 2, + 2, + 10, + // FIXME: Dates. + "A big string", + "the BIGEST string", + "the BIGEST string" +]; + +function openDatabase() +{ + result = evalAndLog("indexedDB.open('someDB', 'some description')"); + verifyResult(result); + result.onsuccess = openObjectStore; + result.onerror = unexpectedErrorCallback; +} + +function openObjectStore() +{ + verifySuccessEvent(event); + window.db = evalAndLog("db = event.result"); + + deleteAllObjectStores(db); + + result = evalAndLog("db.createObjectStore('someObjectStore')"); + verifyResult(result); + result.onsuccess = openIndex; + result.onerror = unexpectedErrorCallback; +} + +function openIndex() +{ + verifySuccessEvent(event); + window.objectStore = evalAndLog("objectStore = event.result"); + + result = evalAndLog("objectStore.createIndex('someIndex', 'x')"); + verifyResult(result); + result.onsuccess = startAddingData; + result.onerror = unexpectedErrorCallback; +} + +function startAddingData() +{ + verifySuccessEvent(event); + window.indexObject = evalAndLog("indexObject = event.result"); + + window.nextToAdd = 0; + addData(); +} + +function addData() +{ + // We cheat when called for the first time; we're in the context of the objectStore success event. + verifySuccessEvent(event); + + result = evalAndLog("objectStore.add({'x': testData[nextToAdd]}, nextToAdd)"); + verifyResult(result); + result.onsuccess = ++window.nextToAdd < testData.length ? addData : scheduleTests; +} + +function scheduleTests() +{ + debug("Scheduling tests..."); + window.scheduledTests = []; + for (var i = 0; i < 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 < 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("Running tests..."); + setTimeout(runNextTest, 0); +} + +function runNextTest() +{ + if (!scheduledTests.length) { + done(); + return; + } + + var test = scheduledTests.pop(); + window.lower = test[0]; + window.lowerIsOpen = test[1]; + window.upper = test[2]; + window.upperIsOpen = test[3]; + window.ascending = test[4]; + + str = "Next test: "; + if (lower !== null) { + str += "lower "; + if (lowerIsOpen) + str += "open "; + str += "bound is " + lower + "; "; + } + if (upper !== null) { + str += "upper "; + if (upperIsOpen) + str += "open "; + str += "bound is " + upper + "; "; + } + if (ascending) + str += "sorted ascending."; + else + str += "sorted descending."; + + debug(""); + debug(str); + + // Work around for duplicate values. + if (upper !== null) { + if (upperIsOpen) { + while (upper > 0 && testData[upper] === testData[upper - 1]) + --window.upper; + } else { + while (upper < testData.length - 1 && testData[upper] === testData[upper + 1]) + ++window.upper; + } + } + if (lower !== null) { + if (lowerIsOpen) { + while (lower < testData.length - 1 && testData[lower] === testData[lower + 1]) + ++window.lower; + } else { + while (lower > 0 && testData[lower] === testData[lower - 1]) + --window.lower; + } + } + + if (ascending) { + if (lower !== null) { + if (!lowerIsOpen) + window.expectedIndex = lower; + else + window.expectedIndex = lower + 1; + } else + window.expectedIndex = 0; + } else { + if (upper !== null) { + if (!upperIsOpen) + window.expectedIndex = upper; + else + window.expectedIndex = upper - 1; + } else + window.expectedIndex = testData.length - 1; + } + testWithinBounds(); + + var keyRange; + if (lower !== null && upper !== null) + keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen); + else if (lower !== null) + keyRange = IDBKeyRange.leftBound(testData[lower], lowerIsOpen); + else + keyRange = IDBKeyRange.rightBound(testData[upper], upperIsOpen); + + var request = indexObject.openCursor(keyRange, ascending ? IDBCursor.NEXT : IDBCursor.PREV); + request.onsuccess = cursorIteration; + request.onerror = unexpectedErrorCallback; +} + +function testWithinBounds() +{ + if (expectedIndex < 0 || testData.length <= expectedIndex) + window.expectedIndex = null; + if (lower !== null && expectedIndex < lower) + window.expectedIndex = null; + if (upper !== null && upper < expectedIndex) + window.expectedIndex = null; + if (lower !== null && lowerIsOpen && expectedIndex <= lower) + window.expectedIndex = null; + if (upper !== null && upperIsOpen && upper <= expectedIndex) + window.expectedIndex = null; +} + +function cursorIteration() +{ + if (expectedIndex === null) { + shouldBeNull("event.result"); + setTimeout(runNextTest, 0); + return; + } + if (event.result === null) { + testFailed("Event.result should not be null.") + setTimeout(runNextTest, 0); + return; + } + + shouldBe("event.result.value", "expectedIndex"); + shouldBe("event.result.key", "testData[" + expectedIndex + "]"); + window.expectedIndex = ascending ? expectedIndex + 1 : expectedIndex - 1; + testWithinBounds(); + + event.result.continue(); +} + +openDatabase(); // The first step. +var successfullyParsed = true; + +</script> +</body> +</html> diff --git a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt index a60e857..890c00f 100644 --- a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt +++ b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt @@ -50,7 +50,7 @@ PASS store.name is "storeName" PASS store.keyPath is null PASS storeNames.contains('storeName') is true PASS storeNames.length is 1 -event.result.createIndex('indexName', 'x') +event.result.createIndex('indexName', 'x', true) PASS 'onsuccess' in result is true PASS 'onerror' in result is true PASS 'abort' in result is true @@ -92,6 +92,27 @@ PASS 'readyState' in event.target is true PASS event.target.readyState is event.target.DONE PASS event.result is "key" +event.source.add({x: 'value'}, 'zzz') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +addAgainFailure(): +Error event fired: +PASS 'result' in event is false +PASS 'code' in event is true +PASS 'message' in event is true +PASS 'source' in event is true +PASS event.source != null is true +PASS 'onsuccess' in event.target is true +PASS 'onerror' in event.target is true +PASS 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +PASS event.code is IDBDatabaseException.UNKNOWN_ERR store = event.source store.get('key') PASS 'onsuccess' in result is true diff --git a/LayoutTests/storage/indexeddb/objectstore-basics.html b/LayoutTests/storage/indexeddb/objectstore-basics.html index 8b696c4..731d421 100644 --- a/LayoutTests/storage/indexeddb/objectstore-basics.html +++ b/LayoutTests/storage/indexeddb/objectstore-basics.html @@ -49,7 +49,7 @@ function createSuccess() shouldBe("storeNames.length", "1"); // FIXME: test all of object store's methods. - result = evalAndLog("event.result.createIndex('indexName', 'x')"); + result = evalAndLog("event.result.createIndex('indexName', 'x', true)"); // true == unique requirement. verifyResult(result); result.onsuccess = addIndexSuccess; result.onerror = unexpectedErrorCallback; @@ -72,6 +72,19 @@ function addSuccess() debug("addSuccess():"); verifySuccessEvent(event); shouldBeEqualToString("event.result", "key"); + + result = evalAndLog("event.source.add({x: 'value'}, 'zzz')"); + verifyResult(result); + result.onsuccess = unexpectedSuccessCallback; + result.onerror = addAgainFailure; +} + +function addAgainFailure() +{ + debug("addAgainFailure():"); + verifyErrorEvent(event); + // FIXME: This error code needs to be specced. + shouldBe("event.code", "IDBDatabaseException.UNKNOWN_ERR"); var store = evalAndLog("store = event.source"); result = evalAndLog("store.get('key')"); |