package Ġorg . testng . dat apro vider Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Soft Assertions Ċ import Ġorg . netbeans . lib . profiler . heap . Heap Factory 2 Ċ import Ġorg . netbeans . lib . profiler . heap . Instance Ċ import Ġorg . netbeans . lib . profiler . heap . Java Class Ċ import Ġorg . testng . Reporter Ċ import Ġorg . testng . annotations . Test Ċ import Ġorg . testng . dat apro vider . sample . issue 2 7 2 4 .* Ċ import Ġtest . Simple Base Test Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Files Ċ Ċ const Ġval ĠCLASS _ NAME _ DP Ġ= Ġ" org . testng . dat apro vider . sample . issue 2 7 2 4 . Data Providers " Ċ const Ġval ĠCLASS _ NAME _ DP _ LOAD ER Ġ= Ġ" org . testng . internal . DataProvider Loader " Ċ Ċ class ĠDynamic DataProvider Loading Test Ġ: ĠSimple Base Test () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Dynamic DataProvider P asses () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġrun ( Sample Dynamic DP :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( listener . failed Method Names ). isEmpty () ĊĠĠĠĠĠĠĠ ĠassertThat ( listener . suc ceed Method Names ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test Dynamic DataProvider ( Mi ke , 3 4 , student )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test Dynamic DataProvider ( Mi ke , 2 3 , driver )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" test Dynamic DataProvider ( Pa ul , 2 0 , director )", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( listener . skipped Method Names ). isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Dynamic DataProvider Un loaded () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Directory Ġ= ĠFiles . create Temp Directory (" temp - testng - ") ĊĠĠĠĠĠĠĠ Ġval Ġdump Path Ġ= Ġ"% s /% s ". format ( temp Directory . to AbsolutePath (). toString (), Ġ" dump . h prof ") ĊĠĠĠĠĠĠĠ Ġval Ġdump Path Before Sample Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% s /% s ". format ( temp Directory . to AbsolutePath (). toString (), Ġ" dump - before - sample . h prof ") ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" memd ump . path ", Ġdump Path ) ĊĊĠĠĠĠĠĠĠ Ġsave Mem Dump ( dump Path Before Sample ) ĊĠĠĠĠĠĠĠ Ġval Ġheap Dump Before Sample File Ġ= ĠFile ( dump Path Before Sample ) ĊĠĠĠĠĠĠĠ ĠassertThat ( heap Dump Before Sample File ). exists () ĊĠĠĠĠĠĠĠ Ġvar Ġheap Ġ= ĠHeap Factory 2 . create Heap ( heap Dump Before Sample File , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġbefore Sample DP Class Dump : ĠJava Class ? Ġ= Ġheap . get Java Class ByName ( CLASS _ NAME _ DP ) ĊĠĠĠĠĠĠĠ ĠassertThat ( before Sample DP Class Dump ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. described As ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Class Ġ$ CLASS _ NAME _ DP Ġshouldn 't Ġbe Ġloaded , Ġbefore Ġtest Ġsample Ġstarted . Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNull () ĊĊĠĠĠĠĠĠĠ Ġrun ( Sample DP Un loaded :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheap Dump File Ġ= ĠFile ( dump Path ) ĊĠĠĠĠĠĠĠ ĠassertThat ( heap Dump File ). exists () ĊĠĠĠĠĠĠĠ Ġheap Ġ= ĠHeap Factory 2 . create Heap ( heap Dump File , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġwith ( Soft Assertions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Loader Class Dump : ĠJava Class ? Ġ= Ġheap . get Java Class ByName ( CLASS _ NAME _ DP _ LOAD ER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Class Dump : ĠJava Class ? Ġ= Ġheap . get Java Class ByName ( CLASS _ NAME _ DP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Loader Message Ġ= Ġdp Loader Class Dump ?. instances ?. join ToString ("\ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget GC Path ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Message Ġ= Ġdp Loader Class Dump ?. instances ?. join ToString ("\ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget GC Path ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . assertThat ( dp Loader Class Dump ?. instances ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. described As ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAll Ġinstances Ġof Ġclass Ġ$ CLASS _ NAME _ DP _ LOAD ER Ġshould Ġbe Ġgarbage Ġcollected , Ġbut Ġwas Ġnot . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Ġto ĠGC Ġroot Ġis : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ dp Loader Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . assertThat ( dp Class Dump ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. described As ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Ġ$ CLASS _ NAME _ DP Ġshouldn 't Ġbe Ġloaded , Ġbut Ġit Ġwas . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Ġto ĠGC Ġroot Ġis : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ dp Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . assert All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Performance Again st Csv Files () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple D PS uite Ġ= Ġcreate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Test Classes ( array Of ( Sample Simple DP :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Listener Classes ( listOf ( Test Time Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcsv Suite Ġ= Ġcreate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Test Classes ( array Of ( Sample With CSV Data :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Listener Classes ( listOf ( Test Time Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata As Code Suite Ġ= Ġcreate (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Test Classes ( array Of ( Sample Dynamic DP :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Listener Classes ( listOf ( Test Time Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠReport er . log (" Test Ġexecution Ġtime :\ n ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( suite Ġin ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" simple Ġdat apro vider ", Ġsimple D PS uite ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" dat apro vider Ġas Ġcode ", Ġdata As Code Suite ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" csv Ġdat apro vider ", Ġcsv Suite ), ĊĠĠĠĠĠĠĠ Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun ( false , Ġsuite . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport er . log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ suite . first } Ġexecution Ġtimes : Ġ% d Ġmilliseconds ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. format ( Test Time Listener . test Run Time ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget GC Path ( instance : ĠInstance ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ(! instance . is G CR oot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġget GC Path ( instance . nearest G CR oot Pointer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Ġ+ Ġ"${ instance . java Class . name }\ n " ĊĠĠĠ Ġ} Ċ } Ċ