You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by bc...@apache.org on 2010/06/17 11:28:47 UTC

svn commit: r955522 - /click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java

Author: bckfnn
Date: Thu Jun 17 09:28:47 2010
New Revision: 955522

URL: http://svn.apache.org/viewvc?rev=955522&view=rev
Log:
added test for XmlConfigService.

Added:
    click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java   (with props)

Added: click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java?rev=955522&view=auto
==============================================================================
--- click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java (added)
+++ click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java Thu Jun 17 09:28:47 2010
@@ -0,0 +1,616 @@
+package org.apache.click;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import junit.framework.TestCase;
+
+import org.apache.click.control.AbstractControl;
+import org.apache.click.pages.BinaryPage;
+import org.apache.click.pages.JspPage;
+import org.apache.click.pages.ListenerPage;
+import org.apache.click.service.ClickResourceService;
+import org.apache.click.service.CommonsFileUploadService;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.ConsoleLogService;
+import org.apache.click.service.VelocityTemplateService;
+import org.apache.click.service.ConfigService.AutoBinding;
+import org.apache.click.util.ErrorPage;
+import org.apache.click.util.Format;
+
+public class ConfigServiceTest extends TestCase {
+
+    public void testDefaults() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app charset='UTF-8'>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        //pstr.println(" <mode value='trace'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertEquals(ErrorPage.class, config.getErrorPageClass());
+        assertEquals(Page.class, config.getNotFoundPageClass());
+        assertEquals("development", config.getApplicationMode());
+        assertEquals("UTF-8", config.getCharset());
+        assertEquals(false, config.isProductionMode());
+        assertEquals(false, config.isProfileMode());
+        assertEquals(Format.class, config.createFormat().getClass());
+        assertEquals(AutoBinding.DEFAULT, config.getAutoBindingMode());
+        assertEquals(null, config.getLocale());
+        assertEquals(Collections.EMPTY_LIST, config.getPageClassList());
+        // Check deployed resource
+        assertTrue(new File(tmpdir, "click/control.css").exists());
+        // Check deployed extras resource
+        assertTrue(new File(tmpdir, "click/calendar/calendar_date_select.js").exists());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testLocale() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app charset='iso8859-1' locale='en_GB'>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        //pstr.println(" <mode value='trace'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertEquals(Locale.UK, config.getLocale());
+        assertEquals("iso8859-1", config.getCharset());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testExcludes() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app charset='iso8859-1' locale='en_GB'>");
+        pstr.println(" <pages package='org.apache.click.pages'>");
+        pstr.println("  <excludes pattern='BinaryPage.htm'/>");
+        pstr.println(" </pages>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        PrintStream f = new PrintStream(makeFile(tmpdir, "BinaryPage.htm"));
+        f.print("template");
+        f.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        Class<? extends Page> pageClass = config.getPageClass("/BinaryPage.htm");
+        assertFalse(BinaryPage.class.isAssignableFrom(pageClass));
+
+        container.testPage("/BinaryPage.htm");
+        assertEquals("template", container.getResponse().getDocument());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testProduction() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        pstr.println(" <mode value='production'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertEquals(true, config.isProductionMode());
+        assertEquals(false, config.isProfileMode());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testProfile() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        pstr.println(" <mode value='profile'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertEquals(false, config.isProductionMode());
+        assertEquals(true, config.isProfileMode());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testDebug() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        pstr.println(" <mode value='debug'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertEquals(false, config.isProductionMode());
+        assertEquals(false, config.isProfileMode());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testPageByPath() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        PrintStream f = new PrintStream(makeFile(tmpdir, "BinaryPage.htm"));
+        f.println("template");
+        f.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertSame(BinaryPage.class, config.getPageClass("/BinaryPage.htm"));
+        assertEquals(3, config.getPageHeaders("/BinaryPage.htm").size());
+
+        assertNull(config.getPageClass("/UnknownPage.htm"));
+        assertNull(config.getPageHeaders("/UnknownPage.htm"));
+
+        ArrayList<Class<? extends Page>> list = new ArrayList<Class<? extends Page>>();
+        list.add(org.apache.click.pages.BinaryPage.class);
+        assertEquals(list, config.getPageClassList());
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testPageByClass() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <mode value='trace'/>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        pstr.println(" <pages package='org.apache.click'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        PrintStream f = new PrintStream(makeFile(tmpdir, "BinaryPage.htm"));
+        f.println("template");
+        f.close();
+
+        PrintStream f1 = new PrintStream(makeFile(tmpdir, "ListenerPage.htm"));
+        f1.println("template");
+        f1.close();
+        PrintStream f2 = new PrintStream(makeFile(tmpdir, "pages/ListenerPage.htm"));
+        f2.println("template");
+        f2.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertEquals("/BinaryPage.htm", config.getPagePath(BinaryPage.class));
+        assertEquals(2, config.getPageFieldArray(BinaryPage.class).length);
+        assertEquals(2, config.getPageFields(BinaryPage.class).size());
+
+        try {
+            assertEquals("/pages/ListenerPage.htm", config.getPagePath(ListenerPage.class));
+            fail("Should throw exception");
+        } catch (IllegalArgumentException e) {
+            // empty
+        }
+        assertEquals(4, config.getPageFieldArray(ListenerPage.class).length);
+        assertEquals(4, config.getPageFields(ListenerPage.class).size());
+
+        assertNull(config.getPagePath(JspPage.class));
+        assertNull(config.getPageFieldArray(JspPage.class));
+        assertEquals(Collections.emptyMap(), config.getPageFields(JspPage.class));
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testJsp() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println("<pages package='org.apache.click.pages'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        PrintStream f = new PrintStream(makeFile(tmpdir, "BinaryPage.jsp"));
+        f.println("template");
+        f.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertTrue(config.isJspPage("/BinaryPage.htm"));
+        assertTrue(config.isJspPage("/BinaryPage"));
+        assertSame(BinaryPage.class, config.getPageClass("/BinaryPage.jsp"));
+        assertEquals(3, config.getPageHeaders("/BinaryPage.jsp").size());
+
+        assertNull(config.getPageClass("/UnknownPage.jsp"));
+        assertNull(config.getPageHeaders("/UnknownPage.jsp"));
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testXml() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<!DOCTYPE click-app PUBLIC " +
+                     "\"-//Apache Software Foundation//DTD Click Configuration 2.2//EN\" " +
+                     "\"http://click.apache.org/dtds/click-2.3.dtd\">");
+        pstr.println("<click-app>");
+        pstr.println("<pages package='org.apache.click.pages'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testLoadPages() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println("<pages package='org.apache.click.pages' automap='false'/>");
+        pstr.println("<pages package='org.apache.click.pages' autobinding='annotation'/>");
+        pstr.println("<pages package='org.apache.click.pages' autobinding='public'/>");
+        pstr.println("<pages package='org.apache.click.pages' autobinding='default'/>");
+        pstr.println("<pages package='org.apache.click.pages' autobinding='none'/>");
+        pstr.println("<pages package='org.apache.click.pages' autobinding='true'/>");
+        pstr.println("<pages package='org.apache.click.pages' autobinding='false'/>");
+        pstr.println("<pages/>");
+        pstr.println("<pages package='org.apache.click.'/>");
+        pstr.println("<pages>");
+        pstr.println("  <page path='page.htm' classname='org.apache.click.pages.BinaryPage'>");
+        pstr.println("    <header name='Header1' value='Value'/>");
+        pstr.println("    <header name='Header2' value='Value' type='String'/>");
+        pstr.println("    <header name='Header3' value='123' type='Integer'/>");
+        pstr.println("    <header name='Header4' value='1' type='Date'/>");
+        pstr.println("  </page>");
+        pstr.println("</pages>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testHeaders() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages package='org.apache.click.pages'/>");
+        pstr.println(" <headers>");
+        pstr.println("  <header name='Header1' value='Value'/>");
+        pstr.println("  <header name='Header2' value='Value' type='String'/>");
+        pstr.println("  <header name='Header3' value='123' type='Integer'/>");
+        pstr.println("  <header name='Header4' value='1' type='Date'/>");
+        pstr.println(" </headers>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        PrintStream f = new PrintStream(makeFile(tmpdir, "BinaryPage.htm"));
+        f.println("template");
+        f.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        Map<String, Object> headers = config.getPageHeaders("/BinaryPage.htm");
+        assertEquals(4, headers.size());
+        assertEquals("Value", headers.get("Header1"));
+        assertEquals("Value", headers.get("Header2"));
+        assertEquals(123, headers.get("Header3"));
+        assertEquals(new Date(1), headers.get("Header4"));
+
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+    public void testFormat() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages/>");
+        pstr.println(" <format classname='org.apache.click.util.Format'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertTrue(config.createFormat() instanceof Format);
+
+        container.stop();
+        deleteDir(tmpdir);
+    }
+
+    public void testLogService() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages/>");
+        pstr.println(" <log-service classname='org.apache.click.service.ConsoleLogService'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertTrue(config.getLogService() instanceof ConsoleLogService);
+
+        container.stop();
+        deleteDir(tmpdir);
+    }
+
+    public void testResourceService() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages/>");
+        pstr.println(" <resource-service classname='org.apache.click.service.ClickResourceService'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertTrue(config.getResourceService() instanceof ClickResourceService);
+
+        container.stop();
+        deleteDir(tmpdir);
+    }
+
+    public void testTemplateService() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages/>");
+        pstr.println(" <template-service classname='org.apache.click.service.VelocityTemplateService'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertTrue(config.getTemplateService() instanceof VelocityTemplateService);
+
+        container.stop();
+        deleteDir(tmpdir);
+    }
+
+    public void testFileUploadService() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages/>");
+        pstr.println(" <file-upload-service classname='org.apache.click.service.CommonsFileUploadService'/>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        assertTrue(config.getFileUploadService() instanceof CommonsFileUploadService);
+
+        container.stop();
+        deleteDir(tmpdir);
+    }
+
+    public void testControls() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println("<pages package='org.apache.click.pages'/>");
+        pstr.println("<controls>");
+        pstr.println(" <control classname='org.apache.click.ConfigServiceTest$MyControl'/>");
+        pstr.println(" <control-set name='MyControlSet.xml'/>");
+        pstr.println("</controls>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+
+    static public class MyControl extends AbstractControl {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void onDeploy(ServletContext servletContext) {
+            System.out.println("onDeploy");
+        }
+    }
+
+
+    public void testPageInterceptors() throws Exception {
+        File tmpdir = makeTmpDir();
+
+        PrintStream pstr = makeXmlStream(tmpdir, "WEB-INF/click.xml");
+        pstr.println("<click-app>");
+        pstr.println(" <pages/>");
+        pstr.println(" <page-interceptor classname='org.apache.click.ConfigServiceTest$MyPageInterceptor'>");
+        pstr.println("  <property name='type' value='std'/>");
+        pstr.println(" </page-interceptor>");
+        pstr.println(" <page-interceptor classname='org.apache.click.ConfigServiceTest$MyPageInterceptor' scope='application'>");
+        pstr.println("  <property name='type' value='app'/>");
+        pstr.println(" </page-interceptor>");
+        pstr.println("</click-app>");
+        pstr.close();
+
+        MockContainer container = new MockContainer(tmpdir.getAbsolutePath());
+        container.start();
+
+        ConfigService config = container.getClickServlet().getConfigService();
+
+        List<PageInterceptor> list = config.getPageInterceptors();
+        assertEquals(2, list.size());
+        assertEquals("std", list.get(0).toString());
+        assertEquals("app", list.get(1).toString());
+        container.stop();
+
+        deleteDir(tmpdir);
+    }
+
+
+    static public class MyPageInterceptor implements PageInterceptor {
+        public String type;
+
+        @Override
+        public boolean postCreate(Page page) {
+            return false;
+        }
+
+        @Override
+        public void postDestroy(Page page) {
+        }
+
+        @Override
+        public boolean preCreate(Class<? extends Page> pageClass,
+                Context context) {
+            return false;
+        }
+
+        @Override
+        public boolean preResponse(Page page) {
+            return false;
+        }
+
+        public void setType(String type) {
+            this.type = type;
+        }
+
+        @Override
+        public String toString() {
+            return type;
+        }
+    }
+
+
+    private File makeTmpDir() throws IOException {
+        File tmpdir = File.createTempFile("click", "");
+        tmpdir.delete();
+        tmpdir.mkdir();
+        return tmpdir;
+    }
+
+    private PrintStream makeXmlStream(File dir, String filename) throws FileNotFoundException {
+        File file = makeFile(dir, filename);
+        PrintStream pstr = new PrintStream(file);
+        pstr.println("<?xml version='1.0' encoding=\"UTF-8\" standalone=\"yes\"?>");
+        return pstr;
+    }
+
+    private File makeFile(File dir, String filename) {
+        File file = new File(dir, filename);
+        file.getParentFile().mkdirs();
+        return file;
+    }
+
+    private void deleteDir(File tmpdir) throws IOException {
+        for (File f : tmpdir.listFiles()) {
+            if (f.isDirectory()) {
+                deleteDir(f);
+            }
+            f.delete();
+        }
+        tmpdir.delete();
+    }
+}
+

Propchange: click/trunk/click/framework/test/org/apache/click/ConfigServiceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native