/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestSite.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
import com.uwyn.rife.engine.exceptions.DuplicateElementIdException;
import com.uwyn.rife.engine.exceptions.EngineException;
import com.uwyn.rife.engine.exceptions.UrlExistsException;
import com.uwyn.rife.tools.ExceptionUtils;
import junit.framework.TestCase;
public class TestSite extends TestCase
{
public TestSite(String name)
{
super(name);
}
public void testInstantiation()
{
Site site = null;
site = new Site();
assertNotNull(site);
}
public void testNoInitialUrls()
{
Site site = new Site();
assertEquals(site.getUrls().size(), 0);
}
public void testAddElement()
throws EngineException
{
Site site = new Site();
ElementInfo element_info1 = null;
ElementInfo element_info2 = null;
try
{
element_info1 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT1", element_info1, "/element1");
assertEquals(site.getUrls().size(), 1);
element_info2 = new ElementInfo("element/test2.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT2", element_info2, "/element2");
assertEquals(site.getUrls().size(), 2);
}
catch (EngineException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
assertTrue(site.containsUrl("/element1"));
assertTrue(site.containsUrl("/element2"));
assertSame(site.resolveUrl("/element1", null), element_info1);
assertSame(site.resolveUrl("/element2", null), element_info2);
assertNull(site.resolveUrl("/element1", "/pathinfo"));
assertNull(site.resolveUrl("/element2", "/pathinfo"));
assertSame(site.resolveId(".ELEMENT1"), element_info1);
assertSame(site.resolveId(".ELEMENT2"), element_info2);
assertEquals(element_info1.getUrl(), "/element1");
assertEquals(element_info2.getUrl(), "/element2");
}
public void testTrailingSlash()
throws EngineException
{
Site site = new Site();
ElementInfo element_info1 = null;
ElementInfo element_info2 = null;
ElementInfo element_info3a = null;
ElementInfo element_info3b = null;
ElementInfo element_info4 = null;
ElementInfo element_info5 = null;
try
{
element_info1 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT1", element_info1, "/element1");
element_info2 = new ElementInfo("element/test2.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT2", element_info2, "/element2/");
element_info3a = new ElementInfo("element/test3a.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT3a", element_info3a, "/element3");
element_info3b = new ElementInfo("element/test3b.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT3b", element_info3b, "/element3/");
element_info4 = new ElementInfo("element/test4.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT4", element_info4, "/element4.html");
element_info5 = new ElementInfo("element/test5.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT5", element_info5, "/element5.html/itis");
}
catch (EngineException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
assertTrue(site.containsUrl("/element1"));
assertFalse(site.containsUrl("/element2"));
assertTrue(site.containsUrl("/element3"));
assertTrue(site.containsUrl("/element1/"));
assertTrue(site.containsUrl("/element2/"));
assertTrue(site.containsUrl("/element3/"));
assertTrue(site.containsUrl("/element4.html"));
assertFalse(site.containsUrl("/element4.html/"));
assertTrue(site.containsUrl("/element5.html/itis"));
assertTrue(site.containsUrl("/element5.html/itis/"));
assertSame(site.resolveUrl("/element1", null), element_info1);
assertSame(site.resolveUrl("/element1/", null), element_info1);
assertNull(site.resolveUrl("/element2", null));
assertSame(site.resolveUrl("/element2/", null), element_info2);
assertSame(site.resolveUrl("/element3", null), element_info3a);
assertSame(site.resolveUrl("/element3/", null), element_info3b);
assertSame(site.resolveUrl("/element4.html", null), element_info4);
assertNull(site.resolveUrl("/element4.html/", null));
assertSame(site.resolveUrl("/element5.html/itis", null), element_info5);
assertSame(site.resolveUrl("/element5.html/itis/", null), element_info5);
assertEquals(element_info1.getUrl(), "/element1");
assertEquals(element_info2.getUrl(), "/element2/");
assertEquals(element_info3a.getUrl(), "/element3");
assertEquals(element_info3b.getUrl(), "/element3/");
assertEquals(element_info4.getUrl(), "/element4.html");
assertEquals(element_info5.getUrl(), "/element5.html/itis");
}
public void testAddDuplicateUrl()
throws EngineException
{
Site site = new Site();
ElementInfo element_info1 = null;
ElementInfo element_info2 = null;
try
{
element_info1 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
element_info2 = new ElementInfo("element/test2.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT1", element_info1, "/element1");
site.addElementInfo(".ELEMENT2", element_info2, "/element1");
fail();
}
catch (UrlExistsException e)
{
assertEquals(e.getUrl(), "/element1");
}
catch (EngineException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testAddDuplicateUrlPathinfo()
throws EngineException
{
Site site = new Site();
ElementInfo element_info1 = null;
ElementInfo element_info2 = null;
element_info1 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
element_info1.setPathInfoUsed(true);
element_info2 = new ElementInfo("element/test2.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
element_info2.setPathInfoUsed(true);
site.addElementInfo(".ELEMENT1", element_info1, "/element1");
site.addElementInfo(".ELEMENT2", element_info2, "/element1");
assertSame(element_info1, site.resolveUrl("/element1", null));
assertSame(element_info1, site.resolveUrl("/element1", "/pathinfo"));
}
public void testAddDuplicateId()
throws EngineException
{
Site site = new Site();
ElementInfo element_info1 = null;
ElementInfo element_info2 = null;
try
{
element_info1 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
element_info2 = new ElementInfo("element/test2.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT1", element_info1, "/element1");
site.addElementInfo(".ELEMENT1", element_info2, "/element2");
fail();
}
catch (DuplicateElementIdException e)
{
assertEquals(e.getId(), ".ELEMENT1");
}
catch (EngineException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testMapElementToSeveralUrls()
throws EngineException
{
Site site = new Site();
ElementInfo element_info = null;
try
{
element_info = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT1", element_info, "/element");
assertEquals(site.getUrls().size(), 1);
}
catch (EngineException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
try
{
site.addElementInfo(".ELEMENT2", element_info, "/element2");
fail();
}
catch (EngineException e)
{
assertEquals(site.getUrls().size(), 1);
}
}
public void testResolveElementIds()
throws EngineException
{
Site site = new Site();
ElementInfo element_info1 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
ElementInfo element_info2 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
ElementInfo element_info3 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
ElementInfo element_info4 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
ElementInfo element_info5 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
ElementInfo element_info6 = new ElementInfo("element/test1.xml", "text/html", TestElement1.class.getName(), ElementType.JAVA_CLASS);
site.addElementInfo(".ELEMENT1", element_info1, "/element1");
site.addElementInfo(".ELEMENT2", element_info2, "/element2");
site.addElementInfo(".ELEMENTS.ELEMENT", element_info3, "/element3");
site.addElementInfo(".ELEMENTS.ANOTHER", element_info4, "/element4");
site.addElementInfo(".MORE_ELEMENTS.ELEMENT", element_info5, "/element5");
site.addElementInfo(".MORE_ELEMENTS.ANOTHER", element_info6, "/element6");
try
{
site.resolveId("ELEMENT1");
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
assertSame(element_info1, site.resolveId(".ELEMENT1"));
assertSame(element_info2, site.resolveId(".ELEMENT2"));
assertSame(element_info3, site.resolveId(".ELEMENTS.ELEMENT"));
assertSame(element_info4, site.resolveId(".ELEMENTS.ANOTHER"));
assertSame(element_info5, site.resolveId(".MORE_ELEMENTS.ELEMENT"));
assertSame(element_info6, site.resolveId(".MORE_ELEMENTS.ANOTHER"));
assertSame(element_info1, site.resolveId("ELEMENT1", element_info1));
assertSame(element_info1, site.resolveId("ELEMENT1", element_info2));
assertNull(site.resolveId("ELEMENT1", element_info3));
assertNull(site.resolveId("ELEMENT1", element_info4));
assertNull(site.resolveId("ELEMENT1", element_info5));
assertNull(site.resolveId("ELEMENT1", element_info6));
assertSame(element_info2, site.resolveId("ELEMENT2", element_info1));
assertSame(element_info2, site.resolveId("ELEMENT2", element_info2));
assertNull(site.resolveId("ELEMENT2", element_info3));
assertNull(site.resolveId("ELEMENT2", element_info4));
assertNull(site.resolveId("ELEMENT2", element_info5));
assertNull(site.resolveId("ELEMENT2", element_info6));
assertSame(element_info3, site.resolveId("ELEMENTS.ELEMENT", element_info1));
assertSame(element_info3, site.resolveId("ELEMENTS.ELEMENT", element_info2));
assertNull(site.resolveId("ELEMENTS.ELEMENT", element_info3));
assertNull(site.resolveId("ELEMENTS.ELEMENT", element_info4));
assertNull(site.resolveId("ELEMENTS.ELEMENT", element_info5));
assertNull(site.resolveId("ELEMENTS.ELEMENT", element_info6));
assertSame(element_info4, site.resolveId("ELEMENTS.ANOTHER", element_info1));
assertSame(element_info4, site.resolveId("ELEMENTS.ANOTHER", element_info2));
assertNull(site.resolveId("ELEMENTS.ANOTHER", element_info3));
assertNull(site.resolveId("ELEMENTS.ANOTHER", element_info4));
assertNull(site.resolveId("ELEMENTS.ANOTHER", element_info5));
assertNull(site.resolveId("ELEMENTS.ANOTHER", element_info6));
assertSame(element_info5, site.resolveId("MORE_ELEMENTS.ELEMENT", element_info1));
assertSame(element_info5, site.resolveId("MORE_ELEMENTS.ELEMENT", element_info2));
assertNull(site.resolveId("MORE_ELEMENTS.ELEMENT", element_info3));
assertNull(site.resolveId("MORE_ELEMENTS.ELEMENT", element_info4));
assertNull(site.resolveId("MORE_ELEMENTS.ELEMENT", element_info5));
assertNull(site.resolveId("MORE_ELEMENTS.ELEMENT", element_info6));
assertSame(element_info6, site.resolveId("MORE_ELEMENTS.ANOTHER", element_info1));
assertSame(element_info6, site.resolveId("MORE_ELEMENTS.ANOTHER", element_info2));
assertNull(site.resolveId("MORE_ELEMENTS.ANOTHER", element_info3));
assertNull(site.resolveId("MORE_ELEMENTS.ANOTHER", element_info4));
assertNull(site.resolveId("MORE_ELEMENTS.ANOTHER", element_info5));
assertNull(site.resolveId("MORE_ELEMENTS.ANOTHER", element_info6));
assertNull(site.resolveId("ELEMENT", element_info1));
assertNull(site.resolveId("ELEMENT", element_info2));
assertSame(element_info3, site.resolveId("ELEMENT", element_info3));
assertSame(element_info3, site.resolveId("ELEMENT", element_info4));
assertSame(element_info5, site.resolveId("ELEMENT", element_info5));
assertSame(element_info5, site.resolveId("ELEMENT", element_info6));
assertNull(site.resolveId("ANOTHER", element_info1));
assertNull(site.resolveId("ANOTHER", element_info2));
assertSame(element_info4, site.resolveId("ANOTHER", element_info3));
assertSame(element_info4, site.resolveId("ANOTHER", element_info4));
assertSame(element_info6, site.resolveId("ANOTHER", element_info5));
assertSame(element_info6, site.resolveId("ANOTHER", element_info6));
assertSame(element_info2, site.resolveId(".ELEMENT1^ELEMENT2"));
assertSame(element_info1, site.resolveId(".ELEMENT2^ELEMENT1"));
assertSame(element_info4, site.resolveId(".ELEMENTS.ELEMENT^ANOTHER"));
assertSame(element_info3, site.resolveId(".ELEMENTS.ANOTHER^ELEMENT"));
assertSame(element_info6, site.resolveId(".MORE_ELEMENTS.ELEMENT^ANOTHER"));
assertSame(element_info5, site.resolveId(".MORE_ELEMENTS.ANOTHER^ELEMENT"));
assertSame(element_info5, site.resolveId(".ELEMENTS.ELEMENT^^MORE_ELEMENTS.ELEMENT"));
assertSame(element_info6, site.resolveId(".ELEMENTS.ANOTHER^^MORE_ELEMENTS.ANOTHER"));
assertSame(element_info3, site.resolveId(".MORE_ELEMENTS.ELEMENT^^ELEMENTS.ELEMENT"));
assertSame(element_info4, site.resolveId(".MORE_ELEMENTS.ANOTHER^^ELEMENTS.ANOTHER"));
assertSame(element_info1, site.resolveId("^ELEMENT1", element_info1));
assertSame(element_info1, site.resolveId("^ELEMENT1", element_info2));
assertSame(element_info1, site.resolveId("^ELEMENT1", element_info3));
assertSame(element_info1, site.resolveId("^ELEMENT1", element_info4));
assertSame(element_info1, site.resolveId("^ELEMENT1", element_info5));
assertSame(element_info1, site.resolveId("^ELEMENT1", element_info6));
assertSame(element_info2, site.resolveId("^ELEMENT2", element_info1));
assertSame(element_info2, site.resolveId("^ELEMENT2", element_info2));
assertSame(element_info2, site.resolveId("^ELEMENT2", element_info3));
assertSame(element_info2, site.resolveId("^ELEMENT2", element_info4));
assertSame(element_info2, site.resolveId("^ELEMENT2", element_info5));
assertSame(element_info2, site.resolveId("^ELEMENT2", element_info6));
}
}
class TestElement1 extends Element
{
public void processElement()
throws EngineException
{
print("the content");
}
}