diff --git a/test/files/FileTest.java b/test/files/FileTest.java
new file mode 100644
index 0000000..6b07e4d
--- /dev/null
+++ b/test/files/FileTest.java
@@ -0,0 +1,119 @@
+package files;
+
+import com.olexyn.ensync.Execute;
+import com.olexyn.ensync.Tools;
+
+public class FileTest {
+
+ Execute x = new Execute();
+ Tools tools = new Tools();
+
+ private static final String PATH = System.getProperty("user.dir");;
+
+ public static void main(String... args){
+
+
+
+ }
+
+ /**
+ * Simulates user activity on disk.
+ */
+ void createFiles() throws InterruptedException {
+ StringBuilder sbA = new StringBuilder("a");
+ StringBuilder sbB = new StringBuilder("b");
+
+ // dv (deleted-void)
+ // TODO
+
+ // dd
+ tools.writeSbToFile(PATH+"/a/dd", sbA);
+ Thread.sleep(10);
+ tools.writeSbToFile(PATH+"/b/dd", sbB);
+ Thread.sleep(10);Thread.sleep(10);
+ x.execute(new String[]{"rm", PATH+"/a/dd"});
+ Thread.sleep(10);
+ x.execute(new String[]{"rm", PATH+"/b/dd"});
+ Thread.sleep(10);
+
+ // dc
+ tools.writeSbToFile(PATH+"/a/dc", sbA);
+ Thread.sleep(10);
+ x.execute(new String[]{"rm", PATH+"/a/dc"});
+ Thread.sleep(10);
+ tools.writeSbToFile(PATH+"/b/dc", sbB);
+ Thread.sleep(10);
+
+ // dm
+ tools.writeSbToFile(PATH+"/a/dm", sbA);
+ Thread.sleep(10);
+ x.execute(new String[]{"rm", PATH+"/a/dm"});
+ Thread.sleep(10);
+ tools.writeSbToFile(PATH+"/b/dm", sbB);
+ Thread.sleep(10);
+
+ // dv (deleted-void)
+ // TODO
+
+ // cd
+ // TODO
+
+ // cc
+ // TODO
+
+ // cm
+ // TODO
+
+ // cv (created-void)
+ // TODO
+
+ // md
+ // TODO
+
+ // mc
+ // TODO
+
+ // mm
+ // TODO
+
+ }
+
+
+ /**
+ * Checks if end-state is as desired.
+ * @throws Exception otherwise.
+ */
+ void fileTest() throws Exception {
+
+
+
+
+
+
+
+ // Files where the second (= the newer) file was deleted. Thus both files should not exist in the end-state.
+ String[] arrayToDelete = {"/a/dd", "/b/dd" , "/a/cd", "/b/cd", "/a/md", "/b/md"};
+ for (String path : arrayToDelete){
+ if (new TestableFile(path).exists()) throw new Exception();
+ }
+
+ // Files where the second (= the newer) file was created or modified. Thus both files should contain "b" in the end-state.
+ String[] arrayToB = {"/a/dc", "/b/dc" , "/a/dm", "/b/dm", "/a/cc", "/b/cc"};
+ for (String path : arrayToB){
+ if (!new TestableFile(path).hasContent("b")) throw new Exception();
+ }
+
+
+
+
+ }
+
+
+ // Assertion Exception
+
+
+
+
+
+
+}
diff --git a/test/files/TestableFile.java b/test/files/TestableFile.java
new file mode 100644
index 0000000..f72311d
--- /dev/null
+++ b/test/files/TestableFile.java
@@ -0,0 +1,21 @@
+package files;
+
+import com.olexyn.ensync.Tools;
+
+import java.io.File;
+
+public class TestableFile extends File {
+
+ Tools tools = new Tools();
+
+
+ public TestableFile(String pathname) {
+ super(pathname);
+ }
+
+ public boolean hasContent(String s){
+
+ String line = tools.fileToLines(this).get(0);
+ return line.equals(s);
+ }
+}
diff --git a/test/scenario.md b/test/scenario.md
new file mode 100644
index 0000000..2c3450c
--- /dev/null
+++ b/test/scenario.md
@@ -0,0 +1,26 @@
+### Testing Scenario
+Test two configs:
+1. FileOps happen while System is down.
+1. FileOps happen while System is running.
+
+
+
+
+| Symbol | Description|
+---|---
+`a` | File `a` in directory `A`
+`b` | File `b` in directory `B`
+`d(x)` | File `x` is deleted.
+`c(x)` | File `x` is created.
+`m(x)` | File `x` is modified.
+
+
+
+
+| `Given` | | `When` | | `Then` | |
+---|---|---|---|---|---
+| `A` | `B`| `A` | `B`|`A` | `B`|
+| `a` | | `d(a)` | | | |
+| `a` | `b` | `d(a)` | `d(b)` | | |
+
+
diff --git a/test/test-config.uxf b/test/test-config.uxf
new file mode 100644
index 0000000..7367943
--- /dev/null
+++ b/test/test-config.uxf
@@ -0,0 +1,1585 @@
+
+
+ 10
+
+ UMLObject
+
+ 690
+ 1930
+ 150
+ 40
+
+ otherDirectory
+
+
+
+ UMLObject
+
+ 690
+ 1890
+ 150
+ 40
+
+ this.Directory
+
+
+
+ UMLObject
+
+ 780
+ 1830
+ 90
+ 40
+
+ Delete
+bg=red
+group=1
+
+
+
+ UMLObject
+
+ 870
+ 1830
+ 90
+ 40
+
+ Create
+bg=green
+group=1
+
+
+
+ UMLObject
+
+ 960
+ 1830
+ 90
+ 40
+
+ Modify
+bg=yellow
+group=1
+
+
+
+ UMLState
+
+ 850
+ 1890
+ 70
+ 40
+
+ File
+bg=red
+group=2
+
+
+
+ UMLObject
+
+ 690
+ 1830
+ 90
+ 40
+
+ Unchanged
+bg=white
+group=1
+
+
+
+ UMLState
+
+ 930
+ 1930
+ 60
+ 40
+
+ File
+group=2
+
+
+
+ UMLState
+
+ 850
+ 1930
+ 70
+ 40
+
+ File
+bg=red
+group=2
+
+
+
+ UMLState
+
+ 920
+ 1890
+ 70
+ 40
+
+ File
+bg=red
+group=2
+
+
+
+ UMLState
+
+ 1210
+ 1890
+ 70
+ 40
+
+ File
+bg=green
+group=3
+
+
+
+ UMLState
+
+ 1210
+ 1930
+ 70
+ 40
+
+ File
+group=3
+
+
+
+ UMLState
+
+ 1140
+ 1930
+ 70
+ 40
+
+ File
+bg=green
+group=3
+
+
+
+ UMLState
+
+ 1140
+ 1890
+ 70
+ 40
+
+ File
+bg=green
+group=3
+
+
+
+ UMLState
+
+ 1500
+ 1890
+ 70
+ 40
+
+ File
+bg=yellow
+group=4
+
+
+
+ UMLState
+
+ 1500
+ 1930
+ 70
+ 40
+
+ File
+group=4
+
+
+
+ UMLState
+
+ 1430
+ 1930
+ 70
+ 40
+
+ File
+bg=yellow
+group=4
+
+
+
+ UMLState
+
+ 1430
+ 1890
+ 70
+ 40
+
+ File
+bg=yellow
+group=4
+
+
+
+ UMLState
+
+ 990
+ 1890
+ 70
+ 40
+
+ File
+bg=red
+group=2
+
+
+
+ UMLState
+
+ 990
+ 1930
+ 70
+ 40
+
+ File
+bg=green
+group=2
+
+
+
+ UMLState
+
+ 1060
+ 1890
+ 70
+ 40
+
+ File
+bg=red
+group=2
+
+
+
+ UMLState
+
+ 1060
+ 1930
+ 70
+ 40
+
+ File
+bg=yellow
+group=2
+
+
+
+ UMLState
+
+ 1350
+ 1890
+ 70
+ 40
+
+ File
+bg=green
+group=3
+
+
+
+ UMLState
+
+ 1350
+ 1930
+ 70
+ 40
+
+ File
+bg=yellow
+group=3
+
+
+
+ UMLState
+
+ 850
+ 1990
+ 70
+ 40
+
+ do
+nothing
+
+
+
+ UMLState
+
+ 920
+ 1990
+ 790
+ 40
+
+ cp if newer
+ try: time deletet = last time present in StateFile, else time deleted = 0 (~never existed)
+halign=left
+
+
+
+ UMLState
+
+ 1280
+ 1930
+ 70
+ 40
+
+ File
+bg=red
+group=3
+
+
+
+ UMLState
+
+ 1280
+ 1890
+ 70
+ 40
+
+ File
+bg=green
+group=3
+
+
+
+ UMLState
+
+ 1570
+ 1890
+ 70
+ 40
+
+ File
+bg=yellow
+group=4
+
+
+
+ UMLState
+
+ 1640
+ 1930
+ 70
+ 40
+
+ File
+bg=green
+group=4
+
+
+
+ UMLState
+
+ 1640
+ 1890
+ 70
+ 40
+
+ File
+bg=yellow
+group=4
+
+
+
+ UMLState
+
+ 1570
+ 1930
+ 70
+ 40
+
+ File
+bg=red
+group=4
+
+
+
+ UMLObject
+
+ 850
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 1140
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 1210
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 920
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 680
+ 2310
+ 150
+ 40
+
+ otherDirectory
+
+
+
+ UMLObject
+
+ 680
+ 2220
+ 150
+ 40
+
+ this.Directory
+
+
+
+ UMLState
+
+ 1140
+ 2220
+ 70
+ 40
+
+ File
+bg=red
+
+
+
+ UMLState
+
+ 1050
+ 2320
+ 70
+ 40
+
+ File
+bg=green
+
+
+
+ UMLState
+
+ 890
+ 2220
+ 70
+ 40
+
+ File
+
+
+
+ UMLObject
+
+ 1290
+ 2220
+ 80
+ 140
+
+ result
+
+
+
+ UMLObject
+
+ 970
+ 2220
+ 70
+ 140
+
+ time
+of
+last
+lool
+
+
+
+ UMLState
+
+ 1380
+ 2320
+ 70
+ 40
+
+ File
+bg=green
+
+
+
+ UMLState
+
+ 1380
+ 2220
+ 70
+ 40
+
+ File
+bg=green
+
+
+
+ UMLObject
+
+ 690
+ 2590
+ 150
+ 40
+
+ otherDirectory
+
+
+
+ UMLObject
+
+ 690
+ 2500
+ 150
+ 40
+
+ this.Directory
+
+
+
+ UMLState
+
+ 1270
+ 2500
+ 70
+ 40
+
+ File
+bg=red
+
+
+
+ UMLState
+
+ 980
+ 2600
+ 70
+ 40
+
+ File
+bg=green
+
+
+
+ UMLState
+
+ 900
+ 2500
+ 70
+ 40
+
+ File
+
+
+
+ UMLObject
+
+ 1430
+ 2500
+ 80
+ 140
+
+ result
+
+
+
+ UMLObject
+
+ 1070
+ 2500
+ 70
+ 140
+
+ time
+of
+last
+lool
+
+
+
+ UMLState
+
+ 1520
+ 2500
+ 70
+ 40
+
+ File
+bg=red
+
+
+
+ UMLState
+
+ 1520
+ 2600
+ 70
+ 40
+
+ File
+bg=red
+
+
+
+ UMLObject
+
+ 680
+ 2150
+ 720
+ 30
+
+ Deleted Files are tracked by their last existance in a StateFile.
+
+
+
+ UMLObject
+
+ 990
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 1060
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLState
+
+ 1160
+ 2500
+ 70
+ 40
+
+ File
+bg=green
+
+
+
+ UMLState
+
+ 1160
+ 2600
+ 70
+ 40
+
+ File
+bg=green
+
+
+
+ UMLObject
+
+ 1360
+ 2500
+ 70
+ 140
+
+ current
+loop
+
+
+
+ UMLObject
+
+ 1220
+ 2220
+ 70
+ 140
+
+ current
+loop
+
+
+
+ Relation
+
+ 910
+ 2190
+ 280
+ 50
+
+ lt=-
+ 10.0;30.0;10.0;10.0;260.0;10.0;260.0;30.0
+
+
+ Relation
+
+ 1180
+ 2530
+ 140
+ 160
+
+ lt=<-
+comparison >=
+ 10.0;110.0;10.0;140.0;120.0;140.0;120.0;10.0
+
+
+ UMLObject
+
+ 1280
+ 2060
+ 70
+ 40
+
+ RED
+bg=gray
+
+
+
+ UMLObject
+
+ 1350
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 1430
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 1500
+ 2060
+ 70
+ 40
+
+ YES
+bg=green
+
+
+
+ UMLObject
+
+ 1570
+ 2060
+ 70
+ 40
+
+ RED
+bg=gray
+
+
+
+ UMLObject
+
+ 1640
+ 2060
+ 70
+ 40
+
+ RED
+bg=gray
+
+
+
+ Relation
+
+ 910
+ 2250
+ 200
+ 160
+
+ lt=<-
+comparison >=
+ 10.0;10.0;10.0;140.0;180.0;140.0;180.0;110.0
+
+
+ UMLState
+
+ 990
+ 590
+ 40
+ 40
+
+ A
+bg=red
+
+
+
+ UMLState
+
+ 1030
+ 590
+ 40
+ 40
+
+ B
+bg=green
+
+
+
+ UMLState
+
+ 1030
+ 630
+ 40
+ 40
+
+ B
+bg=yellow
+
+
+
+ UMLState
+
+ 1030
+ 550
+ 40
+ 40
+
+ B
+bg=red
+
+
+
+ UMLState
+
+ 1070
+ 550
+ 40
+ 40
+
+
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 750
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLState
+
+ 1030
+ 790
+ 40
+ 40
+
+ B
+bg=green
+
+
+
+ UMLState
+
+ 1030
+ 830
+ 40
+ 40
+
+ B
+bg=yellow
+
+
+
+ UMLState
+
+ 1030
+ 750
+ 40
+ 40
+
+ B
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 950
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 1030
+ 990
+ 40
+ 40
+
+ B
+bg=green
+
+
+
+ UMLState
+
+ 1030
+ 1030
+ 40
+ 40
+
+ B
+bg=yellow
+
+
+
+ UMLState
+
+ 1030
+ 950
+ 40
+ 40
+
+ B
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 630
+ 40
+ 40
+
+ A
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 550
+ 40
+ 40
+
+ A
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 510
+ 40
+ 40
+
+ A
+bg=red
+
+
+
+ UMLState
+
+ 1070
+ 510
+ 40
+ 40
+
+
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 830
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLState
+
+ 990
+ 790
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLState
+
+ 990
+ 710
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLState
+
+ 990
+ 1030
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 990
+ 990
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 990
+ 910
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 1070
+ 750
+ 40
+ 40
+
+
+bg=red
+
+
+
+ UMLState
+
+ 1070
+ 950
+ 40
+ 40
+
+
+bg=red
+
+
+
+ UMLState
+
+ 1070
+ 590
+ 40
+ 40
+
+ B
+bg=green
+
+
+
+ UMLState
+
+ 1070
+ 790
+ 40
+ 40
+
+ B
+bg=green
+
+
+
+ UMLState
+
+ 1070
+ 990
+ 40
+ 40
+
+ B
+bg=green
+
+
+
+ UMLState
+
+ 1070
+ 630
+ 40
+ 40
+
+ B
+bg=yellow
+
+
+
+ UMLState
+
+ 1070
+ 830
+ 40
+ 40
+
+ B
+bg=yellow
+
+
+
+ UMLState
+
+ 1070
+ 1030
+ 40
+ 40
+
+ B
+bg=yellow
+
+
+
+ UMLState
+
+ 1070
+ 910
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 1070
+ 710
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLNote
+
+ 1100
+ 150
+ 140
+ 70
+
+ first a file is deleted
+
+
+
+ Relation
+
+ 960
+ 210
+ 160
+ 280
+
+ lt=.
+
+ 50.0;260.0;10.0;120.0;140.0;10.0
+
+
+ UMLState
+
+ 1030
+ 510
+ 40
+ 40
+
+ B
+bg=gray
+
+
+
+ UMLState
+
+ 990
+ 470
+ 40
+ 40
+
+ A
+bg=red
+
+
+
+ UMLState
+
+ 1070
+ 470
+ 40
+ 40
+
+
+bg=red
+
+
+
+ UMLState
+
+ 990
+ 670
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLState
+
+ 1070
+ 670
+ 40
+ 40
+
+ A
+bg=green
+
+
+
+ UMLState
+
+ 1030
+ 710
+ 40
+ 40
+
+ B
+bg=gray
+
+
+
+ UMLState
+
+ 990
+ 870
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 1070
+ 870
+ 40
+ 40
+
+ A
+bg=yellow
+
+
+
+ UMLState
+
+ 1030
+ 910
+ 40
+ 40
+
+ B
+bg=gray
+
+
+
+ Relation
+
+ 1100
+ 490
+ 230
+ 100
+
+ lt=.
+
+ 10.0;80.0;210.0;10.0
+
+
+ UMLNote
+
+ 1040
+ 0
+ 140
+ 70
+
+ there is no second file
+
+
+
+ Relation
+
+ 1100
+ 510
+ 320
+ 120
+
+ lt=.
+
+ 10.0;100.0;300.0;10.0
+
+
+ UMLNote
+
+ 1370
+ 50
+ 410
+ 130
+
+ TEST-TABLE:
+/here a is the file that is modified first/
+/and b is the file that is modified second/
+*start*
+file name content
+*end*
+file name content
+
+
+
+ UMLNote
+
+ 1310
+ 390
+ 80
+ 110
+
+ *start*
+a dd a
+b dd b
+*end*
+a -
+b -
+
+
+
+ UMLNote
+
+ 1400
+ 410
+ 80
+ 110
+
+ *start*
+a dc a
+b dc b
+*end*
+a dc b
+b dc b
+
+
+
+ UMLNote
+
+ 1490
+ 430
+ 80
+ 110
+
+ *start*
+a dm a
+b dm b
+*end*
+a dm b
+b dm b
+
+
+
+ Relation
+
+ 1100
+ 530
+ 410
+ 140
+
+ lt=.
+
+ 10.0;120.0;390.0;10.0
+
+
+ UMLNote
+
+ 1540
+ 620
+ 80
+ 110
+
+ *start*
+a cd a
+b cd b
+*end*
+a -
+b -
+
+
+
+ Relation
+
+ 1100
+ 720
+ 460
+ 70
+
+ lt=.
+
+ 10.0;50.0;440.0;10.0
+
+
+ UMLNote
+
+ 1620
+ 860
+ 80
+ 110
+
+ *start*
+a md a
+b md b
+*end*
+a -
+b -
+
+
+
+ Relation
+
+ 1100
+ 950
+ 540
+ 40
+
+ lt=.
+
+ 10.0;20.0;520.0;20.0
+
+
+ UMLNote
+
+ 1630
+ 720
+ 80
+ 110
+
+ *start*
+a cc a
+b cc b
+*end*
+a cc b
+b cc b
+
+
+
+ Relation
+
+ 1100
+ 800
+ 550
+ 50
+
+ lt=.
+
+ 10.0;10.0;530.0;30.0
+
+