Index: test/codegen/lib/html/indexeddb_5_test.dart |
diff --git a/test/codegen/lib/html/indexeddb_5_test.dart b/test/codegen/lib/html/indexeddb_5_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cbf77d1b1648438e09982e1fb4cb813ed1f4fd52 |
--- /dev/null |
+++ b/test/codegen/lib/html/indexeddb_5_test.dart |
@@ -0,0 +1,183 @@ |
+library IndexedDB1Test; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'dart:async'; |
+import 'dart:html' as html; |
+import 'dart:indexed_db' as idb; |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ |
+ if (!idb.IdbFactory.supported) { |
+ return; |
+ } |
+ |
+ var dbName = 'test_db_5'; |
+ var storeName = 'test_store'; |
+ var indexName = 'name_index'; |
+ var db; |
+ |
+ test('init', () { |
+ return html.window.indexedDB.deleteDatabase(dbName).then((_) { |
+ return html.window.indexedDB.open(dbName, version: 1, |
+ onUpgradeNeeded: (e) { |
+ var db = e.target.result; |
+ var objectStore = db.createObjectStore(storeName, |
+ autoIncrement: true); |
+ var index = objectStore.createIndex(indexName, 'name_index', |
+ unique: false); |
+ }); |
+ }).then((database) { |
+ db = database; |
+ }); |
+ }); |
+ |
+ if (html.window.indexedDB.supportsDatabaseNames) { |
+ test('getDatabaseNames', () { |
+ return html.window.indexedDB.getDatabaseNames().then((names) { |
+ expect(names.contains(dbName), isTrue); |
+ }); |
+ }); |
+ } |
+ |
+ var value = {'name_index': 'one', 'value': 'add_value'}; |
+ test('add/delete', () { |
+ var transaction = db.transaction(storeName, 'readwrite'); |
+ var key; |
+ return transaction.objectStore(storeName).add(value).then((addedKey) { |
+ key = addedKey; |
+ }).then((_) { |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ return transaction.objectStore(storeName).getObject(key); |
+ }).then((readValue) { |
+ expect(readValue['value'], value['value']); |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transactionList([storeName], 'readwrite'); |
+ return transaction.objectStore(storeName).delete(key); |
+ }).then((_) { |
+ return transaction.completed; |
+ }).then((_) { |
+ var transaction = db.transactionList([storeName], 'readonly'); |
+ return transaction.objectStore(storeName).count(); |
+ }).then((count) { |
+ expect(count, 0); |
+ }); |
+ }); |
+ |
+ test('clear/count', () { |
+ var transaction = db.transaction(storeName, 'readwrite'); |
+ transaction.objectStore(storeName).add(value); |
+ |
+ return transaction.completed.then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ return transaction.objectStore(storeName).count(); |
+ }).then((count) { |
+ expect(count, 1); |
+ }).then((_) { |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transactionList([storeName], 'readwrite'); |
+ transaction.objectStore(storeName).clear(); |
+ return transaction.completed; |
+ }).then((_) { |
+ var transaction = db.transactionList([storeName], 'readonly'); |
+ return transaction.objectStore(storeName).count(); |
+ }).then((count) { |
+ expect(count, 0); |
+ }); |
+ }); |
+ |
+ test('index', () { |
+ var transaction = db.transaction(storeName, 'readwrite'); |
+ transaction.objectStore(storeName).add(value); |
+ transaction.objectStore(storeName).add(value); |
+ transaction.objectStore(storeName).add(value); |
+ transaction.objectStore(storeName).add(value); |
+ |
+ return transaction.completed.then((_) { |
+ transaction = db.transactionList([storeName], 'readonly'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ return index.count(); |
+ }).then((count) { |
+ expect(count, 4); |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ return index.openCursor(autoAdvance: true).length; |
+ }).then((cursorsLength) { |
+ expect(cursorsLength, 4); |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ return index.openKeyCursor(autoAdvance: true).length; |
+ }).then((cursorsLength) { |
+ expect(cursorsLength, 4); |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ return index.get('one'); |
+ }).then((readValue) { |
+ expect(readValue['value'], value['value']); |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readwrite'); |
+ transaction.objectStore(storeName).clear(); |
+ return transaction.completed; |
+ }); |
+ }); |
+ |
+ var deleteValue = {'name_index': 'two', 'value': 'delete_value'}; |
+ var updateValue = {'name_index': 'three', 'value': 'update_value'}; |
+ var updatedValue = {'name_index': 'three', 'value': 'updated_value'}; |
+ test('cursor', () { |
+ var transaction = db.transaction(storeName, 'readwrite'); |
+ transaction.objectStore(storeName).add(value); |
+ transaction.objectStore(storeName).add(deleteValue); |
+ transaction.objectStore(storeName).add(updateValue); |
+ |
+ return transaction.completed.then((_) { |
+ transaction = db.transactionList([storeName], 'readwrite'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ var cursors = index.openCursor().asBroadcastStream(); |
+ |
+ cursors.listen((cursor) { |
+ var value = cursor.value; |
+ if (value['value'] == 'delete_value') { |
+ cursor.delete().then((_) { |
+ cursor.next(); |
+ }); |
+ } else if (value['value'] == 'update_value') { |
+ cursor.update(updatedValue).then((_) { |
+ cursor.next(); |
+ }); |
+ } else { |
+ cursor.next(); |
+ } |
+ }); |
+ return cursors.last; |
+ |
+ }).then((_) { |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ return index.get('three'); |
+ }).then((readValue) { |
+ expect(readValue['value'], 'updated_value'); |
+ return transaction.completed; |
+ }).then((_) { |
+ transaction = db.transaction(storeName, 'readonly'); |
+ var index = transaction.objectStore(storeName).index(indexName); |
+ return index.get('two'); |
+ }).then((readValue) { |
+ expect(readValue, isNull); |
+ return transaction.completed; |
+ }); |
+ }); |
+} |