package siena.embed;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import siena.Json;
import siena.Util;
public class JsonSerializerTest extends TestCase {
public void testSimple() throws Exception {
Date date = createDate();
Json data = JsonSerializer.serialize(new Contact("Alberto", "Gimeno", Gender.MALE, date, date));
Contact contact = (Contact) JsonSerializer.deserialize(Contact.class, data);
assertEquals("Alberto", contact.firstName);
assertNull(contact.foo);
assertEquals("Gimeno", contact.lastName);
assertEquals(Gender.MALE, contact.gender);
assertEquals(date, contact.birthday);
assertEquals(date, contact.rebirthday);
}
@SuppressWarnings("unchecked")
public void testMultiple() throws Exception {
Date date = createDate();
Map<String, Contact> contacts = new HashMap<String, Contact>();
contacts.put("id1", new Contact("Alberto", "Gimeno", Gender.MALE, date, date));
Json data = JsonSerializer.serialize(contacts);
contacts = (Map<String, Contact>) JsonSerializer.deserialize(Util.getField(User.class, "contacts"), data);
Contact contact = contacts.get("id1");
assertEquals("Alberto", contact.firstName);
assertNull(contact.foo);
assertEquals("Gimeno", contact.lastName);
assertEquals(Gender.MALE, contact.gender);
assertEquals(date, contact.birthday);
assertEquals(date, contact.rebirthday);
}
private Date createDate() {
try {
return new SimpleDateFormat("yyyy/MM/dd").parse("1984/07/16");
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
} @EmbeddedList class Contact {
@At(0) public String firstName;
@At(1) public String foo;
@At(2) public String lastName;
@At(3) public Gender gender;
@At(4) @Format("yyyy/MM/dd")
public Date birthday;
@At(5)
public Date rebirthday;
public Contact(String firstName, String lastName, Gender gender, Date birthday, Date rebirthday) {
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
this.birthday = birthday;
this.rebirthday = rebirthday;
}
public Contact() {
}
} class User {
public Map<String, Contact> contacts;
} enum Gender {
MALE, FEMALE;
}