package xapi.model.test; import org.junit.Assert; import org.junit.Test; import xapi.collect.api.IntTo; import xapi.log.X_Log; import xapi.model.X_Model; import xapi.model.api.ModelKey; import xapi.model.content.ModelContent; import xapi.model.content.ModelText; import xapi.time.X_Time; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static xapi.model.X_Model.newKey; import com.google.gwt.reflect.shared.GwtReflect; import java.util.Arrays; public class ModelServiceGwtTest // extends GWTTestCase { @Test public void testKeySerialization_Empty() { final ModelKey key = X_Model.newKey("testkind"); final String serialized = X_Model.keyToString(key); final ModelKey asKey = X_Model.keyFromString(serialized); assertEquals(key, asKey); } @Test public void testKeySerialization_Simple() { final ModelKey key = X_Model.newKey("ns", "testkind"); final String serialized = X_Model.keyToString(key); final ModelKey asKey = X_Model.keyFromString(serialized); assertEquals(key, asKey); assertEquals("ns", key.getNamespace()); assertEquals("testkind", key.getKind()); assertEquals(null, key.getId()); } @Test public void testKeySerialization_Full() { final ModelKey key = X_Model.newKey("ns", "testkind", "id"); final String serialized = X_Model.keyToString(key); final ModelKey asKey = X_Model.keyFromString(serialized); assertEquals(key, asKey); assertEquals("ns", key.getNamespace()); assertEquals("testkind", key.getKind()); assertEquals("id", key.getId()); } @Test public void testKeySerialization_WithParent() { ModelKey key = X_Model.newKey("ns", "testkind", "id"); key = key.getChild("child", "123"); final String serialized = X_Model.keyToString(key); final ModelKey asKey = X_Model.keyFromString(serialized); assertEquals(key, asKey); assertEquals("ns", key.getNamespace()); assertEquals("child", key.getKind()); assertEquals("123", key.getId()); assertEquals("ns", key.getParent().getNamespace()); assertEquals("testkind", key.getParent().getKind()); assertEquals("id", key.getParent().getId()); } @Test public void testSimpleSerialization() { final ModelText text = X_Model.create(ModelText.class); final long time = System.currentTimeMillis(); text.setText("Hello World"); text.setTime(time); final String serialized = X_Model.serialize(ModelText.class, text); final ModelText asModel = X_Model.deserialize(ModelText.class, serialized); assertEquals(text, asModel); } @Test public void testSimpleSerialization_WithKey() { final ModelText text = X_Model.create(ModelText.class); text.setKey(X_Model.newKey("ns", "text", "id")); final long time = System.currentTimeMillis(); text.setText("Hello World"); text.setTime(time); final String serialized = X_Model.serialize(ModelText.class, text); final ModelText asModel = X_Model.deserialize(ModelText.class, serialized); assertEquals(text, asModel); assertNotNull("Deserialized model must have a key!", asModel.getKey()); // Because there is a key in the model, these objects should still be equal // if the values of the model changed. text.setText("different"); assertEquals(text, asModel); } @Test public void testComplexSerialization() { final ModelContent content = X_Model.create(ModelContent.class); final long time = System.currentTimeMillis(); content.setKey(newKey("content")); content.setText("Hello World"); content.setTime(time); final ModelContent[] array = GwtReflect.newArray(ModelContent.class, 1); array[0] = X_Model.create(ModelContent.class); content.setRelated(array); final String serialized = X_Model.serialize(ModelContent.class, content); final ModelContent asModel = X_Model.deserialize(ModelContent.class, serialized); assertEquals(content, asModel); } @Test public void testModelPersistence() { final ModelContent content = X_Model.create(ModelContent.class); final long time = System.currentTimeMillis(); content.setText("Hello World"); content.setTime(time); content.setKey(newKey("content")); X_Log.error(getClass(), "Original: ",content); final String serialized = X_Model.serialize(ModelContent.class, content); X_Log.error(getClass(), "Serialized: ",serialized); final ModelContent deserialized = X_Model.deserialize(ModelContent.class, serialized); X_Log.error(getClass(), "Deserialized: ",deserialized); X_Model.persist(content, received -> { try { X_Log.error("Received: ", received); X_Log.error("Sent: ", content); assertNotNull(received.getKey().getId()); content.setKey(received.getKey()); assertArrayEquals(content.getChildren(), received.getChildren()); assertArrayEquals(content.getRelated(), received.getRelated()); assertArrayEquals(content.getUpvotes(), received.getUpvotes()); assertArrayEquals(content.getDownvotes(), received.getDownvotes()); assertEquals(content.getPermaLink(), received.getPermaLink()); assertEquals(0, content.getTime(), received.getTime()); assertEquals(content.getText(), received.getText()); assertEquals(content.getAuthor(), received.getAuthor()); final String reserialized = X_Model.serialize(ModelContent.class, received); final String withKey = X_Model.serialize(ModelContent.class, content); assertEquals(withKey, reserialized); } finally { // finishTest(); } }); X_Time.trySleep(2000, 0); // delayTestFinish(5000); } private <T> void assertArrayEquals(T[] expected, T[] received) { assertEquals(Arrays.asList(expected), Arrays.asList(received)); } @Test public void testModelWithEverything() { final ModelWithEverything model = X_Model.create(ModelWithEverything.class); assertNotNull(model.getModelArray()); assertNotNull(model.getIntTo()); final IntTo intTo = model.getIntTo(); // Lets make sure the IntTo generated has the correct component type. intTo.add("String"); try { intTo.add(1); Assert.fail("Expected assertion error; either you are not running with assertions enabled; -ea, " + "or the IntTo created for this model does not have the correct component type"); } catch (AssertionError expected){ } // for (String property : model.getPropertyNames()) { // X_Log.error(getClass(), property, model.getProperty(property)); // } } // // /** // * @see com.google.gwt.junit.client.GWTTestCase#getModuleName() // */ // @Override // public String getModuleName() { // return "xapi.test.ModelTest"; // } }