1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/indexedDB/test/unit/test_indexes_bad_values.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,130 @@ 1.4 +/** 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.7 + */ 1.8 + 1.9 +var testGenerator = testSteps(); 1.10 + 1.11 +function testSteps() 1.12 +{ 1.13 + const name = this.window ? window.location.pathname : "Splendid Test"; 1.14 + 1.15 + const objectStoreName = "People"; 1.16 + 1.17 + const objectStoreData = [ 1.18 + { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } }, 1.19 + { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } }, 1.20 + { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } }, 1.21 + { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } }, 1.22 + { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } }, 1.23 + { key: "237-23-7737", value: { name: "Pat", height: 65 } }, 1.24 + { key: "237-23-7738", value: { name: "Mel", height: 66, weight: {} } } 1.25 + ]; 1.26 + 1.27 + const badObjectStoreData = [ 1.28 + { key: "237-23-7739", value: { name: "Rob", height: 65 } }, 1.29 + { key: "237-23-7740", value: { name: "Jen", height: 66, weight: {} } } 1.30 + ]; 1.31 + 1.32 + const indexData = [ 1.33 + { name: "weight", keyPath: "weight", options: { unique: false } } 1.34 + ]; 1.35 + 1.36 + const objectStoreDataWeightSort = [ 1.37 + { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } }, 1.38 + { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } }, 1.39 + { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } }, 1.40 + { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } }, 1.41 + { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } } 1.42 + ]; 1.43 + 1.44 + let request = indexedDB.open(name, 1); 1.45 + request.onerror = errorHandler; 1.46 + request.onupgradeneeded = grabEventAndContinueHandler; 1.47 + request.onsuccess = grabEventAndContinueHandler; 1.48 + let event = yield undefined; 1.49 + 1.50 + let db = event.target.result; 1.51 + 1.52 + let objectStore = db.createObjectStore(objectStoreName, { } ); 1.53 + 1.54 + let addedData = 0; 1.55 + for (let i in objectStoreData) { 1.56 + request = objectStore.add(objectStoreData[i].value, 1.57 + objectStoreData[i].key); 1.58 + request.onerror = errorHandler; 1.59 + request.onsuccess = function(event) { 1.60 + if (++addedData == objectStoreData.length) { 1.61 + testGenerator.send(event); 1.62 + } 1.63 + } 1.64 + } 1.65 + event = yield undefined; 1.66 + 1.67 + for (let i in indexData) { 1.68 + objectStore.createIndex(indexData[i].name, indexData[i].keyPath, 1.69 + indexData[i].options); 1.70 + } 1.71 + 1.72 + addedData = 0; 1.73 + for (let i in badObjectStoreData) { 1.74 + request = objectStore.add(badObjectStoreData[i].value, 1.75 + badObjectStoreData[i].key); 1.76 + request.onerror = errorHandler; 1.77 + request.onsuccess = function(event) { 1.78 + if (++addedData == badObjectStoreData.length) { 1.79 + executeSoon(function() { testGenerator.next() }); 1.80 + } 1.81 + } 1.82 + } 1.83 + yield undefined; 1.84 + yield undefined; 1.85 + 1.86 + objectStore = db.transaction(objectStoreName) 1.87 + .objectStore(objectStoreName); 1.88 + 1.89 + let keyIndex = 0; 1.90 + 1.91 + request = objectStore.index("weight").openKeyCursor(); 1.92 + request.onerror = errorHandler; 1.93 + request.onsuccess = function (event) { 1.94 + let cursor = event.target.result; 1.95 + if (cursor) { 1.96 + is(cursor.key, objectStoreDataWeightSort[keyIndex].value.weight, 1.97 + "Correct key"); 1.98 + is(cursor.primaryKey, objectStoreDataWeightSort[keyIndex].key, 1.99 + "Correct value"); 1.100 + keyIndex++; 1.101 + 1.102 + cursor.continue(); 1.103 + } 1.104 + else { 1.105 + testGenerator.next(); 1.106 + } 1.107 + } 1.108 + yield undefined; 1.109 + 1.110 + is(keyIndex, objectStoreDataWeightSort.length, "Saw all weights"); 1.111 + 1.112 + keyIndex = 0; 1.113 + 1.114 + request = objectStore.openCursor(); 1.115 + request.onerror = errorHandler; 1.116 + request.onsuccess = function (event) { 1.117 + let cursor = event.target.result; 1.118 + if (cursor) { 1.119 + keyIndex++; 1.120 + cursor.continue(); 1.121 + } 1.122 + else { 1.123 + testGenerator.next(); 1.124 + } 1.125 + } 1.126 + yield undefined; 1.127 + 1.128 + is(keyIndex, objectStoreData.length + badObjectStoreData.length, 1.129 + "Saw all people"); 1.130 + 1.131 + finishTest(); 1.132 + yield undefined; 1.133 +}