package org.jabref.model.groups; import java.util.Optional; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.FieldName; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class ExplicitGroupTest { private ExplicitGroup group; private ExplicitGroup group2; private BibEntry entry; @Before public void setUp() { group = new ExplicitGroup("myExplicitGroup", GroupHierarchyType.INDEPENDENT, ','); group2 = new ExplicitGroup("myExplicitGroup2", GroupHierarchyType.INCLUDING, ','); entry = new BibEntry(); } @Test public void addSingleGroupToEmptyBibEntryChangesGroupsField() { group.add(entry); assertEquals(Optional.of("myExplicitGroup"), entry.getField(FieldName.GROUPS)); } @Test public void addSingleGroupToNonemptyBibEntryAppendsToGroupsField() { entry.setField(FieldName.GROUPS, "some thing"); group.add(entry); assertEquals(Optional.of("some thing, myExplicitGroup"), entry.getField(FieldName.GROUPS)); } @Test public void addTwoGroupsToBibEntryChangesGroupsField() { group.add(entry); group2.add(entry); assertEquals(Optional.of("myExplicitGroup, myExplicitGroup2"), entry.getField(FieldName.GROUPS)); } @Test public void addDuplicateGroupDoesNotChangeGroupsField() throws Exception { entry.setField(FieldName.GROUPS, "myExplicitGroup"); group.add(entry); assertEquals(Optional.of("myExplicitGroup"), entry.getField(FieldName.GROUPS)); } @Test // For https://github.com/JabRef/jabref/issues/2334 public void removeDoesNotChangeFieldIfContainsNameAsPart() throws Exception { entry.setField(FieldName.GROUPS, "myExplicitGroup_alternative"); group.remove(entry); assertEquals(Optional.of("myExplicitGroup_alternative"), entry.getField(FieldName.GROUPS)); } @Test // For https://github.com/JabRef/jabref/issues/2334 public void removeDoesNotChangeFieldIfContainsNameAsWord() throws Exception { entry.setField(FieldName.GROUPS, "myExplicitGroup alternative"); group.remove(entry); assertEquals(Optional.of("myExplicitGroup alternative"), entry.getField(FieldName.GROUPS)); } @Test // For https://github.com/JabRef/jabref/issues/1873 public void containsOnlyMatchesCompletePhraseWithWhitespace() throws Exception { entry.setField(FieldName.GROUPS, "myExplicitGroup b"); assertFalse(group.contains(entry)); } @Test // For https://github.com/JabRef/jabref/issues/1873 public void containsOnlyMatchesCompletePhraseWithSlash() throws Exception { entry.setField(FieldName.GROUPS, "myExplicitGroup/b"); assertFalse(group.contains(entry)); } @Test // For https://github.com/JabRef/jabref/issues/2394 public void containsMatchesPhraseWithBrackets() throws Exception { entry.setField(FieldName.GROUPS, "[aa] Subgroup1"); ExplicitGroup explicitGroup = new ExplicitGroup("[aa] Subgroup1", GroupHierarchyType.INCLUDING, ','); assertTrue(explicitGroup.contains(entry)); } }