476b1e02a9
Also, updated status files to correctly fix failures in FF, IE and removed other spurious status entries. R=alanknight@google.com,vsm@google.com Change-Id: Ic965103d892ff4d5d119712e3187e829f57cd022 Reviewed-on: https://dart-review.googlesource.com/31800 Reviewed-by: Terry Lucas <terry@google.com>
129 lines
3.6 KiB
Dart
129 lines
3.6 KiB
Dart
library WebDBTest;
|
|
|
|
import 'dart:async';
|
|
import 'dart:html';
|
|
import 'dart:web_sql';
|
|
|
|
import 'package:unittest/unittest.dart';
|
|
import 'package:unittest/html_individual_config.dart';
|
|
import 'package:async_helper/async_helper.dart';
|
|
|
|
Future<SqlResultSet> createTable(
|
|
SqlTransaction transaction, String tableName, String columnName) async {
|
|
return transaction.executeSql('CREATE TABLE $tableName ($columnName)', []);
|
|
}
|
|
|
|
Future<SqlResultSet> insertTable(SqlTransaction transaction, String tableName,
|
|
String columnName, value) async {
|
|
final sql = 'INSERT INTO $tableName ($columnName) VALUES (?)';
|
|
return transaction.executeSql(sql, [value]);
|
|
}
|
|
|
|
Future<SqlResultSet> queryTable(
|
|
SqlTransaction transaction, String tableName) async {
|
|
final sql = 'SELECT * FROM $tableName';
|
|
return transaction.executeSql(sql, []);
|
|
}
|
|
|
|
Future<SqlResultSet> dropTable(SqlTransaction transaction, String tableName,
|
|
[bool ignoreFailure = false]) async {
|
|
try {
|
|
var result = await transaction.executeSql('DROP TABLE $tableName', []);
|
|
return result;
|
|
} catch (error) {
|
|
if (!ignoreFailure) throw error;
|
|
}
|
|
}
|
|
|
|
final tableName = 'test_table';
|
|
final columnName = 'test_data';
|
|
|
|
SqlDatabase db;
|
|
SqlTransaction tx;
|
|
|
|
Future setup() async {
|
|
if (SqlDatabase.supported) {
|
|
db = await window.openDatabase('test_db', '1.0', 'test_db', 1024 * 1024);
|
|
expect(db, isNotNull, reason: 'Unable to open database');
|
|
|
|
tx = await db.transaction_future();
|
|
expect(tx, isNotNull, reason: "Transaction not ready");
|
|
}
|
|
}
|
|
|
|
main() async {
|
|
useHtmlIndividualConfiguration();
|
|
|
|
await setup();
|
|
|
|
group('Database', () {
|
|
test('supported', () {
|
|
expect(SqlDatabase.supported, true);
|
|
});
|
|
});
|
|
|
|
group('Database', () {
|
|
test('Open/Transaction', () async {
|
|
if (!SqlDatabase.supported) return;
|
|
|
|
expect(tx, isNotNull, reason: "Transaction not ready");
|
|
|
|
// Should not succeed table doesn't exist to be dropped.
|
|
try {
|
|
await dropTable(tx, tableName);
|
|
expect(false, true, reason: "dropTable should fail");
|
|
} catch (error) {
|
|
expect(error.message,
|
|
"could not prepare statement (1 no such table: test_table)");
|
|
}
|
|
});
|
|
|
|
test('create', () async {
|
|
if (!SqlDatabase.supported) return;
|
|
|
|
expect(tx, isNotNull, reason: "Transaction not ready");
|
|
try {
|
|
SqlResultSet createResult =
|
|
await createTable(tx, tableName, columnName);
|
|
expect(createResult.insertId, 0);
|
|
} catch (error) {
|
|
expect(false, true, reason: "createTable failed - ${error.message}");
|
|
}
|
|
});
|
|
|
|
test('insert', () async {
|
|
if (!SqlDatabase.supported) return;
|
|
|
|
expect(tx, isNotNull, reason: "Transaction not ready");
|
|
try {
|
|
SqlResultSet insertResult =
|
|
await insertTable(tx, tableName, columnName, 'Some text data');
|
|
expect(insertResult.insertId, 1);
|
|
expect(insertResult.rowsAffected, 1);
|
|
} catch (error) {
|
|
expect(false, true, reason: "insert failed - ${error.message}");
|
|
}
|
|
});
|
|
|
|
test('query', () async {
|
|
if (!SqlDatabase.supported) return;
|
|
|
|
expect(tx, isNotNull, reason: "Transaction not ready");
|
|
try {
|
|
SqlResultSet queryResult = await queryTable(tx, tableName);
|
|
expect(queryResult.rows.length, 1);
|
|
expect(queryResult.rows[0]['test_data'], "Some text data");
|
|
} catch (error) {
|
|
expect(false, true, reason: "queryTable failed - ${error.message}");
|
|
}
|
|
});
|
|
|
|
test('cleanup', () async {
|
|
if (!SqlDatabase.supported) return;
|
|
|
|
expect(tx, isNotNull, reason: "Transaction not ready");
|
|
await dropTable(tx, tableName, true);
|
|
});
|
|
});
|
|
}
|