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 }