    001package org.apache.turbine.services.template;
    002
    003
    004/*
    005 * Licensed to the Apache Software Foundation (ASF) under one
    006 * or more contributor license agreements.  See the NOTICE file
    007 * distributed with this work for additional information
    008 * regarding copyright ownership.  The ASF licenses this file
    009 * to you under the Apache License, Version 2.0 (the
    010 * "License"); you may not use this file except in compliance
    011 * with the License.  You may obtain a copy of the License at
    012 *
    013 *   http://www.apache.org/licenses/LICENSE-2.0
    014 *
    015 * Unless required by applicable law or agreed to in writing,
    016 * software distributed under the License is distributed on an
    017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    018 * KIND, either express or implied.  See the License for the
    019 * specific language governing permissions and limitations
    020 * under the License.
    021 */
    022
    023
    024import static org.junit.Assert.assertEquals;
    025
    026import org.apache.turbine.services.TurbineServices;
    027import org.apache.turbine.test.BaseTestCase;
    028import org.apache.turbine.util.TurbineConfig;
    029import org.junit.AfterClass;
    030import org.junit.BeforeClass;
    031import org.junit.Test;
    032
    033/**
    034 * Tests all the various template mappings for Screen and Layout
    035 * templates of the template service.
    036 *
    037 * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
    038 * @version $Id: TemplateTest.java 1606111 2014-06-27 14:46:47Z gk $
    039 */
    040
    041public class TemplateTest
    042    extends BaseTestCase
    043{
    044    private static TurbineConfig tc = null;
    045    private static TemplateService ts = null;
    046
    047
    048
    049    @BeforeClass
    050    public static void setUp() throws Exception
    051    {
    052        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
    053        tc.initialize();
    054
    055        ts = (TemplateService) TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
    056    }
    057
    058    @AfterClass
    059    public static void tearDown() throws Exception
    060    {
    061        if (tc != null)
    062        {
    063            tc.dispose();
    064        }
    065    }
    066
    067
    068    @Test public void testTemplateDefaults()
    069    {
    070        assertEquals("Default LayoutTemplate failed", TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultLayoutTemplate());
    071    }
    072
    073    @Test public void testVelocityDefaults()
    074    {
    075        assertEquals("Default LayoutTemplate failed", "Default.vm",         ts.getDefaultLayoutTemplateName("foo.vm"));
    076    }
    077
    078    @Test public void testTemplateExtension()
    079    {
    080        assertEquals("Extension extraction failed", "vm", ts.getExtension("Default.vm"));
    081        assertEquals("Extension extraction failed", "txt", ts.getExtension("Default.txt"));
    082        // TRB-82
    083        assertEquals("Extension extraction failed", "vm", ts.getExtension("Default.txt.vm"));
    084    }
    085
    086    @Test public void testNonExistingTemplate()
    087        throws Exception
    088    {
    089        //
    090        // Try a non existing Template. This should render with the default screen class,
    091        // use the default Layout class and Navigation. It should be rendered with the
    092        // default Layout Template but the Screen Template itself must not exist.
    093        String templateName = "DoesNotExistPage.vm";
    094        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
    095        assertEquals("ScreenTemplate translation failed", null,                 ts.getScreenTemplateName(templateName));
    096    }
    097
    098    @Test public void testNonExistingSublevelTemplate()
    099        throws Exception
    100    {
    101        //
    102        // Try a non existing Template in a sub-path. This should render with the default screen class,
    103        // use the default Layout class and Navigation. It should be rendered with the
    104        // default Layout Template but the Screen Template itself must not exist.
    105        String templateName = "this,template,DoesNotExistPage.vm";
    106        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
    107        assertEquals("ScreenTemplate translation failed", null,                 ts.getScreenTemplateName(templateName));
    108    }
    109
    110    @Test public void testExistingTemplate()
    111        throws Exception
    112    {
    113        //
    114        // Try an existing Template. As we already know, missing classes are found correctly
    115        // so we test only Layout and Screen template. This should return the "Default" Layout
    116        // template to render and the Screen Template for the Page to render
    117        String templateName = "ExistPage.vm";
    118        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
    119        assertEquals("ScreenTemplate translation failed", "ExistPage.vm",       ts.getScreenTemplateName(templateName));
    120    }
    121
    122    public void testExistingSublevelTemplate()
    123        throws Exception
    124    {
    125        //
    126        // Try an existing Template. As we already know, missing classes are found correctly
    127        // so we test only Layout and Screen template. This should return the "Default" Layout
    128        // template to render and the Screen Template for the Page to render. The names returned
    129        // by the template service are "/" separated so that e.g. Velocity can use this.
    130        String templateName = "existing,Page.vm";
    131        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
    132        assertEquals("ScreenTemplate translation failed", "existing/Page.vm",   ts.getScreenTemplateName(templateName));
    133    }
    134
    135    @Test public void testExistingLayoutTemplate()
    136        throws Exception
    137    {
    138        //
    139        // Try an existing Template. This time we have a backing Layout page. So the getLayoutTemplateName
    140        // method should not return the Default but our Layout page.
    141        //
    142        String templateName = "ExistPageWithLayout.vm";
    143        assertEquals("LayoutTemplate translation failed", "ExistPageWithLayout.vm", ts.getLayoutTemplateName(templateName));
    144        assertEquals("ScreenTemplate translation failed", "ExistPageWithLayout.vm", ts.getScreenTemplateName(templateName));
    145    }
    146
    147    @Test public void testExistingSublevelLayoutTemplate()
    148        throws Exception
    149    {
    150        //
    151        // Try an existing Template. This time we have a backing Layout page. So the getLayoutTemplateName
    152        // method should not return the Default but our Layout page.
    153        //
    154        String templateName = "existing,ExistSublevelPageWithLayout.vm";
    155        assertEquals("LayoutTemplate translation failed", "existing/ExistSublevelPageWithLayout.vm", ts.getLayoutTemplateName(templateName));
    156        assertEquals("ScreenTemplate translation failed", "existing/ExistSublevelPageWithLayout.vm", ts.getScreenTemplateName(templateName));
    157    }
    158
    159    public void testExistingDefaultLayoutTemplate()
    160        throws Exception
    161    {
    162        //
    163        // Try an existing Template in a sublevel. This has an equally named Layout in the root. This
    164        // test must find the Template itself but the "Default" layout
    165        //
    166        String templateName = "existing,ExistPageWithLayout.vm";
    167        assertEquals("LayoutTemplate translation failed", "Default.vm",                      ts.getLayoutTemplateName(templateName));
    168        assertEquals("ScreenTemplate translation failed", "existing/ExistPageWithLayout.vm", ts.getScreenTemplateName(templateName));
    169    }
    170}
    171