com.github.restdriver.serverdriver.http.HeaderTest.java Source code

Java tutorial

Introduction

Here is the source code for com.github.restdriver.serverdriver.http.HeaderTest.java

Source

/**
 * 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();
    }

}