// ***************************************************************************************************************************
// * 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"})
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 = JsonSerializer.create().ssq().addBeanTypes(false).addRootType().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 = SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
		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)JsonParser.create().dictionary(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 = JsonSerializer.create().ssq().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;
		}
	}

	@Bean(bpi="street,city,state,zip,isCurrent")
	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",bpi="name,age,addresses")
	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.getWithDefault("f1", "foo"));
		assertEquals(0, model.getWithDefault("f2", "foo"));
		assertEquals(0l, model.getWithDefault("f3", "foo"));
		assertEquals(false, model.getWithDefault("f4", "foo"));
		assertEquals("foo", model.getWithDefault("f2a", "foo"));
		assertEquals("foo", model.getWithDefault("f3a", "foo"));
		assertEquals("foo", model.getWithDefault("f4a", "foo"));
		assertEquals("foo", model.getWithDefault("f5", "foo"));
		assertEquals("foo", model.getWithDefault("f6", "foo"));
		assertEquals("foo", model.getWithDefault("f7", "foo"));
		assertEquals("foo", model.getWithDefault("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.getWithDefault("f1", "foo"));
		assertEquals("2", model.getWithDefault("f2", "foo").toString());
		assertEquals("3", model.getWithDefault("f3", "foo").toString());
		assertEquals("true", model.getWithDefault("f4", "foo").toString());
		assertEquals("2", model.getWithDefault("f2a", "foo").toString());
		assertEquals("3", model.getWithDefault("f3a", "foo").toString());
		assertEquals("true", model.getWithDefault("f4a", "foo").toString());
		assertEquals("{f5a:'a'}", model.getWithDefault("f5", "foo").toString());
		assertEquals("[{f6a:'a'}]", model.getWithDefault("f6", "foo").toString());
		assertEquals("{f5a:'a'}", model.getWithDefault("f7", "foo").toString());
		assertEquals("[{f6a:'a'}]", model.getWithDefault("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(SimpleJsonSerializer.DEFAULT.toString(model.getPublicMethods("0")).contains("'toString'"));
		assertTrue(SimpleJsonSerializer.DEFAULT.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"));
	}
}
