/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġi Mot ions ĠA / S Ċ Ġ* Ċ Ġ* Ġ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 . im otions . bson 4 k . encoder Ċ Ċ import Ġio . im otions . bson 4 k . common .* Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . collections . should Contain All Ċ import Ġio . kot est . matchers . ints . shouldBe Exactly Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġorg . bson . B son Int 3 2 Ċ import Ġorg . bson . B son Null Ċ import Ġorg . bson . B son String Ċ Ċ @ Experimental Serialization Api Ċ class ĠB son Class Encoder Test Ġ: ĠString Spec ({ ĊĠĠĠ Ġ" Encode Ġclass " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass 2 (" F red ", Ġ 4 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it . toJson ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument . size ĠshouldBe Exactly Ġ 2 ĊĠĠĠĠĠĠĠ Ġdocument . keys Ġshould Contain All ĠlistOf (" x ", Ġ" y ") ĊĠĠĠĠĠĠĠ Ġdocument . getString (" x ") ĠshouldBe ĠB son String ( clazz . x ) ĊĠĠĠĠĠĠĠ Ġdocument . getInt 3 2 (" y ") ĠshouldBe ĠB son Int 3 2 ( clazz . y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Encode Ġclass Ġwith Ġnested Ġclass " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnested Ġ= ĠClass 2 (" F red ", Ġ 4 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass 2 ( 1 L , Ġnested ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it . toJson ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument . keys Ġshould Contain All ĠlistOf (" x ", Ġ" y ") ĊĠĠĠĠĠĠĠ Ġdocument . getDocument (" y "). keys Ġshould Contain All ĠlistOf (" x ", Ġ" y ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Encode Ġmultiple Ġnested Ġclasse Ġincluding Ġembedded Ġarray " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnested Ġ= ĠClass 2 (" F red ", Ġ 4 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass 3 ( 1 L , Ġ" This Ġis Ġa Ġcomment ", Ġnested ) ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= ĠClass 2 (" This Ġis Ġcontent ", Ġset Of ( clazz )) ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it . toJson ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument . keys Ġshould Contain All ĠlistOf (" x ", Ġ" y ") ĊĠĠĠĠĠĠĠ Ġdocument . get Array (" y "). size ĠshouldBe Exactly Ġ 1 ĊĠĠĠĠĠĠĠ Ġdocument . get Array (" y ")[ 0 ]. is Document ĠshouldBe Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Encode Ġnullable Ġfields " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Class Ġ= ĠClass 3 < Long , ĠInt ?, ĠClass 2 < String , ĠInt >>( 1 2 L , Ġnull , ĠClass 2 (" xyz ", Ġ- 4 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( test Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it . toJson ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument [" y "] ĠshouldBe ĠB son Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Encode Ġenum Ġfields " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass 2 < Byte , ĠEnum Class >( 1 6 , ĠEnum Class . TH IRD ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument [" y "] ĠshouldBe ĠB son String ( Enum Class . TH IRD . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Encode Ġclass Ġwith Ġall Ġnull Ġvalues " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠWrapper 2 < Int ?, ĠInt ? >( null , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument [" x "] ĠshouldBe ĠB son Null () ĊĠĠĠĠĠĠĠ Ġdocument [" y "] ĠshouldBe ĠB son Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Encode Ġclass Ġwith Ġdefault Ġnull ables " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠWrapper 2 Null < String , ĠString >( y Ġ= Ġ" hello ") ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġbson . encode To B son Document ( clazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument [" x "] ĠshouldBe ĠB son Null () ĊĠĠĠĠĠĠĠ Ġdocument [" y "] ĠshouldBe ĠB son String (" hello ") ĊĠĠĠ Ġ} Ċ }) Ċ