/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . spec . utils . validators Ċ Ċ import Ġorg . jetbrains . kotlin . check ers . Base Diagnostics Test Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Ċ import Ġorg . jetbrains . kotlin . diagnostics . Severity Ċ import Ġorg . jetbrains . kotlin . spec . utils . TestCase sBy Numbers Ċ import Ġorg . jetbrains . kotlin . spec . utils . Test Type Ċ import Ġorg . jetbrains . kotlin . spec . utils . models . Abstract Spec Test Ċ import Ġjava . io . File Ċ Ċ class ĠDiagnostic Test Type Validator ( ĊĠĠĠ Ġtest Files : ĠList < Base Diagnostics Test . Test File >, ĊĠĠĠ ĠtestData File : ĠFile , ĊĠĠĠ Ġprivate Ġval Ġtest Info : ĠAbstract Spec Test Ċ ) Ġ: ĠAbstract Test Validator ( test Info , ĠtestData File ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdiagnostics Ġ= Ġmutable ListOf < Diagnostic >() ĊĠĠĠ Ġprivate Ġval Ġdiagnostic Stats Ġ= Ġmutable Map Of < String , ĠInt >() ĊĠĠĠ Ġprivate Ġval Ġdiagnostic Severity Stats Ġ= Ġmutable Map Of < Int , ĠMutable Map < Severity , ĠInt >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcollect Diagnostics ( test Files ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind TestCase s ( diagnostic : ĠDiagnostic ): ĠTestCase sBy Numbers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġranges Ġ= Ġdiagnostic . text Ranges ĊĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġdiagnostic . psi File . name ĊĠĠĠĠĠĠĠ Ġval Ġfound TestCase s Ġ= Ġtest Info . cases . by Ranges [ filename ] !!. floor Entry ( ranges [ 0 ]. start Offset ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( found TestCase s Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfound TestCase s . value ĊĊĠĠĠĠĠĠĠ Ġthrow ĠSpec Test ValidationException ( Spec Test Validation Failed Reason . INVALID _ TEST _ CASE S _ STRUCTURE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Diagnostic Statistic () Ġ{ ĊĠĠĠĠĠĠĠ Ġdiagnostics . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Cases Ġ= Ġfind TestCase s ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseverity Ġ= Ġit . factory . severity ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( case Number , Ġ_) Ġin Ġtest Cases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic Severity Stats . put If Absent ( case Number , Ġmutable Map Of ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic Severity Stats [ case Number ] !!. run Ġ{ Ġput ( severity , Ġget OrDefault ( severity , Ġ 0 ) Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Diagnostics ( files : ĠList < Base Diagnostics Test . Test File >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . actual Diagnostics . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostic Name Ġ= Ġit . diagnostic . factory . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic Stats . run Ġ{ Ġput ( diagnostic Name , Ġget OrDefault ( diagnostic Name , Ġ 0 ) Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostics . add ( it . diagnostic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcollect Diagnostic Statistic () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Test Types () Ġ= Ġdiagnostic Severity Stats . map Values Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Severity . ERROR Ġin Ġit . value ) ĠTest Type . NEGATIVE Ġelse ĠTest Type . POSITIVE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint Diagnostic Statistic () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġif Ġ( diagnostic Stats . isNotEmpty ()) Ġ"$ diagnostic Severity Stats Ġ| Ġ$ diagnostic Stats " Ġelse Ġ" does Ġnot Ġcontain " ĊĠĠĠĠĠĠĠ Ġprintln (" DIAG NO ST ICS : Ġ$ diagnostics ") ĊĠĠĠ Ġ} Ċ }