Write integration test for tables feature

This commit is contained in:
Simon Binder 2019-09-13 20:01:09 +02:00
parent 156ef1ceb5
commit e50e7b3f21
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
4 changed files with 108 additions and 3 deletions

View File

@ -44,7 +44,10 @@ abstract class AnalyzingStep extends Step {
final bool isParsing = false;
List<FoundFile> _transitiveImports(Iterable<FoundFile> directImports) {
return task.crawlImports(directImports).toList();
return task
.crawlImports(directImports)
.where((import) => import != file)
.toList();
}
Iterable<SpecifiedTable> _availableTables(List<FoundFile> imports) {

View File

@ -13,7 +13,8 @@ class AnalyzeMoorStep extends AnalyzingStep {
.followedBy(parseResult.declaredTables)
.toList();
final parser = SqlParser(this, availableTables, parseResult.queries);
final parser = SqlParser(this, availableTables, parseResult.queries)
..parse();
parseResult.resolvedQueries = parser.foundQueries;
}
}

View File

@ -0,0 +1,101 @@
import 'package:build/build.dart';
import 'package:moor_generator/src/analyzer/runner/file_graph.dart';
import 'package:moor_generator/src/analyzer/runner/results.dart';
import 'package:moor_generator/src/analyzer/runner/task.dart';
import 'package:moor_generator/src/analyzer/session.dart';
import 'package:moor_generator/src/model/specified_column.dart';
import 'package:moor_generator/src/model/sql_query.dart';
import 'package:test/test.dart';
import '../utils/test_backend.dart';
void main() {
TestBackend backend;
MoorSession session;
setUpAll(() {
backend = TestBackend(
{
AssetId.parse('test_lib|lib/database.dart'): r'''
import 'package:moor/moor.dart';
import 'another.dart'; // so that the resolver picks it up
@DataClassName('UsesLanguage')
class UsedLanguages extends Table {
IntColumn get language => integer()();
IntColumn get library => integer()();
@override
Set<Column> get primaryKey => {language, library};
}
@UseMoor(
tables: [UsedLanguages],
include: {'package:test_lib/tables.moor'},
queries: {
'transitiveImportTest': 'SELECT * FROM programming_languages',
},
)
class Database {}
''',
AssetId.parse('test_lib|lib/tables.moor'): r'''
import 'another.dart';
CREATE TABLE libraries (
id INT NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);
findLibraries: SELECT * FROM libraries WHERE name LIKE ?;
''',
AssetId.parse('test_lib|lib/another.dart'): r'''
import 'package:moor/moor.dart';
class ProgrammingLanguages extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text()();
IntColumn get popularity => integer().named('ieee_index').nullable()();
}
''',
},
);
session = backend.session;
});
tearDownAll(() {
backend.finish();
});
Task task;
setUp(() async {
final backendTask =
backend.startTask(Uri.parse('package:test_lib/database.dart'));
task = session.startTask(backendTask);
await task.runTask();
});
test('resolves tables and queries', () {
final file =
session.registerFile(Uri.parse('package:test_lib/database.dart'));
expect(file.state, FileState.analyzed);
expect(file.errors.errors, isEmpty);
final result = file.currentResult as ParsedDartFile;
final database = result.declaredDatabases.single;
expect(database.allTables.map((t) => t.sqlName),
containsAll(['used_languages', 'libraries', 'programming_languages']));
final importQuery = database.resolvedQueries
.singleWhere((q) => q.name == 'transitiveImportTest') as SqlSelectQuery;
expect(importQuery.resultClassName, 'ProgrammingLanguage');
final librariesQuery = database.resolvedQueries
.singleWhere((q) => q.name == 'findLibraries') as SqlSelectQuery;
expect(librariesQuery.variables.single.type, ColumnType.text);
});
}

View File

@ -75,6 +75,6 @@ class _TestBackendTask extends BackendTask {
@override
Future<bool> exists(Uri uri) async {
return backend.fakeContent.containsKey(AssetId.parse(uri.toString()));
return backend.fakeContent.containsKey(AssetId.resolve(uri.toString()));
}
}