github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/test/groovy/util/JenkinsReadJsonRule.groovy (about)

     1  package util
     2  
     3  import com.lesfurets.jenkins.unit.BasePipelineTest
     4  import groovy.json.JsonSlurper
     5  import org.junit.rules.TestRule
     6  import org.junit.runner.Description
     7  import org.junit.runners.model.Statement
     8  
     9  class JenkinsReadJsonRule implements TestRule {
    10  
    11      final BasePipelineTest testInstance
    12      final String testRoot
    13  
    14      JenkinsReadJsonRule(BasePipelineTest testInstance, testRoot = '') {
    15          this.testInstance = testInstance
    16          this.testRoot = testRoot
    17      }
    18  
    19      @Override
    20      Statement apply(Statement base, Description description) {
    21          return statement(base)
    22      }
    23  
    24      private Statement statement(final Statement base) {
    25          return new Statement() {
    26              @Override
    27              void evaluate() throws Throwable {
    28                  testInstance.helper.registerAllowedMethod("readJSON", [Map], { Map m ->
    29                      if(m.text) {
    30                          def js = new JsonSlurper()
    31                          return js.parseText(m.text)
    32                      } else if(m.file) {
    33                          def js = new JsonSlurper()
    34                          def reader = new BufferedReader(new FileReader( "${this.testRoot}${m.file}" ))
    35                          return js.parse(reader)
    36                      } else {
    37                          throw new IllegalArgumentException("Key 'text' is missing in map ${m}.")
    38                      }
    39                  })
    40  
    41                  base.evaluate()
    42              }
    43          }
    44      }
    45  }