| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test IndexedDB key comparison using IDBFactory.cmp()."); |
| |
| function test() |
| { |
| removeVendorPrefixes(); |
| |
| shouldBeEqualToString("typeof indexedDB.cmp", "function"); |
| |
| testValidKeys(); |
| testInvalidKeys(); |
| testIdenticalKeys(); |
| finishJSTest(); |
| } |
| |
| function testValidKeys() |
| { |
| debug(""); |
| debug("compare valid keys"); |
| |
| var keys = [ |
| "-Infinity", |
| "-Number.MAX_VALUE", |
| "-1", |
| "-Number.MIN_VALUE", |
| "0", |
| "Number.MIN_VALUE", |
| "1", |
| "Number.MAX_VALUE", |
| "Infinity", |
| |
| "new Date(0)", |
| "new Date(1000)", |
| "new Date(1317399931023)", |
| |
| "''", |
| "'\x00'", |
| "'a'", |
| "'aa'", |
| "'b'", |
| "'ba'", |
| |
| "'\xA2'", // U+00A2 CENT SIGN |
| "'\u6C34'", // U+6C34 CJK UNIFIED IDEOGRAPH (water) |
| "'\uD834\uDD1E'", // U+1D11E MUSICAL SYMBOL G-CLEF (UTF-16 surrogate pair) |
| "'\uFFFD'", // U+FFFD REPLACEMENT CHARACTER |
| |
| "new Uint8Array()", |
| "new Uint8Array([0])", |
| "new Uint8Array([0, 0])", |
| "new Uint8Array([0, 1])", |
| "new Uint8Array([1])", |
| "new Uint8Array([1, 0])", |
| "new Uint8Array([1, 1])", |
| "new Uint8Array([255])", |
| |
| "[]", |
| |
| "[-Infinity]", |
| "[-Number.MAX_VALUE]", |
| "[-1]", |
| "[-Number.MIN_VALUE]", |
| "[0]", |
| "[Number.MIN_VALUE]", |
| "[1]", |
| "[Number.MAX_VALUE]", |
| "[Infinity]", |
| |
| "[new Date(0)]", |
| "[new Date(1000)]", |
| "[new Date(1317399931023)]", |
| |
| "['']", |
| "['\x00']", |
| "['a']", |
| "['aa']", |
| "['b']", |
| "['ba']", |
| |
| "['\xA2']", // U+00A2 CENT SIGN |
| "['\u6C34']", // U+6C34 CJK UNIFIED IDEOGRAPH (water) |
| "['\uD834\uDD1E']", // U+1D11E MUSICAL SYMBOL G-CLEF (UTF-16 surrogate pair) |
| "['\uFFFD']", // U+FFFD REPLACEMENT CHARACTER |
| |
| "[new Uint8Array()]", |
| "[new Uint8Array([0])]", |
| "[new Uint8Array([0, 0])]", |
| "[new Uint8Array([0, 1])]", |
| "[new Uint8Array([1])]", |
| "[new Uint8Array([1, 0])]", |
| "[new Uint8Array([1, 1])]", |
| "[new Uint8Array([255])]", |
| |
| "[[]]", |
| |
| "[[], []]", |
| "[[], [], []]", |
| |
| "[[[]]]", |
| "[[[[]]]]", |
| ]; |
| |
| var i, key1, key2; |
| for (i = 0; i < keys.length - 1; i += 1) { |
| key1 = keys[i]; |
| key2 = keys[i + 1]; |
| shouldBe("indexedDB.cmp(" + key1 + "," + key2 + ")", "-1"); |
| shouldBe("indexedDB.cmp(" + key2 + "," + key1 + ")", "1"); |
| shouldBe("indexedDB.cmp(" + key1 + "," + key1 + ")", "0"); |
| shouldBe("indexedDB.cmp(" + key2 + "," + key2 + ")", "0"); |
| } |
| } |
| |
| function testInvalidKeys() |
| { |
| debug(""); |
| debug("compare invalid keys"); |
| |
| var invalidKeys = [ |
| "void 0", // undefined |
| "true", |
| "false", |
| "NaN", |
| "new Date(NaN)", |
| "null", |
| "{}", |
| "function () {}", |
| "/regex/", |
| "self", |
| "self.document", |
| "self.document.body", |
| ]; |
| |
| var i, key1, key2; |
| for (i = 0; i < invalidKeys.length - 1; i += 1) { |
| key1 = invalidKeys[i]; |
| key2 = invalidKeys[i + 1]; |
| evalAndExpectException("indexedDB.cmp(" + key1 + ", " + key2 + ")", "0", "'DataError'"); |
| evalAndExpectException("indexedDB.cmp(" + key2 + ", " + key1 + ")", "0", "'DataError'"); |
| evalAndExpectException("indexedDB.cmp(" + key1 + ", 'valid')", "0", "'DataError'"); |
| evalAndExpectException("indexedDB.cmp('valid', " + key1 + ")", "0", "'DataError'"); |
| evalAndExpectException("indexedDB.cmp(" + key2 + ", 'valid')", "0", "'DataError'"); |
| evalAndExpectException("indexedDB.cmp('valid', " + key2 + ")", "0", "'DataError'"); |
| } |
| } |
| |
| function testIdenticalKeys() |
| { |
| debug(""); |
| debug("compare identical keys"); |
| |
| shouldBe("indexedDB.cmp(0, -0)", "0"); |
| } |
| |
| test(); |