package Ġio . github . de te kt . report . md Ċ Ċ import Ġio . github . de te kt . metrics . C ognitive Complexity Ċ import Ġio . github . de te kt . metrics . processors . comment Lines Key Ċ import Ġio . github . de te kt . metrics . processors . complexity Key Ċ import Ġio . github . de te kt . metrics . processors . lines Key Ċ import Ġio . github . de te kt . metrics . processors . logical Lines Key Ċ import Ġio . github . de te kt . metrics . processors . source Lines Key Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Det ek tion Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Finding Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Project Metric Ċ import Ġio . gitlab . art urb os ch . de te kt . api . internal . which Det ek t Ċ import Ġio . gitlab . art urb os ch . de te kt . test . Test Det ek tion Ċ import Ġio . gitlab . art urb os ch . de te kt . test . create Entity Ċ import Ġio . gitlab . art urb os ch . de te kt . test . create Finding Ċ import Ġio . gitlab . art urb os ch . de te kt . test . create Issue Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi File Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠMd Output Report Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmd Report Ġ= ĠMd Output Report () ĊĠĠĠ Ġprivate Ġval Ġde te ktion Ġ= Ġcreate Test Det ek tion With Multiple S mell s () ĊĠĠĠ Ġprivate Ġval Ġresult Ġ= Ġmd Report . render ( de te ktion ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders ĠMarkdown Ġstructure Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Metrics ") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Complexity ĠReport ") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Find ings ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` contains Ġzero Ġfindings `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmd Report . render ( Test Det ek tion ()) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Find ings Ġ( 0 )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` contains Ġthe Ġtotal Ġnumber Ġof Ġfindings `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Find ings Ġ( 3 )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders Ġthe Ġ' generated Ġwith ' Ġtext Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġ" generated Ġwith Ġ[ de te kt Ġversion Ġ${ which Det ek t ()} ]( https :// de te kt . dev /) Ġon Ġ" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains ( header ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders Ġthe Ġright Ġfile Ġlocations `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" src / main / com / sample / Sample 1 . kt : 9 : 1 7 ") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" src / main / com / sample / Sample 2 . kt : 1 3 : 1 7 ") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" src / main / com / sample / Sample 3 . kt : 1 4 : 1 6 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders Ġthe Ġright Ġnumber Ġof Ġissues Ġper Ġrule `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" id _ a Ġ( 2 )") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" id _ b Ġ( 1 )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders Ġthe Ġright Ġviolation Ġmessages Ġfor Ġthe Ġrules `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Message Ġfinding Ġ 1 ") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Message Ġfinding Ġ 2 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders Ġthe Ġright Ġviolation Ġdescription Ġfor Ġthe Ġrules `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Description Ġid _ a ") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains (" Description Ġid _ b ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` renders Ġthe Ġright Ġdocumentation Ġlinks Ġfor Ġthe Ġrules `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġde te ktion Ġ= Ġobject Ġ: ĠTest Det ek tion () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġfindings : ĠMap < String , ĠList < Finding >> Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Style " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( create Issue (" Val Could Be Var "), Ġcreate Entity ("")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" empty " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( create Issue (" Empty Body "), Ġcreate Entity (" ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( create Issue (" Empty If "), Ġcreate Entity ("")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmd Report . render ( de te ktion ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains ("[ Documentation ]( https :// de te kt . dev / docs / rules / style # val could be var )") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains ("[ Documentation ]( https :// de te kt . dev / docs / rules / empty # empty body )") ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains ("[ Documentation ]( https :// de te kt . dev / docs / rules / empty # empty if )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` assert s Ġthat Ġthe Ġgenerated ĠHTML Ġis Ġthe Ġsame Ġeven Ġif Ġwe Ġchange Ġthe Ġorder Ġof Ġthe Ġfindings `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfindings Ġ= Ġfindings () ĊĠĠĠĠĠĠĠ Ġval Ġreversed Find ings Ġ= Ġfindings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reversed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( section , Ġfindings ) Ġ-> Ġsection Ġto Ġfindings . as Re versed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Det ek tion Ġ= Ġcreate Md Det ek tion (* find ings ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Det ek tion Ġ= Ġcreate Md Det ek tion (* reversed Find ings ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Report Ġ= Ġmd Report . render ( first Det ek tion ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Report Ġ= Ġmd Report . render ( second Det ek tion ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( first Report ). isEqualTo ( second Report ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġmock Kt Element (): ĠK t Element Ġ{ ĊĠĠĠ Ġval Ġkt Element Mock Ġ= Ġmock k < Kt Element >() ĊĠĠĠ Ġval Ġpsi File Mock Ġ= Ġmock k < Psi File >() ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġcom . example . test ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġio . github .* ĊĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġclass ĠTest () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg reeting : ĠString Ġ= Ġ" Hello , ĠWorld !" ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( gre et ings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfoo () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( gre et ings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġevery Ġ{ Ġpsi File Mock . text Ġ} Ġreturns Ġcode ĊĠĠĠ Ġevery Ġ{ Ġkt Element Mock . containing File Ġ} Ġreturns Ġpsi File Mock ĊĠĠĠ Ġreturn Ġkt Element Mock Ċ } Ċ Ċ private Ġfun Ġcreate Test Det ek tion With Multiple S mell s (): ĠDet ek tion Ġ{ ĊĠĠĠ Ġval Ġentity 1 Ġ= Ġcreate Entity ( ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ" src / main / com / sample / Sample 1 . kt ", ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 9 Ġto Ġ 1 7 , ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ 1 7 .. 2 0 , ĊĠĠĠĠĠĠĠ Ġkt Element Ġ= Ġmock Kt Element (), ĊĠĠĠĠĠĠĠ ĠbasePath Ġ= Ġ"/ Users / tester / de te kt /" ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġentity 2 Ġ= Ġcreate Entity ( ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ" src / main / com / sample / Sample 2 . kt ", ĊĠĠĠĠĠĠĠ Ġkt Element Ġ= Ġmock Kt Element (), ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 1 3 Ġto Ġ 1 7 , ĊĠĠĠĠĠĠĠ ĠbasePath Ġ= Ġ"/ Users / tester / de te kt /" ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġentity 3 Ġ= Ġcreate Entity ( ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ" src / main / com / sample / Sample 3 . kt ", ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 1 4 Ġto Ġ 1 6 , ĊĠĠĠĠĠĠĠ Ġkt Element Ġ= Ġmock Kt Element (), ĊĠĠĠĠĠĠĠ ĠbasePath Ġ= Ġ"/ Users / tester / de te kt /" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġissue A Ġ= Ġcreate Issue (" id _ a ") ĊĠĠĠ Ġval Ġissue B Ġ= Ġcreate Issue (" id _ b ") ĊĊĠĠĠ Ġreturn Ġcreate Md Det ek tion ( ĊĠĠĠĠĠĠĠ Ġ" Section - 1 " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue A , Ġentity 1 , Ġ" Message Ġfinding Ġ 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue A , Ġentity 2 , Ġ" Message Ġfinding Ġ 2 ") ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ" Section - 2 " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue B , Ġentity 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . addData ( complexity Key , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġit . addData ( C ognitive Complexity . KEY , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġit . addData ( source Lines Key , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġit . addData ( logical Lines Key , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġit . addData ( comment Lines Key , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġit . addData ( lines Key , Ġ 2 2 2 2 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcreate Md Det ek tion ( var arg Ġfinding Pairs : ĠPair < String , ĠList < Finding >> ): ĠDet ek tion Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠTest Det ek tion () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġfindings : ĠMap < String , ĠList < Finding >> Ġ= Ġfinding Pairs . toMap () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmetrics : ĠCollection < Project Metric > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Metric (" M 1 ", Ġ 1 0 _ 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Metric (" M 2 ", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġfindings (): ĠArray < Pair < String , ĠList < Finding >>> Ġ{ ĊĠĠĠ Ġval Ġissue A Ġ= Ġcreate Issue (" id _ a ") ĊĠĠĠ Ġval Ġissue B Ġ= Ġcreate Issue (" id _ b ") ĊĠĠĠ Ġval Ġissue C Ġ= Ġcreate Issue (" id _ c ") ĊĊĠĠĠ Ġval Ġentity 1 Ġ= Ġcreate Entity (" src / main / com / sample / Sample 1 . kt ", Ġ 1 1 Ġto Ġ 5 ) ĊĠĠĠ Ġval Ġentity 2 Ġ= Ġcreate Entity (" src / main / com / sample / Sample 1 . kt ", Ġ 2 2 Ġto Ġ 2 ) ĊĠĠĠ Ġval Ġentity 3 Ġ= Ġcreate Entity (" src / main / com / sample / Sample 1 . kt ", Ġ 1 1 Ġto Ġ 2 ) ĊĠĠĠ Ġval Ġentity 4 Ġ= Ġcreate Entity (" src / main / com / sample / Sample 2 . kt ", Ġ 1 Ġto Ġ 1 ) ĊĊĠĠĠ Ġreturn ĠarrayOf ( ĊĠĠĠĠĠĠĠ Ġ" Section Ġ 1 " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue A , Ġentity 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue A , Ġentity 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue A , Ġentity 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue A , Ġentity 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue B , Ġentity 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue B , Ġentity 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue B , Ġentity 4 ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ" Section Ġ 2 " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue B , Ġentity 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue C , Ġentity 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Finding ( issue C , Ġentity 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ