4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/shared.js"></script>
8 <p id="description"></p>
9 <div id="console"></div>
11 description("Test IndexedDB readonly properties");
12 if (window.layoutTestController)
13 layoutTestController.waitUntilDone();
15 function setReadonlyProperty(property, value)
17 oldValue = eval(property);
18 debug("trying to set readonly property " + property);
19 evalAndLog(property + " = " + value);
20 newValue = eval(property);
21 if (oldValue == newValue) {
22 testPassed(property + " is still " + oldValue);
24 testFailed(property + " value was changed");
30 indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
31 shouldBeFalse("indexedDB == null");
32 IDBDatabaseException = evalAndLog("IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;");
33 shouldBeFalse("IDBDatabaseException == null");
34 IDBCursor = evalAndLog("IDBCursor = window.IDBCursor || window.webkitIDBCursor;");
35 shouldBeFalse("IDBCursor == null");
36 IDBKeyRange = evalAndLog("IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;");
37 shouldBeFalse("IDBKeyRange == null");
40 description = "My Test Database";
41 request = evalAndLog("indexedDB.open(name, description)");
42 request.onsuccess = openSuccess;
43 request.onerror = unexpectedErrorCallback;
46 function openSuccess()
48 setReadonlyProperty("request.result", "Infinity");
49 setReadonlyProperty("request.errorCode", "666");
50 setReadonlyProperty("request.source", "this");
51 setReadonlyProperty("request.transaction", "this");
52 setReadonlyProperty("request.readyState", "666");
54 db = evalAndLog("db = event.target.result");
55 setReadonlyProperty("db.name", "'bar'");
57 request = evalAndLog("request = db.setVersion('1')");
58 request.onsuccess = createAndPopulateObjectStore;
59 request.onerror = unexpectedErrorCallback;
62 function createAndPopulateObjectStore()
64 transaction = evalAndLog("transaction = event.target.result;");
65 setReadonlyProperty("transaction.mode", "666");
66 setReadonlyProperty("transaction.db", "this");
68 deleteAllObjectStores(db);
70 objectStore = evalAndLog("objectStore = db.createObjectStore('foo');");
72 setReadonlyProperty("objectStore.name", "'bar'");
73 setReadonlyProperty("objectStore.keyPath", "'bar'");
74 /* fails, split into separate test
75 setReadonlyProperty("objectStore.indexNames", "['bar']");
77 /* fails, split into separate test
78 setReadonlyProperty("objectStore.transaction", "this");
81 result = evalAndLog("result = objectStore.add({}, 'first');");
82 result.onerror = unexpectedErrorCallback;
83 result.onsuccess = addSuccess;
88 result = evalAndLog("result = objectStore.openCursor();");
89 result.onerror = unexpectedErrorCallback;
90 result.onsuccess = checkCursor;
93 function checkCursor()
95 cursor = evalAndLog("cursor = event.target.result;");
97 setReadonlyProperty("cursor.source", "this");
98 setReadonlyProperty("cursor.direction", "666");
99 setReadonlyProperty("cursor.key", "Infinity");
100 setReadonlyProperty("cursor.primaryKey", "Infinity");
102 testFailed("cursor is null");
105 index = evalAndLog("index = objectStore.createIndex('first', 'first');");
106 setReadonlyProperty("index.name", "'bar'");
107 setReadonlyProperty("index.objectStore", "this");
108 setReadonlyProperty("index.keyPath", "'bar'");
109 setReadonlyProperty("index.unique", "true");
111 keyRange = IDBKeyRange.only("first");
112 setReadonlyProperty("keyRange.lower", "Infinity");
113 setReadonlyProperty("keyRange.upper", "Infinity");
114 setReadonlyProperty("keyRange.lowerOpen", "true");
115 setReadonlyProperty("keyRange.upperOpen", "true");