package org.nutz.mock; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.nutz.lang.Lang; import org.nutz.lang.Streams; import org.nutz.mock.servlet.MockHttpServletRequest; import org.nutz.mock.servlet.MockHttpSession; import org.nutz.mock.servlet.MockServletConfig; import org.nutz.mock.servlet.MockServletContext; import org.nutz.mock.servlet.multipart.MultipartInputStream; /** * 一些方面的静态方法 * * @author zozoh(zozohtnt@gmail.com) */ public abstract class Mock { public static class servlet { public static MockServletContext context() { return new MockServletContext(); } public static MockServletConfig config(String s) { return new MockServletConfig(context(), s); } public static MockHttpServletRequest request() { return new MockHttpServletRequest(); } public static MockHttpServletRequest fullRequest() { MockHttpServletRequest req = request(); req.setSession(session(context())); return req; } public static MockHttpSession session(MockServletContext context) { return new MockHttpSession(context); } public static ServletInputStream ins(final InputStream ins) { return new ServletInputStream() { public int read() throws IOException { return ins.read(); } public int available() throws IOException { return super.available(); } public void close() throws IOException { ins.close(); } public synchronized void mark(int readlimit) { ins.mark(readlimit); } public boolean markSupported() { return ins.markSupported(); } public int read(byte[] b, int off, int len) throws IOException { return ins.read(b, off, len); } public int read(byte[] b) throws IOException { return ins.read(b); } public synchronized void reset() throws IOException { ins.reset(); } public long skip(long n) throws IOException { return ins.skip(n); } }; } public static ServletInputStream ins(String path) { return ins(Streams.fileIn(path)); } public static MultipartInputStream insmulti(String charset, String boundary) { return new MultipartInputStream(charset, boundary); } public static MultipartInputStream insmulti(String charset) { return insmulti(charset, "------NutzMockHTTPBoundary@" + Long.toHexString(System.currentTimeMillis())); } public static MultipartInputStream insmulti(String charset, File... files) { MultipartInputStream ins = insmulti(charset); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) ins.append("F" + i, files[i]); } return ins; } } public static final InvocationHandler EmtryInvocationHandler = new InvocationHandler() { public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws Throwable { throw Lang.noImplement(); }; }; public static final HttpServletRequest EmtryHttpServletRequest = (HttpServletRequest) Proxy.newProxyInstance(Mock.class.getClassLoader(), new Class[]{HttpServletRequest.class}, EmtryInvocationHandler); public static final HttpServletResponse EmtryHttpServletResponse = (HttpServletResponse) Proxy.newProxyInstance(Mock.class.getClassLoader(), new Class[]{HttpServletResponse.class}, EmtryInvocationHandler); }