Java tutorial
/** * Copyright 2010-2011 Nokia * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.github.restdriver.serverdriver.http; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.joda.time.DateTime; import org.joda.time.DateTimeConstants; import org.junit.Test; import com.github.restdriver.serverdriver.http.exception.RuntimeDateFormatException; public class HeaderTest { @Test public void newlyCreatedHeaderHasCorrectName() { Header header = new Header("name", "value"); assertThat(header.getName(), is("name")); } @Test public void newlyCreatedHeaderHasCorrectValue() { Header header = new Header("name", "value"); assertThat(header.getValue(), is("value")); } @Test public void headerHasSensibleToString() { Header header = new Header("name", "value"); assertThat(header.toString(), is("name: value")); } @Test public void headerHashCodeIsTheSameForEqualHeaders() { Header header1 = new Header("name", "value"); Header header2 = new Header("name", "value"); assertThat(header1.hashCode(), equalTo(header2.hashCode())); } @Test public void headerHashCodeIsDifferentForDifferentName() { Header header1 = new Header("name", "value"); Header header2 = new Header("different", "value"); assertThat(header1.hashCode(), not(equalTo(header2.hashCode()))); } @Test public void headerHashCodeIsDifferentForDifferentValue() { Header header1 = new Header("name", "value"); Header header2 = new Header("name", "different"); assertThat(header1.hashCode(), not(equalTo(header2.hashCode()))); } @Test public void headerIsEqualToItself() { Header header = new Header("name", "value"); assertThat(header, equalTo(header)); } @Test public void headerIsNotEqualToObjectOfAnotherType() { Header header = new Header("name", "value"); assertThat(header.equals(""), is(false)); } @Test public void headersAreEqualWithSameNameAndValue() { Header header1 = new Header("name", "value"); Header header2 = new Header("name", "value"); assertThat(header1, equalTo(header2)); } @Test public void headersAreNotEqualWithDifferentName() { Header header1 = new Header("name", "value"); Header header2 = new Header("different", "value"); assertThat(header1, not(equalTo(header2))); } @Test public void headersAreNotEqualWithDifferentValue() { Header header1 = new Header("name", "value"); Header header2 = new Header("name", "different"); assertThat(header1, not(equalTo(header2))); } @Test public void headerWithNullNameAndValueHasHashCode() { Header header = new Header(null, null); assertThat(header.hashCode() > 0, is(true)); } @Test public void headerWithSingleStringIsParsedCorrectly() { Header header = new Header("X-foo: blah"); assertThat(header.getName(), is("X-foo")); assertThat(header.getValue(), is("blah")); } @Test public void headerWithSingleStringAndCrazyWhitespaceIsParsedCorrectly() { // NB this is not valid according to HTTP spec, but we allow it anyway. Header header = new Header(" X-foo : blah "); assertThat(header.getName(), is("X-foo")); assertThat(header.getValue(), is("blah")); } @Test(expected = IllegalArgumentException.class) public void headerWithSingleStringAndNoColonIsIllegal() { new Header(" X-foo "); } @Test public void headerWithSingleStringAndTwoColonsIsLegal() { Header header = new Header(" X-foo : yes : perhaps"); assertThat(header.getName(), is("X-foo")); assertThat(header.getValue(), is("yes : perhaps")); } public void headerAppliesItselfToRequest() { HttpUriRequest request = new HttpGet(); Header header = new Header("name", "value"); header.applyTo(new ServerDriverHttpUriRequest(request)); assertThat(request.getFirstHeader("name").getValue(), is("value")); } @Test public void headerNameIsCaseInsensitiveButValueIsnt() { Header upper = new Header("HELLO: there"); Header lower = new Header("hello: there"); Header lowerUpper = new Header("hello: THERE"); assertThat(upper, equalTo(lower)); assertThat(lower, not(equalTo(lowerUpper))); } @Test public void hashCodeTreatsNameAsCaseInsensitive() { Header upper = new Header("HELLO: there"); Header lower = new Header("hello: there"); assertThat(upper.hashCode(), equalTo(lower.hashCode())); } @Test public void asDateTimeReturnsCorrectDate() { Header dateHeader = new Header("HELLO: Mon, 09 May 2011 18:49:18 GMT"); DateTime headerDate = dateHeader.asDateTime(); assertThat(headerDate.getDayOfWeek(), is(DateTimeConstants.MONDAY)); assertThat(headerDate.getDayOfMonth(), is(9)); assertThat(headerDate.getMonthOfYear(), is(DateTimeConstants.MAY)); assertThat(headerDate.getYear(), is(2011)); assertThat(headerDate.getHourOfDay(), is(18)); assertThat(headerDate.getMinuteOfHour(), is(49)); assertThat(headerDate.getSecondOfMinute(), is(18)); } @Test(expected = RuntimeDateFormatException.class) public void asDateTimeThrowsIfNotCorrectFormat() { Header dateHeader = new Header("HELLO: XXX, 09 May 2011 18:49:18 GMT"); dateHeader.asDateTime(); } }