package org.jabref.logic.exporter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javafx.scene.paint.Color;
import org.jabref.model.groups.AllEntriesGroup;
import org.jabref.model.groups.AutomaticGroup;
import org.jabref.model.groups.AutomaticKeywordGroup;
import org.jabref.model.groups.AutomaticPersonsGroup;
import org.jabref.model.groups.ExplicitGroup;
import org.jabref.model.groups.GroupHierarchyType;
import org.jabref.model.groups.GroupTreeNode;
import org.jabref.model.groups.GroupTreeNodeTest;
import org.jabref.model.groups.KeywordGroup;
import org.jabref.model.groups.RegexKeywordGroup;
import org.jabref.model.groups.SearchGroup;
import org.jabref.model.groups.WordKeywordGroup;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class GroupSerializerTest {
private GroupSerializer groupSerializer;
@Before
public void setUp() throws Exception {
groupSerializer = new GroupSerializer();
}
@Test
public void serializeSingleAllEntriesGroup() {
AllEntriesGroup group = new AllEntriesGroup("");
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 AllEntriesGroup:"), serialization);
}
@Test
public void serializeSingleExplicitGroup() {
ExplicitGroup group = new ExplicitGroup("myExplicitGroup", GroupHierarchyType.INDEPENDENT, ',');
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 StaticGroup:myExplicitGroup;0;1;;;;"), serialization);
}
@Test
public void serializeSingleExplicitGroupWithIconAndDescription() {
ExplicitGroup group = new ExplicitGroup("myExplicitGroup", GroupHierarchyType.INDEPENDENT, ',');
group.setIconCode("test icon");
group.setExpanded(true);
group.setColor(Color.ALICEBLUE);
group.setDescription("test description");
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 StaticGroup:myExplicitGroup;0;1;0xf0f8ffff;test icon;test description;"), serialization);
}
@Test
// For https://github.com/JabRef/jabref/issues/1681
public void serializeSingleExplicitGroupWithEscapedSlash() {
ExplicitGroup group = new ExplicitGroup("B{\\\"{o}}hmer", GroupHierarchyType.INDEPENDENT, ',');
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 StaticGroup:B{\\\\\"{o}}hmer;0;1;;;;"), serialization);
}
@Test
public void serializeSingleSimpleKeywordGroup() {
WordKeywordGroup group = new WordKeywordGroup("name", GroupHierarchyType.INDEPENDENT, "keywords", "test", false, ',', false);
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 KeywordGroup:name;0;keywords;test;0;0;1;;;;"), serialization);
}
@Test
public void serializeSingleRegexKeywordGroup() {
KeywordGroup group = new RegexKeywordGroup("myExplicitGroup", GroupHierarchyType.REFINING, "author", "asdf", false);
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 KeywordGroup:myExplicitGroup;1;author;asdf;0;1;1;;;;"), serialization);
}
@Test
public void serializeSingleSearchGroup() {
SearchGroup group = new SearchGroup("myExplicitGroup", GroupHierarchyType.INDEPENDENT, "author=harrer", true, true);
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 SearchGroup:myExplicitGroup;0;author=harrer;1;1;1;;;;"), serialization);
}
@Test
public void serializeSingleSearchGroupWithRegex() {
SearchGroup group = new SearchGroup("myExplicitGroup", GroupHierarchyType.INCLUDING, "author=\"harrer\"", true, false);
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 SearchGroup:myExplicitGroup;2;author=\"harrer\";1;0;1;;;;"), serialization);
}
@Test
public void serializeSingleAutomaticKeywordGroup() {
AutomaticGroup group = new AutomaticKeywordGroup("myAutomaticGroup", GroupHierarchyType.INDEPENDENT, "keywords", ',', '>');
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 AutomaticKeywordGroup:myAutomaticGroup;0;keywords;,;>;1;;;;"), serialization);
}
@Test
public void serializeSingleAutomaticPersonGroup() {
AutomaticPersonsGroup group = new AutomaticPersonsGroup("myAutomaticGroup", GroupHierarchyType.INDEPENDENT, "authors");
List<String> serialization = groupSerializer.serializeTree(GroupTreeNode.fromGroup(group));
assertEquals(Collections.singletonList("0 AutomaticPersonsGroup:myAutomaticGroup;0;authors;1;;;;"), serialization);
}
@Test
public void getTreeAsStringInSimpleTree() throws Exception {
GroupTreeNode root = GroupTreeNodeTest.getRoot();
GroupTreeNodeTest.getNodeInSimpleTree(root);
List<String> expected = Arrays.asList(
"0 AllEntriesGroup:",
"1 StaticGroup:ExplicitA;2;1;;;;",
"1 StaticGroup:ExplicitParent;0;1;;;;",
"2 StaticGroup:ExplicitNode;1;1;;;;"
);
assertEquals(expected, groupSerializer.serializeTree(root));
}
@Test
public void getTreeAsStringInComplexTree() throws Exception {
GroupTreeNode root = GroupTreeNodeTest.getRoot();
GroupTreeNodeTest.getNodeInComplexTree(root);
List<String> expected = Arrays.asList(
"0 AllEntriesGroup:",
"1 SearchGroup:SearchA;2;searchExpression;1;0;1;;;;",
"1 StaticGroup:ExplicitA;2;1;;;;",
"1 StaticGroup:ExplicitGrandParent;0;1;;;;",
"2 StaticGroup:ExplicitB;1;1;;;;",
"2 KeywordGroup:KeywordParent;0;searchField;searchExpression;1;0;1;;;;",
"3 KeywordGroup:KeywordNode;0;searchField;searchExpression;1;0;1;;;;",
"4 StaticGroup:ExplicitChild;1;1;;;;",
"3 SearchGroup:SearchC;2;searchExpression;1;0;1;;;;",
"3 StaticGroup:ExplicitC;1;1;;;;",
"3 KeywordGroup:KeywordC;0;searchField;searchExpression;1;0;1;;;;",
"2 SearchGroup:SearchB;2;searchExpression;1;0;1;;;;",
"2 KeywordGroup:KeywordB;0;searchField;searchExpression;1;0;1;;;;",
"1 KeywordGroup:KeywordA;0;searchField;searchExpression;1;0;1;;;;"
);
assertEquals(expected, groupSerializer.serializeTree(root));
}
}