File tree Expand file tree Collapse file tree 8 files changed +123
-2
lines changed
integration-tests/part-partof Expand file tree Collapse file tree 8 files changed +123
-2
lines changed Original file line number Diff line number Diff line change
1
+ # start with an empty project, without a objectbox-model.json
2
+ objectbox-model.json
3
+ * .freezed.dart
Original file line number Diff line number Diff line change
1
+ import 'dart:io' ;
2
+ import 'package:test/test.dart' ;
3
+ import '../test_env.dart' ;
4
+
5
+ void main () {
6
+ // this is actually a meta test - that `git clean -fX` is run
7
+ test ('project must be clean before generating the code' , () {
8
+ expect (TestEnv .dir.existsSync (), false );
9
+ expect (File ('lib/objectbox.g.dart' ).existsSync (), false );
10
+ expect (File ('lib/objectbox-model.json' ).existsSync (), false );
11
+ });
12
+ }
Original file line number Diff line number Diff line change
1
+ import 'dart:io' ;
2
+
3
+ import 'package:test/test.dart' ;
4
+
5
+ import '../test_env.dart' ;
6
+ import '../common.dart' ;
7
+ import 'lib/json.dart' ;
8
+ import 'lib/frozen.dart' ;
9
+ import 'lib/objectbox.g.dart' ;
10
+
11
+ void main () {
12
+ commonModelTests (getObjectBoxModel (), readModelJson ('lib' ));
13
+
14
+ test ('project must be generated properly' , () {
15
+ expect (File ('lib/objectbox.g.dart' ).existsSync (), true );
16
+ expect (File ('lib/objectbox-model.json' ).existsSync (), true );
17
+ });
18
+
19
+ setupTestsFor (JsonEntity (id: 0 , str: 'foo' , date: DateTime .now ()));
20
+ setupTestsFor (FrozenEntity (id: 1 , str: 'foo' , date: DateTime .now ()));
21
+ }
22
+
23
+ void setupTestsFor <EntityT >(EntityT newObject) {
24
+ group ('${EntityT }' , () {
25
+ late TestEnv <EntityT > env;
26
+ setUp (() => env = TestEnv (getObjectBoxModel ()));
27
+ tearDown (() => env.close ());
28
+
29
+ test ('read/write' , () {
30
+ env.box.put (newObject);
31
+ env.box.get (1 );
32
+ });
33
+ });
34
+ }
Original file line number Diff line number Diff line change
1
+ import 'package:objectbox/objectbox.dart' ;
2
+ import 'package:freezed_annotation/freezed_annotation.dart' ;
3
+
4
+ part 'frozen.freezed.dart' ;
5
+
6
+ @freezed
7
+ class FrozenEntity with _$FrozenEntity {
8
+ @Entity (realClass: FrozenEntity )
9
+ factory FrozenEntity (
10
+ {@Id (assignable: true ) required int id,
11
+ required String str,
12
+ required DateTime date}) = _FrozenEntity ;
13
+ }
Original file line number Diff line number Diff line change
1
+ import 'package:objectbox/objectbox.dart' ;
2
+ import 'package:json_annotation/json_annotation.dart' ;
3
+
4
+ part 'json.g.dart' ;
5
+
6
+ @Entity ()
7
+ @JsonSerializable ()
8
+ class JsonEntity {
9
+ int id;
10
+ final String str;
11
+ final DateTime ? date;
12
+
13
+ JsonEntity ({required this .id, required this .str, required this .date});
14
+
15
+ factory JsonEntity .fromJson (Map <String , dynamic > json) =>
16
+ _$JsonEntityFromJson (json);
17
+
18
+ Map <String , dynamic > toJson () => _$JsonEntityToJson (this );
19
+ }
Original file line number Diff line number Diff line change
1
+ name : objectbox_generator_test
2
+
3
+ environment :
4
+ sdk : " >=2.12.0 <3.0.0"
5
+
6
+ dependencies :
7
+ objectbox :
8
+ json_serializable :
9
+ freezed_annotation :
10
+
11
+ dev_dependencies :
12
+ freezed :
13
+ objectbox_generator :
14
+ test :
15
+ build_runner :
16
+ build_test :
17
+ io :
18
+ path :
19
+
20
+ dependency_overrides :
21
+ objectbox :
22
+ path : ../../../objectbox
23
+ objectbox_generator :
24
+ path : ../../
Original file line number Diff line number Diff line change @@ -59,9 +59,12 @@ class EntityResolver extends Builder {
59
59
60
60
// process basic entity (note that allModels.createEntity is not used, as the entity will be merged)
61
61
final entityUid = annotation.read ('uid' );
62
+ final entityRealClass = annotation.read ('realClass' );
62
63
final entity = ModelEntity .create (
63
64
IdUid (0 , entityUid.isNull ? 0 : entityUid.intValue),
64
- element.name,
65
+ entityRealClass.isNull
66
+ ? element.name
67
+ : entityRealClass.typeValue.element! .name! ,
65
68
null );
66
69
67
70
if (_syncChecker.hasAnnotationOfExact (element)) {
Original file line number Diff line number Diff line change @@ -17,8 +17,21 @@ class Entity {
17
17
/// Entity instead of creating a new one.
18
18
final int ? uid;
19
19
20
+ /// Actual type this entity represents. ObjectBox will use it instead of the
21
+ /// `@Entity()` -annotated class's name. For example:
22
+ /// ```dart
23
+ /// @freezed
24
+ /// class Person with _$Person {
25
+ /// @Entity(realClass: Person)
26
+ /// factory Person(
27
+ /// {@Id(assignable: true) required int id,
28
+ /// required String name}) = _Person;
29
+ /// }
30
+ /// ```
31
+ final Type ? realClass;
32
+
20
33
/// Create an Entity annotation.
21
- const Entity ({this .uid});
34
+ const Entity ({this .uid, this .realClass });
22
35
}
23
36
24
37
/// Property annotation enables you to explicitly configure some details about
You can’t perform that action at this time.
0 commit comments