mirror of https://github.com/AMT-Cheif/drift.git
130 lines
3.3 KiB
Dart
130 lines
3.3 KiB
Dart
import 'package:build_test/build_test.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../utils.dart';
|
|
|
|
void main() {
|
|
test('references right parent class for Dart-defined tables', () async {
|
|
final result = await emulateDriftBuild(
|
|
inputs: {
|
|
'a|lib/a.dart': '''
|
|
import 'package:drift/drift.dart';
|
|
|
|
abstract class MyBaseDataClass extends DataClass {}
|
|
|
|
@DataClassName('MyTag', extending: MyBaseDataClass)
|
|
class Tags extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
}
|
|
''',
|
|
},
|
|
modularBuild: true,
|
|
);
|
|
|
|
checkOutputs({
|
|
'a|lib/a.drift.dart': decodedMatches(
|
|
allOf(
|
|
contains("import 'package:a/a.dart' as i0;"),
|
|
contains(
|
|
r'class $TagsTable extends i0.Tags with i2.TableInfo<$TagsTable, i1.MyTag>',
|
|
),
|
|
contains('class MyTag extends i0.MyBaseDataClass'),
|
|
),
|
|
),
|
|
}, result.dartOutputs, result.writer);
|
|
});
|
|
|
|
test('generates index attached to table in monolithic build', () async {
|
|
final result = await emulateDriftBuild(
|
|
inputs: {
|
|
'a|lib/a.dart': '''
|
|
import 'package:drift/drift.dart';
|
|
|
|
import 'table.dart';
|
|
|
|
@DriftDatabase(tables: [Tags])
|
|
class MyDatabase {}
|
|
''',
|
|
'a|lib/table.dart': '''
|
|
import 'package:drift/drift.dart';
|
|
|
|
@TableIndex(name: 'tag_id', columns: {#id})
|
|
class Tags extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
}
|
|
''',
|
|
},
|
|
);
|
|
|
|
checkOutputs({
|
|
'a|lib/a.drift.dart': decodedMatches(allOf(
|
|
contains(
|
|
"Index tagId = Index('tag_id', 'CREATE INDEX tag_id ON tags (id)')",
|
|
),
|
|
contains('allSchemaEntities => [tags, tagId]'),
|
|
)),
|
|
}, result.dartOutputs, result.writer);
|
|
});
|
|
|
|
test('generates index attached to table in same file', () async {
|
|
// Regression test for https://github.com/simolus3/drift/discussions/2766
|
|
final result = await emulateDriftBuild(
|
|
inputs: {
|
|
'a|lib/a.dart': '''
|
|
import 'package:drift/drift.dart';
|
|
|
|
@TableIndex(name: 'tag_id', columns: {#id})
|
|
class Tags extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
}
|
|
|
|
@DriftDatabase(tables: [Tags])
|
|
class MyDatabase {}
|
|
''',
|
|
},
|
|
);
|
|
|
|
checkOutputs({
|
|
'a|lib/a.drift.dart': decodedMatches(allOf(
|
|
contains(
|
|
"Index tagId = Index('tag_id', 'CREATE INDEX tag_id ON tags (id)')",
|
|
),
|
|
contains('allSchemaEntities => [tags, tagId]'),
|
|
)),
|
|
}, result.dartOutputs, result.writer);
|
|
});
|
|
|
|
test('generates index attached to table in modular build', () async {
|
|
final result = await emulateDriftBuild(
|
|
inputs: {
|
|
'a|lib/database.dart': '''
|
|
import 'package:drift/drift.dart';
|
|
|
|
import 'table.dart';
|
|
|
|
@DriftDatabase(tables: [Tags])
|
|
class MyDatabase {}
|
|
''',
|
|
'a|lib/table.dart': '''
|
|
import 'package:drift/drift.dart';
|
|
|
|
@TableIndex(name: 'tag_id', columns: {#id})
|
|
class Tags extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
}
|
|
''',
|
|
},
|
|
modularBuild: true,
|
|
);
|
|
|
|
checkOutputs({
|
|
'a|lib/database.drift.dart':
|
|
decodedMatches(contains('get allSchemaEntities => [tags, i1.tagId]')),
|
|
'a|lib/table.drift.dart': decodedMatches(
|
|
contains(
|
|
"i0.Index get tagId => i0.Index('tag_id', 'CREATE INDEX tag_id ON tags (id)')"),
|
|
),
|
|
}, result.dartOutputs, result.writer);
|
|
});
|
|
}
|