package Ġio . gitlab . art urb os ch . de te kt . core . suppress ors Ċ Ċ import Ġio . github . de te kt . test . utils . compile Content For Test Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Ċ import Ġorg . jetbrains . kotlin . psi . Kt Function Ċ import Ġorg . jetbrains . kotlin . psi . Kt Parameter Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . find Desc endant OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . find Function ByName Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ class ĠFunction Suppress or Spec Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġdescribe (" Function Suppress or Factory ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" Factory Ġreturns Ġnull Ġif Ġignore Function Ġis Ġnot Ġset ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġfunction Suppress or Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Config Aware (/* Ġempty Ġ*/ ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinding Context . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or ). isNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" Factory Ġreturns Ġnull Ġif Ġignore Function Ġis Ġset Ġto Ġempty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġfunction Suppress or Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Config Aware (" ignore Function " Ġto Ġempty List < String > ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinding Context . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or ). isNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" Factory Ġreturns Ġnot Ġnull Ġif Ġignore Function Ġis Ġset Ġto Ġa Ġnot Ġempty Ġlist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġfunction Suppress or Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Config Aware (" ignore Function " Ġto ĠlistOf (" toString ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinding Context . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or ). isNotNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" Function Suppress or ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" If ĠK t Element Ġis Ġnull Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġnull ))). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" If Ġthe Ġfunction Ġis Ġsupp ressed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġby Ġmemoized Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Content For Test ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠOne Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtoString ( parameter : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġhello ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Hello Ġ" Ġ+ Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhello (" World ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtoString () Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġroot Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġroot ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġclass Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Class Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Class ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġfunction Ġin Ġclass Ġit Ġreturns Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" toString ") !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġparameter Ġin Ġfunction Ġin Ġclass Ġit Ġreturns Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Parameter Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" toString ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Desc endant OfType < Kt Parameter >() !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Parameter ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġfunction Ġin Ġfunction Ġit Ġreturns Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" toString ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. children ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . find Desc endant OfType < Kt Function >() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġparameter Ġfunction Ġin Ġfunction Ġit Ġreturns Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" toString ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. children ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . find Desc endant OfType < Kt Function >() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Desc endant OfType < Kt Parameter >() !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġparameter Ġfunction Ġin Ġfunction Ġit Ġreturns Ġtrue Ġ 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" hello "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" toString ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. children ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . find Desc endant OfType < Kt Function >() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Desc endant OfType < Kt Parameter >() !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġtop Ġlevel Ġfunction Ġit Ġreturns Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Function :: class . java ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" If Ġthe Ġfunction Ġis Ġnot Ġsupp ressed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġby Ġmemoized Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Content For Test ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠOne Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcompare ( parameter : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcompare () Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġroot Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġroot ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġclass Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Class Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Class ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġfunction Ġin Ġclass Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" compare ") !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġparameter Ġin Ġfunction Ġin Ġclass Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Parameter Ġ= Ġroot . find Child By Class ( Kt Class :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Function ByName (" compare ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Desc endant OfType < Kt Parameter >() !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Parameter ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" If Ġreports Ġtop Ġlevel Ġfunction Ġit Ġreturns Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress or Ġ= Ġbuild Function Suppress or ( listOf (" toString "), ĠBinding Context . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Function Ġ= Ġroot . find Child By Class ( Kt Function :: class . java ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( suppress or . should Suppress ( build Finding ( element Ġ= Ġkt Function ))). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ Ċ private Ġfun Ġbuild Function Suppress or ( ignore Function : ĠList < String >, Ġbinding Context : ĠBinding Context ): ĠSup press or Ġ{ ĊĠĠĠ Ġreturn Ġfunction Suppress or Factory ( build Config Aware (" ignore Function " Ġto Ġignore Function ), Ġbinding Context ) !! Ċ } Ċ