/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.publication.freemarker.directive.page;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ewcms.publication.freemarker.FreemarkerTest;
import com.ewcms.publication.freemarker.GlobalVariable;
import com.ewcms.publication.uri.UriRuleable;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* SkipNumberDirective单元测试
*
* @author wangwei
*/
public class SkipNumberDirectiveTest extends FreemarkerTest {
private static final Logger logger = LoggerFactory.getLogger(SkipNumberDirectiveTest.class);
@Test
public void testMaxIsOneGetPageOuts()throws Exception{
SkipNumberDirective directive = new SkipNumberDirective();
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
List<PageOut> pages = directive.getPageOuts(rule,5, 0, 1, "..");
Assert.assertEquals(2, pages.size());
Assert.assertEquals(pages.get(0).getLabel(), "1");
Assert.assertFalse(pages.get(0).isActive());
Assert.assertEquals(pages.get(1).getLabel(),"..");
}
@Test
public void testMaxGeCountGetPageOuts()throws Exception{
SkipNumberDirective directive = new SkipNumberDirective();
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
List<PageOut> pages = directive.getPageOuts(rule,5, 0, 6, "");
Assert.assertEquals(5, pages.size());
Assert.assertEquals(pages.get(0).getLabel(), "1");
Assert.assertFalse(pages.get(0).isActive());
Assert.assertEquals(pages.get(4).getLabel(),"5");
Assert.assertTrue(pages.get(4).isActive());
}
@Test
public void testMaxGePageNumberGetPageOuts()throws Exception{
SkipNumberDirective directive = new SkipNumberDirective();
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
List<PageOut> pages = directive.getPageOuts(rule,10, 5, 7, "..");
Assert.assertEquals(8, pages.size());
Assert.assertEquals(pages.get(0).getLabel(), "1");
Assert.assertEquals(pages.get(7).getLabel(),"..");
}
@Test
public void testMiddleGetPgeOuts()throws Exception{
SkipNumberDirective directive = new SkipNumberDirective();
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
List<PageOut> pages = directive.getPageOuts(rule,20, 10, 7, "..");
Assert.assertEquals(8, pages.size());
Assert.assertEquals(pages.get(0).getLabel(), "..");
Assert.assertEquals(pages.get(1).getLabel(),"8");
Assert.assertEquals(pages.get(7).getLabel(), "..");
}
@Test
public void testEndGetPgeOuts()throws Exception{
SkipNumberDirective directive = new SkipNumberDirective();
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
List<PageOut> pages = directive.getPageOuts(rule,20, 17, 7, "..");
Assert.assertEquals(8, pages.size());
Assert.assertEquals(pages.get(0).getLabel(), "..");
Assert.assertEquals(pages.get(1).getLabel(),"14");
Assert.assertEquals(pages.get(7).getLabel(), "20");
}
@Override
protected void currentConfiguration(Configuration cfg) {
cfg.setSharedVariable("page_number", new SkipNumberDirective());
cfg.setSharedVariable("page", new PageOutDirective());
}
/**
* 得到模板路径
*
* @param name 模板名
* @return
*/
private String getTemplatePath(String name){
return String.format("directive/page/%s", name);
}
@Test
public void testNumberTemplate()throws Exception{
Template template = cfg.getTemplate(getTemplatePath("number.html"));
Map<String,Object> params = new HashMap<String,Object>();
params.put(GlobalVariable.PAGE_NUMBER.toString(), Integer.valueOf(10));
params.put(GlobalVariable.PAGE_COUNT.toString(), Integer.valueOf(20));
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
params.put(GlobalVariable.URI_RULE.toString(), rule);
String value = this.process(template, params);
value = StringUtils.deleteWhitespace(value);
String expected="..8-9-10-1112-13-..";
Assert.assertEquals(expected, value);
}
@Test
public void testNumberLoopTemplate()throws Exception{
Template template = cfg.getTemplate(getTemplatePath("numberloop.html"));
Map<String,Object> params = new HashMap<String,Object>();
params.put(GlobalVariable.PAGE_NUMBER.toString(), Integer.valueOf(10));
params.put(GlobalVariable.PAGE_COUNT.toString(), Integer.valueOf(20));
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
params.put(GlobalVariable.URI_RULE.toString(), rule);
String value = this.process(template, params);
value = StringUtils.deleteWhitespace(value);
String expected="##8910111213##";
Assert.assertEquals(expected, value);
}
@Test
public void testNumberDefaultTemplate()throws Exception{
Template template = cfg.getTemplate(getTemplatePath("numberdefault.html"));
Map<String,Object> params = new HashMap<String,Object>();
params.put(GlobalVariable.PAGE_NUMBER.toString(), Integer.valueOf(10));
params.put(GlobalVariable.PAGE_COUNT.toString(), Integer.valueOf(20));
UriRuleable rule = mock(UriRuleable.class);
when(rule.getUri()).thenReturn("");
params.put(GlobalVariable.URI_RULE.toString(), rule);
String value = this.process(template, params);
StringBuilder expected = new StringBuilder();
expected.append(".. ")
.append("<a href=''>8</a> ")
.append("<a href=''>9</a> ")
.append("<a href=''>10</a> ")
.append("11 ")
.append("<a href=''>12</a> ")
.append("<a href=''>13</a> ")
.append(".. ");
logger.info(value);
Assert.assertEquals(expected.toString(), value);
}
}