package org.jabref.gui.util;
import java.util.Collections;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.control.TreeItem;
import org.jabref.model.TreeNode;
import org.jabref.model.TreeNodeTestData;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class RecursiveTreeItemTest {
private RecursiveTreeItem<TreeNodeTestData.TreeNodeMock> rootTreeItem;
private TreeNodeTestData.TreeNodeMock root;
private ObjectProperty<Predicate<TreeNodeTestData.TreeNodeMock>> filterPredicate;
private TreeNodeTestData.TreeNodeMock node;
@Before
public void setUp() throws Exception {
root = new TreeNodeTestData.TreeNodeMock();
node = TreeNodeTestData.getNodeInSimpleTree(root);
node.setName("test node");
filterPredicate = new SimpleObjectProperty<>();
rootTreeItem = new RecursiveTreeItem<>(root, TreeNode::getChildren, filterPredicate);
}
@Test
public void addsAllChildrenNodes() throws Exception {
assertEquals(root.getChildren(), rootTreeItem.getChildren().stream().map(TreeItem::getValue).collect(Collectors.toList()));
}
@Test
public void addsAllChildrenOfChildNode() throws Exception {
assertEquals(
root.getChildAt(1).get().getChildren(),
rootTreeItem.getChildren().get(1).getChildren().stream().map(TreeItem::getValue).collect(Collectors.toList()));
}
@Test
public void respectsFilter() throws Exception {
filterPredicate.setValue(item -> item.getName().contains("test"));
assertEquals(Collections.singletonList(node.getParent().get()), rootTreeItem.getChildren().stream().map(TreeItem::getValue).collect(Collectors.toList()));
assertEquals(
Collections.singletonList(node),
rootTreeItem.getChildren().get(0).getChildren().stream().map(TreeItem::getValue).collect(Collectors.toList()));
}
}