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

     1  package util
     2  
     3  import com.lesfurets.jenkins.unit.BasePipelineTest
     4  import org.yaml.snakeyaml.Yaml
     5  
     6  import static org.junit.Assert.*
     7  import org.junit.rules.TestRule
     8  import org.junit.runner.Description
     9  import org.junit.runners.model.Statement
    10  
    11  class JenkinsWriteYamlRule implements TestRule {
    12  
    13      final BasePipelineTest testInstance
    14      static final String DATA = "DATA" // key in files map to retrieve Yaml object graph data..
    15      static final String CHARSET = "CHARSET" // key in files map to retrieve the charset of the serialized Yaml.
    16      static final String SERIALIZED_YAML = "SERIALIZED_YAML" // key in files map to retrieve serialized Yaml.
    17  
    18      Map<String, Map<String, Object>> files = new HashMap<>()
    19  
    20      JenkinsWriteYamlRule(BasePipelineTest testInstance) {
    21          this.testInstance = testInstance
    22      }
    23  
    24      @Override
    25      Statement apply(Statement base, Description description) {
    26          return statement(base)
    27      }
    28  
    29      private Statement statement(final Statement base) {
    30          return new Statement() {
    31              @Override
    32              void evaluate() throws Throwable {
    33  
    34                  testInstance.helper.registerAllowedMethod( 'writeYaml', [Map], { parameterMap ->
    35                      assertNotNull(parameterMap.file)
    36                      assertNotNull(parameterMap.data)
    37                      // charset is optional.
    38  
    39                      Yaml yaml = new Yaml()
    40                      StringWriter writer = new StringWriter()
    41                      yaml.dump(parameterMap.data, writer)
    42  
    43                      // Enable this to actually produce a file.
    44                      // yaml.dump(parameterMap.data, new FileWriter(parameterMap.file))
    45                      // yaml.dump(parameterMap.data, new FileWriter("test/resources/variableSubstitution/manifest_out.yml"))
    46  
    47                      Map<String, Object> details = new HashMap<>()
    48                      details.put(DATA, parameterMap.data)
    49                      details.put(CHARSET, parameterMap.charset ?: "UTF-8")
    50                      details.put(SERIALIZED_YAML, writer.toString())
    51  
    52                      files[parameterMap.file] = details
    53                  })
    54  
    55                  base.evaluate()
    56              }
    57          }
    58      }
    59  }