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