import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġjava . io . File Ċ Ċ private Ġdata Ġclass ĠTest Spec ( ĊĠĠĠĠĠĠĠ Ġval Ġmarkdown : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġhtml : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġexample : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġstart _ line : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġend _ line : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġsection : ĠString Ċ ) Ċ Ċ private Ġfun Ġescape ( str : ĠString ) Ġ= Ġstr ĊĠĠĠĠĠĠĠ Ġ. replace ("\\ ", Ġ" \\\\ ") ĊĠĠĠĠĠĠĠ Ġ. replace ("\ n ", Ġ"\\ n ") ĊĠĠĠĠĠĠĠ Ġ. replace ("\ t ", Ġ"\\ t ") ĊĠĠĠĠĠĠĠ Ġ. replace (" \"", Ġ"\\ \" ") ĊĠĠĠĠĠĠĠ Ġ. replace ("$ ", Ġ"\\ $ ") Ċ Ċ fun Ġgenerate Spec Test ( test Dump : ĠString , ĠclassName : ĠString , Ġflavor : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġtest Specs Ġ= ĠGson (). fromJson < List < Test Spec >>( test Dump , Ġobject Ġ: ĠType Token < List < Test Spec >>() Ġ{} . type ) ĊĠĠĠ Ġval Ġoutput Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend (" package Ġorg . intellij . markdown \ n \ n ") ĊĠĠĠĠĠĠĠ Ġappend (" import Ġkotlin . test . Test \ n \ n ") ĊĠĠĠĠĠĠĠ Ġappend (" class Ġ$ className Ġ: ĠSpec Test ($ flavor ()) Ġ{\ n ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( spec Ġin Ġtest Specs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġspec . section . split (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġ"( extension )" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("", Ġprefix Ġ= Ġ" test ", Ġpostfix Ġ= Ġ" Example ${ spec . example }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first (). toUpperCase () Ġ+ Ġit . drop ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠĠĠ Ġ@ Test \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠĠĠ Ġfun Ġ"). append ( name ). append (" () Ġ= Ġdo Test (\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠĠĠĠĠĠĠĠĠĠĠ Ġmarkdown Ġ= Ġ\"" ). append ( escape ( spec . markdown )). append ("\ ",\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Ġ= Ġ\"" ). append ( escape ( spec . html )). append (" \"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠĠĠ Ġ) \ n \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġappend (" }\ n ") ĊĠĠĠ Ġ} ĊĠĠĠ ĠFile (" src / common Test / kotlin / org / intellij / markdown /$ className . kt "). write Text ( output ) Ċ } ĊĊ