Skip to content

Commit

Permalink
Merge c2028f8 into a38a346
Browse files Browse the repository at this point in the history
  • Loading branch information
desistefanova committed Mar 16, 2022
2 parents a38a346 + c2028f8 commit 4518ed7
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 132 deletions.
140 changes: 8 additions & 132 deletions generator/test/generator_test.dart
Original file line number Diff line number Diff line change
@@ -1,150 +1,27 @@
import 'package:build_test/build_test.dart';
import 'package:realm_generator/realm_generator.dart';
import 'package:test/test.dart';
import 'test_util.dart';

void main() {
test('pinhole', () async {
await testBuilder(
generateRealmObjects(),
{
'pkg|lib/src/test.dart': r'''
import 'package:realm_common/realm_common.dart';
part 'test.g.dart';
final folderName = 'generator_test_io';

@RealmModel()
class _Foo {
int x = 0;
}''',
},
outputs: {
'pkg|lib/src/test.realm_objects.g.part': '// **************************************************************************\n'
'// RealmObjectGenerator\n'
'// **************************************************************************\n'
'\n'
'class Foo extends _Foo with RealmEntity, RealmObject {\n'
' static var _defaultsSet = false;\n'
'\n'
' Foo({\n'
' int x = 0,\n'
' }) {\n'
' if (!_defaultsSet) {\n'
' _defaultsSet = RealmObject.setDefaults<Foo>({\n'
' \'x\': 0,\n'
' });\n'
' }\n'
' RealmObject.set(this, \'x\', x);\n'
' }\n'
'\n'
' Foo._();\n'
'\n'
' @override\n'
' int get x => RealmObject.get<int>(this, \'x\') as int;\n'
' @override\n'
' set x(int value) => RealmObject.set(this, \'x\', value);\n'
'\n'
' @override\n'
' Stream<RealmObjectChanges<Foo>> get changes =>\n'
' RealmObject.getChanges<Foo>(this);\n'
'\n'
' static SchemaObject get schema => _schema ??= _initSchema();\n'
' static SchemaObject? _schema;\n'
' static SchemaObject _initSchema() {\n'
' RealmObject.registerFactory(Foo._);\n'
' return const SchemaObject(Foo, [\n'
' SchemaProperty(\'x\', RealmPropertyType.int),\n'
' ]);\n'
' }\n'
'}\n'
'',
},
reader: await PackageAssetReader.currentIsolate(),
);
test('pinhole', () async {
await ioTestBuilder(folderName, 'pinhole.dart', 'pinhole.g.dart');
});

test('all types', () async {
await testBuilder(
generateRealmObjects(),
{
'pkg|lib/src/test.dart': r'''
import 'dart:typed_data';
import 'package:realm_common/realm_common.dart';
part 'test.g.dart';
@RealmModel()
@MapTo('Fooo')
class _Foo {
int x = 0;
}
@RealmModel()
class _Bar {
@PrimaryKey()
late String id;
late bool aBool, another;
var data = Uint8List(16);
// late RealmAny any; // not supported yet
@MapTo('tidspunkt')
var timestamp = DateTime.now();
var aDouble = 0.0;
// late Decimal128 decimal; // not supported yet
_Foo? foo;
// late ObjectId id;
// late Uuid uuid; // not supported yet
@Ignored()
var theMeaningOfEverything = 42;
var list = [0]; // list of ints with default value
// late Set<int> set; // not supported yet
// late map = <String, int>{}; // not supported yet
@Indexed()
String? anOptionalString;
}'''
},
reader: await PackageAssetReader.currentIsolate(),
);
await ioTestBuilder(folderName, 'all_types.dart');
});

test('not a realm type', () async {
await expectLater(
() async => await testBuilder(
generateRealmObjects(),
{
'pkg|lib/src/test.dart': r'''
import 'package:realm_common/realm_common.dart';
part 'test.g.dart';
class NonRealm {}
@RealmModel()
class _Bad {
late NonRealm notARealmType;
}'''
},
reader: await PackageAssetReader.currentIsolate(),
),
() async => await ioTestErrorBuilder(folderName, 'not_a_realm_type.dart'),
throwsA(
isA<RealmInvalidGenerationSourceError>().having(
(e) => e.format(),
'format()',
'Not a realm type\n'
'\n'
'in: package:pkg/src/test.dart:9:8\n'
' ╷\n'
'5 │ class NonRealm {}\n'
' │ ━━━━━━━━ \n'
'... │\n'
'7 │ @RealmModel()\n'
'8 │ class _Bad {\n'
' │ ━━━━ in realm model for \'Bad\'\n'
'9 │ late NonRealm notARealmType;\n'
' │ ^^^^^^^^ NonRealm is not a realm model type\n'
' ╵\n'
'Add a @RealmModel annotation on \'NonRealm\', or an @Ignored annotation on \'notARealmType\'.\n'
'',
await readFileAsErrorFormattedString(folderName, 'not_a_realm_type.log'),
),
),
);
Expand Down Expand Up @@ -971,7 +848,7 @@ class _Person {
);
});

test('map unsupported', () async {
test('map unsupported', () async {
await expectLater(
() async => await testBuilder(
generateRealmObjects(),
Expand Down Expand Up @@ -1006,5 +883,4 @@ class _Person {
)),
);
});

}
33 changes: 33 additions & 0 deletions generator/test/generator_test_io/all_types.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import 'dart:typed_data';

import 'package:realm_common/realm_common.dart';

@RealmModel()
@MapTo('Fooo')
class _Foo {
int x = 0;
}

@RealmModel()
class _Bar {
@PrimaryKey()
late String id;
late bool aBool, another;
var data = Uint8List(16);
// late RealmAny any; // not supported yet
@MapTo('tidspunkt')
var timestamp = DateTime.now();
var aDouble = 0.0;
// late Decimal128 decimal; // not supported yet
_Foo? foo;
// late ObjectId id;
// late Uuid uuid; // not supported yet
@Ignored()
var theMeaningOfEverything = 42;
var list = [0]; // list of ints with default value
// late Set<int> set; // not supported yet
// late map = <String, int>{}; // not supported yet

@Indexed()
String? anOptionalString;
}
10 changes: 10 additions & 0 deletions generator/test/generator_test_io/not_a_realm_type.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:realm_common/realm_common.dart';

//part 'not_a_realm_type.g.dart';

class NonRealm {}

@RealmModel()
class _Bad {
late NonRealm notARealmType;
}
15 changes: 15 additions & 0 deletions generator/test/generator_test_io/not_a_realm_type.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Not a realm type

in: asset:pkg/test/generator_test_io/not_a_realm_type.dart:9:8
5 │ class NonRealm {}
│ ━━━━━━━━
... │
7 │ @RealmModel()
8 │ class _Bad {
│ ━━━━ in realm model for 'Bad'
9 │ late NonRealm notARealmType;
│ ^^^^^^^^ NonRealm is not a realm model type
Add a @RealmModel annotation on 'NonRealm', or an @Ignored annotation on 'notARealmType'.

9 changes: 9 additions & 0 deletions generator/test/generator_test_io/pinhole.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import 'package:realm_common/realm_common.dart';
import '../../../lib/realm.dart'; //For partial file references

part 'pinhole.g.dart';

@RealmModel()
class _Foo {
int x = 0;
}
38 changes: 38 additions & 0 deletions generator/test/generator_test_io/pinhole.g.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// **************************************************************************
// RealmObjectGenerator
// **************************************************************************
part of 'pinhole.dart';

class Foo extends _Foo with RealmEntity, RealmObject {
static var _defaultsSet = false;

Foo({
int x = 0,
}) {
if (!_defaultsSet) {
_defaultsSet = RealmObject.setDefaults<Foo>({
'x': 0,
});
}
RealmObject.set(this, 'x', x);
}

Foo._();

@override
int get x => RealmObject.get<int>(this, 'x') as int;
@override
set x(int value) => RealmObject.set(this, 'x', value);

@override
Stream<RealmObjectChanges<Foo>> get changes => RealmObject.getChanges<Foo>(this);

static SchemaObject get schema => _schema ??= _initSchema();
static SchemaObject? _schema;
static SchemaObject _initSchema() {
RealmObject.registerFactory(Foo._);
return const SchemaObject(Foo, [
SchemaProperty('x', RealmPropertyType.int),
]);
}
}
58 changes: 58 additions & 0 deletions generator/test/test_util.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'package:path/path.dart' as _path;
import 'package:dart_style/dart_style.dart';
import 'package:build_test/build_test.dart';
import 'package:realm_generator/realm_generator.dart';

String _stringReplacements(String content) {
final formatter = DartFormatter();
var lines = LineSplitter.split(content);
String formattedContent = lines.where((element) => !element.startsWith("part of")).join('\n');
return formatter.format(formattedContent);
}

Future<String> readFileAsDartFormattedString(String path) async {
var file = File(_path.join(Directory.current.path, path));
String content = await file.readAsString(encoding: utf8);
return _stringReplacements(content);
}

Future<String> readFileAsErrorFormattedString(String directoryName, String logFileName) async {
var file = File(_path.join(Directory.current.path, 'test/$directoryName/$logFileName'));
String content = await file.readAsString(encoding: utf8);
if (Platform.isWindows) {
var macToWinSymbols = {'╷': ',', '━': '=', '╵': '\'', '│': '|'};
macToWinSymbols.forEach((key, value) {
content = content.replaceAll(key, value);
});
}
return LineSplitter.split(content).join('\n');
}

Future<Map<String, Object>> getInputFileAsset(String inputFilePath) async {
var key = 'pkg|$inputFilePath';
String inputContent = await readFileAsDartFormattedString(inputFilePath);
return {key: inputContent};
}

Future<Map<String, Object>> getOutputFileAsset(String inputFilePath, String outputFilePath) async {
var key = 'pkg|${_path.setExtension(inputFilePath, '.realm_objects.g.part')}';
String outputContent = await readFileAsDartFormattedString(outputFilePath);
return {key: outputContent};
}

Future<dynamic> ioTestBuilder(String directoryName, String inputFileName, [String outputFileName = ""]) async {
return testBuilder(generateRealmObjects(), await getInputFileAsset('test/$directoryName/$inputFileName'),
outputs: outputFileName.isEmpty ? null : await getOutputFileAsset('test/$directoryName/$inputFileName', 'test/$directoryName/$outputFileName'),
reader: await PackageAssetReader.currentIsolate());
}

Future<dynamic> ioTestErrorBuilder(String directoryName, String inputFileName) async {
return testBuilder(
generateRealmObjects(),
await getInputFileAsset('test/$directoryName/$inputFileName'),
reader: await PackageAssetReader.currentIsolate(),
);
}

0 comments on commit 4518ed7

Please sign in to comment.