package com.gwtmobile.persistence.test.client;
import java.util.Date;
import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.junit.client.GWTTestCase;
import com.gwtmobile.persistence.client.Callback;
import com.gwtmobile.persistence.client.Collection;
import com.gwtmobile.persistence.client.CollectionCallback;
import com.gwtmobile.persistence.client.Entity;
import com.gwtmobile.persistence.client.Persistence;
import com.gwtmobile.persistence.client.ScalarCallback;
import com.gwtmobile.persistence.test.domain.Category;
import com.gwtmobile.persistence.test.domain.Tag;
import com.gwtmobile.persistence.test.domain.Task;
public class TestPersistence extends GWTTestCase {
Entity<Task> taskEntity;
Entity<Tag> tagEntity;
Entity<Category> categoryEntity;
@Override
public String getModuleName() {
return "com.gwtmobile.persistence.test.gwtmobile_persistence_test";
}
public void testList() {
setupTest(new Callback() {
public void onSuccess() {
Collection<Task> allTasks = taskEntity.all();
allTasks.list(new CollectionCallback<Task>() {
public void onSuccess(Task[] results) {
assertEquals(5, results.length);
tearDownTest();
}
});
}
});
}
public void testListEach() {
setupTest(new Callback() {
int count = 0;
public void onSuccess() {
Collection<Task> allTasks = taskEntity.all();
allTasks.each(new ScalarCallback<Task>() {
public void onSuccess(Task result) {
count++;
if (count == 5) {
tearDownTest();
}
}
});
}
});
}
public void testListLimits() {
setupTest(new Callback() {
public void onSuccess() {
Collection<Task> limit3 = taskEntity.all().limit(3);
limit3.list(new CollectionCallback<Task>() {
public void onSuccess(Task[] results) {
assertEquals(3, results.length);
tearDownTest();
}
});
}
});
}
public void testListOrder() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().order("Name", false).one(
new ScalarCallback<Task>() {
public void onSuccess(Task result) {
assertEquals("Task4", result.getName());
tearDownTest();
}
});
}
});
}
public void testFilterChar() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Alphabet", ">", 'A').count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(2, result.intValue());
tearDownTest();
}
});
}
});
}
public void testFilterBoolean() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Done", "=", true).count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(3, result.intValue());
tearDownTest();
}
});
}
});
}
public void testFilterInteger() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Priority", ">=", 4).count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(1, result.intValue());
tearDownTest();
}
});
}
});
}
public void testFilterDouble() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Profit", ">", 1.0).count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(2, result.intValue());
tearDownTest();
}
});
}
});
}
public void testFilterString() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Name", "=", "Task2").count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(1, result.intValue());
tearDownTest();
}
});
}
});
}
public void testFilterDate() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("CompleteDate", "<", new Date()).count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(3, result.intValue());
tearDownTest();
}
});
}
});
}
public void testEntityFindByChar() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.findBy(null, "Alphabet", 'C', new ScalarCallback<Task>(){
@Override
public void onSuccess(final Task result1) {
assertNotNull(result1);
System.out.println(result1.getAlphabet());
taskEntity.load(null, result1.getId(), new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result2) {
assertNotNull(result2);
assertEquals(result1.getAlphabet(), result2.getAlphabet());
tearDownTest();
}
});
}});
}
});
}
public void testEntityFindByDate() {
setupTest(new Callback() {
@SuppressWarnings("deprecation")
public void onSuccess() {
taskEntity.findBy(null, "CompleteDate", new Date("2010/12/01"), new ScalarCallback<Task>(){
@Override
public void onSuccess(final Task result1) {
assertNotNull(result1);
System.out.println(result1.getCompleteDate().toString());
taskEntity.load(null, result1.getId(), new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result2) {
assertNotNull(result2);
assertEquals(result1.getCompleteDate(), result2.getCompleteDate());
tearDownTest();
}
});
}});
}
});
}
public void testEntityFindByInteger() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.findBy(null, "Priority", 2, new ScalarCallback<Task>(){
@Override
public void onSuccess(final Task result1) {
assertNotNull(result1);
System.out.println(result1.getPriority());
taskEntity.load(null, result1.getId(), new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result2) {
assertNotNull(result2);
assertEquals(result1.getPriority(), result2.getPriority());
tearDownTest();
}
});
}});
}
});
}
public void testEntityFindByDouble() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.findBy(null, "Profit", 24.68, new ScalarCallback<Task>(){
@Override
public void onSuccess(final Task result1) {
assertNotNull(result1);
System.out.println(result1.getProfit());
taskEntity.load(null, result1.getId(), new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result2) {
assertNotNull(result2);
assertEquals(result1.getProfit(), result2.getProfit());
tearDownTest();
}
});
}});
}
});
}
public void testEntityFindByString() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.findBy(null, "Name", "Task3", new ScalarCallback<Task>(){
@Override
public void onSuccess(final Task result1) {
assertNotNull(result1);
System.out.println(result1.getName());
taskEntity.load(null, result1.getId(), new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result2) {
assertNotNull(result2);
assertEquals(result1.getName(), result2.getName());
tearDownTest();
}
});
}});
}
});
}
public void testEntityFindByBoolean() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.findBy(null, "Done", true, new ScalarCallback<Task>(){
@Override
public void onSuccess(final Task result1) {
assertNotNull(result1);
System.out.println(result1.getDone());
taskEntity.load(null, result1.getId(), new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result2) {
assertNotNull(result2);
assertEquals(result1.getDone(), result2.getDone());
tearDownTest();
}
});
}});
}
});
}
public void testInstanceId() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().one(new ScalarCallback<Task>() {
@Override
public void onSuccess(Task result) {
System.out.print(result.getId());
assertEquals(32, result.getId().length());
tearDownTest();
}
});
}
});
}
public void testInstanceFetch() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
results[0].fetch(null, categoryEntity, new ScalarCallback<Category>() {
@Override
public void onSuccess(Category instance) {
System.out.print(instance.getName());
tearDownTest();
}
});
}
});
}
});
}
public void testInstanceSelectJSON() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
results[0].selectJSON(null, new String[] {"Name", "Description"}, new ScalarCallback<String>() {
@Override
public void onSuccess(String jsonDump) {
System.out.print(jsonDump);
tearDownTest();
}
});
}
});
}
});
}
public void testDumpAndLoad() {
setupTest(new Callback() {
public void onSuccess() {
Persistence.dumpToJson(null, new Entity[] {tagEntity, categoryEntity}, new ScalarCallback<String>() {
@Override
public void onSuccess(final String jsonDump) {
System.out.print(jsonDump);
destroyAllData(new Callback() {
@Override
public void onSuccess() {
Persistence.loadFromJson(null, jsonDump, new Callback() {
@Override
public void onSuccess() {
tagEntity.all().count(new ScalarCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
assertEquals(1, result.intValue());
tearDownTest();
}
});
}
});
}
});
}
});
}
});
}
public void testPropertyFilterChar() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Alphabet", "=", 'A')
.or(Persistence.newPropertyFilter("Alphabet", "=", 'C'))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(2, results.length);
tearDownTest();
}
});
}
});
}
public void testPropertyFilterBoolean() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Name", "=", "Task1")
.or(Persistence.newPropertyFilter("Done", "=", true))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(4, results.length);
tearDownTest();
}
});
}
});
}
public void testPropertyFilterInteger() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Done", "!=", true)
.or(Persistence.newPropertyFilter("Priority", ">", 2))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(3, results.length);
tearDownTest();
}
});
}
});
}
public void testPropertyFilterDouble() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Priority", ">", 2)
.or(Persistence.newPropertyFilter("Profit", ">", 24.6))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(2, results.length);
tearDownTest();
}
});
}
});
}
public void testPropertyFilterString() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Profit", ">", 24.1)
.or(Persistence.newPropertyFilter("Name", "=", "Task1"))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(3, results.length);
tearDownTest();
}
});
}
});
}
public void testPropertyFilterDate() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Alphabet", "=", 'A')
.or(Persistence.newPropertyFilter("CompleteDate", "<", new Date()))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(3, results.length);
tearDownTest();
}
});
}
});
}
public void testOrFilter() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.all().filter("Alphabet", "=", 'A')
.or(Persistence.newOrFilter(
Persistence.newPropertyFilter("Alphabet", "=", 'C'),
Persistence.newPropertyFilter("Alphabet", "=", 'E')))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(3, results.length);
tearDownTest();
}
});
}
});
}
public void testAndFilter() {
setupTest(new Callback() {
@SuppressWarnings("deprecation")
public void onSuccess() {
taskEntity.all().filter("Alphabet", ">", 'C')
.and(Persistence.newAndFilter(
Persistence.newPropertyFilter("Done", "=", true),
Persistence.newPropertyFilter("CompleteDate", ">", new Date("2010/12/01"))))
.list(new CollectionCallback<Task>() {
@Override
public void onSuccess(Task[] results) {
assertEquals(1, results.length);
tearDownTest();
}
});
}
});
}
public void testIndex() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.index("Name");
Persistence.schemaSync(new Callback() {
@Override
public void onSuccess() {
tearDownTest();
}
});
}
});
}
public void testIndexUnique() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.index("Name", true);
Persistence.schemaSync(new Callback() {
@Override
public void onSuccess() {
tearDownTest();
}
});
}
});
}
public void testIndexMultiCols() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.index(new String[] {"Name", "Done"});
Persistence.schemaSync(new Callback() {
@Override
public void onSuccess() {
tearDownTest();
}
});
}
});
}
public void testIndexMultiColsUnique() {
setupTest(new Callback() {
public void onSuccess() {
taskEntity.index(new String[] {"Name", "Done"}, true);
Persistence.schemaSync(new Callback() {
@Override
public void onSuccess() {
tearDownTest();
}
});
}
});
}
private void setupTest(final Callback callback) {
Persistence.connect("MyDB", "My DB", 5 * 1024 * 1024);
Persistence.setAutoAdd(true);
taskEntity = GWT.create(Task.class);
tagEntity = GWT.create(Tag.class);
categoryEntity = GWT.create(Category.class);
Persistence.schemaSync(new Callback() {
@SuppressWarnings("deprecation")
public void onSuccess()
{
destroyAllData(new Callback() {
@Override
public void onSuccess() {
final Category c = categoryEntity.newInstance();
c.setName("Main");
final Tag tag = tagEntity.newInstance();
tag.setName("Urgent");
for (int i = 0; i < 5; i++) {
Task t = taskEntity.newInstance();
t.setName("Task" + Integer.toString(i));
t.setDescription("Task No #" + Integer.toString(i));
if (i % 2 == 0) {
t.setDone(true);
t.setCompleteDate(new Date(2010 - 1900, 12 - 1, 1 + i));
t.setPriority(i);
t.setPercentage((float)i / 10);
t.setProfit((double)i * 12.34);
t.setAlphabet((char) ('A' + i));
t.setJson((JSONObject) JSONParser.parse("{\"symbol\": \"ABC\", \"price\": 96.204659543522}"));
}
t.setCategory(c);
t.getTags().add(tag);
}
Persistence.flush(callback);
}
});
}
});
delayTestFinish(5000);
}
private void destroyAllData(final Callback callback) {
taskEntity.all().destroyAll(new Callback() {
@Override
public void onSuccess() {
tagEntity.all().destroyAll(new Callback() {
@Override
public void onSuccess() {
categoryEntity.all().destroyAll(new Callback() {
@Override
public void onSuccess() {
Persistence.flush(callback);
}
});
}
});
}
});
}
private void tearDownTest() {
Persistence.reset(new Callback() {
@Override
public void onSuccess() {
finishTest();
}
});
}
}