package org.swellrt.beta.model.remote;
import java.util.ArrayList;
import java.util.function.Consumer;
import org.swellrt.beta.common.SException;
import org.swellrt.beta.model.SEvent;
import org.swellrt.beta.model.SHandler;
import org.swellrt.beta.model.SList;
import org.swellrt.beta.model.SMap;
import org.swellrt.beta.model.SPrimitive;
public class SListRemoteTest extends SNodeRemoteAbstractTest {
@SuppressWarnings("rawtypes")
public void testAddOperation() throws SException {
SList localList = SList.create();
localList.add("hello world");
localList.add(12345);
localList.add(false);
SMap localMap = SMap.create();
localMap.put("key0", "value0");
localMap.put("key1", "value1");
localList.add(localMap);
object.put("list", localList);
SListRemote remoteList = (SListRemote) object.get("list");
assertNotNull(remoteList);
assertEquals(4, remoteList.size());
assertEquals("hello world", (String) remoteList.get(0));
assertEquals(12345, ((Integer) remoteList.get(1)).intValue());
assertEquals(false, ((Boolean) remoteList.get(2)).booleanValue());
assertTrue(remoteList.get(3) instanceof SMap);
SMapRemote remoteMap = (SMapRemote) remoteList.get(3);
assertEquals("value0", remoteMap.get("key0"));
assertEquals("value1", remoteMap.get("key1"));
assertEquals(3, remoteList.indexOf(remoteMap));
remoteList.values().forEach(new Consumer<SNodeRemote>() {
int counter = 0;
@Override
public void accept(SNodeRemote t) {
switch(counter++) {
case 0:
assertEquals("hello world", SPrimitive.asString(t));
break;
case 1:
assertEquals((int) 12345, (int) SPrimitive.asInt(t));
break;
case 2:
assertEquals((boolean) false, (boolean) SPrimitive.asBoolean(t));
break;
case 3:
assertTrue(t instanceof SMap);
break;
}
}
});
}
@SuppressWarnings("rawtypes")
public void testRemoveOperation() throws SException {
SList localList = SList.create();
localList.add("hello world");
localList.add(12345);
localList.add(false);
SMap localMap = SMap.create();
localMap.put("key0", "value0");
localMap.put("key1", "value1");
localList.add(localMap);
object.put("list", localList);
SList remoteList = (SList) object.get("list");
assertEquals(4, remoteList.size());
// Remove first
remoteList.remove(0);
assertEquals(3, remoteList.size());
assertEquals(12345, ((Integer) remoteList.get(0)).intValue());
// Remove last
remoteList.remove(2);
assertEquals(2, remoteList.size());
assertEquals(12345, ((Integer) remoteList.get(0)).intValue());
assertEquals(false, ((Boolean) remoteList.get(1)).booleanValue());
}
@SuppressWarnings("rawtypes")
public void testClearOperation() throws SException {
SList localList = SList.create();
localList.add("hello world");
localList.add(12345);
localList.add(false);
SMap localMap = SMap.create();
localMap.put("key0", "value0");
localMap.put("key1", "value1");
localList.add(localMap);
object.put("list", localList);
SList remoteList = (SList) object.get("list");
remoteList.clear();
assertEquals(0, remoteList.size());
assertTrue(remoteList.isEmpty());
}
@SuppressWarnings("rawtypes")
public void testEvents() throws SException, InterruptedException {
SList localList = SList.create();
localList.add("hello world");
localList.add(12345);
localList.add(false);
SMap localMap = SMap.create();
localMap.put("key0", "value0");
localMap.put("key1", "value1");
localList.add(localMap);
object.put("list", localList);
SListRemote remoteList = (SListRemote) object.get("list");
final ArrayList<SEvent> recvEvents = new ArrayList<SEvent>();
SHandler eventHandler = new SHandler() {
@Override
public boolean exec(SEvent e) {
recvEvents.add(e);
synchronized (this) {
if (recvEvents.size() == 4)
notifyAll();
}
return false;
}
};
remoteList.listen(eventHandler);
localMap = SMap.create();
localMap.put("key0", "value0");
localMap.put("key1", "value1");
remoteList.add(localMap);
remoteList.remove(1).remove(1);
remoteList.add("some words");
synchronized (eventHandler) {
eventHandler.wait(1000);
}
assertEquals(4, remoteList.size());
assertEquals(4, recvEvents.size());
assertEquals(SEvent.ADDED_VALUE, recvEvents.get(0).getType());
assertTrue(recvEvents.get(0).getTarget() instanceof SList);
assertTrue(recvEvents.get(0).getValue() instanceof SMap);
assertEquals(SEvent.REMOVED_VALUE, recvEvents.get(1).getType());
assertTrue(recvEvents.get(1).getTarget() instanceof SList);
assertEquals((int) 12345, (int) SPrimitive.asInt(recvEvents.get(1).getValue()));
assertEquals(SEvent.REMOVED_VALUE, recvEvents.get(2).getType());
assertTrue(recvEvents.get(2).getTarget() instanceof SList);
assertEquals((boolean) false, (boolean) SPrimitive.asBoolean(recvEvents.get(2).getValue()));
assertEquals(SEvent.ADDED_VALUE, recvEvents.get(3).getType());
assertTrue(recvEvents.get(3).getTarget() instanceof SList);
assertEquals("some words", SPrimitive.asString(recvEvents.get(3).getValue()));
}
}