blob: f274435cf2fecfc14c348f2e16d52cec70f7d08e [file] [log] [blame]
// ***************************************************************************************************************************
// * 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.juneau.utils;
import static org.junit.Assert.*;
import java.util.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.json.*;
import org.apache.juneau.parser.*;
import org.junit.*;
@SuppressWarnings({"unchecked","rawtypes","serial","javadoc"})
public class PojoRestTest {
//====================================================================================================
// testBasic
//====================================================================================================
@Test
public void testBasic() {
// TODO: Need to write some exhaustive tests here. Will open work item
// to do that later.
PojoRest model = new PojoRest(new ObjectMap()); // An empty model.
// Do a PUT
model.put("A", new ObjectMap());
model.put("A/B", new ObjectMap());
model.put("A/B/C", "A new string");
assertEquals("{A:{B:{C:'A new string'}}}", model.toString());
// Do a POST to a list.
model.put("A/B/C", new LinkedList());
model.post("A/B/C", "String #1");
model.post("A/B/C", "String #2");
assertEquals("{A:{B:{C:['String #1\','String #2']}}}", model.toString());
// Do some GETs
String s = (String) model.get("A/B/C/0");
assertEquals("String #1", s);
Map m = (Map) model.get("A/B");
assertEquals("{C:['String #1','String #2']}", m.toString());
}
//====================================================================================================
// testBeans
//====================================================================================================
@Test
public void testBeans() throws Exception {
PojoRest model;
// Java beans.
model = new PojoRest(new ObjectMap());
Person p = new Person("some name", 123,
new Address("street A", "city A", "state A", 12345, true),
new Address("street B", "city B", "state B", 12345, false)
);
model.put("/person1", p);
// Make sure it got stored correctly.
JsonSerializer serializer = new JsonSerializerBuilder().simple().addBeanTypeProperties(false).build();
assertEquals("{person1:{name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}}", serializer.serialize(model.getRootObject()));
// Get the original Person object back.
p = (Person)model.get("/person1");
assertEquals("city B", p.addresses[1].city);
// Look for deep information inside beans.
Address a3 = (Address)model.get("/person1/addresses/1");
assertEquals("city B", a3.city);
serializer = JsonSerializer.DEFAULT_LAX;
p = new Person("some name", 123,
new Address("street A", "city A", "state A", 12345, true),
new Address("street B", "city B", "state B", 12345, false)
);
// Serialize it to JSON.
String s = serializer.serialize(p);
String expectedValue = "{_type:'Person',name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}";
assertEquals(expectedValue, s);
// Parse it back to Java objects.
p = (Person)new JsonParserBuilder().beanDictionary(Person.class).build().parse(s, Object.class);
expectedValue = "city B";
s = p.addresses[1].city;
assertEquals(expectedValue, s);
// Parse it back into JSON again.
s = serializer.serialize(p);
expectedValue = "{_type:'Person',name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}";
assertEquals(expectedValue, s);
// Try adding an address
model = new PojoRest(p);
model.post("addresses", new Address("street C", "city C", "state C", 12345, true));
s = ((Address)model.get("addresses/2")).toString();
expectedValue = "Address(street=street C,city=city C,state=state C,zip=12345,isCurrent=true)";
assertEquals(expectedValue, s);
// Try replacing addresses
model.put("addresses/0", new Address("street D", "city D", "state D", 12345, false));
model.put("addresses/1", new Address("street E", "city E", "state E", 12345, false));
model.put("addresses/2", new Address("street F", "city F", "state F", 12345, false));
serializer = new JsonSerializerBuilder().simple().addBeanTypeProperties(false).build();
s = serializer.serialize(p);
expectedValue = "{name:'some name',age:123,addresses:[{street:'street D',city:'city D',state:'state D',zip:12345,isCurrent:false},{street:'street E',city:'city E',state:'state E',zip:12345,isCurrent:false},{street:'street F',city:'city F',state:'state F',zip:12345,isCurrent:false}]}";
assertEquals(expectedValue, s);
// Try removing an address
model.delete("addresses/1");
s = serializer.serialize(p);
expectedValue = "{name:'some name',age:123,addresses:[{street:'street D',city:'city D',state:'state D',zip:12345,isCurrent:false},{street:'street F',city:'city F',state:'state F',zip:12345,isCurrent:false}]}";
assertEquals(expectedValue, s);
model.delete("addresses/0");
model.delete("addresses/0");
s = serializer.serialize(p);
expectedValue = "{name:'some name',age:123,addresses:[]}";
assertEquals(expectedValue, s);
// Try adding an out-of-bounds address (should pad it with nulls)
model.put("addresses/2", new Address("street A", "city A", "state A", 12345, true));
s = serializer.serialize(p);
expectedValue = "{name:'some name',age:123,addresses:[null,null,{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true}]}";
assertEquals(expectedValue, s);
// Try adding an address as a map (should be automatically converted to an Address)
Map m = new HashMap();
m.put("street","street D");
m.put("city","city D");
m.put("state","state D");
m.put("zip",new Integer(12345));
// Try the same for an address in an array.
model.put("addresses/1", m);
s = ((Address)model.get("addresses/1")).toString();
expectedValue = "Address(street=street D,city=city D,state=state D,zip=12345,isCurrent=false)";
assertEquals(expectedValue, s);
// Try setting some fields.
model.put("addresses/1/zip", new Integer(99999));
s = model.get("addresses/1/zip").toString();
expectedValue = "99999";
assertEquals(expectedValue, s);
// Make sure we can get non-existent branches without throwing any exceptions.
// get() method should just return null.
model = new PojoRest(new ObjectMap());
Object o = model.get("xxx");
assertEquals("null", (""+o));
// Make sure blanks and "/" returns the root object.
s = model.get("").toString();
assertEquals("{}", s);
s = model.get("/").toString();
assertEquals("{}", s);
// Make sure doing a PUT against "" or "/" replaces the root object.
ObjectMap m2 = new ObjectMap("{x:1}");
model.put("", m2);
s = model.get("").toString();
assertEquals("{x:1}", s);
m2 = new ObjectMap("{x:2}");
model.put("/", m2);
s = model.get("").toString();
assertEquals("{x:2}", s);
// Make sure doing a POST against "" or "/" adds to the root object.
model = new PojoRest(new ObjectList());
model.post("", new Integer(1));
model.post("/", new Integer(2));
s = model.get("").toString();
assertEquals("[1,2]", s);
}
//====================================================================================================
// testAddressBook
//====================================================================================================
@Test
public void testAddressBook() {
PojoRest model;
model = new PojoRest(new AddressBook());
// Try adding a person to the address book.
Person billClinton = new Person("Bill Clinton", 65,
new Address("55W. 125th Street", "New York", "NY", 10027, true)
);
model.post("/", billClinton);
// Make sure we get the original person back.
billClinton = (Person)model.get("/0");
}
public static class AddressBook extends LinkedList<Person> {
public AddressBook init() {
add(
new Person("Bill Clinton", 65,
new Address("55W. 125th Street", "New York", "NY", 10027, true)
)
);
return this;
}
}
public static class Address {
public String street;
public String city;
public String state;
public int zip;
public boolean isCurrent;
public Address() {}
public Address(String street, String city, String state, int zip, boolean isCurrent) {
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
this.isCurrent = isCurrent;
}
@Override /* Object */
public String toString() {
return "Address(street="+street+",city="+city+",state="+state+",zip="+zip+",isCurrent="+isCurrent+")";
}
}
@Bean(typeName="Person")
public static class Person {
public String name;
public int age;
public Address[] addresses;
public Person() {}
public Person(String name, int age, Address...addresses) {
this.name = name;
this.age = age;
this.addresses = addresses;
}
@Override /* Object */
public String toString() {
return "Person(name="+name+",age="+age+")";
}
}
//====================================================================================================
// PojoRest(Object,ReaderParser)
//====================================================================================================
@Test
public void testConstructors() throws Exception {
PojoRest model = new PojoRest(new AddressBook(), JsonParser.DEFAULT);
// Try adding a person to the address book.
Person billClinton = new Person("Bill Clinton", 65,
new Address("55W. 125th Street", "New York", "NY", 10027, true)
);
model.post("/", billClinton);
// Make sure we get the original person back.
billClinton = (Person)model.get("/0");
}
//====================================================================================================
// setRootLocked()
//====================================================================================================
@Test
public void testRootLocked() throws Exception {
PojoRest model = new PojoRest(new AddressBook()).setRootLocked();
try {
model.put("", new AddressBook());
fail();
} catch (PojoRestException e) {
assertEquals("Cannot overwrite root object", e.getLocalizedMessage());
}
try {
model.put(null, new AddressBook());
fail();
} catch (PojoRestException e) {
assertEquals("Cannot overwrite root object", e.getLocalizedMessage());
}
try {
model.put("/", new AddressBook());
fail();
} catch (PojoRestException e) {
assertEquals("Cannot overwrite root object", e.getLocalizedMessage());
}
}
//====================================================================================================
// getRootObject()
//====================================================================================================
@Test
public void testGetRootObject() throws Exception {
PojoRest model = new PojoRest(new AddressBook());
assertTrue(model.getRootObject() instanceof AddressBook);
model.put("", "foobar");
assertTrue(model.getRootObject() instanceof String);
model.put("", null);
assertNull(model.getRootObject());
}
//====================================================================================================
// get(Class<T> type, String url)
// get(Class<T> type, String url, T def)
// getString(String url)
// getString(String url, String defVal)
// getInt(String url)
// getInt(String url, Integer defVal)
// getLong(String url)
// getLong(String url, Long defVal)
// getBoolean(String url)
// getBoolean(String url, Boolean defVal)
// getMap(String url)
// getMap(String url, Map<?,?> defVal)
// getList(String url)
// getList(String url, List<?> defVal)
// getObjectMap(String url)
// getObjectMap(String url, ObjectMap defVal)
// getObjectList(String url)
// getObjectList(String url, ObjectList defVal)
//====================================================================================================
@Test
public void testGetMethods() throws Exception {
PojoRest model = new PojoRest(new A());
ObjectList l = new ObjectList("[{a:'b'}]");
ObjectMap m = new ObjectMap("{a:'b'}");
assertNull(model.get("f1"));
assertEquals(0, model.get("f2"));
assertEquals(0l, model.get("f3"));
assertFalse((Boolean)model.get("f4"));
assertNull(model.get("f2a"));
assertNull(model.get("f3a"));
assertNull(model.get("f4a"));
assertNull(model.get("f5"));
assertNull(model.get("f6"));
assertNull(model.get("f7"));
assertNull(model.get("f8"));
assertEquals("foo", model.get("f1", "foo"));
assertEquals(0, model.get("f2", "foo"));
assertEquals(0l, model.get("f3", "foo"));
assertEquals(false, model.get("f4", "foo"));
assertEquals("foo", model.get("f2a", "foo"));
assertEquals("foo", model.get("f3a", "foo"));
assertEquals("foo", model.get("f4a", "foo"));
assertEquals("foo", model.get("f5", "foo"));
assertEquals("foo", model.get("f6", "foo"));
assertEquals("foo", model.get("f7", "foo"));
assertEquals("foo", model.get("f8", "foo"));
assertNull(model.getString("f1"));
assertEquals("0", model.getString("f2"));
assertEquals("0", model.getString("f3"));
assertEquals("false", model.getString("f4"));
assertNull(model.getString("f2a"));
assertNull(model.getString("f3a"));
assertNull(model.getString("f4a"));
assertNull(model.getString("f5"));
assertNull(model.getString("f6"));
assertNull(model.getString("f7"));
assertNull(model.getString("f8"));
assertEquals("foo", model.getString("f1", "foo"));
assertEquals("0", model.getString("f2", "foo"));
assertEquals("0", model.getString("f3", "foo"));
assertEquals("false", model.getString("f4", "foo"));
assertEquals("foo", model.getString("f2a", "foo"));
assertEquals("foo", model.getString("f3a", "foo"));
assertEquals("foo", model.getString("f4a", "foo"));
assertEquals("foo", model.getString("f5", "foo"));
assertEquals("foo", model.getString("f6", "foo"));
assertEquals("foo", model.getString("f7", "foo"));
assertEquals("foo", model.getString("f8", "foo"));
assertNull(model.getInt("f1"));
assertEquals(0, (int)model.getInt("f2"));
assertEquals(0, (int)model.getInt("f3"));
assertEquals(0, (int)model.getInt("f4"));
assertNull(model.getInt("f2a"));
assertNull(model.getInt("f3a"));
assertNull(model.getInt("f4a"));
assertNull(model.getInt("f5"));
assertNull(model.getInt("f6"));
assertNull(model.getInt("f7"));
assertNull(model.getInt("f8"));
assertEquals(1, (int)model.getInt("f1", 1));
assertEquals(0, (int)model.getInt("f2", 1));
assertEquals(0, (int)model.getInt("f3", 1));
assertEquals(0, (int)model.getInt("f4", 1));
assertEquals(1, (int)model.getInt("f2a", 1));
assertEquals(1, (int)model.getInt("f3a", 1));
assertEquals(1, (int)model.getInt("f4a", 1));
assertEquals(1, (int)model.getInt("f5", 1));
assertEquals(1, (int)model.getInt("f6", 1));
assertEquals(1, (int)model.getInt("f7", 1));
assertEquals(1, (int)model.getInt("f8", 1));
assertNull(model.getLong("f1"));
assertEquals(0, (long)model.getLong("f2"));
assertEquals(0, (long)model.getLong("f3"));
assertEquals(0, (long)model.getLong("f4"));
assertNull(model.getLong("f2a"));
assertNull(model.getLong("f3a"));
assertNull(model.getLong("f4a"));
assertNull(model.getLong("f5"));
assertNull(model.getLong("f6"));
assertNull(model.getLong("f7"));
assertNull(model.getLong("f8"));
assertEquals(1, (long)model.getLong("f1", 1l));
assertEquals(0, (long)model.getLong("f2", 1l));
assertEquals(0, (long)model.getLong("f3", 1l));
assertEquals(0, (long)model.getLong("f4", 1l));
assertEquals(1, (long)model.getLong("f2a", 1l));
assertEquals(1, (long)model.getLong("f3a", 1l));
assertEquals(1, (long)model.getLong("f4a", 1l));
assertEquals(1, (long)model.getLong("f5", 1l));
assertEquals(1, (long)model.getLong("f6", 1l));
assertEquals(1, (long)model.getLong("f7", 1l));
assertEquals(1, (long)model.getLong("f8", 1l));
assertNull(model.getBoolean("f1"));
assertEquals(false, model.getBoolean("f2"));
assertEquals(false, model.getBoolean("f3"));
assertEquals(false, model.getBoolean("f4"));
assertNull(model.getBoolean("f2a"));
assertNull(model.getBoolean("f3a"));
assertNull(model.getBoolean("f4a"));
assertNull(model.getBoolean("f5"));
assertNull(model.getBoolean("f6"));
assertNull(model.getBoolean("f7"));
assertNull(model.getBoolean("f8"));
assertEquals(true, model.getBoolean("f1", true));
assertEquals(false, model.getBoolean("f2", true));
assertEquals(false, model.getBoolean("f3", true));
assertEquals(false, model.getBoolean("f4", true));
assertEquals(true, model.getBoolean("f2a", true));
assertEquals(true, model.getBoolean("f3a", true));
assertEquals(true, model.getBoolean("f4a", true));
assertEquals(true, model.getBoolean("f5", true));
assertEquals(true, model.getBoolean("f6", true));
assertEquals(true, model.getBoolean("f7", true));
assertEquals(true, model.getBoolean("f8", true));
assertNull(model.getMap("f1"));
try { model.getMap("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f4"); fail(); } catch (InvalidDataConversionException e) {}
assertNull(model.getMap("f2a"));
assertNull(model.getMap("f3a"));
assertNull(model.getMap("f4a"));
assertNull(model.getMap("f5"));
assertNull(model.getMap("f6"));
assertNull(model.getMap("f7"));
assertNull(model.getMap("f8"));
assertEquals("{a:'b'}", model.getMap("f1", m).toString());
try { model.getMap("f2", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f3", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f4", m); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{a:'b'}", model.getMap("f2a", m).toString());
assertEquals("{a:'b'}", model.getMap("f3a", m).toString());
assertEquals("{a:'b'}", model.getMap("f4a", m).toString());
assertEquals("{a:'b'}", model.getMap("f5", m).toString());
assertEquals("{a:'b'}", model.getMap("f6", m).toString());
assertEquals("{a:'b'}", model.getMap("f7", m).toString());
assertEquals("{a:'b'}", model.getMap("f8", m).toString());
assertNull(model.getMap("f1"));
try { model.getObjectMap("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f4"); fail(); } catch (InvalidDataConversionException e) {}
assertNull(model.getObjectMap("f2a"));
assertNull(model.getObjectMap("f3a"));
assertNull(model.getObjectMap("f4a"));
assertNull(model.getObjectMap("f5"));
assertNull(model.getObjectMap("f6"));
assertNull(model.getObjectMap("f7"));
assertNull(model.getObjectMap("f8"));
assertEquals("{a:'b'}", model.getObjectMap("f1", m).toString());
try { model.getObjectMap("f2", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f3", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f4", m); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{a:'b'}", model.getObjectMap("f2a", m).toString());
assertEquals("{a:'b'}", model.getObjectMap("f3a", m).toString());
assertEquals("{a:'b'}", model.getObjectMap("f4a", m).toString());
assertEquals("{a:'b'}", model.getObjectMap("f5", m).toString());
assertEquals("{a:'b'}", model.getObjectMap("f6", m).toString());
assertEquals("{a:'b'}", model.getObjectMap("f7", m).toString());
assertEquals("{a:'b'}", model.getObjectMap("f8", m).toString());
assertNull(model.getList("f1"));
try { model.getList("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f4"); fail(); } catch (InvalidDataConversionException e) {}
assertNull(model.getList("f2a"));
assertNull(model.getList("f3a"));
assertNull(model.getList("f4a"));
assertNull(model.getList("f5"));
assertNull(model.getList("f6"));
assertNull(model.getList("f7"));
assertNull(model.getList("f8"));
assertEquals("[{a:'b'}]", model.getList("f1", l).toString());
try { model.getList("f2", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f3", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f4", l); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("[{a:'b'}]", model.getList("f2a", l).toString());
assertEquals("[{a:'b'}]", model.getList("f3a", l).toString());
assertEquals("[{a:'b'}]", model.getList("f4a", l).toString());
assertEquals("[{a:'b'}]", model.getList("f5", l).toString());
assertEquals("[{a:'b'}]", model.getList("f6", l).toString());
assertEquals("[{a:'b'}]", model.getList("f7", l).toString());
assertEquals("[{a:'b'}]", model.getList("f8", l).toString());
assertNull(model.getObjectList("f1"));
try { model.getObjectList("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f4"); fail(); } catch (InvalidDataConversionException e) {}
assertNull(model.getObjectList("f2a"));
assertNull(model.getObjectList("f3a"));
assertNull(model.getObjectList("f4a"));
assertNull(model.getObjectList("f5"));
assertNull(model.getObjectList("f6"));
assertNull(model.getObjectList("f7"));
assertNull(model.getObjectList("f8"));
assertEquals("[{a:'b'}]", model.getObjectList("f1", l).toString());
try { model.getObjectList("f2", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f3", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f4", l); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("[{a:'b'}]", model.getObjectList("f2a", l).toString());
assertEquals("[{a:'b'}]", model.getObjectList("f3a", l).toString());
assertEquals("[{a:'b'}]", model.getObjectList("f4a", l).toString());
assertEquals("[{a:'b'}]", model.getObjectList("f5", l).toString());
assertEquals("[{a:'b'}]", model.getObjectList("f6", l).toString());
assertEquals("[{a:'b'}]", model.getObjectList("f7", l).toString());
assertEquals("[{a:'b'}]", model.getObjectList("f8", l).toString());
((A)model.getRootObject()).init();
assertEquals("1", model.get("f1"));
assertEquals("2", model.get("f2").toString());
assertEquals("3", model.get("f3").toString());
assertEquals("true", model.get("f4").toString());
assertEquals("2", model.get("f2a").toString());
assertEquals("3", model.get("f3a").toString());
assertEquals("true", model.get("f4a").toString());
assertEquals("{f5a:'a'}", model.get("f5").toString());
assertEquals("[{f6a:'a'}]", model.get("f6").toString());
assertEquals("{f5a:'a'}", model.get("f7").toString());
assertEquals("[{f6a:'a'}]", model.get("f8").toString());
assertEquals("1", model.get("f1", "foo"));
assertEquals("2", model.get("f2", "foo").toString());
assertEquals("3", model.get("f3", "foo").toString());
assertEquals("true", model.get("f4", "foo").toString());
assertEquals("2", model.get("f2a", "foo").toString());
assertEquals("3", model.get("f3a", "foo").toString());
assertEquals("true", model.get("f4a", "foo").toString());
assertEquals("{f5a:'a'}", model.get("f5", "foo").toString());
assertEquals("[{f6a:'a'}]", model.get("f6", "foo").toString());
assertEquals("{f5a:'a'}", model.get("f7", "foo").toString());
assertEquals("[{f6a:'a'}]", model.get("f8", "foo").toString());
assertEquals("1", model.getString("f1"));
assertEquals("2", model.getString("f2"));
assertEquals("3", model.getString("f3"));
assertEquals("true", model.getString("f4"));
assertEquals("2", model.getString("f2a"));
assertEquals("3", model.getString("f3a"));
assertEquals("true", model.getString("f4a"));
assertEquals("{f5a:'a'}", model.getString("f5"));
assertEquals("[{f6a:'a'}]", model.getString("f6"));
assertEquals("{f5a:'a'}", model.getString("f7"));
assertEquals("[{f6a:'a'}]", model.getString("f8"));
assertEquals("1", model.getString("f1", "foo"));
assertEquals("2", model.getString("f2", "foo"));
assertEquals("3", model.getString("f3", "foo"));
assertEquals("true", model.getString("f4", "foo"));
assertEquals("2", model.getString("f2a", "foo"));
assertEquals("3", model.getString("f3a", "foo"));
assertEquals("true", model.getString("f4a", "foo"));
assertEquals("{f5a:'a'}", model.getString("f5", "foo"));
assertEquals("[{f6a:'a'}]", model.getString("f6", "foo"));
assertEquals("{f5a:'a'}", model.getString("f7", "foo"));
assertEquals("[{f6a:'a'}]", model.getString("f8", "foo"));
assertEquals(1, (int)model.getInt("f1"));
assertEquals(2, (int)model.getInt("f2"));
assertEquals(3, (int)model.getInt("f3"));
assertEquals(1, (int)model.getInt("f4"));
assertEquals(2, (int)model.getInt("f2a"));
assertEquals(3, (int)model.getInt("f3a"));
assertEquals(1, (int)model.getInt("f4a"));
try { model.getInt("f5"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f6"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f7"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f8"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals(1, (int)model.getInt("f1", 9));
assertEquals(2, (int)model.getInt("f2", 9));
assertEquals(3, (int)model.getInt("f3", 9));
assertEquals(1, (int)model.getInt("f4", 9));
assertEquals(2, (int)model.getInt("f2a", 9));
assertEquals(3, (int)model.getInt("f3a", 9));
assertEquals(1, (int)model.getInt("f4a", 9));
try { model.getInt("f5", 9); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f6", 9); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f7", 9); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f8", 9); fail(); } catch (InvalidDataConversionException e) {}
assertEquals(1, (long)model.getLong("f1"));
assertEquals(2, (long)model.getLong("f2"));
assertEquals(3, (long)model.getLong("f3"));
assertEquals(1, (long)model.getLong("f4"));
assertEquals(2, (long)model.getLong("f2a"));
assertEquals(3, (long)model.getLong("f3a"));
assertEquals(1, (long)model.getLong("f4a"));
try { model.getLong("f5"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getLong("f6"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getLong("f7"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getInt("f8"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals(1, (long)model.getLong("f1", 9l));
assertEquals(2, (long)model.getLong("f2", 9l));
assertEquals(3, (long)model.getLong("f3", 9l));
assertEquals(1, (long)model.getLong("f4", 9l));
assertEquals(2, (long)model.getLong("f2a", 9l));
assertEquals(3, (long)model.getLong("f3a", 9l));
assertEquals(1, (long)model.getLong("f4a", 9l));
try { model.getLong("f5", 9l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getLong("f6", 9l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getLong("f7", 9l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getLong("f8", 9l); fail(); } catch (InvalidDataConversionException e) {}
assertEquals(false, model.getBoolean("f1")); // String "1" equates to false.
assertEquals(true, model.getBoolean("f2"));
assertEquals(true, model.getBoolean("f3"));
assertEquals(true, model.getBoolean("f4"));
assertEquals(true, model.getBoolean("f2a"));
assertEquals(true, model.getBoolean("f3a"));
assertEquals(true, model.getBoolean("f4a"));
assertEquals(false, model.getBoolean("f5")); // "{a:'b'}" equates to false.
assertEquals(false, model.getBoolean("f6"));
assertEquals(false, model.getBoolean("f7"));
assertEquals(false, model.getBoolean("f8"));
assertEquals(false, model.getBoolean("f1", true)); // String "1" equates to false.
assertEquals(true, model.getBoolean("f2", true));
assertEquals(true, model.getBoolean("f3", true));
assertEquals(true, model.getBoolean("f4", true));
assertEquals(true, model.getBoolean("f2a", true));
assertEquals(true, model.getBoolean("f3a", true));
assertEquals(true, model.getBoolean("f4a", true));
assertEquals(false, model.getBoolean("f5", true)); // "{a:'b'}" equates to false.
assertEquals(false, model.getBoolean("f6", true));
assertEquals(false, model.getBoolean("f7", true));
assertEquals(false, model.getBoolean("f8", true));
try { model.getMap("f1"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f4"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f2a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f3a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f4a"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getMap("f5").toString());
try { model.getMap("f6"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getMap("f7").toString());
try { model.getMap("f8"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f1", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f2", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f3", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f4", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f2a", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f3a", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getMap("f4a", m); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getMap("f5", m).toString());
try { model.getMap("f6", m); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getMap("f7", m).toString());
try { model.getMap("f8", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f1"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f4"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f2a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f3a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f4a"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getObjectMap("f5").toString());
try { model.getObjectMap("f6"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getObjectMap("f7").toString());
try { model.getObjectMap("f8"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f1", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f2", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f3", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f4", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f2a", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f3a", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectMap("f4a", m); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getObjectMap("f5", m).toString());
try { model.getObjectMap("f6", m); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("{f5a:'a'}", model.getObjectMap("f7", m).toString());
try { model.getObjectMap("f8", m); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f1"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f4"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f2a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f3a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f4a"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("[{f5a:'a'}]", model.getList("f5").toString());
assertEquals("[{f6a:'a'}]", model.getList("f6").toString());
assertEquals("[{f5a:'a'}]", model.getList("f7").toString());
assertEquals("[{f6a:'a'}]", model.getList("f8").toString());
try { model.getList("f1", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f2", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f3", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f4", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f2a", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f3a", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getList("f4a", l); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("[{f5a:'a'}]", model.getList("f5", l).toString());
assertEquals("[{f6a:'a'}]", model.getList("f6", l).toString());
assertEquals("[{f5a:'a'}]", model.getList("f7", l).toString());
assertEquals("[{f6a:'a'}]", model.getList("f8", l).toString());
try { model.getObjectList("f1"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f2"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f3"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f4"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f2a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f3a"); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f4a"); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("[{f5a:'a'}]", model.getObjectList("f5").toString());
assertEquals("[{f6a:'a'}]", model.getObjectList("f6").toString());
assertEquals("[{f5a:'a'}]", model.getObjectList("f7").toString());
assertEquals("[{f6a:'a'}]", model.getObjectList("f8").toString());
try { model.getObjectList("f1", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f2", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f3", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f4", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f2a", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f3a", l); fail(); } catch (InvalidDataConversionException e) {}
try { model.getObjectList("f4a", l); fail(); } catch (InvalidDataConversionException e) {}
assertEquals("[{f5a:'a'}]", model.getObjectList("f5", l).toString());
assertEquals("[{f6a:'a'}]", model.getObjectList("f6", l).toString());
assertEquals("[{f5a:'a'}]", model.getObjectList("f7", l).toString());
assertEquals("[{f6a:'a'}]", model.getObjectList("f8", l).toString());
}
public static class A {
public String f1;
public int f2;
public long f3;
public boolean f4;
public Integer f2a;
public Long f3a;
public Boolean f4a;
public Map f5;
public List f6;
public ObjectMap f7;
public ObjectList f8;
public A init() {
f1 = "1";
f2 = 2;
f3 = 3l;
f4 = true;
f2a = 2;
f3a = 3l;
f4a = true;
try {
f5 = new ObjectMap("{f5a:'a'}");
f6 = new ObjectList("[{f6a:'a'}]");
f7 = new ObjectMap("{f5a:'a'}");
f8 = new ObjectList("[{f6a:'a'}]");
} catch (ParseException e) {
throw new RuntimeException(e);
}
return this;
}
}
//====================================================================================================
// invokeMethod(String url, String method, String args)
//====================================================================================================
@Test
public void testInvokeMethod() throws Exception {
PojoRest model = new PojoRest(new AddressBook().init());
assertEquals("Person(name=Bill Clinton,age=65)", model.invokeMethod("0", "toString", ""));
model = new PojoRest(new AddressBook().init(), JsonParser.DEFAULT);
assertEquals("Person(name=Bill Clinton,age=65)", model.invokeMethod("0", "toString", ""));
assertEquals("NY", model.invokeMethod("0/addresses/0/state", "toString", ""));
assertNull(model.invokeMethod("1", "toString", ""));
}
//====================================================================================================
// getPublicMethods(String url)
//====================================================================================================
@Test
public void testGetPublicMethods() throws Exception {
PojoRest model = new PojoRest(new AddressBook().init());
assertTrue(JsonSerializer.DEFAULT_LAX.toString(model.getPublicMethods("0")).contains("'toString'"));
assertTrue(JsonSerializer.DEFAULT_LAX.toString(model.getPublicMethods("0/addresses/0/state")).contains("'toString'"));
assertNull(model.getPublicMethods("1"));
}
//====================================================================================================
// getClassMeta(String url)
//====================================================================================================
@Test
public void testGetClassMeta() throws Exception {
PojoRest model = new PojoRest(new AddressBook().init());
assertEquals("Person", model.getClassMeta("0").getInnerClass().getSimpleName());
assertEquals("String", model.getClassMeta("0/addresses/0/state").getInnerClass().getSimpleName());
assertNull(model.getClassMeta("1"));
assertNull(model.getClassMeta("0/addresses/1/state"));
}
}