diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/AggregatedObservableList.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/AggregatedObservableList.java index c40ead106..5798661f0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/AggregatedObservableList.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/AggregatedObservableList.java @@ -187,6 +187,10 @@ public class AggregatedObservableList { } + public String dump() { + return dump(x -> x); + } + public String dump(Function function) { StringBuilder sb = new StringBuilder(); sb.append("["); diff --git a/HMCL/src/test/java/org/jackhuang/hmcl/util/AggregatedObservableListTest.java b/HMCL/src/test/java/org/jackhuang/hmcl/util/AggregatedObservableListTest.java new file mode 100644 index 000000000..6d81bf48f --- /dev/null +++ b/HMCL/src/test/java/org/jackhuang/hmcl/util/AggregatedObservableListTest.java @@ -0,0 +1,94 @@ +package org.jackhuang.hmcl.util; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Testing the AggregatedObservableList + */ +public class AggregatedObservableListTest { + + + @Test + public void testInteger() { + final AggregatedObservableList aggregatedWrapper = new AggregatedObservableList<>(); + final ObservableList aggregatedList = aggregatedWrapper.getAggregatedList(); + + final ObservableList list1 = FXCollections.observableArrayList(); + final ObservableList list2 = FXCollections.observableArrayList(); + final ObservableList list3 = FXCollections.observableArrayList(); + + list1.addAll(1, 2, 3, 4, 5); + list2.addAll(10, 11, 12, 13, 14, 15); + list3.addAll(100, 110, 120, 130, 140, 150); + + // adding list 1 to aggregate + aggregatedWrapper.appendList(list1); + assertEquals("[1,2,3,4,5]", aggregatedWrapper.dump()); + + // removing elems from list1 + list1.remove(2, 4); + assertEquals("[1,2,5]", aggregatedWrapper.dump()); + + // adding second List + aggregatedWrapper.appendList(list2); + assertEquals("[1,2,5,10,11,12,13,14,15]", aggregatedWrapper.dump()); + + // removing elems from second List + list2.remove(1, 3); + assertEquals("[1,2,5,10,13,14,15]", aggregatedWrapper.dump()); + + // replacing element in first list + list1.set(1, 3); + assertEquals("[1,3,5,10,13,14,15]", aggregatedWrapper.dump()); + + // adding third List + aggregatedWrapper.appendList(list3); + assertEquals("[1,3,5,10,13,14,15,100,110,120,130,140,150]", aggregatedWrapper.dump()); + + // emptying second list + list2.clear(); + assertEquals("[1,3,5,100,110,120,130,140,150]", aggregatedWrapper.dump()); + + // adding new elements to second list + list2.addAll(203, 202, 201); + assertEquals("[1,3,5,203,202,201,100,110,120,130,140,150]", aggregatedWrapper.dump()); + + // sorting list2. this results in permutation + list2.sort(Integer::compareTo); + assertEquals("[1,3,5,201,202,203,100,110,120,130,140,150]", aggregatedWrapper.dump()); + + // removing list2 completely + aggregatedWrapper.removeList(list2); + assertEquals("[1,3,5,100,110,120,130,140,150]", aggregatedWrapper.dump()); + + // updating one integer value in list 3 + list3.set(0, 1); + assertEquals("[1,3,5,1,110,120,130,140,150]", aggregatedWrapper.dump()); + + // prepending list 2 again + aggregatedWrapper.prependList(list2); + assertEquals("[201,202,203,1,3,5,1,110,120,130,140,150]", aggregatedWrapper.dump()); + + } + + @Test + public void testSetAll() { + final AggregatedObservableList aggregatedWrapper = new AggregatedObservableList<>(); + final ObservableList aggregatedList = aggregatedWrapper.getAggregatedList(); + + final ObservableList a = FXCollections.singletonObservableList(1); + final ObservableList b = FXCollections.observableArrayList(2, 3, 4); + + aggregatedWrapper.appendList(a); + aggregatedWrapper.appendList(b); + + assertEquals("[1,2,3,4]", aggregatedWrapper.dump()); + + b.setAll(7, 8, 9); + assertEquals("[1,7,8,9]", aggregatedWrapper.dump()); + } +} \ No newline at end of file