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<String, String> emu2map(Enumeration<String> emu, Function<String, String> getValue) {
Map<String, String> 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<String, String> initFilterConfig2Map(FilterConfig config) {
return emu2map(config.getInitParameterNames(), key -> config.getInitParameter(key));
}
/**
* 將 Servlet 的配置轉換爲 Map
*
* @param config Servlet 配置
* @return Servlet 配置的 Map 結構
*/
public static Map<String, String> initServletConfig2Map(ServletConfig config) {
return emu2map(config.getInitParameterNames(), key -> config.getInitParameter(key));
}
@Test
public void testInitFilterConfig2Map() {
FilterConfig config = mock(FilterConfig.class);
// 模擬註解
Vector<String> v = new Vector<>();
v.addElement("urlPatterns");
when(config.getInitParameterNames()).thenReturn(v.elements());
when(config.getInitParameter("urlPatterns")).thenReturn("/service/*");
Map<String, String> map = initFilterConfig2Map(config);
assertEquals("/service/*", map.get("urlPatterns"));
}
@Test
public void testInitServletConfig2Map() {
ServletConfig config = mock(ServletConfig.class);
// 模擬註解
Vector<String> v = new Vector<>();
v.addElement("urlPatterns");
when(config.getInitParameterNames()).thenReturn(v.elements());
when(config.getInitParameter("urlPatterns")).thenReturn("/service/*");
Map<String, String> map = initServletConfig2Map(config);
assertEquals("/service/*", map.get("urlPatterns"));
}
@Test
public void test() {
FilterConfig filterConfig = mock(FilterConfig.class);
String packageName = "com.ajaxjs";
// 模擬 web.xml
Vector<String> v = new Vector<>();
v.addElement("controller");
when(filterConfig.getInitParameter("controller")).thenReturn(packageName);
Enumeration<String> e = v.elements();
when(filterConfig.getInitParameterNames()).thenReturn(e);
Map<String, String> map = initFilterConfig2Map(filterConfig);
System.out.println(map);
assertNotNull(map);
}
}
讀取 web.xml 配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.