package Ġdev . the code war ri or . mirror . type . class mirror Ċ Ċ import Ġdev . the code war ri or . mirror . Mirror Ċ import Ġdev . the code war ri or . mirror . test support .* Ċ import Ġdev . the code war ri or . mirror . type . Type Mirror Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertNull Ċ import Ġorg . junit . jupiter . api . Assertions . assertSame Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert DoesNot Throw Ċ Ċ internal Ġclass ĠClass Mirror Test : ĠM Test () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġraw Ġclass Ġof Ġa ĠClass Mirror Ġshould Ġreturn Ġthe Ġoriginal Ġclass ") ĊĠĠĠ Ġfun Ġget Raw Class _ of Type _ should Return Original Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Object 1 >() ĊĠĠĠĠĠĠĠ ĠassertEquals ( Object 1 :: class . java , Ġtype . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġsuperclass Ġof Ġa ĠClass Mirror Ġshould Ġreturn Ġthe Ġcorrect Ġsup ertype ") ĊĠĠĠ Ġfun Ġget Super class _ of Type _ should Return Sup ertype () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠObject 1 Subclass : ĠObject 1 () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Object 1 Subclass >(). super class ĊĠĠĠĠĠĠĠ ĠassertEquals ( Mirror . reflect < Object 1 >(), Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġsuperclass Ġof ĠObject Ġshould Ġreturn Ġnull ") ĊĠĠĠ Ġfun Ġget Super class _ of Object _ should Return Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Any >(). super class ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġsuperclass Ġan Ġinterface Ġshould Ġreturn Ġnull ") ĊĠĠĠ Ġfun Ġget Super class _ of Interface _ should Return Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Interface 1 >(). super class ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġinterfaces Ġof Ġa Ġtype Ġwithout Ġinterfaces Ġshould Ġreturn Ġan Ġempty Ġlist ") ĊĠĠĠ Ġfun Ġget Interfaces _ of Type Without Interfaces _ should Return Empty List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Object 1 >(). interfaces ĊĠĠĠĠĠĠĠ ĠassertEquals ( emptyList < Type Mirror >(), Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġinterfaces Ġof Ġa Ġtype Ġwith Ġinterfaces Ġshould Ġreturn Ġits Ġinterfaces Ġin Ġdeclaration Ġorder ") ĊĠĠĠ Ġfun Ġget Interfaces _ of Type With Interfaces _ should Return Interfaces In Order () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠTest Type : ĠInterface 2 , ĠInterface 1 ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Test Type >(). interfaces ĊĠĠĠĠĠĠĠ ĠassertSame List ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect < Interface 2 >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect < Interface 1 >() ĊĠĠĠĠĠĠĠ Ġ), Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġtype Ġparameters Ġof Ġa Ġn ong ener ic Ġtype Ġshould Ġreturn Ġan Ġempty Ġlist ") ĊĠĠĠ Ġfun ĠgetType Parameters _ of Non GenericType _ should Return Empty List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Object 1 >(). type Parameters ĊĠĠĠĠĠĠĠ ĠassertEquals ( emptyList < Type Mirror >(), Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġtype Ġparameters Ġof Ġa Ġgeneric Ġtype Ġshould Ġreturn Ġthe Ġcorrect Ġtypes ") ĊĠĠĠ Ġfun ĠgetType Parameters _ of GenericType _ should Return Types () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class ( Generic Pair Object 1 :: class . java ). type Parameters ĊĠĠĠĠĠĠĠ ĠassertSame List ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( Generic Pair Object 1 :: class . java . type Parameters [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( Generic Pair Object 1 :: class . java . type Parameters [ 1 ]) ĊĠĠĠĠĠĠĠ Ġ), Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġraw Ġtype Ġof Ġa Ġraw ĠClass Mirror Ġshould Ġreturn Ġitself ") ĊĠĠĠ Ġfun Ġget Raw _ of Type _ returns It self () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Object 1 >() ĊĠĠĠĠĠĠĠ ĠassertSame ( type , Ġtype . raw ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġen closing Ġclass Ġof Ġa ĠClass Mirror Ġnot Ġnested Ġwithin Ġanother Ġshould Ġreturn Ġnull ") ĊĠĠĠ Ġfun Ġen closing Class _ of Non Nested Class _ should Return Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < Object 1 >() ĊĠĠĠĠĠĠĠ ĠassertNull ( type . enc lo sing Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġen closing Ġclass Ġof Ġa ĠClass Mirror Ġstatic ally Ġnested Ġwithin Ġanother Ġshould Ġreturn Ġthe Ġouter Ġclass ") ĊĠĠĠ Ġfun Ġen closing Class _ of Static Nested Class _ should Return Class Mirror () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < OuterClass 1 . Inner Static Class >() ĊĠĠĠĠĠĠĠ ĠassertSame ( Mirror . reflect Class < OuterClass 1 >(), Ġtype . enc lo sing Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġthe Ġen closing Ġclass Ġof Ġa ĠClass Mirror Ġnested Ġwithin Ġanother Ġshould Ġreturn Ġthe Ġouter Ġclass ") ĊĠĠĠ Ġfun Ġen closing Class _ of Nested Class _ should Return Class Mirror () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠM irror . reflect Class < OuterClass 1 . Inner Class >() ĊĠĠĠĠĠĠĠ ĠassertSame ( Mirror . reflect Class < OuterClass 1 >(), Ġtype . enc lo sing Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Field Ġtypes Ġof Ġinner Ġclasses Ġthat Ġuse Ġouter Ġgener ics Ġshould Ġhave Ġouter Ġgeneric Ġtypes ") ĊĠĠĠ Ġfun ĠfieldType _ of Inner Class Field With Outer GenericType _ should Return Outer GenericType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinner Class Ġ= ĠM irror . reflect Class ( Outer GenericClass 1 . Inner Class :: class . java ) ĊĠĠĠĠĠĠĠ Ġval ĠfieldType Ġ= Ġinner Class . find Public Field (" inner Field ") ?. type ĊĠĠĠĠĠĠĠ ĠassertSame ( Mirror . reflect Class ( Outer GenericClass 1 :: class . java ). type Parameters [ 0 ], ĠfieldType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Method Ġtypes Ġof Ġinner Ġclasses Ġthat Ġuse Ġouter Ġgener ics Ġshould Ġhave Ġouter Ġgeneric Ġtypes ") ĊĠĠĠ Ġfun ĠreturnType _ of Method In Nested Class With Outer GenericType _ should Return Outer GenericType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinner Class Ġ= ĠM irror . reflect Class ( Outer GenericClass 1 . Inner Class :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġmethod Type Ġ= Ġinner Class . getMethod (" inner Method "). returnType ĊĠĠĠĠĠĠĠ ĠassertSame ( Mirror . reflect Class ( Outer GenericClass 1 :: class . java ). type Parameters [ 0 ], Ġmethod Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġdeclared Ġfields Ġof Ġa Ġclass Ġshould Ġreturn Ġthe Ġcorrect Ġmir rors ") ĊĠĠĠ Ġfun Ġget Declared Fields () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠField Holder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field Ġvar Ġfoo : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field Ġprivate Ġvar Ġbar : ĠString ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġfoo Jvm Field Ġ= ĠField Holder :: class . java . getDeclared Field (" foo ") ĊĠĠĠĠĠĠĠ Ġval Ġbar Jvm Field Ġ= ĠField Holder :: class . java . getDeclared Field (" bar ") ĊĠĠĠĠĠĠĠ Ġval Ġholder Mirror Ġ= ĠM irror . reflect Class < Field Holder >() ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġholder Mirror . declared Fields ĊĠĠĠĠĠĠĠ ĠassertSame Set ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( foo Jvm Field ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( bar Jvm Field ) ĊĠĠĠĠĠĠĠ Ġ), Ġfields ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġdeclared Ġmethods Ġof Ġa Ġclass Ġshould Ġreturn Ġthe Ġcorrect Ġmir rors ") ĊĠĠĠ Ġfun Ġget Declared Methods () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠMethod Holder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfoo () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbar () Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfoo Jvm Method Ġ= ĠMethod Holder :: class . java . getDeclared Method (" foo ") ĊĠĠĠĠĠĠĠ Ġval Ġbar Jvm Method Ġ= ĠMethod Holder :: class . java . getDeclared Method (" bar ") ĊĠĠĠĠĠĠĠ Ġval Ġholder Mirror Ġ= ĠM irror . reflect Class < Method Holder >() ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġholder Mirror . declared Methods ĊĠĠĠĠĠĠĠ ĠassertSame Set ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( foo Jvm Method ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( bar Jvm Method ) ĊĠĠĠĠĠĠĠ Ġ), Ġmethods ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Getting Ġdeclared Ġconstructors Ġof Ġa Ġclass Ġshould Ġreturn Ġthe Ġcorrect Ġmir rors ") ĊĠĠĠ Ġfun Ġget Declared Construct ors () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠConstructor Holder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor ( foo : ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconstructor ( bar : ĠInt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfoo Jvm Constructor Ġ= ĠConstructor Holder :: class . java . getDeclared Constructor ( String :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġbar Jvm Constructor Ġ= ĠConstructor Holder :: class . java . getDeclared Constructor ( Int :: class . java Primitive Type ) ĊĠĠĠĠĠĠĠ Ġval Ġholder Mirror Ġ= ĠM irror . reflect Class < Constructor Holder >() ĊĠĠĠĠĠĠĠ Ġval Ġconstructors Ġ= Ġholder Mirror . declared Construct ors ĊĠĠĠĠĠĠĠ ĠassertSame Set ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( foo Jvm Constructor ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM irror . reflect ( bar Jvm Constructor ) ĊĠĠĠĠĠĠĠ Ġ), Ġconstructors ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġk Class _ of Raw Class _ should Return K Class () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Object 1 :: class , ĠM irror . reflect Class < Object 1 >(). k Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġk Class _ of Special ized Class _ should Return K Class () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Generic Object 1 :: class , ĠM irror . reflect Class < Generic Object 1 < Object 1 >> (). k Class ) ĊĠĠĠ Ġ} Ċ } Ċ