Added: ode/trunk/utils/src/test/java/org/apache/ode/utils/URITemplateTest.java
URL: 
http://svn.apache.org/viewvc/ode/trunk/utils/src/test/java/org/apache/ode/utils/URITemplateTest.java?rev=658942&view=auto
==============================================================================
--- ode/trunk/utils/src/test/java/org/apache/ode/utils/URITemplateTest.java 
(added)
+++ ode/trunk/utils/src/test/java/org/apache/ode/utils/URITemplateTest.java Wed 
May 21 17:01:58 2008
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ode.utils;
+
+import junit.framework.TestCase;
+
+import java.util.*;
+
+import org.apache.commons.httpclient.URIException;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Alexis Midon</a>
+ */
+public class URITemplateTest extends TestCase {
+    private static final String EXCEPTION_EXPECTED = "ExceptionExpected";
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public void testParseExpansion(){
+        Object[] expansionPatterns = new Object[]{
+                "{my_var}",  new Object[]{null, null, new 
HashMap(){{put("my_var",null);}}},
+                "{my_var=my_default}",  new Object[]{null, null, new 
HashMap(){{put("my_var","my_default");}}},
+                "{-suffix|/|foo}",  new Object[]{"suffix", "/", new 
HashMap(){{put("foo",null);}}},
+                "{-opt|[EMAIL PROTECTED]|foo}",  new Object[]{"opt", "[EMAIL 
PROTECTED]", new HashMap(){{put("foo",null);}}}
+        };
+
+        for (int i = 0; i < expansionPatterns.length; i=i+2) {
+            String patternInfo = (String) expansionPatterns[i];
+            Object[] computedResult = URITemplate.parseExpansion(patternInfo);
+            Object[] expectedResult = (Object[]) expansionPatterns[i + 1];
+            assertEquals("Unexpected operation", expectedResult[0], 
computedResult[0]);
+            assertEquals("Unexpected argument", expectedResult[1], 
computedResult[1]);
+            Map expectedVarMap = (Map) expectedResult[2];
+            Map computedVarMap = (Map) computedResult[2];
+            assertEquals("Var map do not have the number of elements", 
expectedVarMap.size(), computedVarMap.size());
+            for (Iterator it = expectedVarMap.entrySet().iterator(); 
it.hasNext();) {
+                Map.Entry e = (Map.Entry) it.next();
+                assertEquals("Different Value!", e.getValue(), 
computedVarMap.get(e.getKey()));
+            }
+        }
+    }
+
+
+    public void testExpand() throws Exception {
+        // template, input name/value array, expected result
+        Object[] templates = new Object[]{
+                "{a}", new String[]{"a", "hello"}, "hello"
+                ,"{a}", new String[]{"var_not_in_template", "hello"}, "{a}"
+                ,"{a=3}", new String[]{"var_not_in_template", "hello"}, "3" // 
with a default value
+                ,"hello {name}!", new String[]{"name", null}, "hello !"  // 
null value
+                ,"hello {name=darling}!", new String[]{"name", null}, "hello 
darling!"  // null value and a default
+                ,"hello {name=darling}!", new String[]{"name", "brother"}, 
"hello brother!"
+                ,"hello {name=darling}! what's {this}?", new String[]{"name", 
"brother", "this", "this"}, "hello brother! what's this?"
+                ,"hello {name=darling}! what's {this}?", new String[]{"name", 
"brother", "this", "wrong"}, "hello brother! what's wrong?"
+                ,"hello {name=darling}! what's {this}?", new String[]{"name", 
"brother", "this", null}, "hello brother! what's ?"
+                ,"hello {name=darling}! what's {this=up}?", new 
String[]{"name", "brother", "this", null}, "hello brother! what's up?"
+                ,"hello {name=darling}! what's {this=up}?", new 
String[]{"name", "brother"}, "hello brother! what's up?"
+                ,"hello {name}! what's {this}?", new 
String[]{"var_not_in_template", "foo"}, "hello ! what's ?"
+                ,"hello{name}what's{this}", new String[]{"name", " brother! ", 
"this", " this?"}, "hello%20brother!%20what's%20this%3F" // test encoding
+                ,"hello{name= brother! }what's{this}", new String[]{"this", " 
this?"}, "hello%20brother!%20what's%20this%3F" // test encoding + default value
+                ,"hello {name=darling}! what's {this}?", new String[]{"name", 
"brother", "this", "{wrong}"}, "hello brother! what's %7Bwrong%7D?"
+                ,"hello%20brother!%20what's{this}", new String[]{"this", " 
this?"}, "hello%20brother!%20what's%20this%3F" // test template of template
+                ,"{this}", new String[]{"this", ";/?:@&=+,$"}, 
"%3B%2F%3F%3A%40%26%3D%2B%2C%24" // reserved characters within a query
+                ,"{this}", new String[]{"this", 
"somereserved%;/?:@&=+,$allunreserved-_.!~*'()"}, 
"somereserved%25%3B%2F%3F%3A%40%26%3D%2B%2C%24allunreserved-_.!~*'()" // 
reserved characters within a query
+                // the followings are included in the javadoc as examples
+                , "http://example.com/{foo}/{bar}.{format=xml}";, new 
String[]{"foo", "tag", "bar", "java", "name", null, "date", 
"2008/05/09"},"http://example.com/tag/java.xml"; // undefined var with a default 
value
+                , "http://example.com/tag/java.{format}";, new String[]{"foo", 
"tag", "bar", "java", "name", null, "date", 
"2008/05/09"},"http://example.com/tag/java."; // undefined and no default
+                , "http://example.com/{foo}/{name}";, new String[]{"foo", 
"tag", "bar", "java", "name", null, "date", 
"2008/05/09"},"http://example.com/tag/";
+                , "http://example.com/{foo}/{name=james}";, new String[]{"foo", 
"tag", "bar", "java", "name", null, "date", 
"2008/05/09"},"http://example.com/tag/james";
+                , "http://example.org/{date}";, new String[]{"foo", "tag", 
"bar", "java", "name", null, "date", "2008/05/09"}, 
"http://example.org/2008%2F05%2F09";
+                , "http://example.org/{-join|&|foo,bar,xyzzy,baz}/{date}", new 
String[]{"foo", "tag", "bar", "java", "name", null, "date", "2008/05/09"}, 
EXCEPTION_EXPECTED
+        };
+        for (int i = 0; i < templates.length; i = i + 3) {
+            String template = (String) templates[i];
+            String[] pairs = (String[]) templates[i + 1];
+            String expected = (String) templates[i + 2];
+            String computed = null;
+            try {
+                computed = URITemplate.expand(template, pairs);
+                if (EXCEPTION_EXPECTED.equals(expected)) {
+                    fail("An exception was supposed to be thrown!");
+                } else {
+                    assertEquals("Test #" + ((i / 3) + 1) + ": Result does not 
match expectation.", expected, computed);
+                }
+            } catch (Exception e) {
+                if (!EXCEPTION_EXPECTED.equals(expected)) {
+                    // this exception was NOT expected!
+                    throw e;
+                }
+            }
+        }
+    }
+
+    public void testExpandLazily() throws Exception {
+        // same but with some undefined vars
+        // template, input name/value array, expected result
+        Object[] templates = new Object[]{
+                "http://example.com/{foo}/{bar}.{format}";, new String[]{"foo", 
"tag", "bar", "java", "name", null, "date", 
"2008/05/09"},"http://example.com/tag/java.{format}"; // undefined var with no 
default value
+                , "http://example.com/{foo}/{name}";, new String[]{"bar", 
"java", "date", "2008/05/09"},"http://example.com/{foo}/{name}";
+                , "http://example.com/{foo}/{name=james}";, new String[]{"bar", 
"java", "name", null, "date", "2008/05/09"},"http://example.com/{foo}/james";
+        };
+        for (int i = 0; i < templates.length; i = i + 3) {
+            String template = (String) templates[i];
+            String[] pairs = (String[]) templates[i + 1];
+            String expected = (String) templates[i + 2];
+            String computed = null;
+            try {
+                computed = URITemplate.expandLazily(template, pairs);
+                if (EXCEPTION_EXPECTED.equals(expected)) {
+                    fail("An exception was supposed to be thrown!");
+                } else {
+                    assertEquals("Test #" + ((i / 3) + 1) + ": Result does not 
match expectation.", expected, computed);
+                }
+            } catch (Exception e) {
+                if (!EXCEPTION_EXPECTED.equals(expected)) {
+                    // this exception was NOT expected!
+                    throw e;
+                }
+            }
+        }
+    }
+}


Reply via email to