1b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov/** 211a89b445f3bde56bf07e6a0d04f0b0256dcb215Andrey Somov * Copyright (c) 2008, http://www.snakeyaml.org 3b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 4b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Licensed under the Apache License, Version 2.0 (the "License"); 5b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * you may not use this file except in compliance with the License. 6b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * You may obtain a copy of the License at 7b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 8b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * http://www.apache.org/licenses/LICENSE-2.0 9b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * 10b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Unless required by applicable law or agreed to in writing, software 11b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * distributed under the License is distributed on an "AS IS" BASIS, 12b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * See the License for the specific language governing permissions and 14b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * limitations under the License. 15b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */ 16b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpackage org.yaml.snakeyaml.emitter.template; 17b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 18b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.io.StringWriter; 19b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.ArrayList; 20b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.List; 21b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 22b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport junit.framework.TestCase; 23b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 24b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.apache.velocity.Template; 25b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.apache.velocity.VelocityContext; 26b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.apache.velocity.app.VelocityEngine; 27b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; 28b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.DumperOptions; 29b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.Util; 30b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.Yaml; 31b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.immutable.Point; 32b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 33b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpublic class VelocityTest extends TestCase { 34b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void testNoTemplate() { 35b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov DumperOptions options = new DumperOptions(); 36b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov options.setAllowReadOnlyProperties(true); 37b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Yaml yaml = new Yaml(options); 38b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov String output = yaml.dumpAsMap(createBean()); 39b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov // System.out.println(output); 40b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov assertEquals(Util.getLocalResource("template/etalon1.yaml"), output); 41b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 42b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 43b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov public void testTemplate1() throws Exception { 44b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov VelocityContext context = new VelocityContext(); 45b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov MyBean bean = createBean(); 46b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov context.put("bean", bean); 47b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Yaml yaml = new Yaml(); 48b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov context.put("list", yaml.dump(bean.getList())); 49b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov VelocityEngine ve = new VelocityEngine(); 50b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov ve.setProperty("file.resource.loader.class", ClasspathResourceLoader.class.getName()); 51b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov ve.init(); 52b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Template t = ve.getTemplate("template/mybean1.vm"); 53b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov StringWriter writer = new StringWriter(); 54b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov t.merge(context, writer); 55b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov String output = writer.toString().trim().replaceAll("\\r\\n", "\n"); 56b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov // System.out.println(output); 57b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov String etalon = Util.getLocalResource("template/etalon2-template.yaml").trim(); 58b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov assertEquals(etalon.length(), output.length()); 59b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov assertEquals(etalon, output); 60b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov // parse the YAML document 61b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Yaml loader = new Yaml(); 62b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov MyBean parsedBean = loader.loadAs(output, MyBean.class); 63b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov assertEquals(bean, parsedBean); 64b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 65b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov 66b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov private MyBean createBean() { 67b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov MyBean bean = new MyBean(); 68b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov bean.setId("id123"); 69b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov List<String> list = new ArrayList<String>(); 70b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov list.add("aaa"); 71b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov list.add("bbb"); 72b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov list.add("ccc"); 73b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov bean.setList(list); 74b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov Point p = new Point(1.0, 2.0); 75b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov bean.setPoint(p); 76b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov return bean; 77b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov } 78b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov} 79