package org.camunda.bpm.extension.osgi.util;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.util.List;
import org.camunda.bpm.extension.osgi.util.HeaderParser;
import org.camunda.bpm.extension.osgi.util.HeaderParser.PathElement;
import org.junit.Test;
public class HeaderParserTest {
@Test
public void parseNull() {
List<PathElement> list = HeaderParser.parseHeader(null);
assertThat(list.isEmpty(), is(true));
}
@Test
public void parseEmptyString() {
List<PathElement> list = HeaderParser.parseHeader("");
assertThat(list.isEmpty(), is(true));
}
@Test
public void parseBlankString() {
List<PathElement> list = HeaderParser.parseHeader(" ");
assertThat(list.isEmpty(), is(true));
}
@Test
public void parseSimplePath() {
String header = "/foo/bar";
List<PathElement> list = HeaderParser.parseHeader(header);
assertThat(list.size(), is(1));
PathElement element = list.get(0);
assertThat(element.getName(), is(equalTo(header)));
}
@Test
public void parsePathWithDirective() {
String header = "/bar/foo;attribute:=value";
List<PathElement> list = HeaderParser.parseHeader(header);
assertThat(list.size(), is(1));
PathElement element = list.get(0);
assertThat(element.getName(), is("/bar/foo"));
assertThat(element.getDirective("attribute"), is("value"));
}
@Test
public void parsePathWithAttribute() {
String header = "/bar/foo;version=1.0.0";
List<PathElement> list = HeaderParser.parseHeader(header);
assertThat(list.size(), is(1));
PathElement element = list.get(0);
assertThat(element.getName(), is("/bar/foo"));
assertThat(element.getAttribute("version"), is("1.0.0"));
}
@Test(expected = IllegalArgumentException.class)
public void parseInvalidHeader() {
HeaderParser.parseHeader(";");
}
@Test
public void parseMultiplePaths() {
String header = "/bar/foo, /dev/null;version=1.1.1, C:\\windows\\;unix:=false";
List<PathElement> list = HeaderParser.parseHeader(header);
assertThat(list.size(), is(3));
for (PathElement elem : list) {
if (elem.getName().equals("/bar/foo")) {
assertThat(elem.getAttributes().isEmpty(), is(true));
assertThat(elem.getDirectives().isEmpty(), is(true));
} else if (elem.getName().equals("/dev/null")) {
assertThat(elem.getAttribute("version"), is("1.1.1"));
assertThat(elem.getDirectives().isEmpty(), is(true));
} else if (elem.getName().equals("C:\\windows\\")) {
assertThat(elem.getAttributes().isEmpty(), is(true));
assertThat(elem.getDirective("unix"), is("false"));
} else {
fail("Element " + elem.getName() + " didn't have expected name");
}
}
}
@Test
public void parseHeaderWithSemicolon(){
String header = "/foo/bar;/dev/null";
List<PathElement> list = HeaderParser.parseHeader(header);
assertThat(list.size(), is(2));
assertThat(list.get(0).getName(), is(anyOf(is("/foo/bar"),is( "/dev/null"))));
assertThat(list.get(1).getName(), is(anyOf(is("/foo/bar"),is( "/dev/null"))));
}
}