/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam.wiki.test.model; import org.dbunit.operation.DatabaseOperation; import org.jboss.seam.wiki.core.action.DocumentHome; import org.jboss.seam.wiki.core.model.WikiDocument; import org.jboss.seam.wiki.core.model.WikiDocumentDefaults; import org.jboss.seam.wiki.core.model.WikiTextMacro; import org.jboss.seam.mock.DBUnitSeamTest; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.List; /** * @author Christian Bauer */ public class DocumentMacroTests extends DBUnitSeamTest { protected void prepareDBUnitOperations() { beforeTestOperations.add( new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT) ); } @Test public void modifyMacros() throws Exception { new NonFacesRequest("/wiki.xhtml") { protected void beforeRequest() { setParameter("nodeId", "6"); } protected void renderResponse() throws Exception { DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class); assert docHome.getInstance().getId().equals(6l); // Init! WikiDocument doc = docHome.getInstance(); // Header doc.setHeader("[<=testMacro1[param1=value1]]\n[<=testMacro2]\nfoo"); docHome.syncMacros(doc); assert doc.getHeaderMacros().size() == 2; assert doc.getHeaderMacrosString().contains("testMacro1"); assert doc.getHeaderMacrosString().contains("testMacro2"); assert doc.getHeader().contains("[<=testMacro1[param1=value1]]\n"); assert doc.getHeader().contains("[<=testMacro2]\n"); assert doc.getHeader().indexOf("foo") == doc.getHeader().length()-3; doc.removeHeaderMacros("testMacro1"); WikiTextMacro replacement = new WikiTextMacro("testMacro3"); replacement.getParams().put("p1", "value1"); replacement.getParams().put("p2", "value2"); doc.addHeaderMacro(replacement); assert doc.getHeaderMacros().size() == 2; assert doc.getHeaderMacrosString().contains("testMacro3"); assert doc.getHeaderMacrosString().contains("testMacro2"); assert doc.getHeader().contains("[<=testMacro3[p1=value1][p2=value2]]\n"); assert doc.getHeader().contains("[<=testMacro2]\n"); assert doc.getHeader().indexOf("foo") == doc.getHeader().length()-3; } }.run(); } @Test public void macrosFromDefaultStrings() throws Exception { WikiDocument doc = new WikiDocument(); WikiDocumentDefaults defaults = new WikiDocumentDefaults() { @Override public String[] getContentMacrosAsString() { return new String[] {"contentMacro1", "contentMacro2"}; } @Override public String getContentText() { return "foo"; } @Override public String[] getHeaderMacrosAsString() { return new String[] {"headerMacro1", "headerMacro2"}; } @Override public String getHeaderText() { return "bar"; } @Override public String[] getFooterMacrosAsString() { return new String[] {"footerMacro1", "footerMacro2"}; } @Override public String getFooterText() { return "baz"; } }; doc.setDefaults(defaults); assert doc.getContentMacros().size() == 2; assert doc.getContentMacrosString().contains("contentMacro1"); assert doc.getContentMacrosString().contains("contentMacro1"); assert doc.getContent().contains("[<=contentMacro1]"); assert doc.getContent().contains("[<=contentMacro2]"); assert doc.getContent().indexOf("foo") == doc.getContent().length()-3; assert doc.getHeaderMacros().size() == 2; assert doc.getHeaderMacrosString().contains("headerMacro1"); assert doc.getHeaderMacrosString().contains("headerMacro2"); assert doc.getHeader().contains("[<=headerMacro1]"); assert doc.getHeader().contains("[<=headerMacro2]"); assert doc.getHeader().indexOf("bar") == doc.getHeader().length()-3; assert doc.getFooterMacros().size() == 2; assert doc.getFooterMacrosString().contains("footerMacro1"); assert doc.getFooterMacrosString().contains("footerMacro2"); assert doc.getFooter().contains("[<=footerMacro1]"); assert doc.getFooter().contains("[<=footerMacro2]"); assert doc.getFooter().indexOf("baz") == 0; } @Test public void macrosFromDefaultTypesafe() throws Exception { WikiDocument doc = new WikiDocument(); WikiDocumentDefaults defaults = new WikiDocumentDefaults() { @Override public List<WikiTextMacro> getContentMacros() { return new ArrayList<WikiTextMacro>() {{ add(new WikiTextMacro("contentMacro1", 0)); add(new WikiTextMacro("contentMacro2", 1)); }}; } @Override public String getContentText() { return "foo"; } @Override public List<WikiTextMacro> getHeaderMacros() { return new ArrayList<WikiTextMacro>() {{ add(new WikiTextMacro("headerMacro1", 0)); add(new WikiTextMacro("headerMacro2", 1)); }}; } @Override public String getHeaderText() { return "bar"; } @Override public List<WikiTextMacro> getFooterMacros() { return new ArrayList<WikiTextMacro>() {{ add(new WikiTextMacro("footerMacro1", 0)); add(new WikiTextMacro("footerMacro2", 1)); }}; } @Override public String getFooterText() { return "baz"; } }; doc.setDefaults(defaults); assert doc.getContentMacros().size() == 2; assert doc.getContentMacrosString().contains("contentMacro1"); assert doc.getContentMacrosString().contains("contentMacro1"); assert doc.getContent().contains("[<=contentMacro1]"); assert doc.getContent().contains("[<=contentMacro2]"); assert doc.getContent().indexOf("foo") == doc.getContent().length()-3; assert doc.getHeaderMacros().size() == 2; assert doc.getHeaderMacrosString().contains("headerMacro1"); assert doc.getHeaderMacrosString().contains("headerMacro2"); assert doc.getHeader().contains("[<=headerMacro1]"); assert doc.getHeader().contains("[<=headerMacro2]"); assert doc.getHeader().indexOf("bar") == doc.getHeader().length()-3; assert doc.getFooterMacros().size() == 2; assert doc.getFooterMacrosString().contains("footerMacro1"); assert doc.getFooterMacrosString().contains("footerMacro2"); assert doc.getFooter().contains("[<=footerMacro1]"); assert doc.getFooter().contains("[<=footerMacro2]"); assert doc.getFooter().indexOf("baz") == 0; } }