@Test public void testSubstituteMapSameVars() throws Exception { URITemplate ut = new URITemplate("/foo/{a}/{a}/{a}"); Map<String, String> map = new HashMap<String, String>(); map.put("a", "bar"); assertEquals("Wrong substitution", "/foo/bar/bar/bar", ut.substitute(map)); }
@Test public void testSubstituteMapSameVarWithPattern() throws Exception { URITemplate ut = new URITemplate("/foo/{a}/{a:\\d}"); Map<String, String> map = new HashMap<String, String>(); map.put("a", "0"); assertEquals("Wrong substitution", "/foo/0/0", ut.substitute(map)); }
@Test(expected = IllegalArgumentException.class) public void testSubstituteMapIncomplete() throws Exception { URITemplate ut = new URITemplate("/foo/{a}/{b}/{a:\\d}"); Map<String, String> map = new HashMap<String, String>(); map.put("b", "bar"); ut.substitute(map); }
@Test public void testNestedCurlyBraces() { URITemplate ut = new URITemplate("/foo/{hex:[0-9a-fA-F]{2}}"); Map<String, String> map = new HashMap<String, String>(); map.put("hex", "FF"); assertEquals("Wrong substitution", "/foo/FF", ut.substitute(map)); }
@Test(expected = IllegalArgumentException.class) public void testSubstituteMapSameVarWithPatternFail() throws Exception { URITemplate ut = new URITemplate("/foo/{a}/{a:\\d}"); Map<String, String> map = new HashMap<String, String>(); map.put("a", "not-a-digit"); ut.substitute(map); }
@Test public void testMatchWithMatrixOnClearPath4() throws Exception { URITemplate uriTemplate = new URITemplate("/customers"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/customers;123456/123/orders;456/3", values)); }
@Test public void testExpressionWithTwoVars() throws Exception { URITemplate uriTemplate = new URITemplate("/{tenant : [^/]*}/resource/{id}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/t1/resource/1", values); assertTrue(match); String tenant = values.getFirst("tenant"); assertEquals("t1", tenant); String id = values.getFirst("id"); assertEquals("1", id); String finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/", finalPath); values.clear(); match = uriTemplate.match("//resource/1", values); assertTrue(match); tenant = values.getFirst("tenant"); assertEquals("", tenant); id = values.getFirst("id"); assertEquals("1", id); finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/", finalPath); values.clear(); match = uriTemplate.match("/t1/resource/1/sub", values); assertTrue(match); tenant = values.getFirst("tenant"); assertEquals("t1", tenant); id = values.getFirst("id"); assertEquals("1", id); finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/sub", finalPath); }
@Test public void testExpressionWithNestedGroupAndTwoVars2() throws Exception { URITemplate uriTemplate = new URITemplate("/foo/{bar}{resource:(/format/[^/]+?)?}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/foo/1/format", values)); assertEquals("1", values.getFirst("bar")); assertEquals("/format", values.getFirst("resource")); String finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/", finalPath); values.clear(); assertTrue(uriTemplate.match("/foo/1/format/2", values)); assertEquals("1", values.getFirst("bar")); assertEquals("/format/2", values.getFirst("resource")); finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/", finalPath); values.clear(); assertTrue(uriTemplate.match("/foo/1", values)); assertEquals("1", values.getFirst("bar")); assertNull(values.getFirst("resource")); finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/", finalPath); }
@Test public void testEncodedSpace() throws Exception { URITemplate uriTemplate = new URITemplate("/1 2/%203"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/1%202/%203", values)); assertFalse(uriTemplate.match("/1 2/%203", values)); }
@Test public void testCompareRegExTemplates() { URITemplate t1 = new URITemplate("{entitySetName}{optionalParens: (\\(\\))?}"); URITemplate t2 = new URITemplate("{entitySetName}{id: \\(.+?\\)}"); assertTrue(URITemplate.compareTemplates(t1, t2) < 0); assertTrue(URITemplate.compareTemplates(t2, t1) > 0); assertEquals(0, URITemplate.compareTemplates(t2, t2)); }
@Test public void testFailCustomExpression() throws Exception { URITemplate uriTemplate = new URITemplate("/books/{bookId:124}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/books/123/chapter/1", values); assertFalse(match); }
@Test public void testSubstituteMapExceeding() throws Exception { URITemplate ut = new URITemplate("/foo/{a}"); Map<String, String> map = new HashMap<String, String>(); map.put("b", "baz"); map.put("a", "blah"); assertEquals("Wrong substitution", "/foo/blah", ut.substitute(map)); }
@Test public void testEscapingWildCard() throws Exception { URITemplate uriTemplate = new URITemplate("/books/a*"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/books/a*", values)); assertFalse(uriTemplate.match("/books/a", values)); assertFalse(uriTemplate.match("/books/ac", values)); }
@Test public void testMatchWithMatrixOnClearPath5() throws Exception { URITemplate uriTemplate = new URITemplate("/customers"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/customers;a=b", values)); String finalGroup = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/", finalGroup); }
@Test public void testMatchWithMatrixOnClearPath2() throws Exception { URITemplate uriTemplate = new URITemplate("/customers/{id}/orders/{order}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/customers;123456/123/orders;456/3", values)); assertEquals("123", values.getFirst("id")); assertEquals("3", values.getFirst("order")); }
@Test public void testBaseTail1() { URITemplate uriTemplate = new URITemplate("/{base:base.+}/{tail}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertFalse(uriTemplate.match("/base/tails", values)); assertTrue(uriTemplate.match("/base1/tails", values)); assertEquals("base1", values.getFirst("base")); assertEquals("tails", values.getFirst("tail")); }
@Test public void testSubstituteMap() throws Exception { URITemplate ut = new URITemplate("/foo/{a}/{b:\\d\\d}/{c}"); Map<String, String> map = new HashMap<String, String>(); map.put("c", "foo"); map.put("b", "11"); map.put("a", "bar"); assertEquals("Wrong substitution", "/foo/bar/11/foo", ut.substitute(map)); }
@Test public void testLiteralExpression() throws Exception { URITemplate uriTemplate = new URITemplate("/bar"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/bar/baz", values)); String finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/baz", finalPath); }
@Test public void testMatchWithMatrixOnClearPath1() throws Exception { URITemplate uriTemplate = new URITemplate("/customers/{id}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/customers;123456/123/", values); assertTrue(match); String value = values.getFirst("id"); assertEquals("123", value); }
@Test public void testMatchWithMatrixWithEmptyPath2() throws Exception { URITemplate uriTemplate = new URITemplate("/"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/;a=b/b/c", values); assertTrue(match); String finalGroup = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/b/c", finalGroup); }
@Test public void testURITemplateWithSubResourceVariation4() throws Exception { URITemplate uriTemplate = new URITemplate("/"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/books/123/chapter/1", values); assertTrue(match); String subResourcePath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/books/123/chapter/1", subResourcePath); }
private void doTestBasicCustomExpression(String expression) { URITemplate uriTemplate = new URITemplate(expression); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/books/123/chapter/1", values); assertTrue(match); assertEquals("123", values.getFirst("bookId")); String subResourcePath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/chapter/1", subResourcePath); }
@Test public void testValueWithLiteralPlus() throws Exception { URITemplate uriTemplate = new URITemplate("/books/ab+"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/books/ab+", values)); assertFalse(uriTemplate.match("/books/abb", values)); assertFalse(uriTemplate.match("/books/ab", values)); assertFalse(uriTemplate.match("/books/a", values)); }
@Test public void testExpressionWithNestedGroup2() throws Exception { URITemplate uriTemplate = new URITemplate("/{resource:.+\\.(js|css|gif|png)}/bar"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/script.js/bar/baz", values)); assertEquals("script.js", values.getFirst("resource")); String finalPath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/baz", finalPath); }
@Test public void testURITemplateWithSubResourceVariation2() throws Exception { // So "/customers" is the URITemplate for the root resource class URITemplate uriTemplate = new URITemplate("/customers"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/customers/name/john/dep/CS", values); assertTrue(match); String subResourcePath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/name/john/dep/CS", subResourcePath); }
@Test public void testBasicCustomExpression3() throws Exception { URITemplate uriTemplate = new URITemplate("/books/{bookId:\\d\\d\\d}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/books/123/chapter/1", values); assertTrue(match); assertEquals("123", values.getFirst("bookId")); String subResourcePath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/chapter/1", subResourcePath); }
@Test public void testMatchBasicTwoParametersVariation2() throws Exception { URITemplate uriTemplate = new URITemplate("/customers/name/{name}/dep/{department}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/customers/name/john/dep/CS", values); assertTrue(match); String name = values.getFirst("name"); String department = values.getFirst("department"); assertEquals("john", name); assertEquals("CS", department); }
@Test public void testMatchWithMultipleMatrixParams() throws Exception { URITemplate uriTemplate = new URITemplate( "renderwidget/id/{id}/type/{type}/size/{size}/locale/{locale}/{properties}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue( uriTemplate.match( "renderwidget/id/1007/type/1/size/1/locale/en_US/properties;a=b", values)); assertEquals("1007", values.getFirst("id")); }
@Test public void testBasicCustomExpression4() throws Exception { URITemplate uriTemplate = new URITemplate("/books/{bookId:...\\.}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); assertTrue(uriTemplate.match("/books/123.", values)); assertEquals("123.", values.getFirst("bookId")); values.clear(); assertTrue(uriTemplate.match("/books/abc.", values)); assertEquals("abc.", values.getFirst("bookId")); assertFalse(uriTemplate.match("/books/abcd", values)); assertFalse(uriTemplate.match("/books/abc", values)); }
@Test /* * Test a sub-resource locator method like this @HttpMethod("GET") @UriTemplate("/books/{bookId}/") public * Book getBook(@UriParam("bookId") String id) */ public void testURITemplateWithSubResourceVariation3() throws Exception { URITemplate uriTemplate = new URITemplate("/books/{bookId}/"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); boolean match = uriTemplate.match("/books/123/chapter/1", values); assertTrue(match); String subResourcePath = values.getFirst(URITemplate.FINAL_MATCH_GROUP); assertEquals("/chapter/1", subResourcePath); }