package http_parser.lolevel;

import java.nio.*; import java.util.*;

import static http_parser.lolevel.Util.*; import http_parser.*;

import primitive.collection.ByteList;

public class Requests {

static void test_simple(String req, boolean should_pass) {
  HTTPParser parser = new HTTPParser(ParserType.HTTP_REQUEST);
  ByteBuffer buf = buffer(req);
  boolean passed = false;
  int read = 0;
  try {
    parser.execute(Util.SETTINGS_NULL, buf);
    passed = (read == req.length());
    read = parser.execute(Util.SETTINGS_NULL, Util.empty());
    passed &= (0 == read);
  } catch (Throwable t) {
    passed = false;
  }
  check(passed == should_pass);
}
static void simple_tests() {
  test_simple("hello world", false);
  test_simple("GET / HTP/1.1\r\n\r\n", false);

  test_simple("ASDF / HTTP/1.1\r\n\r\n", false);
  test_simple("PROPPATCHA / HTTP/1.1\r\n\r\n", false);
  test_simple("GETA / HTTP/1.1\r\n\r\n", false);
}

public static void test () {
  p(Requests.class);    
  simple_tests();

  List<Message> all = TestLoaderNG.load("tests.dumped");
  List<Message> requests = new LinkedList<Message>();
  for (Message m : all) {
    if (ParserType.HTTP_REQUEST == m.type) {
      requests.add(m);
    }
  }
  for (Message m : requests) {
    test_message(m);
  }

  for (int i = 0; i!= requests.size(); ++i) {
    if (!requests.get(i).should_keep_alive) continue;
    for (int j = 0; j!=requests.size(); ++j) {
      if (!requests.get(j).should_keep_alive) continue;
      for (int k = 0; k!= requests.size(); ++k) {
        test_multiple3(requests.get(i), requests.get(j), requests.get(k));
      }
    }
  }

  // postpone test_scan

}

}