/* * $Id: BeanMixin.java 1075 2009-05-07 06:41:19Z lhoriman $ * $URL: https://subetha.googlecode.com/svn/branches/resin/rtest/src/org/subethamail/rtest/util/BeanMixin.java $ */ package com.googlecode.objectify.test; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.Test; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; /** * This is a set of tests that clarify exactly what happens when you put different * kinds of entities into the datastore. They aren't really tests of Objectify, * they just help us understand the underlying behavior. * * @author Jeff Schnitzer <jeff@infohazard.org> */ public class DatastoreEntityTests extends TestBase { /** */ @SuppressWarnings("unused") private static Logger log = LoggerFactory.getLogger(DatastoreEntityTests.class); public static class Thing { public String name; public int age; } @SuppressWarnings("serial") public static class SerializableThing extends Thing implements Serializable { } /** * What happens when you put an object in an Entity? */ @Test public void testObjectProperty() throws Exception { Thing thing = new Thing(); thing.name = "foo"; thing.age = 10; Entity ent = new Entity("Test"); try { ent.setProperty("thing", thing); assert false; } catch (IllegalArgumentException ex) {} // DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); // ds.put(ent); // // Entity fetched = ds.get(ent.getKey()); // Thing fetchedThing = (Thing)fetched.getProperty("thing"); // assert thing.name.equals(fetchedThing.name); // assert thing.age == fetchedThing.age; } /** * What happens if it is serializable? */ @Test public void testSerializableObjectProperty() throws Exception { SerializableThing thing = new SerializableThing(); thing.name = "foo"; thing.age = 10; Entity ent = new Entity("Test"); try { ent.setProperty("thing", thing); assert false; } catch (IllegalArgumentException ex) {} // DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); // ds.put(ent); // // Entity fetched = ds.get(ent.getKey()); // SerializableThing fetchedThing = (SerializableThing)fetched.getProperty("thing"); // assert thing.name.equals(fetchedThing.name); // assert thing.age == fetchedThing.age; } /** * What happens when you put empty collections in an Entity? */ @Test public void testEmptyCollectionInEntity() throws Exception { Entity ent = new Entity("Test"); List<Object> empty = new ArrayList<Object>(); ent.setProperty("empty", empty); DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); ds.put(ent); Entity fetched = ds.get(ent.getKey()); System.out.println(fetched); Object whatIsIt = fetched.getProperty("empty"); assert whatIsIt == null; } /** * What happens when you put a single null in a collection in an Entity? */ @SuppressWarnings("unchecked") @Test public void testCollectionContainingNullInEntity() throws Exception { Entity ent = new Entity("Test"); List<Object> hasNull = new ArrayList<Object>(); hasNull.add(null); ent.setProperty("hasNull", hasNull); DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); ds.put(ent); Entity fetched = ds.get(ent.getKey()); System.out.println(fetched); Collection<Object> whatIsIt = (Collection<Object>)fetched.getProperty("hasNull"); assert whatIsIt != null; assert whatIsIt.size() == 1; assert whatIsIt.iterator().next() == null; } }