/*
* Copyright (c) 2012 - 2016 Jadler contributors
* This program is made available under the terms of the MIT License.
*/
package net.jadler;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;
public class KeyValuesTest {
private KeyValues keyValues;
private static final String HEADER1_NAME = "name_1";
private static final String HEADER2_NAME = "name_2";
private static final String HEADER3_NAME = "name_3";
private static final String HEADER1_VALUE1 = "value_1_1";
private static final String HEADER2_VALUE1 = "value_2_1";
private static final String HEADER2_VALUE2 = "";
private static final String HEADER3_VALUE1 = "value_3_1";
@Before
public void setUp() {
this.keyValues = new KeyValues()
.add(HEADER1_NAME, HEADER1_VALUE1)
.add(HEADER2_NAME, HEADER2_VALUE1)
.add(HEADER2_NAME, HEADER2_VALUE2)
.add(HEADER3_NAME, HEADER3_VALUE1);
}
@Test
public void constructor() {
new KeyValues();
}
@Test(expected = IllegalArgumentException.class)
public void addWrongName1() {
this.keyValues.add(null, "value");
}
@Test(expected = IllegalArgumentException.class)
public void addWrongName2() {
this.keyValues.add("", "value");
}
@Test(expected = IllegalArgumentException.class)
public void addWrongValue() {
this.keyValues.add("name", null);
}
@Test
public void addEmptyValue() {
this.keyValues.add("name", "");
}
@Test
public void addImmutability() {
final KeyValues first = new KeyValues();
assertThat(first, is(not(sameInstance(first.add("name", "value")))));
}
@Test
public void add() {
assertThat(keyValues.getValues(HEADER1_NAME), containsInAnyOrder(HEADER1_VALUE1));
assertThat(keyValues.getValues(HEADER2_NAME), containsInAnyOrder(HEADER2_VALUE1, HEADER2_VALUE2));
assertThat(keyValues.getValues(HEADER3_NAME), containsInAnyOrder(HEADER3_VALUE1));
}
@Test(expected = IllegalArgumentException.class)
public void addAllWrongParam() {
this.keyValues.addAll(null);
}
@Test
public void addAll() {
final KeyValues additional = new KeyValues().add("name_4", "value_4_1");
final KeyValues actual = this.keyValues.addAll(additional);
assertThat(actual.getValues(HEADER1_NAME), containsInAnyOrder(HEADER1_VALUE1));
assertThat(actual.getValues(HEADER2_NAME), containsInAnyOrder(HEADER2_VALUE1, HEADER2_VALUE2));
assertThat(actual.getValues(HEADER3_NAME), containsInAnyOrder(HEADER3_VALUE1));
assertThat(actual.getValues("name_4"), containsInAnyOrder("value_4_1"));
}
@Test(expected = IllegalArgumentException.class)
public void getValueWrongParam() {
this.keyValues.getValue("");
}
@Test
public void getValueNonExistent() {
assertThat(this.keyValues.getValue("unknown"), is(nullValue()));
}
@Test
public void getValue() {
assertThat(this.keyValues.getValue(HEADER1_NAME), is(HEADER1_VALUE1));
//name_2 contains two values, the first one must be returned
assertThat(this.keyValues.getValue(HEADER2_NAME), is(HEADER2_VALUE1));
}
@Test
public void getValueCaseInsensitive1() {
assertThat(this.keyValues.getValue(HEADER1_NAME.toUpperCase()), is(HEADER1_VALUE1));
}
@Test
public void getValueCaseInsensitive2() {
assertThat(new KeyValues().add(HEADER1_NAME.toUpperCase(), HEADER1_VALUE1)
.getValue(HEADER1_NAME), is(HEADER1_VALUE1));
}
@Test(expected = IllegalArgumentException.class)
public void getValuesWrongParam() {
this.keyValues.getValues("");
}
@Test
public void getValuesNonExistent() {
assertThat(this.keyValues.getValues("unknown"), is(nullValue()));
}
@Test
public void getValues() {
assertThat(this.keyValues.getValues(HEADER1_NAME), contains(HEADER1_VALUE1));
//name_2 contains two values, both values must be returned
assertThat(this.keyValues.getValues(HEADER2_NAME), contains(HEADER2_VALUE1, HEADER2_VALUE2));
}
@Test
public void getValuesCaseInsensitive1() {
assertThat(this.keyValues.getValues(HEADER2_NAME.toUpperCase()), contains(HEADER2_VALUE1, HEADER2_VALUE2));
}
@Test
public void getValuesCaseInsensitive2() {
final KeyValues kv = new KeyValues()
.add(HEADER2_NAME.toUpperCase(), HEADER2_VALUE1)
.add(HEADER2_NAME, HEADER2_VALUE2);
assertThat(kv.getValues(HEADER2_NAME), contains(HEADER2_VALUE1, HEADER2_VALUE2));
}
@Test
public void getKeys() {
assertThat(keyValues.getKeys(), containsInAnyOrder("name_1", "name_2", "name_3"));
}
@Test
public void getKeysEmpty() {
assertThat(new KeyValues().getKeys(), is(not(nullValue())));
assertThat(new KeyValues().getKeys(), is(empty()));
}
@Test
public void testToStringHeaders() {
assertThat(this.keyValues.toString().length(), is(65));
assertThat(this.keyValues.toString(), containsString("name_1: value_1_1"));
assertThat(this.keyValues.toString(), containsString("name_2: value_2_1"));
assertThat(this.keyValues.toString(), containsString("name_2: "));
assertThat(this.keyValues.toString(), containsString("name_3: value_3_1"));
}
}