package com.vtence.molecule.helpers;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.emptyIterable;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
public class HeadersTest {
Headers headers = new Headers();
@Test public void
isInitiallyEmpty() {
assertThat("has header", headers.has("header"), is(false));
}
@Test public void
retainsHeaderNamesCase() {
headers.put("Content-Type", "text/plain");
headers.put("transfer-encoding", "chunked");
headers.put("ALLOW", "GET");
assertThat("names", headers.names(), contains("Content-Type", "transfer-encoding", "ALLOW"));
assertThat("headers", headers.all(), allOf(
hasEntry("Content-Type", "text/plain"),
hasEntry("transfer-encoding", "chunked"),
hasEntry("ALLOW", "GET")
));
}
@Test public void
accessCaseInsensitively() {
headers.put("header", "header");
assertThat("Header", headers.get("Header"), equalTo("header"));
}
@Test public void
checksExistenceOfKeysCaseInsensitively() {
headers.put("Header", "header");
assertThat("has Header", headers.has("Header"), is(true));
assertThat("has header", headers.has("header"), is(true));
assertThat("has HEADER", headers.has("HEADER"), is(true));
}
@Test public void
overwritesNamesCaseInsensitivelyAndAssumeTheNewCase() {
headers.put("HEADER-NAME", "oldest value");
headers.put("header-name", "older value");
headers.put("Header-Name", "new value");
assertThat("header names", headers.names(), contains("Header-Name"));
assertThat("headers", headers.size(), equalTo(1));
assertThat("headers", headers.all(), hasEntry("Header-Name", "new value"));
}
@Test public void
deletesNamesCaseInsensitively() {
headers.put("removed", "still there");
headers.remove("Removed");
assertThat("names", headers.names(), emptyIterable());
assertThat("still there", headers.has("removed"), is(false));
assertThat("removed", headers.get("removed"), nullValue());
}
@Test public void
discardsNullValues() {
headers.put("null", null);
assertThat("put null header", headers.has("null"), is(false));
headers.add("null", null);
assertThat("add null header", headers.has("null"), is(false));
}
@Test public void
maintainsAListOfValuesForEachName() {
headers.add("allow", "GET");
headers.add("ALLOW", "HEAD");
headers.add("Allow", "OPTIONS");
assertThat("names", headers.names(), contains("Allow"));
assertThat("Allow", headers.list("Allow"), contains("GET", "HEAD", "OPTIONS"));
assertThat("Allow", headers.get("Allow"), equalTo("GET, HEAD, OPTIONS"));
}
}