/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠRealm ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . realm . test . compiler Ċ Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġio . realm . Realm Instant Ċ import Ġio . realm . internal . interop . Collection Type Ċ import Ġio . realm . test . util . Compiler . compile From Source Ċ import Ġio . realm . test . util . TypeDescriptor . all Field Types Ċ import Ġorg . junit . Test Ċ import Ġkotlin . reflect . K Classifier Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ // ĠCannot Ġtrigger Ġthese Ġfrom Ġwithin Ġthe ĠIDE Ġdue Ġto Ġhttps :// yout rack . jetbrains . com / issue / KT - 4 6 1 9 5 Ċ // ĠExecute Ġthe Ġtests Ġfrom Ġthe ĠCLI Ġwith Ġ`./ gradle w Ġj vm Test ` Ċ class ĠPrimary Key Tests Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` primary Ġkey Ġsupport ness `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠConsider Ġpl acing Ġthese Ġin ĠProperty Descriptor . kt Ġfor Ġreuse ĊĠĠĠĠĠĠĠ Ġval Ġdefaults Ġ= Ġmap Of < K Classifier , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class Ġto Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByte :: class Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChar :: class Ġto Ġ"\ ' c \' ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShort :: class Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong :: class Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFloat :: class Ġto Ġ" 1 . 4 f ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble :: class Ġto Ġ" 1 . 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class Ġto Ġ"\" Realm \"", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Instant :: class Ġto Ġ" Realm Instant . from Epoch Seconds ( 4 2 , Ġ 4 2 0 )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġall Field Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠConsider Ġadding Ġverification Ġof Ġcompiler Ġerrors Ġwhen Ġmarking Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġtypes Ġas Ġprimary Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . collection Type Ġ!= ĠCollection Type . RL M _ COLLECTION _ TYPE _ NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Type Ġ= Ġtype . elementType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Ġ= Ġif Ġ(! elementType . nullable ) Ġdefaults [ elementType . classifier ] Ġ?: Ġerror (" un mapped Ġdefault ") Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Literal Ġ= Ġtype . to Kotlin Literal () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile From Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ= ĠlistOf ( io . realm . compiler . Registrar ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" primaryKey . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . Realm Instant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . Realm Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . Realm Configuration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . annotations . PrimaryKey ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠA Ġ: ĠRealm Object Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PrimaryKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprimary Key : Ġ$ kotlin Literal Ġ= Ġ$ default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Configuration . with ( schema Ġ= Ġset Of ( A :: class )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . is PrimaryKey Supported ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . OK , Ġresult . exit Code , Ġtype . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR , Ġresult . exit Code , Ġtype . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( result . messages . contains (" but Ġmust Ġbe Ġof Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multiple Ġprimary Ġkeys Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile From Source ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" duplicate PrimaryKey . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . Realm Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . Realm Configuration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . realm . annotations . PrimaryKey ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠA Ġ: ĠRealm Object Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PrimaryKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprimary Key 1 : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PrimaryKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprimary Key 2 : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Configuration . with ( schema Ġ= Ġset Of ( A :: class )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR , Ġresult . exit Code ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . messages . contains (" Realm Object Ġcan Ġonly Ġhave Ġone Ġprimary Ġkey ")) ĊĠĠĠ Ġ} Ċ } Ċ