blob: 047e9b34d97d6c03d4e99db2e624b9e426f63673 [file] [log] [blame]
#library('WebDBTest');
#import('../../pkg/unittest/unittest.dart');
#import('../../pkg/unittest/html_config.dart');
#import('dart:html');
void fail(message) {
guardAsync(() {
expect(false, isTrue, reason: message);
});
}
Future<SQLTransaction> createTransaction(Database db) {
final completer = new Completer<SQLTransaction>();
db.transaction((SQLTransaction transaction) {
completer.complete(transaction);
});
return completer.future;
}
createTable(tableName, columnName) => (SQLTransaction transaction) {
final completer = new Completer<SQLTransaction>();
final sql = 'CREATE TABLE $tableName ($columnName)';
transaction.executeSql(sql, [],
(SQLTransaction tx, SQLResultSet rs) {
completer.complete(transaction);
},
(SQLTransaction tx, SQLError error) {
fail(error.message);
});
return completer.future;
};
insert(tableName, columnName, value) => (SQLTransaction transaction) {
final completer = new Completer<SQLTransaction>();
final sql = 'INSERT INTO $tableName ($columnName) VALUES (?)';
transaction.executeSql(sql, [value],
(SQLTransaction tx, SQLResultSet rs) {
completer.complete(tx);
},
(SQLTransaction tx, SQLError error) {
fail(error.message);
});
return completer.future;
};
queryTable(tableName, callback) => (SQLTransaction transaction) {
final completer = new Completer<SQLTransaction>();
final sql = 'SELECT * FROM $tableName';
transaction.executeSql(sql, [],
(SQLTransaction tx, SQLResultSet rs) {
callback(rs);
completer.complete(tx);
},
(SQLTransaction tx, SQLError error) {
fail(error.message);
});
return completer.future;
};
dropTable(tableName, [bool ignoreFailure = false]) =>
(SQLTransaction transaction) {
final completer = new Completer<SQLTransaction>();
final sql = 'DROP TABLE $tableName';
transaction.executeSql(sql, [],
(SQLTransaction tx, SQLResultSet rs) {
completer.complete(tx);
},
(SQLTransaction tx, SQLError error) {
if (ignoreFailure) {
completer.complete(tx);
} else {
fail(error.message);
}
});
return completer.future;
};
main() {
useHtmlConfiguration();
test('Web Database', () {
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');
createTransaction(db)
// Attempt to clear out any tables which may be lurking from previous
// runs.
.chain(dropTable(tableName, true))
.chain(createTable(tableName, columnName))
.chain(insert(tableName, columnName, 'Some text data'))
.chain(queryTable(tableName, (resultSet) {
guardAsync(() {
expect(resultSet.rows.length, 1);
var row = resultSet.rows.item(0);
expect(row.containsKey(columnName), isTrue);
expect(row[columnName], 'Some text data');
});
}))
.chain(dropTable(tableName))
.then(expectAsync1((tx) {}));
});
}