Package com.alibaba.citrus.util.templatelite

Source Code of com.alibaba.citrus.util.templatelite.AbstractTemplateTests

/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.alibaba.citrus.util.templatelite;

import static com.alibaba.citrus.test.TestEnvStatic.*;
import static com.alibaba.citrus.util.io.StreamUtil.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;

import com.alibaba.citrus.test.TestEnvStatic;
import com.alibaba.citrus.util.io.ByteArrayInputStream;
import com.alibaba.citrus.util.templatelite.Template.Location;

public abstract class AbstractTemplateTests {
    protected final File srcdir = new File(TestEnvStatic.srcdir, "templates");
    protected String                   source;
    protected Template                 template;
    protected TemplateParseException   parseError;
    protected TemplateRuntimeException runtimeError;

    protected void loadTemplateFailure(byte[] content, String systemId) {
        try {
            loadTemplate(content, systemId, -1, -1, -1);
            fail();
        } catch (TemplateParseException e) {
            this.parseError = e;
        }
    }

    protected void loadTemplate(String file, int nodesCount, int templatesCount, int paramsCount) {
        source = file;
        template = new Template(new File(srcdir, file));

        assertTemplate(template, null, nodesCount, templatesCount, paramsCount, null);
    }

    protected void loadTemplate(byte[] content, String systemId, int nodesCount, int templatesCount, int paramsCount) {
        source = systemId;
        template = new Template(new ByteArrayInputStream(content), systemId);

        assertTemplate(template, null, nodesCount, templatesCount, paramsCount, null);
    }

    protected void assertTemplate(Template template, String name, int nodesCount, int templatesCount, int paramsCount,
                                  String location) {
        assertEquals(name, template.getName());
        assertLocation(template.location, location);

        String str = template.toString();

        if (name == null) {
            name = "(template)";
        }

        assertThat(str, startsWith("#" + name + " with " + nodesCount + " nodes at "));
        assertLocation(str, location);

        assertEquals(nodesCount, template.nodes.length);
        assertEquals(templatesCount, template.subtemplates.size());
        assertEquals(paramsCount, template.params.size());
    }

    protected void assertLocation(String str, String location) {
        if (location != null) {
            assertThat(str, containsString(source + ": " + location));
        } else {
            assertThat(str, containsString(source));
        }
    }

    protected void assertLocation(Location l, String location) {
        if (location != null) {
            assertThat(l.toString(), endsWith(source + ": " + location));
        } else {
            assertThat(l.toString(), endsWith(source));
        }
    }

    protected URL copyFile(String src, String dest) throws IOException {
        File destfile = new File(destdir, dest);

        io(new FileInputStream(new File(srcdir, src)), new FileOutputStream(destfile), true, true);

        return destfile.toURI().toURL();
    }

    protected URL copyFilesToJar(String destJar, String... srcdest) throws IOException {
        assertTrue(srcdest.length % 2 == 0);

        File destJarFile = new File(destdir, destJar);
        JarOutputStream jos = new JarOutputStream(new FileOutputStream(destJarFile));

        for (int i = 0; i < srcdest.length; i += 2) {
            String src = srcdest[i];
            String dest = srcdest[i + 1];

            jos.putNextEntry(new ZipEntry(dest));
            io(new FileInputStream(new File(srcdir, src)), jos, true, false);
            jos.closeEntry();
        }

        jos.close();

        return destJarFile.toURI().toURL();
    }

    protected void acceptFailure(Object visitor) {
        try {
            template.accept(visitor);
            fail();
        } catch (TemplateRuntimeException e) {
            runtimeError = e;
        }
    }
}
TOP

Related Classes of com.alibaba.citrus.util.templatelite.AbstractTemplateTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.