package org.everrest.core.impl.uri;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.PathSegment;
import java.util.Arrays;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class PathSegmentImplTest {
@Parameterized.Parameters(name = "{index} Path: {0}")
public static List<Object[]> testData() {
return Arrays.asList(new Object[][]{
{null, false, "", newArrayList()},
{"", false, "", newArrayList()},
{"x", false, "x", newArrayList()},
{"x;", false, "x", newArrayList()},
{"x;;", false, "x", newArrayList()},
{"x;=b", false, "x", newArrayList()},
{"x;a=", false, "x", newArrayList("a", "")},
{"x;a", false, "x", newArrayList("a", "")},
{"x;a;", false, "x", newArrayList("a", "")},
{"x;a;;", false, "x", newArrayList("a", "")},
{"x;;a", false, "x", newArrayList("a", "")},
{"x;a=;", false, "x", newArrayList("a", "")},
{"x;a=;;", false, "x", newArrayList("a", "")},
{"x;a=b", false, "x", newArrayList("a", "b")},
{"x;a=b;", false, "x", newArrayList("a", "b")},
{"x;a=b;;", false, "x", newArrayList("a", "b")},
{"x;a=b;c=d", false, "x", newArrayList("a", "b", "c", "d")},
{"x;a=b;;c=d", false, "x", newArrayList("a", "b", "c", "d")},
{"x;+a+=%20b%20", true, "x", newArrayList(" a ", " b ")},
{"x;+a+=%20b%20", false, "x", newArrayList(" a ", "%20b%20")},
{";a=b;c=d", false, "", newArrayList("a", "b", "c", "d")},
});
}
@Parameter(0) public String pathSegmentString;
@Parameter(1) public boolean decode;
@Parameter(2) public String expectedPath;
@Parameter(3) public List<String> expectedMatrixParameters;
@Test
public void parsesPathSegmentsFromString() {
PathSegment pathSegment = PathSegmentImpl.fromString(pathSegmentString, decode);
MultivaluedMap<String, String> matrixParameters = pathSegment.getMatrixParameters();
assertEquals(expectedPath, pathSegment.getPath());
assertEquals(expectedMatrixParameters.size() / 2, matrixParameters.size());
for (int i = 0; i < expectedMatrixParameters.size(); i += 2) {
String expectedMatrixParameterName = expectedMatrixParameters.get(i);
String expectedMatrixParameterValue = expectedMatrixParameters.get(i + 1);
assertEquals(expectedMatrixParameterValue, matrixParameters.getFirst(expectedMatrixParameterName));
}
}
}