package Ġme . pro xer . library . internal . adapter Ċ Ċ import Ġcom . squareup . mos hi . Json Class Ċ import Ġcom . squareup . mos hi . Json DataException Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . Types Ċ import Ġme . pro xer . library . entity . info . Entry Ċ import Ġme . pro xer . library . enums . F sk Constraint Ċ import Ġme . pro xer . library . enums . Gender Ċ import Ġorg . am sh ove . k lu ent . inv oking Ċ import Ġorg . am sh ove . k lu ent . shouldBe Empty Ċ import Ġorg . am sh ove . k lu ent . shouldBe EqualTo Ċ import Ġorg . am sh ove . k lu ent . shouldBe Null Ċ import Ġorg . am sh ove . k lu ent . should Contain Ċ import Ġorg . am sh ove . k lu ent . should Not BeNull Ċ import Ġorg . am sh ove . k lu ent . should Throw Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ /** Ċ Ġ* Ġ@ author ĠRub en ĠGe es Ċ Ġ*/ Ċ class ĠDel imit ed Enum Set Adapter Factory Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfactory Ġ= ĠDel imit ed Enum Set Adapter Factory () ĊĊĠĠĠ Ġprivate Ġval Ġm oshi Ġ= ĠM oshi . Builder () ĊĠĠĠĠĠĠĠ Ġ. add ( factory ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġval Ġannotation Ġ= ĠGender TestClass :: class . java . getDeclared Field (" g enders ") ĊĠĠĠĠĠĠĠ Ġ. getAnnotation ( Delimited Enum Set :: class . java ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠTypes . new Parameterized Type ( Set :: class . java , ĠGender :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġfactory . create ( type , Ġset Of ( annotation ), Ġm oshi ) ĊĊĠĠĠĠĠĠĠ Ġadapter . should Not BeNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Invalid Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠTypes . new Parameterized Type ( List :: class . java , ĠF sk Constraint :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġfactory . create ( type , Ġset Of ( annotation ), Ġm oshi ) ĊĊĠĠĠĠĠĠĠ Ġadapter . shouldBe Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Invalid ParameterType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠTypes . new Parameterized Type ( Set :: class . java , ĠEntry :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġfactory . create ( type , Ġset Of ( annotation ), Ġm oshi ) ĊĊĠĠĠĠĠĠĠ Ġadapter . shouldBe Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create No ParameterType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġfactory . create ( Set :: class . java , Ġset Of ( annotation ), Ġm oshi ) ĊĊĠĠĠĠĠĠĠ Ġadapter . shouldBe Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create No Annotation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠTypes . new Parameterized Type ( Set :: class . java , ĠGender :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġfactory . create ( type , Ġempty Set (), Ġm oshi ) ĊĊĠĠĠĠĠĠĠ Ġadapter . shouldBe Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Single () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). fromJson (""" {" g enders ":" f "} """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders ĠshouldBe EqualTo Ġset Of ( Gender . F EM ALE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Multiple () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). fromJson (""" {" g enders ":" f Ġm "} """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders ĠshouldBe EqualTo Ġset Of ( Gender . M ALE , ĠGender . F EM ALE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Invalid Delimiter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). fromJson (""" {" g enders ":" f , m "} """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders ĠshouldBe EqualTo Ġset Of ( Gender . UNKNOWN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). fromJson (""" {" g enders ": "" } """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders . shouldBe Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). fromJson (""" {" g enders ": null } """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders . shouldBe Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Different Delimiter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender With Delimiter TestClass :: class . java ). fromJson (""" {" g enders ":" f , Ġm "} """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders ĠshouldBe EqualTo Ġset Of ( Gender . M ALE , ĠGender . F EM ALE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson Fallback () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). fromJson (""" {" g enders ":" f Ġm Ġxyz "} """) ĊĊĠĠĠĠĠĠĠ Ġresult . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġresult . g enders ĠshouldBe EqualTo Ġset Of ( Gender . M ALE , ĠGender . F EM ALE , ĠGender . UNKNOWN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FromJson No Fallback () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġm oshi . adapter ( F sk Constr ain TestClass :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġinvoking Ġ{ Ġadapter . fromJson (""" {" f sk Constraints ":" f sk 0 Ġxyz "} """) Ġ} Ġshould Throw ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson DataException :: class ĊĊĠĠĠĠĠĠĠ Ġresult . exception Message Ġshould Contain Ġ" Expected Ġone Ġof Ġ[ f sk 0 " ĊĠĠĠĠĠĠĠ Ġresult . exception Message Ġshould Contain Ġ" but Ġwas Ġxyz Ġat Ġpath Ġ$. f sk Constraints " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToJson Single () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Subject Ġ= ĠGender TestClass ( set Of ( Gender . F EM ALE )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). toJson ( test Subject ) ĊĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe EqualTo Ġ""" {" g enders ":" f "} """ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToJson Multiple () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Subject Ġ= ĠGender TestClass ( set Of ( Gender . F EM ALE , ĠGender . M ALE )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender TestClass :: class . java ). toJson ( test Subject ) ĊĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe EqualTo Ġ""" {" g enders ":" f Ġm "} """ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToJson Multiple Different Delimiter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Subject Ġ= ĠGender With Delimiter TestClass ( set Of ( Gender . F EM ALE , ĠGender . M ALE )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm oshi . adapter ( Gender With Delimiter TestClass :: class . java ). toJson ( test Subject ) ĊĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe EqualTo Ġ""" {" g enders ":" f , Ġm "} """ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠGender TestClass ( ĊĠĠĠĠĠĠĠ Ġ@ field : Delimited Enum Set ( delimiter Ġ= Ġ" Ġ") Ġval Ġg enders : ĠSet < Gender >? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠGender With Delimiter TestClass ( ĊĠĠĠĠĠĠĠ Ġ@ field : Delimited Enum Set ( delimiter Ġ= Ġ", Ġ") Ġval Ġg enders : ĠSet < Gender >? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠF sk Constr ain TestClass ( ĊĠĠĠĠĠĠĠ Ġ@ field : Delimited Enum Set ( delimiter Ġ= Ġ" Ġ") Ġval Ġf sk Constraints : ĠSet < F sk Constraint >? Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } Ċ