/*
   * 测试getParameterMap
   */
  @Test
  public void testGetParameterMap_正常情况() throws Exception {
    byte[] bytes = content.getBytes("US-ASCII");
    HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
    Map map = LazyParser.getParameterMap(request);
    // assertEquals("4",map.size()); //FIXME
    // 在form表单中的field重复的情况下,也应该能返回重复的表单数据
    FileItem f = (FileItem) map.get("file");
    assertEquals("This is the content of the file\n", new String(f.getBout().toByteArray()));
    assertEquals("text/whatever", f.getContentType());
    assertEquals("foo.tab", f.getFileName());

    f = (FileItem) map.get("field");
    assertEquals("fieldValue", f.getValue());

    f = (FileItem) map.get("multi");
    assertEquals("value1", f.getValue());
    LazyParser.release();
  }
 /** 测试上传的文件类型不对 */
 @Test
 public void test上传的文件类型不对() throws Exception {
   LazyParser.setFileExts(new String[] {".jpg", ".tab"});
   String temp =
       "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"file\"; filename=\"foo.png\"\r\n"
           + "Content-Type: text/whatever\r\n"
           + "\r\n"
           + "This is the content of the file\n"
           + "\r\n"
           + "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"field\"\r\n"
           + "\r\n"
           + "fieldValue\r\n"
           + "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"multi\"\r\n"
           + "\r\n"
           + "value1\r\n"
           + "-----1234\r\n";
   byte[] bytes = temp.getBytes("US-ASCII");
   HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
   Object o = null;
   try {
     o = LazyParser.getParameter(request, "file");
   } catch (Exception e) {
     assertTrue(e instanceof FileTypeInvalidException);
   }
   assertNull(o);
   LazyParser.release();
 }
 /*
  * 测试getFileItemsFromRequest
  */
 @Test
 public void testGetFileItemFromRequest_正常情况() throws Exception {
   byte[] bytes = content.getBytes("US-ASCII");
   HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
   List<FileItem> fileItem = LazyParser.getFileItemsFromRequest(request);
   assertEquals(1, fileItem.size());
   FileItem f = fileItem.get(0);
   assertEquals("This is the content of the file\n", new String(f.getBout().toByteArray()));
   assertEquals("text/whatever", f.getContentType());
   assertEquals("foo.tab", f.getFileName());
   LazyParser.release();
 }
 /*
  * 测试getParameterNames
  */
 @Test
 public void testGetParameterNames_正常情况() throws Exception {
   byte[] bytes = content.getBytes("US-ASCII");
   HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
   Set<String> paramNames = LazyParser.getParameterNames(request);
   assertEquals(3, paramNames.size());
   assertTrue(
       paramNames.contains("file")
           && paramNames.contains("field")
           && paramNames.contains("multi"));
   LazyParser.release();
 }
 @Test
 public void test上传的文件大小超过限制大小() throws Exception {
   LazyParser.setMaxBufferSize(10); // 允许上传的文件大小为10byte
   byte[] bytes = content.getBytes("US-ASCII");
   HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
   Object o = null;
   try {
     o = LazyParser.getParameter(request, "file");
   } catch (Exception e) {
     assertTrue(e instanceof FileSizeInvalidException);
   }
   assertNull(o);
   LazyParser.release();
 }
  // ----以下测试普通的post数据
  @Test
  public void test普通的post数据() throws Exception {
    String temp =
        "product=mail163&"
            + "savelogin=&"
            + "url=http%3A%2F%2Fmail.163.com%2Ferrorpage%2Ferr_163.htm&"
            + "username=2005081097&"
            + "password=013579";
    String normal_con_type = "application/x-www-form-urlencoded";
    byte[] bytes = temp.getBytes("US-ASCII");
    HttpServletRequest request = new MockHttpServletRequest(bytes, normal_con_type);
    Object o = null;
    o = LazyParser.getParameter(request, "product");
    assertEquals("mail163", (String) o);
    o = LazyParser.getParameter(request, "savelogin");
    assertNull(o);
    o = LazyParser.getParameter(request, "url");
    assertEquals("http://mail.163.com/errorpage/err_163.htm", (String) o);

    List<FileItem> fileItemList = LazyParser.getFileItemsFromRequest(request);
    assertTrue(fileItemList.size() == 0);

    Map map = LazyParser.getParameterMap(request);
    assertEquals(5, map.size());
    assertEquals("mail163", map.get("product"));
    assertEquals("http://mail.163.com/errorpage/err_163.htm", map.get("url"));

    Set<String> paramNames = LazyParser.getParameterNames(request);
    assertEquals(5, paramNames.size());
    assertTrue(paramNames.contains("product"));
    LazyParser.release();
  }
  /** 测试getParameter的正常情况 */
  @Test
  public void testGetParameter_正常情况_上传文件() throws Exception {
    byte[] bytes = content.getBytes("US-ASCII");
    HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
    // 文件域
    Object o = LazyParser.getParameter(request, "file");
    assertTrue(o instanceof FileItem);
    FileItem f = (FileItem) o;
    assertEquals("This is the content of the file\n", new String(f.getBout().toByteArray()));
    assertEquals("text/whatever", f.getContentType());
    assertEquals("foo.tab", f.getFileName());
    // 普通域
    o = LazyParser.getParameter(request, "field");
    assertTrue(o instanceof FileItem);
    f = (FileItem) o;
    assertEquals("fieldValue", f.getValue());

    LazyParser.release();
  }
 @Test
 public void test上传的文件多余1个() throws Exception {
   String temp =
       "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"file\"; filename=\"foo.jpg\"\r\n"
           + "Content-Type: text/whatever\r\n"
           + "\r\n"
           + "This is the content of the file\n"
           + "\r\n"
           + "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"file2\"; filename=\"foo2.jpg\"\r\n"
           + "Content-Type: text/whatever\r\n"
           + "\r\n"
           + "This is the file2 content\n"
           + "\r\n"
           + "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"field\"\r\n"
           + "\r\n"
           + "fieldValue\r\n"
           + "-----1234\r\n"
           + "Content-Disposition: form-data; name=\"multi\"\r\n"
           + "\r\n"
           + "value1\r\n"
           + "-----1234\r\n";
   byte[] bytes = temp.getBytes("US-ASCII");
   HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
   Object o = null;
   try {
     LazyParser.setMaxBufferSize(1000);
     o = LazyParser.getFileItemsFromRequest(request);
   } catch (Exception e) {
     assertTrue(e instanceof FileNumInvalidException);
   }
   assertNull(o);
   LazyParser.release();
 }