@@ -35,6 +35,8 @@ import kotlin.test.*
3535 */
3636class ManagedSetTester <T : Any >(
3737 private val testerName : String ,
38+ private val setFieldName : String ,
39+ private val setFieldClass : Class <T >,
3840 private val realmAnyType : RealmAny .Type ? = null ,
3941 private val setGetter : KFunction1 <SetAllTypes , RealmSet <T >>,
4042 private val setSetter : KFunction2 <SetAllTypes , RealmSet <T >, Unit >,
@@ -354,6 +356,40 @@ class ManagedSetTester<T : Any>(
354356 }
355357 }
356358
359+ override fun dynamic () {
360+ // Create a set from a immutable schema context
361+ val set = initAndAssertEmptySet(id = " id" )
362+ realm.executeTransaction {
363+ set.addAll(initializedSet)
364+ }
365+
366+ val dynamicRealm = DynamicRealm .getInstance(realm.configuration)
367+ val dynamicObject: DynamicRealmObject = dynamicRealm.where(SetAllTypes .NAME ).equalTo(AllTypes .FIELD_STRING , " id" ).findFirst()!!
368+ val dynamicSet = dynamicObject.getRealmSet(setFieldName, setFieldClass)
369+
370+ // Access the previous set from a mutable context
371+ assertSetContainsSet(initializedSet, dynamicSet)
372+
373+ // Update the set with a new value
374+ dynamicRealm.executeTransaction {
375+ dynamicSet.add(notPresentValue)
376+ }
377+
378+ assertSetContainsSet(initializedSet.plus(notPresentValue), dynamicSet)
379+
380+ // Try to replace the whole set by a new one
381+ dynamicRealm.executeTransaction {
382+ dynamicObject.setRealmSet(setFieldName, RealmSet <T >().apply {
383+ add(notPresentValue)
384+ })
385+ }
386+
387+ assertSetContainsSet(listOf (notPresentValue), dynamicSet)
388+ assertEquals(1 , dynamicObject.get<RealmSet <T >>(setFieldName).size)
389+
390+ dynamicRealm.close()
391+ }
392+
357393 override fun insert () {
358394 doInsertTest(initializedSet)
359395 }
@@ -1032,6 +1068,8 @@ fun managedSetFactory(): List<SetTester> {
10321068 SetSupportedType .LONG ->
10331069 ManagedSetTester <Long >(
10341070 testerName = " Long" ,
1071+ setFieldClass = Long ::class .javaObjectType,
1072+ setFieldName = " columnLongSet" ,
10351073 setGetter = SetAllTypes ::getColumnLongSet,
10361074 setSetter = SetAllTypes ::setColumnLongSet,
10371075 requiredSetGetter = SetAllTypes ::getColumnRequiredLongSet,
@@ -1045,6 +1083,8 @@ fun managedSetFactory(): List<SetTester> {
10451083 SetSupportedType .INTEGER ->
10461084 ManagedSetTester <Int >(
10471085 testerName = " Integer" ,
1086+ setFieldClass = Int ::class .javaObjectType,
1087+ setFieldName = " columnIntegerSet" ,
10481088 setGetter = SetAllTypes ::getColumnIntegerSet,
10491089 setSetter = SetAllTypes ::setColumnIntegerSet,
10501090 requiredSetGetter = SetAllTypes ::getColumnRequiredIntegerSet,
@@ -1058,6 +1098,8 @@ fun managedSetFactory(): List<SetTester> {
10581098 SetSupportedType .SHORT ->
10591099 ManagedSetTester <Short >(
10601100 testerName = " Short" ,
1101+ setFieldClass = Short ::class .javaObjectType,
1102+ setFieldName = " columnShortSet" ,
10611103 setGetter = SetAllTypes ::getColumnShortSet,
10621104 setSetter = SetAllTypes ::setColumnShortSet,
10631105 requiredSetGetter = SetAllTypes ::getColumnRequiredShortSet,
@@ -1071,6 +1113,8 @@ fun managedSetFactory(): List<SetTester> {
10711113 SetSupportedType .BYTE ->
10721114 ManagedSetTester <Byte >(
10731115 testerName = " Byte" ,
1116+ setFieldClass = Byte ::class .javaObjectType,
1117+ setFieldName = " columnByteSet" ,
10741118 setGetter = SetAllTypes ::getColumnByteSet,
10751119 setSetter = SetAllTypes ::setColumnByteSet,
10761120 requiredSetGetter = SetAllTypes ::getColumnRequiredByteSet,
@@ -1084,6 +1128,8 @@ fun managedSetFactory(): List<SetTester> {
10841128 SetSupportedType .FLOAT ->
10851129 ManagedSetTester <Float >(
10861130 testerName = " Float" ,
1131+ setFieldClass = Float ::class .javaObjectType,
1132+ setFieldName = " columnFloatSet" ,
10871133 setGetter = SetAllTypes ::getColumnFloatSet,
10881134 setSetter = SetAllTypes ::setColumnFloatSet,
10891135 requiredSetGetter = SetAllTypes ::getColumnRequiredFloatSet,
@@ -1097,6 +1143,8 @@ fun managedSetFactory(): List<SetTester> {
10971143 SetSupportedType .DOUBLE ->
10981144 ManagedSetTester <Double >(
10991145 testerName = " Double" ,
1146+ setFieldClass = Double ::class .javaObjectType,
1147+ setFieldName = " columnDoubleSet" ,
11001148 setGetter = SetAllTypes ::getColumnDoubleSet,
11011149 setSetter = SetAllTypes ::setColumnDoubleSet,
11021150 requiredSetGetter = SetAllTypes ::getColumnRequiredDoubleSet,
@@ -1110,6 +1158,8 @@ fun managedSetFactory(): List<SetTester> {
11101158 SetSupportedType .STRING ->
11111159 ManagedSetTester <String >(
11121160 testerName = " String" ,
1161+ setFieldClass = String ::class .javaObjectType,
1162+ setFieldName = " columnStringSet" ,
11131163 setGetter = SetAllTypes ::getColumnStringSet,
11141164 setSetter = SetAllTypes ::setColumnStringSet,
11151165 requiredSetGetter = SetAllTypes ::getColumnRequiredStringSet,
@@ -1123,6 +1173,8 @@ fun managedSetFactory(): List<SetTester> {
11231173 SetSupportedType .BOOLEAN ->
11241174 ManagedSetTester <Boolean >(
11251175 testerName = " Boolean" ,
1176+ setFieldClass = Boolean ::class .javaObjectType,
1177+ setFieldName = " columnBooleanSet" ,
11261178 setGetter = SetAllTypes ::getColumnBooleanSet,
11271179 setSetter = SetAllTypes ::setColumnBooleanSet,
11281180 requiredSetGetter = SetAllTypes ::getColumnRequiredBooleanSet,
@@ -1136,6 +1188,8 @@ fun managedSetFactory(): List<SetTester> {
11361188 SetSupportedType .DATE ->
11371189 ManagedSetTester <Date >(
11381190 testerName = " Date" ,
1191+ setFieldClass = Date ::class .javaObjectType,
1192+ setFieldName = " columnDateSet" ,
11391193 setGetter = SetAllTypes ::getColumnDateSet,
11401194 setSetter = SetAllTypes ::setColumnDateSet,
11411195 requiredSetGetter = SetAllTypes ::getColumnRequiredDateSet,
@@ -1149,6 +1203,8 @@ fun managedSetFactory(): List<SetTester> {
11491203 SetSupportedType .DECIMAL128 ->
11501204 ManagedSetTester <Decimal128 >(
11511205 testerName = " Decimal128" ,
1206+ setFieldClass = Decimal128 ::class .javaObjectType,
1207+ setFieldName = " columnDecimal128Set" ,
11521208 setGetter = SetAllTypes ::getColumnDecimal128Set,
11531209 setSetter = SetAllTypes ::setColumnDecimal128Set,
11541210 requiredSetGetter = SetAllTypes ::getColumnRequiredDecimal128Set,
@@ -1162,6 +1218,8 @@ fun managedSetFactory(): List<SetTester> {
11621218 SetSupportedType .BINARY ->
11631219 ManagedSetTester <ByteArray >(
11641220 testerName = " Binary" ,
1221+ setFieldClass = ByteArray ::class .javaObjectType,
1222+ setFieldName = " columnBinarySet" ,
11651223 setGetter = SetAllTypes ::getColumnBinarySet,
11661224 setSetter = SetAllTypes ::setColumnBinarySet,
11671225 requiredSetGetter = SetAllTypes ::getColumnRequiredBinarySet,
@@ -1178,6 +1236,8 @@ fun managedSetFactory(): List<SetTester> {
11781236 SetSupportedType .OBJECT_ID ->
11791237 ManagedSetTester <ObjectId >(
11801238 testerName = " ObjectId" ,
1239+ setFieldClass = ObjectId ::class .javaObjectType,
1240+ setFieldName = " columnObjectIdSet" ,
11811241 setGetter = SetAllTypes ::getColumnObjectIdSet,
11821242 setSetter = SetAllTypes ::setColumnObjectIdSet,
11831243 requiredSetGetter = SetAllTypes ::getColumnRequiredObjectIdSet,
@@ -1192,6 +1252,8 @@ fun managedSetFactory(): List<SetTester> {
11921252 SetSupportedType .UUID ->
11931253 ManagedSetTester <UUID >(
11941254 testerName = " UUID" ,
1255+ setFieldClass = UUID ::class .javaObjectType,
1256+ setFieldName = " columnUUIDSet" ,
11951257 setGetter = SetAllTypes ::getColumnUUIDSet,
11961258 setSetter = SetAllTypes ::setColumnUUIDSet,
11971259 requiredSetGetter = SetAllTypes ::getColumnRequiredUUIDSet,
@@ -1206,6 +1268,8 @@ fun managedSetFactory(): List<SetTester> {
12061268 SetSupportedType .LINK ->
12071269 RealmModelManagedSetTester <DogPrimaryKey >(
12081270 testerName = " LINK" ,
1271+ setFieldClass = DogPrimaryKey ::class .java,
1272+ setFieldName = " columnRealmModelSet" ,
12091273 setGetter = SetAllTypes ::getColumnRealmModelSet,
12101274 setSetter = SetAllTypes ::setColumnRealmModelSet,
12111275 managedSetGetter = SetContainerClass ::myRealmModelSet,
@@ -1251,6 +1315,8 @@ fun managedSetFactory(): List<SetTester> {
12511315 RealmAny .Type .OBJECT -> RealmModelManagedSetTester <RealmAny >(
12521316 testerName = " MIXED-${realmAnyType.name} " ,
12531317 realmAnyType = realmAnyType,
1318+ setFieldClass = RealmAny ::class .java,
1319+ setFieldName = " columnRealmAnySet" ,
12541320 setGetter = SetAllTypes ::getColumnRealmAnySet,
12551321 setSetter = SetAllTypes ::setColumnRealmAnySet,
12561322 managedSetGetter = SetContainerClass ::myRealmAnySet,
@@ -1304,6 +1370,8 @@ fun managedSetFactory(): List<SetTester> {
13041370 else -> ManagedSetTester <RealmAny >(
13051371 testerName = " MIXED-${realmAnyType.name} " ,
13061372 realmAnyType = realmAnyType,
1373+ setFieldClass = RealmAny ::class .java,
1374+ setFieldName = " columnRealmAnySet" ,
13071375 setGetter = SetAllTypes ::getColumnRealmAnySet,
13081376 setSetter = SetAllTypes ::setColumnRealmAnySet,
13091377 managedSetGetter = SetContainerClass ::myRealmAnySet,
0 commit comments