package com.ajaxjs.web;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import java.util.function.Function;
import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
import org.junit.Test;
public class TestWebXml {
/**
* 遍历注解的配置,需要什么类,收集起来,放到一个 hash 之中, Servlet 或 Filter 通用
*
* @param emu
* @param getValue
* @return Map
*/
public static Map emu2map(Enumeration emu, Function getValue) {
Map map = new HashMap<>();
while (emu.hasMoreElements()) {
String key = emu.nextElement();
String value = getValue.apply(key);
map.put(key, value);
}
return map;
}
/**
* 将过滤器的配置转换为 Map
*
* @param config 过滤器配置
* @return 过滤器配置的 Map 结构
*/
public static Map initFilterConfig2Map(FilterConfig config) {
return emu2map(config.getInitParameterNames(), key -> config.getInitParameter(key));
}
/**
* 将 Servlet 的配置转换为 Map
*
* @param config Servlet 配置
* @return Servlet 配置的 Map 结构
*/
public static Map initServletConfig2Map(ServletConfig config) {
return emu2map(config.getInitParameterNames(), key -> config.getInitParameter(key));
}
@Test
public void testInitFilterConfig2Map() {
FilterConfig config = mock(FilterConfig.class);
// 模拟注解
Vector v = new Vector<>();
v.addElement("urlPatterns");
when(config.getInitParameterNames()).thenReturn(v.elements());
when(config.getInitParameter("urlPatterns")).thenReturn("/service/*");
Map map = initFilterConfig2Map(config);
assertEquals("/service/*", map.get("urlPatterns"));
}
@Test
public void testInitServletConfig2Map() {
ServletConfig config = mock(ServletConfig.class);
// 模拟注解
Vector v = new Vector<>();
v.addElement("urlPatterns");
when(config.getInitParameterNames()).thenReturn(v.elements());
when(config.getInitParameter("urlPatterns")).thenReturn("/service/*");
Map map = initServletConfig2Map(config);
assertEquals("/service/*", map.get("urlPatterns"));
}
@Test
public void test() {
FilterConfig filterConfig = mock(FilterConfig.class);
String packageName = "com.ajaxjs";
// 模拟 web.xml
Vector v = new Vector<>();
v.addElement("controller");
when(filterConfig.getInitParameter("controller")).thenReturn(packageName);
Enumeration e = v.elements();
when(filterConfig.getInitParameterNames()).thenReturn(e);
Map map = initFilterConfig2Map(filterConfig);
System.out.println(map);
assertNotNull(map);
}
}