package org.aplikator.shared.rpc.marshaller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import org.aplikator.client.shared.descriptor.ActionDTO;
import org.aplikator.client.shared.descriptor.ApplicationDTO;
import org.aplikator.client.shared.descriptor.MenuDTO;
import org.aplikator.client.shared.rpc.marshaller.ActionDTOMarshaller;
import org.aplikator.client.shared.rpc.marshaller.ApplicationDTOMarshaller;
import org.aplikator.client.shared.rpc.marshaller.MenuDTOMarshaller;
import org.easymock.EasyMock;
import org.jboss.errai.marshalling.client.api.Marshaller;
import org.jboss.errai.marshalling.client.api.MarshallingSession;
import org.jboss.errai.marshalling.client.api.json.EJValue;
import org.jboss.errai.marshalling.client.marshallers.StringMarshaller;
import org.jboss.errai.marshalling.server.JSONDecoder;
import org.junit.Assert;
import junit.framework.TestCase;
public class ApplicationDTOMarshallerTest extends TestCase {
public static List<ActionDTO> aList1() {
List<ActionDTO> list = new ArrayList<ActionDTO>();
list.add(new ActionDTO("1", "locname-1", "token-1"));
list.add(new ActionDTO("2", "locname-2", "token-2"));
list.add(new ActionDTO("3", "locname-3", "token-3"));
list.add(new ActionDTO("4", "locname-4", "token-4"));
return list;
}
public static List<ActionDTO> aList2() {
List<ActionDTO> list = new ArrayList<ActionDTO>();
list.add(new ActionDTO("a", "locname-a", "token-a"));
list.add(new ActionDTO("b", "locname-b", "token-b"));
list.add(new ActionDTO("c", "locname-c", "token-c"));
list.add(new ActionDTO("d", "locname-d", "token-d"));
return list;
}
public static List<MenuDTO> mList() {
List<MenuDTO> list = new ArrayList<MenuDTO>();
MenuDTO mdto1 = new MenuDTO("one", "one-loc");
for (ActionDTO a : aList1()) {
mdto1.addAction(a);
}
list.add(mdto1);
MenuDTO mdto2 = new MenuDTO("two", "two-loc");
for (ActionDTO a : aList2()) {
mdto2.addAction(a);
}
list.add(mdto2);
return list;
}
public void testMarshall() {
ApplicationDTO apdto = new ApplicationDTO();
apdto.setBrand("Test-app-name");
apdto.setShowNavigation(true);
apdto.setDefaultAction("default-action");
for (MenuDTO m : mList()) {
apdto.addMenu(m);
}
apdto.setConfigString("config-key-1", "config-value-1");
apdto.setConfigString("config-key-2", "config-value-2");
apdto.setConfigString("config-key-3", "config-value-3");
apdto.setConfigString("config-key-4", "config-value-4");
MarshallingSession session = ctx();
ApplicationDTOMarshaller appDTOMArshaller = new ApplicationDTOMarshaller();
String marshalled = appDTOMArshaller.marshall(apdto, session);
EJValue encoded = JSONDecoder.decode(marshalled);
ApplicationDTO demarshalled = appDTOMArshaller.demarshall(encoded, session);
Assert.assertTrue(demarshalled.getBrand().equals("Test-app-name"));
Assert.assertTrue(demarshalled.isShowNavigation() == true);
Assert.assertTrue(demarshalled.getDefaultActionToken().equals("default-action"));
Assert.assertTrue(demarshalled.getMenus().size() == 2);
Assert.assertTrue(demarshalled.getMenus().get(0).getActions().size() == 4);
Assert.assertTrue(demarshalled.getMenus().get(1).getActions().size() == 4);
Assert.assertTrue(demarshalled.getConfig().keySet().size() == 4);
List<String> expectedKeys = new ArrayList<String>(Arrays.asList(
"config-key-1",
"config-key-2",
"config-key-3",
"config-key-4"
));
HashSet<String> haset = new HashSet<String>(demarshalled.getConfig().keySet());
while (!expectedKeys.isEmpty()) {
String o = expectedKeys.get(0);
Assert.assertTrue(haset.remove(o));
expectedKeys.remove(o);
}
Assert.assertTrue(expectedKeys.size() == 0);
Assert.assertTrue(haset.size() == 0);
}
@SuppressWarnings("unchecked")
private MarshallingSession ctx() {
MarshallingSession session = EasyMock.createMock(MarshallingSession.class);
ActionDTOMarshaller adtoMarsh = new ActionDTOMarshaller();
Object marsh = adtoMarsh;
EasyMock.expect(session.getMarshallerInstance(ActionDTO.class.getName())).andReturn((Marshaller<Object>) marsh).anyTimes();
MenuDTOMarshaller mdtoMarsh = new MenuDTOMarshaller();
marsh = mdtoMarsh;
EasyMock.expect(session.getMarshallerInstance(MenuDTO.class.getName())).andReturn((Marshaller<Object>) marsh).anyTimes();
StringMarshaller smarshaller = new StringMarshaller();
marsh = smarshaller;
EasyMock.expect(session.getMarshallerInstance(String.class.getName())).andReturn((Marshaller<Object>) marsh).anyTimes();
EasyMock.replay(session);
return session;
}
}