diff --git a/src/main/java/me/mrletsplay/shareclientcore/connection/DummyConnection.java b/src/main/java/me/mrletsplay/shareclientcore/connection/DummyConnection.java index 4bb0a87..63635cd 100644 --- a/src/main/java/me/mrletsplay/shareclientcore/connection/DummyConnection.java +++ b/src/main/java/me/mrletsplay/shareclientcore/connection/DummyConnection.java @@ -1,9 +1,31 @@ package me.mrletsplay.shareclientcore.connection; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + import me.mrletsplay.shareclientcore.connection.message.Message; public class DummyConnection implements RemoteConnection { + private int siteID; + private Consumer sendMessageHandler; + private List listeners; + + public DummyConnection(int siteID, Consumer sendMessageHandler) { + this.siteID = siteID; + this.sendMessageHandler = sendMessageHandler; + this.listeners = new ArrayList<>(); + } + + public DummyConnection(int siteID) { + this(siteID, null); + } + + public void setSendMessageHandler(Consumer sendMessageHandler) { + this.sendMessageHandler = sendMessageHandler; + } + @Override public void connect(String sessionID) throws ConnectionException { @@ -16,22 +38,28 @@ public class DummyConnection implements RemoteConnection { @Override public int getSiteID() { - return 0; + return siteID; } @Override public void send(Message message) { + if(sendMessageHandler != null) { + sendMessageHandler.accept(message); + } + } + public void receive(Message message) { + listeners.forEach(l -> l.onMessage(message)); } @Override public void addListener(MessageListener listener) { - + listeners.add(listener); } @Override public void removeListener(MessageListener listener) { - + listeners.remove(listener); } @Override diff --git a/src/test/java/me/mrletsplay/shareclientcore/DocumentTest.java b/src/test/java/me/mrletsplay/shareclientcore/DocumentTest.java index 036d2b8..8835f66 100644 --- a/src/test/java/me/mrletsplay/shareclientcore/DocumentTest.java +++ b/src/test/java/me/mrletsplay/shareclientcore/DocumentTest.java @@ -12,7 +12,7 @@ public class DocumentTest { @Test public void testLocalInsert() { - SharedDocument doc = new SharedDocument(new DummyConnection(), "test"); + SharedDocument doc = new SharedDocument(new DummyConnection(0), "test"); doc.localInsert(0, "Hello"); assertEquals("Hello", doc.getContentsAsString()); doc.localInsert(5, " World"); @@ -23,7 +23,7 @@ public class DocumentTest { @Test public void testLocalInsertInvalidIndexFails() { - SharedDocument doc = new SharedDocument(new DummyConnection(), "test"); + SharedDocument doc = new SharedDocument(new DummyConnection(0), "test"); doc.localInsert(0, "Hello"); assertThrows(IllegalArgumentException.class, () -> doc.localInsert(-1, "Test")); assertThrows(IllegalArgumentException.class, () -> doc.localInsert(6, "Test")); @@ -31,7 +31,7 @@ public class DocumentTest { @Test public void testLocalDelete() { - SharedDocument doc = new SharedDocument(new DummyConnection(), "test"); + SharedDocument doc = new SharedDocument(new DummyConnection(0), "test"); doc.localInsert(0, "Hello World!"); doc.localDelete(5, 6); assertEquals("Hello!", doc.getContentsAsString()); @@ -39,7 +39,7 @@ public class DocumentTest { @Test public void testLocalDeleteInvalidIndexFails() { - SharedDocument doc = new SharedDocument(new DummyConnection(), "test"); + SharedDocument doc = new SharedDocument(new DummyConnection(0), "test"); doc.localInsert(0, "Hello World!"); assertThrows(IllegalArgumentException.class, () -> doc.localDelete(-1, 10)); assertThrows(IllegalArgumentException.class, () -> doc.localDelete(12, 1)); diff --git a/src/test/java/me/mrletsplay/shareclientcore/SharingTest.java b/src/test/java/me/mrletsplay/shareclientcore/SharingTest.java new file mode 100644 index 0000000..a2cd7e8 --- /dev/null +++ b/src/test/java/me/mrletsplay/shareclientcore/SharingTest.java @@ -0,0 +1,37 @@ +package me.mrletsplay.shareclientcore; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import me.mrletsplay.shareclientcore.connection.DummyConnection; +import me.mrletsplay.shareclientcore.document.SharedDocument; + +public class SharingTest { + + @Test + public void testSharedDocument() { + DummyConnection a = new DummyConnection(0); + DummyConnection b = new DummyConnection(1); + + a.setSendMessageHandler(m -> b.receive(m)); + b.setSendMessageHandler(m -> a.receive(m)); + + SharedDocument sharedA = new SharedDocument(a, "doc"); + SharedDocument sharedB = new SharedDocument(b, "doc"); + + a.addListener(sharedA); + b.addListener(sharedB); + + sharedA.localInsert(0, "Hello World!"); + + assertEquals("Hello World!", sharedA.getContentsAsString()); + assertEquals("Hello World!", sharedB.getContentsAsString()); + + sharedB.localInsert(0, "This is a test!"); + + assertEquals("This is a test!Hello World!", sharedA.getContentsAsString()); + assertEquals("This is a test!Hello World!", sharedB.getContentsAsString()); + } + +}