| Index: test/codegen/lib/html/websql_test.dart
|
| diff --git a/test/codegen/lib/html/websql_test.dart b/test/codegen/lib/html/websql_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a2c390564e87b1c535075a80d453690de024ab9a
|
| --- /dev/null
|
| +++ b/test/codegen/lib/html/websql_test.dart
|
| @@ -0,0 +1,141 @@
|
| +library WebDBTest;
|
| +import 'dart:async';
|
| +import 'dart:html';
|
| +import 'dart:web_sql';
|
| +import 'package:unittest/unittest.dart';
|
| +import 'package:unittest/html_individual_config.dart';
|
| +
|
| +Future<SqlTransaction> transaction(SqlDatabase db) {
|
| + final completer = new Completer<SqlTransaction>.sync();
|
| +
|
| + db.transaction((SqlTransaction transaction) {
|
| + completer.complete(transaction);
|
| + }, (SqlError error) {
|
| + completer.completeError(error);
|
| + });
|
| +
|
| + return completer.future;
|
| +}
|
| +
|
| +Future<SqlResultSet> createTable(SqlTransaction transaction, String tableName,
|
| + String columnName) {
|
| + final completer = new Completer<SqlResultSet>.sync();
|
| +
|
| + final sql = 'CREATE TABLE $tableName ($columnName)';
|
| + transaction.executeSql(sql, [],
|
| + (SqlTransaction tx, SqlResultSet rs) {
|
| + completer.complete(rs);
|
| + },
|
| + (SqlTransaction tx, SqlError error) {
|
| + completer.completeError(error);
|
| + });
|
| +
|
| + return completer.future;
|
| +}
|
| +
|
| +Future<SqlResultSet> insert(SqlTransaction transaction, String tableName,
|
| + String columnName, value) {
|
| + final completer = new Completer<SqlResultSet>.sync();
|
| +
|
| + final sql = 'INSERT INTO $tableName ($columnName) VALUES (?)';
|
| + transaction.executeSql(sql, [value],
|
| + (SqlTransaction tx, SqlResultSet rs) {
|
| + completer.complete(rs);
|
| + },
|
| + (SqlTransaction tx, SqlError error) {
|
| + completer.completeError(error);
|
| + });
|
| +
|
| + return completer.future;
|
| +}
|
| +
|
| +Future<SqlResultSet> queryTable(SqlTransaction transaction, String tableName) {
|
| + final completer = new Completer<SqlResultSet>.sync();
|
| +
|
| + final sql = 'SELECT * FROM $tableName';
|
| + transaction.executeSql(sql, [],
|
| + (SqlTransaction tx, SqlResultSet rs) {
|
| + completer.complete(rs);
|
| + },
|
| + (SqlTransaction tx, SqlError error) {
|
| + completer.completeError(error);
|
| + });
|
| +
|
| + return completer.future;
|
| +}
|
| +
|
| +Future<SqlResultSet> dropTable(SqlTransaction transaction, String tableName,
|
| + [bool ignoreFailure = false]) {
|
| + final completer = new Completer<SqlResultSet>.sync();
|
| +
|
| + final sql = 'DROP TABLE $tableName';
|
| + transaction.executeSql(sql, [],
|
| + (SqlTransaction tx, SqlResultSet rs) {
|
| + completer.complete(rs);
|
| + },
|
| + (SqlTransaction tx, SqlError error) {
|
| + if (ignoreFailure) {
|
| + completer.complete(null);
|
| + } else {
|
| + completer.completeError(error);
|
| + }
|
| + });
|
| +
|
| + return completer.future;
|
| +}
|
| +
|
| +main() {
|
| + useHtmlIndividualConfiguration();
|
| +
|
| + group('supported', () {
|
| + test('supported', () {
|
| + expect(SqlDatabase.supported, true);
|
| + });
|
| + });
|
| +
|
| + group('functional', () {
|
| + test('unsupported throws', () {
|
| + var expectation = SqlDatabase.supported ? returnsNormally : throws;
|
| + expect(() {
|
| + window.openDatabase('test_db', '1.0', 'test_db', 1024 * 1024);
|
| + }, expectation);
|
| +
|
| + });
|
| + test('Web Database', () {
|
| + // Skip if not supported.
|
| + if (!SqlDatabase.supported) {
|
| + return new Future.value();
|
| + }
|
| +
|
| + final tableName = 'test_table';
|
| + final columnName = 'test_data';
|
| +
|
| + final db = window.openDatabase('test_db', '1.0', 'test_db', 1024 * 1024);
|
| +
|
| + expect(db, isNotNull, reason: 'Unable to open database');
|
| +
|
| + var tx;
|
| + return transaction(db).then((transaction) {
|
| + tx = transaction;
|
| + }).then((_) {
|
| + // Attempt to clear out any tables which may be lurking from previous
|
| + // runs.
|
| + return dropTable(tx, tableName, true);
|
| + }).then((_) {
|
| + return createTable(tx, tableName, columnName);
|
| + }).then((_) {
|
| + return insert(tx, tableName, columnName, 'Some text data');
|
| + }).then((_) {
|
| + return queryTable(tx, tableName);
|
| + }).then((resultSet) {
|
| + expect(resultSet.rows.length, 1);
|
| + var row = resultSet.rows.item(0);
|
| + expect(row.containsKey(columnName), isTrue);
|
| + expect(row[columnName], 'Some text data');
|
| + expect(resultSet.rows[0], row);
|
| + }).then((_) {
|
| + return dropTable(tx, tableName);
|
| + });
|
| + });
|
| + });
|
| +}
|
|
|