/*
* Copyright 2014 Grow Bit
*
* Licensed 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.turbogwt.net.http.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.turbogwt.core.collections.client.JsArrayList;
import org.turbogwt.core.future.shared.DoneCallback;
import org.turbogwt.net.http.client.header.ContentTypeHeader;
import org.turbogwt.net.http.client.mock.ResponseMock;
import org.turbogwt.net.http.client.mock.ServerStub;
import org.turbogwt.net.serialization.shared.Json;
/**
* @author Danilo Reinert
*/
public class GeneratedJsonSerdesTest extends GWTTestCase {
@Override
public String getModuleName() {
return "org.turbogwt.net.http.HttpTest";
}
public void testGeneratedSingleDeserialization() {
final Animal stuart = new Animal("Stuart", 3);
final Requestor requestor = getRequestor();
final String uri = "/animal";
final String serialized = "{\"name\":\"Stuart\",\"age\":3}";
ServerStub.responseFor(uri, ResponseMock.of(serialized, 200, "OK",
new ContentTypeHeader("application/json")));
final boolean[] callbackDoneCalled = new boolean[1];
requestor.request(uri).get(Animal.class)
.done(new DoneCallback<Animal>() {
@Override
public void onDone(Animal animal) {
callbackDoneCalled[0] = true;
assertEquals(stuart, animal);
}
});
ServerStub.triggerPendingRequest();
assertTrue(callbackDoneCalled[0]);
}
public void testGeneratedArrayListDeserialization() {
final Animal stuart = new Animal("Stuart", 3);
final Animal march = new Animal("March", 5);
final List<Animal> list = new ArrayList<Animal>();
list.add(stuart); list.add(march);
final Requestor requestor = getRequestor();
final String uri = "/animals";
final String serialized = "[{\"name\":\"Stuart\",\"age\":3},{\"name\":\"March\",\"age\":5}]";
ServerStub.responseFor(uri, ResponseMock.of(serialized, 200, "OK",
new ContentTypeHeader("application/json")));
final boolean[] callbackDoneCalled = new boolean[1];
requestor.request(uri).get(Animal.class, ArrayList.class)
.done(new DoneCallback<Collection<Animal>>() {
@Override
public void onDone(Collection<Animal> animals) {
callbackDoneCalled[0] = true;
ArrayList<Animal> arrayList = (ArrayList<Animal>) animals;
assertTrue(Arrays.equals(list.toArray(), arrayList.toArray()));
}
});
ServerStub.triggerPendingRequest();
assertTrue(callbackDoneCalled[0]);
}
public void testGeneratedCustomListDeserialization() {
final Animal stuart = new Animal("Stuart", 3);
final Animal march = new Animal("March", 5);
final List<Animal> list = new ArrayList<Animal>();
list.add(stuart); list.add(march);
final Requestor requestor = getRequestor();
final String uri = "/animals";
final String serialized = "[{\"name\":\"Stuart\",\"age\":3},{\"name\":\"March\",\"age\":5}]";
ServerStub.responseFor(uri, ResponseMock.of(serialized, 200, "OK",
new ContentTypeHeader("application/json")));
final boolean[] callbackDoneCalled = new boolean[1];
requestor.request(uri).get(Animal.class, JsArrayList.class)
.done(new DoneCallback<Collection<Animal>>() {
@Override
public void onDone(Collection<Animal> animals) {
callbackDoneCalled[0] = true;
JsArrayList<Animal> arrayList = (JsArrayList<Animal>) animals;
assertTrue(Arrays.equals(list.toArray(), arrayList.toArray()));
}
});
ServerStub.triggerPendingRequest();
assertTrue(callbackDoneCalled[0]);
}
public void testGeneratedSingleSerialization() {
final Animal stuart = new Animal("Stuart", 3);
final Requestor requestor = getRequestor();
final String uri = "/animal";
final String serialized = "{\"name\":\"Stuart\",\"age\":3}";
ServerStub.responseFor(uri, ResponseMock.of(null, 200, "OK",
new ContentTypeHeader("application/json")));
final boolean[] callbackDoneCalled = new boolean[1];
requestor.request(uri).payload(stuart).post()
.done(new DoneCallback<Void>() {
@Override
public void onDone(Void ignored) {
callbackDoneCalled[0] = true;
}
});
ServerStub.triggerPendingRequest();
assertTrue(callbackDoneCalled[0]);
assertEquals(serialized, ServerStub.getRequestData(uri).getData());
}
public void testGeneratedArrayListSerialization() {
final Animal stuart = new Animal("Stuart", 3);
final Animal march = new Animal("March", 5);
final List<Animal> list = new ArrayList<Animal>();
list.add(stuart); list.add(march);
final Requestor requestor = getRequestor();
final String uri = "/animals";
final String serialized = "[{\"name\":\"Stuart\",\"age\":3},{\"name\":\"March\",\"age\":5}]";
ServerStub.responseFor(uri, ResponseMock.of(null, 200, "OK",
new ContentTypeHeader("application/json")));
final boolean[] callbackDoneCalled = new boolean[1];
requestor.request(uri).payload(list).post()
.done(new DoneCallback<Void>() {
@Override
public void onDone(Void ignored) {
callbackDoneCalled[0] = true;
}
});
ServerStub.triggerPendingRequest();
assertTrue(callbackDoneCalled[0]);
assertEquals(serialized, ServerStub.getRequestData(uri).getData());
}
public void testGeneratedCustomListSerialization() {
final Animal stuart = new Animal("Stuart", 3);
final Animal march = new Animal("March", 5);
final List<Animal> list = new JsArrayList<Animal>();
list.add(stuart); list.add(march);
final Requestor requestor = getRequestor();
final String uri = "/animals";
final String serialized = "[{\"name\":\"Stuart\",\"age\":3},{\"name\":\"March\",\"age\":5}]";
ServerStub.responseFor(uri, ResponseMock.of(null, 200, "OK",
new ContentTypeHeader("application/json")));
final boolean[] callbackDoneCalled = new boolean[1];
requestor.request(uri).payload(list).post()
.done(new DoneCallback<Void>() {
@Override
public void onDone(Void ignored) {
callbackDoneCalled[0] = true;
}
});
ServerStub.triggerPendingRequest();
assertTrue(callbackDoneCalled[0]);
assertEquals(serialized, ServerStub.getRequestData(uri).getData());
}
private Requestor getRequestor() {
ServerStub.clearStub();
return GWT.create(Requestor.class);
}
/**
* Class to auto-generate serializer.
*/
@Json({"app*/json*", "*/javascript*" })
public static class Animal {
private String name;
private Integer age;
public Animal() {
}
public Animal(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Animal)) {
return false;
}
final Animal animal = (Animal) o;
if (age != null ? !age.equals(animal.age) : animal.age != null) {
return false;
}
if (name != null ? !name.equals(animal.name) : animal.name != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (age != null ? age.hashCode() : 0);
return result;
}
}
}