diff --git a/CHANGELOG.md b/CHANGELOG.md
index fd26fa03dce..0a8c034a42a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,12 +16,14 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve
### Changed
+- We slightly changed the layout of the Journal tab in the preferences for ui consistency. [#7937](https://github.com/JabRef/jabref/pull/7937)
- The JabRefHost on Windows now writes a temporary file and calls `-importToOpen` instead of passing the bibtex via `-importBibtex`. [#7374](https://github.com/JabRef/jabref/issues/7374), [JabRef Browser Ext #274](https://github.com/JabRef/JabRef-Browser-Extension/issues/274)
### Fixed
- We fixed an issue when checking for a new version when JabRef is used behind a corporate proxy. [#7884](https://github.com/JabRef/jabref/issues/7884)
- We fixed an issue where it was impossible to add or modify groups. [#7912](https://github.com/JabRef/jabref/pull/793://github.com/JabRef/jabref/pull/7921)
+- We fixed an issue where exported entries from a Citavi bib containing URLs could not be imported [#7892](https://github.com/JabRef/jabref/issues/7882)
### Removed
diff --git a/build.gradle b/build.gradle
index 6340429b40f..ed267d18c92 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,7 +20,7 @@ plugins {
id 'org.openjfx.javafxplugin' version '0.0.10'
- id 'org.beryx.jlink' version '2.24.0'
+ id 'org.beryx.jlink' version '2.24.1'
// nicer test outputs during running and completion
// Homepage: https://github.com/radarsh/gradle-test-logger-plugin
@@ -130,8 +130,8 @@ dependencies {
implementation 'commons-cli:commons-cli:1.4'
- implementation 'org.libreoffice:libreoffice:7.1.4'
- implementation 'org.libreoffice:unoloader:7.1.4'
+ implementation 'org.libreoffice:libreoffice:7.1.5'
+ implementation 'org.libreoffice:unoloader:7.1.5'
implementation 'io.github.java-diff-utils:java-diff-utils:4.10'
implementation 'info.debatty:java-string-similarity:2.0.0'
diff --git a/src/main/java/org/jabref/gui/icon/IconTheme.java b/src/main/java/org/jabref/gui/icon/IconTheme.java
index e3e9aab7b23..765571ee1a3 100644
--- a/src/main/java/org/jabref/gui/icon/IconTheme.java
+++ b/src/main/java/org/jabref/gui/icon/IconTheme.java
@@ -322,9 +322,9 @@ public enum JabRefIcons implements JabRefIcon {
LATEX_COMMENT(MaterialDesignC.COMMENT_TEXT_OUTLINE),
LATEX_LINE(MaterialDesignF.FORMAT_LINE_SPACING),
PASSWORD_REVEALED(MaterialDesignE.EYE),
- ADD_ABBREVIATION_LIST(MaterialDesignF.FOLDER_PLUS),
+ ADD_ABBREVIATION_LIST(MaterialDesignP.PLUS),
OPEN_ABBREVIATION_LIST(MaterialDesignF.FOLDER_OUTLINE),
- REMOVE_ABBREVIATION_LIST(MaterialDesignF.FOLDER_REMOVE),
+ REMOVE_ABBREVIATION_LIST(MaterialDesignM.MINUS),
ADD_ABBREVIATION(MaterialDesignP.PLAYLIST_PLUS),
REMOVE_ABBREVIATION(MaterialDesignP.PLAYLIST_MINUS),
NEW_ENTRY_FROM_PLAIN_TEXT(MaterialDesignP.PLUS_BOX),
diff --git a/src/main/java/org/jabref/gui/preferences/journals/AbbreviationsFileViewModel.java b/src/main/java/org/jabref/gui/preferences/journals/AbbreviationsFileViewModel.java
index b5ad2e62718..4c6961cdf0b 100644
--- a/src/main/java/org/jabref/gui/preferences/journals/AbbreviationsFileViewModel.java
+++ b/src/main/java/org/jabref/gui/preferences/journals/AbbreviationsFileViewModel.java
@@ -35,7 +35,6 @@ public AbbreviationsFileViewModel(Path filePath) {
this.path = Optional.ofNullable(filePath);
this.name = path.get().toAbsolutePath().toString();
this.isBuiltInList = new SimpleBooleanProperty(false);
- this.abbreviations.add(new AbbreviationViewModel(null));
}
/**
diff --git a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.css b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.css
deleted file mode 100644
index 8e11f3af8ff..00000000000
--- a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.css
+++ /dev/null
@@ -1,14 +0,0 @@
-.abbreviations-table {
- -fx-table-cell-border-color: transparent;
-}
-
-.custom-header {
- -fx-margin-top: 10px;
- -fx-padding: 10px;
- -fx-spacing: 5px;
-}
-
-.icon {
- -fx-font-size: 1.5em;
- -fx-padding: 0.1em 0.2em 0.1em 0.2em;
-}
diff --git a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.fxml b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.fxml
index 0dc1c91d3f0..9ccd806b5dc 100644
--- a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.fxml
+++ b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.fxml
@@ -1,5 +1,6 @@
+
@@ -8,67 +9,75 @@
-
+
-
-
-
diff --git a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.java b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.java
index c89d1c0e11c..32733480c77 100644
--- a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.java
+++ b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTab.java
@@ -28,6 +28,7 @@
import org.jabref.gui.preferences.PreferencesTab;
import org.jabref.gui.util.ColorUtil;
import org.jabref.gui.util.TaskExecutor;
+import org.jabref.gui.util.ValueTableCellFactory;
import org.jabref.logic.journals.JournalAbbreviationRepository;
import org.jabref.logic.l10n.Localization;
@@ -43,16 +44,17 @@ public class JournalAbbreviationsTab extends AbstractPreferenceTabView journalAbbreviationsTable;
@FXML private TableColumn journalTableNameColumn;
@FXML private TableColumn journalTableAbbreviationColumn;
@FXML private TableColumn journalTableShortestUniqueAbbreviationColumn;
+ @FXML private TableColumn actionsColumn;
+
private FilteredList filteredAbbreviations;
@FXML private ComboBox journalFilesBox;
+
@FXML private Button addAbbreviationButton;
- @FXML private Button removeAbbreviationButton;
- @FXML private Button openAbbreviationListButton;
- @FXML private Button addAbbreviationListButton;
@FXML private Button removeAbbreviationListButton;
@FXML private CustomTextField searchBox;
@@ -61,8 +63,6 @@ public class JournalAbbreviationsTab extends AbstractPreferenceTabView flashingColor;
- private StringProperty flashingColorStringProperty;
public JournalAbbreviationsTab() {
ViewLoader.view(this)
@@ -76,7 +76,6 @@ private void initialize() {
filteredAbbreviations = new FilteredList<>(viewModel.abbreviationsProperty());
- setButtonStyles();
setUpTable();
setBindings();
setAnimations();
@@ -85,14 +84,6 @@ private void initialize() {
searchBox.setLeft(IconTheme.JabRefIcons.SEARCH.getGraphicNode());
}
- private void setButtonStyles() {
- addAbbreviationListButton.setGraphic(IconTheme.JabRefIcons.ADD_ABBREVIATION_LIST.getGraphicNode());
- openAbbreviationListButton.setGraphic(IconTheme.JabRefIcons.OPEN_ABBREVIATION_LIST.getGraphicNode());
- removeAbbreviationListButton.setGraphic(IconTheme.JabRefIcons.REMOVE_ABBREVIATION_LIST.getGraphicNode());
- addAbbreviationButton.setGraphic(IconTheme.JabRefIcons.ADD_ABBREVIATION.getGraphicNode());
- removeAbbreviationButton.setGraphic(IconTheme.JabRefIcons.REMOVE_ABBREVIATION.getGraphicNode());
- }
-
private void setUpTable() {
journalTableNameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
journalTableNameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
@@ -102,6 +93,16 @@ private void setUpTable() {
journalTableShortestUniqueAbbreviationColumn.setCellValueFactory(cellData -> cellData.getValue().shortestUniqueAbbreviationProperty());
journalTableShortestUniqueAbbreviationColumn.setCellFactory(TextFieldTableCell.forTableColumn());
+
+ actionsColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
+ new ValueTableCellFactory()
+ .withGraphic(name -> IconTheme.JabRefIcons.DELETE_ENTRY.getGraphicNode())
+ .withTooltip(name -> Localization.lang("Remove journal '%0'", name))
+ .withDisableExpression(item -> viewModel.isEditableAndRemovableProperty().not())
+ .withVisibleExpression(item -> viewModel.isEditableAndRemovableProperty())
+ .withOnMouseClickedEvent(item -> evt ->
+ viewModel.removeAbbreviation(journalAbbreviationsTable.getFocusModel().getFocusedItem()))
+ .install(actionsColumn);
}
private void setBindings() {
@@ -121,19 +122,19 @@ private void setBindings() {
journalFilesBox.valueProperty().bindBidirectional(viewModel.currentFileProperty());
addAbbreviationButton.disableProperty().bind(viewModel.isEditableAndRemovableProperty().not());
- removeAbbreviationButton.disableProperty().bind(viewModel.isAbbreviationEditableAndRemovable().not());
loadingLabel.visibleProperty().bind(viewModel.isLoadingProperty());
progressIndicator.visibleProperty().bind(viewModel.isLoadingProperty());
searchBox.textProperty().addListener((observable, previousText, searchTerm) -> {
- filteredAbbreviations.setPredicate(abbreviation -> searchTerm.isEmpty() ? true : abbreviation.containsCaseIndependent(searchTerm));
+ filteredAbbreviations.setPredicate(abbreviation -> searchTerm.isEmpty() || abbreviation.containsCaseIndependent(searchTerm));
});
}
private void setAnimations() {
- flashingColor = new SimpleObjectProperty<>(Color.TRANSPARENT);
- flashingColorStringProperty = createFlashingColorStringProperty(flashingColor);
+ ObjectProperty flashingColor = new SimpleObjectProperty<>(Color.TRANSPARENT);
+ StringProperty flashingColorStringProperty = createFlashingColorStringProperty(flashingColor);
+
searchBox.styleProperty().bind(
new SimpleStringProperty("-fx-control-inner-background: ").concat(flashingColorStringProperty).concat(";")
);
@@ -196,11 +197,6 @@ private void editAbbreviation() {
journalTableNameColumn);
}
- @FXML
- private void removeAbbreviation() {
- viewModel.deleteAbbreviation();
- }
-
private void selectNewAbbreviation() {
int lastRow = viewModel.abbreviationsCountProperty().get() - 1;
journalAbbreviationsTable.scrollTo(lastRow);
diff --git a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTabViewModel.java b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTabViewModel.java
index 32d8c826b9a..d83eb917ecb 100644
--- a/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTabViewModel.java
+++ b/src/main/java/org/jabref/gui/preferences/journals/JournalAbbreviationsTabViewModel.java
@@ -2,7 +2,6 @@
import java.io.IOException;
import java.nio.file.Path;
-import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -37,19 +36,24 @@
*/
public class JournalAbbreviationsTabViewModel implements PreferenceTabViewModel {
- private final Logger logger = LoggerFactory.getLogger(JournalAbbreviationsTabViewModel.class);
+ private final Logger LOGGER = LoggerFactory.getLogger(JournalAbbreviationsTabViewModel.class);
+
private final SimpleListProperty journalFiles = new SimpleListProperty<>(FXCollections.observableArrayList());
private final SimpleListProperty abbreviations = new SimpleListProperty<>(FXCollections.observableArrayList());
private final SimpleIntegerProperty abbreviationsCount = new SimpleIntegerProperty();
+
private final SimpleObjectProperty currentFile = new SimpleObjectProperty<>();
private final SimpleObjectProperty currentAbbreviation = new SimpleObjectProperty<>();
+
private final SimpleBooleanProperty isFileRemovable = new SimpleBooleanProperty();
private final SimpleBooleanProperty isLoading = new SimpleBooleanProperty(false);
private final SimpleBooleanProperty isEditableAndRemovable = new SimpleBooleanProperty(false);
private final SimpleBooleanProperty isAbbreviationEditableAndRemovable = new SimpleBooleanProperty(false);
+
private final PreferencesService preferences;
private final DialogService dialogService;
private final TaskExecutor taskExecutor;
+
private final JournalAbbreviationPreferences abbreviationsPreferences;
private final JournalAbbreviationRepository journalAbbreviationRepository;
private boolean shouldWriteLists;
@@ -180,7 +184,7 @@ private void openFile(Path filePath) {
try {
abbreviationsFile.readAbbreviations();
} catch (IOException e) {
- logger.debug(e.getLocalizedMessage());
+ LOGGER.debug(e.getLocalizedMessage());
}
}
journalFiles.add(abbreviationsFile);
@@ -312,6 +316,17 @@ public void deleteAbbreviation() {
}
}
+ public void removeAbbreviation(AbbreviationViewModel abbreviation) {
+ Objects.requireNonNull(abbreviation);
+
+ if (abbreviation.isPseudoAbbreviation()) {
+ return;
+ }
+
+ abbreviations.remove(abbreviation);
+ shouldWriteLists = true;
+ }
+
/**
* Calls the {@link AbbreviationsFileViewModel#writeOrCreate()} method for each file in the journalFiles property
* which will overwrite the existing files with the content of the abbreviations property of the AbbreviationsFile.
@@ -322,43 +337,39 @@ public void saveJournalAbbreviationFiles() {
try {
file.writeOrCreate();
} catch (IOException e) {
- logger.debug(e.getLocalizedMessage());
+ LOGGER.debug(e.getLocalizedMessage());
}
});
}
- /**
- * This method stores all file paths of the files in the journalFiles property to the global JabRef preferences.
- * Pseudo abbreviation files will not be stored.
- */
- private void saveExternalFilesList() {
- List extFiles = new ArrayList<>();
- journalFiles.stream()
- .filter(file -> !file.isBuiltInListProperty().get())
- .forEach(file -> file.getAbsolutePath().ifPresent(path -> extFiles.add(path.toAbsolutePath().toString())));
- abbreviationsPreferences.setExternalJournalLists(extFiles);
- }
-
/**
* This method first saves all external files to its internal list, then writes all abbreviations to their files and
- * finally updates the abbreviations auto complete. It basically calls {@link #saveExternalFilesList()}, {@link
- * #saveJournalAbbreviationFiles() }}.
+ * finally updates the abbreviations auto complete.
*/
@Override
public void storeSettings() {
- BackgroundTask.wrap(() -> {
- saveExternalFilesList();
-
- if (shouldWriteLists) {
- saveJournalAbbreviationFiles();
- shouldWriteLists = false;
- }
-
- preferences.storeJournalAbbreviationPreferences(abbreviationsPreferences);
- }).executeWith(taskExecutor);
-
- // Update journal abbreviation repository
- Globals.journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences());
+ BackgroundTask
+ .wrap(() -> {
+ List journalStringList = journalFiles.stream()
+ .filter(path -> !path.isBuiltInListProperty().get())
+ .filter(path -> path.getAbsolutePath().isPresent())
+ .map(path -> path.getAbsolutePath().get().toAbsolutePath().toString())
+ .collect(Collectors.toList());
+
+ preferences.storeJournalAbbreviationPreferences(new JournalAbbreviationPreferences(
+ journalStringList,
+ abbreviationsPreferences.getDefaultEncoding()
+ ));
+
+ if (shouldWriteLists) {
+ saveJournalAbbreviationFiles();
+ shouldWriteLists = false;
+ }
+ })
+ .onSuccess((success) -> Globals.journalAbbreviationRepository =
+ JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()))
+ .onFailure(exception -> LOGGER.error("Failed to store journal preferences.", exception))
+ .executeWith(taskExecutor);
}
public SimpleBooleanProperty isLoadingProperty() {
diff --git a/src/main/java/org/jabref/gui/util/ValueTableCellFactory.java b/src/main/java/org/jabref/gui/util/ValueTableCellFactory.java
index 38fa12e1585..3275d57b650 100644
--- a/src/main/java/org/jabref/gui/util/ValueTableCellFactory.java
+++ b/src/main/java/org/jabref/gui/util/ValueTableCellFactory.java
@@ -3,6 +3,7 @@
import java.util.function.BiFunction;
import java.util.function.Function;
+import javafx.beans.binding.BooleanExpression;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.ContextMenu;
@@ -27,6 +28,8 @@ public class ValueTableCellFactory implements Callback,
private Function toText;
private BiFunction toGraphic;
private BiFunction> toOnMouseClickedEvent;
+ private Function toDisableExpression;
+ private Function toVisibleExpression;
private BiFunction toTooltip;
private Function contextMenuFactory;
private BiFunction menuFactory;
@@ -66,6 +69,16 @@ public ValueTableCellFactory withOnMouseClickedEvent(Function withDisableExpression(Function toDisableBinding) {
+ this.toDisableExpression = toDisableBinding;
+ return this;
+ }
+
+ public ValueTableCellFactory withVisibleExpression(Function toVisibleBinding) {
+ this.toVisibleExpression = toVisibleBinding;
+ return this;
+ }
+
public ValueTableCellFactory withContextMenu(Function contextMenuFactory) {
this.contextMenuFactory = contextMenuFactory;
return this;
@@ -136,6 +149,14 @@ protected void updateItem(T item, boolean empty) {
}
}
});
+
+ if (toDisableExpression != null) {
+ disableProperty().bind(toDisableExpression.apply(item));
+ }
+
+ if (toVisibleExpression != null) {
+ visibleProperty().bind(toVisibleExpression.apply(item));
+ }
}
}
};
diff --git a/src/main/java/org/jabref/logic/importer/fetcher/IacrEprintFetcher.java b/src/main/java/org/jabref/logic/importer/fetcher/IacrEprintFetcher.java
index 939d8610f7e..f6990197128 100644
--- a/src/main/java/org/jabref/logic/importer/fetcher/IacrEprintFetcher.java
+++ b/src/main/java/org/jabref/logic/importer/fetcher/IacrEprintFetcher.java
@@ -77,7 +77,7 @@ private Optional createEntryFromIacrCitation(String validIdentifier) t
if (bibtexCitationHtml.contains("No such report found")) {
throw new FetcherException(Localization.lang("No results found."));
}
- String actualEntry = getRequiredValueBetween("", "
", bibtexCitationHtml);
+ String actualEntry = getRequiredValueBetween("", "
", bibtexCitationHtml);
try {
return BibtexParser.singleFromString(actualEntry, prefs, new DummyFileUpdateMonitor());
diff --git a/src/main/java/org/jabref/logic/importer/util/FileFieldParser.java b/src/main/java/org/jabref/logic/importer/util/FileFieldParser.java
index 02632488eed..24a5c136fd5 100644
--- a/src/main/java/org/jabref/logic/importer/util/FileFieldParser.java
+++ b/src/main/java/org/jabref/logic/importer/util/FileFieldParser.java
@@ -9,7 +9,11 @@
import org.jabref.model.entry.LinkedFile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class FileFieldParser {
+ private static final Logger LOGGER = LoggerFactory.getLogger(FileFieldParser.class);
public static List parse(String value) {
List files = new ArrayList<>();
@@ -18,6 +22,16 @@ public static List parse(String value) {
return files;
}
+ if (LinkedFile.isOnlineLink(value.trim())) {
+ // needs to be modifiable
+ try {
+ return List.of(new LinkedFile(new URL(value), ""));
+ } catch (MalformedURLException e) {
+ LOGGER.error("invalid url", e);
+ return files;
+ }
+ }
+
List linkedFileData = new ArrayList<>();
StringBuilder sb = new StringBuilder();
boolean inXmlChar = false;
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index 76dd9d53222..4c39b711bb8 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -456,6 +456,9 @@ JabRef\ requests\ recommendations\ from\ Mr.\ DLib,\ which\ is\ an\ external\ se
JabRef\ Version\ (Required\ to\ ensure\ backwards\ compatibility\ with\ Mr.\ DLib's\ Web\ Service)=JabRef Version (Required to ensure backwards compatibility with Mr. DLib's Web Service)
Journal\ abbreviations=Journal abbreviations
+Journal\ lists\:=Journal lists:
+Remove\ journal\ '%0'=Remove journal '%0'
+
Keep\ both=Keep both
Keep\ subgroups=Keep subgroups
@@ -1585,7 +1588,6 @@ Add\ new\ list=Add new list
Open\ existing\ list=Open existing list
Remove\ list=Remove list
Add\ abbreviation=Add abbreviation
-Remove\ abbreviation=Remove abbreviation
Full\ journal\ name=Full journal name
Abbreviation\ name=Abbreviation name
Shortest\ unique\ abbreviation=Shortest unique abbreviation
diff --git a/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelNoShortestUniqueAbbreviationsTabTest.java b/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelNoShortestUniqueAbbreviationsTabTest.java
deleted file mode 100644
index 7c355f55cdc..00000000000
--- a/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelNoShortestUniqueAbbreviationsTabTest.java
+++ /dev/null
@@ -1,465 +0,0 @@
-package org.jabref.gui.journals;
-
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-
-import org.jabref.gui.DialogService;
-import org.jabref.gui.preferences.journals.AbbreviationViewModel;
-import org.jabref.gui.preferences.journals.AbbreviationsFileViewModel;
-import org.jabref.gui.preferences.journals.JournalAbbreviationsTabViewModel;
-import org.jabref.gui.util.CurrentThreadTaskExecutor;
-import org.jabref.gui.util.TaskExecutor;
-import org.jabref.logic.JabRefException;
-import org.jabref.logic.journals.Abbreviation;
-import org.jabref.logic.journals.JournalAbbreviationLoader;
-import org.jabref.logic.journals.JournalAbbreviationPreferences;
-import org.jabref.logic.journals.JournalAbbreviationRepository;
-import org.jabref.preferences.PreferencesService;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.io.TempDir;
-
-import static org.jabref.logic.util.OS.NEWLINE;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-class JournalAbbreviationsViewModelNoShortestUniqueAbbreviationsTabTest {
-
- private JournalAbbreviationsTabViewModel viewModel;
- private Path emptyTestFile;
- private Path testFile1Entries;
- private Path testFile3Entries;
- private Path testFile4Entries;
- private Path testFile5EntriesWithDuplicate;
- private JournalAbbreviationPreferences abbreviationPreferences;
- private DialogService dialogService;
- private final JournalAbbreviationRepository repository = JournalAbbreviationLoader.loadBuiltInRepository();
-
- @BeforeEach
- void setUpViewModel(@TempDir Path tempFolder) throws Exception {
- abbreviationPreferences = mock(JournalAbbreviationPreferences.class);
- PreferencesService preferences = mock(PreferencesService.class);
- when(preferences.getJournalAbbreviationPreferences()).thenReturn(abbreviationPreferences);
-
- dialogService = mock(DialogService.class);
- TaskExecutor taskExecutor = new CurrentThreadTaskExecutor();
- viewModel = new JournalAbbreviationsTabViewModel(preferences, dialogService, taskExecutor, repository);
- emptyTestFile = createTestFile(tempFolder, "emptyTestFile.csv", "");
- testFile1Entries = createTestFile(tempFolder, "testFile1Entries.csv", "Test Entry;TE" + NEWLINE + "");
- testFile3Entries = createTestFile(tempFolder, "testFile3Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME" + NEWLINE + "");
- testFile4Entries = createTestFile(tempFolder, "testFile4Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME" + NEWLINE + "Entry;E" + NEWLINE + "");
- testFile5EntriesWithDuplicate = createTestFile(tempFolder, "testFile5Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME" + NEWLINE + "EntryEntry;EE" + NEWLINE + "");
- }
-
- @Test
- void testInitialHasNoFilesAndNoAbbreviations() {
- assertEquals(0, viewModel.journalFilesProperty().size());
- assertEquals(0, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void testInitialWithSavedFilesIncrementsFilesCounter() throws Exception {
- addFourTestFileToViewModelAndPreferences();
- viewModel.createFileObjects();
-
- assertEquals(4, viewModel.journalFilesProperty().size());
- }
-
- @Test
- void testRemoveDuplicatesWhenReadingFiles() throws Exception {
- addFourTestFileToViewModelAndPreferences();
- viewModel.createFileObjects();
- viewModel.selectLastJournalFile();
-
- // should result in 4 real abbreviations and one pseudo abbreviation
- assertEquals(5, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void addFileIncreasesCounterOfOpenFilesAndHasNoAbbreviations() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
-
- assertEquals(1, viewModel.journalFilesProperty().size());
- assertEquals(1, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void addDuplicatedFileResultsInErrorDialog() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.addNewFile();
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testOpenDuplicatedFileResultsInAnException() throws Exception {
- when(dialogService.showFileOpenDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.openFile();
- viewModel.openFile();
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testSelectLastJournalFileSwitchesFilesAndTheirAbbreviations() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- assertEquals(1, viewModel.abbreviationsCountProperty().get());
-
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- assertEquals(2, viewModel.abbreviationsCountProperty().get());
- }
-
- @Test
- void testOpenValidFileContainsTheSpecificEntryAndEnoughAbbreviations() throws Exception {
- Abbreviation testAbbreviation = new Abbreviation("Test Entry", "TE");
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
-
- assertEquals(1, viewModel.journalFilesProperty().size());
- // our test file has 3 abbreviations and one pseudo abbreviation
- assertEquals(4, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testRemoveLastListSetsCurrentFileAndCurrentAbbreviationToNull() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.removeCurrentFile();
-
- assertEquals(0, viewModel.journalFilesProperty().size());
- assertEquals(0, viewModel.abbreviationsProperty().size());
- assertNull(viewModel.currentFileProperty().get());
- assertNull(viewModel.currentAbbreviationProperty().get());
- }
-
- @Test
- void testMixedFileUsage() throws Exception {
- Abbreviation testAbbreviation = new Abbreviation("Entry", "E");
- Abbreviation testAbbreviation2 = new Abbreviation("EntryEntry", "EE");
-
- // simulate open file button twice
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(1));
-
- // size of the list of journal files should be incremented by two
- assertEquals(2, viewModel.journalFilesProperty().size());
- // our second test file has 4 abbreviations
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check some abbreviation
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
-
- // simulate add new file button
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(2));
-
- // size of the list of journal files should be incremented by one
- assertEquals(3, viewModel.journalFilesProperty().size());
- // a new file has zero abbreviations
- assertEquals(1, viewModel.abbreviationsProperty().size());
-
- // simulate open file button
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(3));
-
- // size of the list of journal files should be incremented by one
- assertEquals(4, viewModel.journalFilesProperty().size());
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check some abbreviation
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation2)));
- }
-
- @Test
- void testBuiltInListsIncludeAllBuiltInAbbreviations() {
- viewModel.addBuiltInList();
- assertEquals(1, viewModel.journalFilesProperty().getSize());
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(0));
- ObservableList expected = FXCollections
- .observableArrayList(repository.getAllLoaded());
- ObservableList actualAbbreviations = FXCollections
- .observableArrayList(viewModel.abbreviationsProperty().stream()
- .map(AbbreviationViewModel::getAbbreviationObject).collect(Collectors.toList()));
-
- assertEquals(expected, actualAbbreviations);
- }
-
- @Test
- void testcurrentFilePropertyChangeActiveFile() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- AbbreviationsFileViewModel test1 = viewModel.journalFilesProperty().get(0);
- AbbreviationsFileViewModel test3 = viewModel.journalFilesProperty().get(1);
- AbbreviationsFileViewModel test4 = viewModel.journalFilesProperty().get(2);
- AbbreviationsFileViewModel test5 = viewModel.journalFilesProperty().get(3);
-
- // test if the last opened file is active, but duplicated entry has been removed
- assertEquals(5, viewModel.abbreviationsProperty().size());
-
- viewModel.currentFileProperty().set(test1);
-
- // test if the current abbreviations matches with the ones in testFile1Entries
- assertEquals(2, viewModel.abbreviationsProperty().size());
-
- viewModel.currentFileProperty().set(test3);
- assertEquals(4, viewModel.abbreviationsProperty().size());
- viewModel.currentFileProperty().set(test1);
- assertEquals(2, viewModel.abbreviationsProperty().size());
- viewModel.currentFileProperty().set(test4);
- assertEquals(5, viewModel.abbreviationsProperty().size());
- viewModel.currentFileProperty().set(test5);
- assertEquals(5, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void testAddAbbreviationIncludesAbbreviationsInAbbreviationList() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
-
- assertEquals(6, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testAddDuplicatedAbbreviationResultsInException() throws JabRefException {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- viewModel.addAbbreviation("YetAnotherEntry", "YAE");
- viewModel.addAbbreviation("YetAnotherEntry", "YAE");
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testEditSameAbbreviationWithNoChangeDoesNotResultInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
- editAbbreviation(testAbbreviation);
-
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testEditAbbreviationIncludesNewAbbreviationInAbbreviationsList() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- editAbbreviation(testAbbreviation);
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
-
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- editAbbreviation(testAbbreviation);
-
- assertEquals(1, viewModel.abbreviationsProperty().size());
- assertFalse(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testEditAbbreviationToExistingOneResultsInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
-
- assertEquals(4, viewModel.abbreviationsProperty().size());
-
- viewModel.editAbbreviation("YetAnotherEntry", "YAE");
- viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(2));
- viewModel.editAbbreviation("YetAnotherEntry", "YAE");
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testEditAbbreviationToEmptyNameResultsInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
-
- assertEquals(4, viewModel.abbreviationsProperty().size());
-
- viewModel.editAbbreviation("", "YAE");
- verify(dialogService).showErrorDialogAndWait(anyString());
- }
-
- @Test
- void testEditAbbreviationToEmptyAbbreviationResultsInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
-
- assertEquals(4, viewModel.abbreviationsProperty().size());
-
- viewModel.editAbbreviation("YetAnotherEntry", "");
- verify(dialogService).showErrorDialogAndWait(anyString());
- }
-
- @Test
- void testDeleteAbbreviationSelectsPreviousOne() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
-
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- assertEquals(new AbbreviationViewModel(testAbbreviation), viewModel.currentAbbreviationProperty().get());
-
- viewModel.deleteAbbreviation();
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check if the previous (the last) element is the current abbreviation
- assertEquals(viewModel.currentAbbreviationProperty().get(), viewModel.abbreviationsProperty().get(4));
- }
-
- @Test
- void testDeleteAbbreviationSelectsNextOne() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
- viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(1));
- viewModel.deleteAbbreviation();
-
- assertEquals(new AbbreviationViewModel(testAbbreviation), viewModel.currentAbbreviationProperty().get());
- }
-
- @Test
- void testSaveAbbreviationsToFilesCreatesNewFilesWithWrittenAbbreviations() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
- Abbreviation testAbbreviation = new Abbreviation("JabRefTestEntry", "JTE");
- editAbbreviation(testAbbreviation);
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
-
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
- viewModel.deleteAbbreviation();
- Abbreviation testAbbreviation1 = new Abbreviation("SomeOtherEntry", "SOE");
- addAbbrevaition(testAbbreviation1);
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation1)));
-
- viewModel.saveJournalAbbreviationFiles();
- List expected = Arrays.asList(
- "Abbreviations;Abb;Abb",
- "Test Entry;TE;TE",
- "MoreEntries;ME;ME",
- "JabRefTestEntry;JTE;JTE");
- List actual = Files.readAllLines(testFile4Entries, StandardCharsets.UTF_8);
-
- assertEquals(expected, actual);
-
- expected = Arrays.asList(
- "EntryEntry;EE;EE",
- "Abbreviations;Abb;Abb",
- "Test Entry;TE;TE",
- "SomeOtherEntry;SOE;SOE");
- actual = Files.readAllLines(testFile5EntriesWithDuplicate, StandardCharsets.UTF_8);
-
- assertEquals(expected, actual);
- }
-
- @Test
- void testSaveExternalFilesListToPreferences() throws Exception {
- addFourTestFileToViewModelAndPreferences();
- List expected = Stream.of(testFile1Entries, testFile3Entries, testFile4Entries, testFile5EntriesWithDuplicate)
- .map(Path::toString).collect(Collectors.toList());
- verify(abbreviationPreferences).setExternalJournalLists(expected);
- }
-
- private Path createTestFile(Path folder, String name, String content) throws Exception {
- Path file = folder.resolve(name);
- Files.writeString(file, content);
- return file;
- }
-
- private void addAbbrevaition(Abbreviation testAbbreviation) throws Exception {
- viewModel.addAbbreviation(testAbbreviation.getName(), testAbbreviation.getAbbreviation());
- }
-
- private void editAbbreviation(Abbreviation testAbbreviation) throws Exception {
- viewModel.editAbbreviation(testAbbreviation.getName(), testAbbreviation.getAbbreviation());
- }
-
- private void addFourTestFileToViewModelAndPreferences() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.storeSettings();
- }
-
- /**
- * Select the last abbreviation in the list of abbreviations
- */
- private void selectLastAbbreviation() {
- viewModel.currentAbbreviationProperty()
- .set(viewModel.abbreviationsProperty().get(viewModel.abbreviationsCountProperty().get() - 1));
- }
-}
diff --git a/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelWithShortestUniqueAbbreviationsTabTest.java b/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelWithShortestUniqueAbbreviationsTabTest.java
deleted file mode 100644
index f0811c06f45..00000000000
--- a/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelWithShortestUniqueAbbreviationsTabTest.java
+++ /dev/null
@@ -1,465 +0,0 @@
-package org.jabref.gui.journals;
-
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-
-import org.jabref.gui.DialogService;
-import org.jabref.gui.preferences.journals.AbbreviationViewModel;
-import org.jabref.gui.preferences.journals.AbbreviationsFileViewModel;
-import org.jabref.gui.preferences.journals.JournalAbbreviationsTabViewModel;
-import org.jabref.gui.util.CurrentThreadTaskExecutor;
-import org.jabref.gui.util.TaskExecutor;
-import org.jabref.logic.JabRefException;
-import org.jabref.logic.journals.Abbreviation;
-import org.jabref.logic.journals.JournalAbbreviationLoader;
-import org.jabref.logic.journals.JournalAbbreviationPreferences;
-import org.jabref.logic.journals.JournalAbbreviationRepository;
-import org.jabref.preferences.PreferencesService;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.io.TempDir;
-
-import static org.jabref.logic.util.OS.NEWLINE;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-class JournalAbbreviationsViewModelWithShortestUniqueAbbreviationsTabTest {
-
- private JournalAbbreviationsTabViewModel viewModel;
- private Path emptyTestFile;
- private Path testFile1Entries;
- private Path testFile3Entries;
- private Path testFile4Entries;
- private Path testFile5EntriesWithDuplicate;
- private JournalAbbreviationPreferences abbreviationPreferences;
- private DialogService dialogService;
- private final JournalAbbreviationRepository repository = JournalAbbreviationLoader.loadBuiltInRepository();
-
- @BeforeEach
- void setUpViewModel(@TempDir Path tempFolder) throws Exception {
- abbreviationPreferences = mock(JournalAbbreviationPreferences.class);
- PreferencesService preferences = mock(PreferencesService.class);
- when(preferences.getJournalAbbreviationPreferences()).thenReturn(abbreviationPreferences);
-
- dialogService = mock(DialogService.class);
- TaskExecutor taskExecutor = new CurrentThreadTaskExecutor();
- viewModel = new JournalAbbreviationsTabViewModel(preferences, dialogService, taskExecutor, repository);
- emptyTestFile = createTestFile(tempFolder, "emptyTestFile.csv", "");
- testFile1Entries = createTestFile(tempFolder, "testFile1Entries.csv", "Test Entry;TE;T" + NEWLINE + "");
- testFile3Entries = createTestFile(tempFolder, "testFile3Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "");
- testFile4Entries = createTestFile(tempFolder, "testFile4Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "Entry;En;E" + NEWLINE + "");
- testFile5EntriesWithDuplicate = createTestFile(tempFolder, "testFile5Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "EntryEntry;EE" + NEWLINE + "");
- }
-
- @Test
- void testInitialHasNoFilesAndNoAbbreviations() {
- assertEquals(0, viewModel.journalFilesProperty().size());
- assertEquals(0, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void testInitialWithSavedFilesIncrementsFilesCounter() throws Exception {
- addFourTestFileToViewModelAndPreferences();
- viewModel.createFileObjects();
-
- assertEquals(4, viewModel.journalFilesProperty().size());
- }
-
- @Test
- void testRemoveDuplicatesWhenReadingFiles() throws Exception {
- addFourTestFileToViewModelAndPreferences();
- viewModel.createFileObjects();
- viewModel.selectLastJournalFile();
-
- // should result in 4 real abbreviations and one pseudo abbreviation
- assertEquals(5, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void addFileIncreasesCounterOfOpenFilesAndHasNoAbbreviations() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
-
- assertEquals(1, viewModel.journalFilesProperty().size());
- assertEquals(1, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void addDuplicatedFileResultsInErrorDialog() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.addNewFile();
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testOpenDuplicatedFileResultsInAnException() throws Exception {
- when(dialogService.showFileOpenDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.openFile();
- viewModel.openFile();
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testSelectLastJournalFileSwitchesFilesAndTheirAbbreviations() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- assertEquals(1, viewModel.abbreviationsCountProperty().get());
-
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- assertEquals(2, viewModel.abbreviationsCountProperty().get());
- }
-
- @Test
- void testOpenValidFileContainsTheSpecificEntryAndEnoughAbbreviations() throws Exception {
- Abbreviation testAbbreviation = new Abbreviation("Test Entry", "TE");
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
-
- assertEquals(1, viewModel.journalFilesProperty().size());
- // our test file has 3 abbreviations and one pseudo abbreviation
- assertEquals(4, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testRemoveLastListSetsCurrentFileAndCurrentAbbreviationToNull() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.removeCurrentFile();
-
- assertEquals(0, viewModel.journalFilesProperty().size());
- assertEquals(0, viewModel.abbreviationsProperty().size());
- assertNull(viewModel.currentFileProperty().get());
- assertNull(viewModel.currentAbbreviationProperty().get());
- }
-
- @Test
- void testMixedFileUsage() throws Exception {
- Abbreviation testAbbreviation = new Abbreviation("Entry", "En", "E");
- Abbreviation testAbbreviation2 = new Abbreviation("EntryEntry", "EnEn", "EE");
-
- // simulate open file button twice
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(1));
-
- // size of the list of journal files should be incremented by two
- assertEquals(2, viewModel.journalFilesProperty().size());
- // our second test file has 4 abbreviations
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check some abbreviation
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
-
- // simulate add new file button
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(2));
-
- // size of the list of journal files should be incremented by one
- assertEquals(3, viewModel.journalFilesProperty().size());
- // a new file has zero abbreviations
- assertEquals(1, viewModel.abbreviationsProperty().size());
-
- // simulate open file button
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(3));
-
- // size of the list of journal files should be incremented by one
- assertEquals(4, viewModel.journalFilesProperty().size());
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check some abbreviation
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation2)));
- }
-
- @Test
- void testBuiltInListsIncludeAllBuiltInAbbreviations() {
- viewModel.addBuiltInList();
- assertEquals(1, viewModel.journalFilesProperty().getSize());
- viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(0));
- ObservableList expected = FXCollections
- .observableArrayList(repository.getAllLoaded());
- ObservableList actualAbbreviations = FXCollections
- .observableArrayList(viewModel.abbreviationsProperty().stream()
- .map(AbbreviationViewModel::getAbbreviationObject).collect(Collectors.toList()));
-
- assertEquals(expected, actualAbbreviations);
- }
-
- @Test
- void testcurrentFilePropertyChangeActiveFile() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- AbbreviationsFileViewModel test1 = viewModel.journalFilesProperty().get(0);
- AbbreviationsFileViewModel test3 = viewModel.journalFilesProperty().get(1);
- AbbreviationsFileViewModel test4 = viewModel.journalFilesProperty().get(2);
- AbbreviationsFileViewModel test5 = viewModel.journalFilesProperty().get(3);
-
- // test if the last opened file is active, but duplicated entry has been removed
- assertEquals(5, viewModel.abbreviationsProperty().size());
-
- viewModel.currentFileProperty().set(test1);
-
- // test if the current abbreviations matches with the ones in testFile1Entries
- assertEquals(2, viewModel.abbreviationsProperty().size());
-
- viewModel.currentFileProperty().set(test3);
- assertEquals(4, viewModel.abbreviationsProperty().size());
- viewModel.currentFileProperty().set(test1);
- assertEquals(2, viewModel.abbreviationsProperty().size());
- viewModel.currentFileProperty().set(test4);
- assertEquals(5, viewModel.abbreviationsProperty().size());
- viewModel.currentFileProperty().set(test5);
- assertEquals(5, viewModel.abbreviationsProperty().size());
- }
-
- @Test
- void testAddAbbreviationIncludesAbbreviationsInAbbreviationList() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE", "Y");
- addAbbrevaition(testAbbreviation);
-
- assertEquals(6, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testAddDuplicatedAbbreviationResultsInException() throws JabRefException {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- viewModel.addAbbreviation("YetAnotherEntry", "YAE", "Y");
- viewModel.addAbbreviation("YetAnotherEntry", "YAE", "Y");
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testEditSameAbbreviationWithNoChangeDoesNotResultInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE", "Y");
- addAbbrevaition(testAbbreviation);
- editAbbreviation(testAbbreviation);
-
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testEditAbbreviationIncludesNewAbbreviationInAbbreviationsList() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE", "Y");
- editAbbreviation(testAbbreviation);
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
-
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- editAbbreviation(testAbbreviation);
-
- assertEquals(1, viewModel.abbreviationsProperty().size());
- assertFalse(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- }
-
- @Test
- void testEditAbbreviationToExistingOneResultsInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
-
- assertEquals(4, viewModel.abbreviationsProperty().size());
-
- viewModel.editAbbreviation("YetAnotherEntry", "YAE", "Y");
- viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(2));
- viewModel.editAbbreviation("YetAnotherEntry", "YAE", "Y");
- verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
- }
-
- @Test
- void testEditAbbreviationToEmptyNameResultsInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
-
- assertEquals(4, viewModel.abbreviationsProperty().size());
-
- viewModel.editAbbreviation("", "YAE", "Y");
- verify(dialogService).showErrorDialogAndWait(anyString());
- }
-
- @Test
- void testEditAbbreviationToEmptyAbbreviationResultsInException() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
-
- assertEquals(4, viewModel.abbreviationsProperty().size());
-
- viewModel.editAbbreviation("YetAnotherEntry", "", "Y");
- verify(dialogService).showErrorDialogAndWait(anyString());
- }
-
- @Test
- void testDeleteAbbreviationSelectsPreviousOne() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE", "Y");
- addAbbrevaition(testAbbreviation);
-
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- assertEquals(new AbbreviationViewModel(testAbbreviation), viewModel.currentAbbreviationProperty().get());
-
- viewModel.deleteAbbreviation();
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check if the previous (the last) element is the current abbreviation
- assertEquals(viewModel.currentAbbreviationProperty().get(), viewModel.abbreviationsProperty().get(4));
- }
-
- @Test
- void testDeleteAbbreviationSelectsNextOne() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE", "Y");
- addAbbrevaition(testAbbreviation);
- viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(1));
- viewModel.deleteAbbreviation();
-
- assertEquals(new AbbreviationViewModel(testAbbreviation), viewModel.currentAbbreviationProperty().get());
- }
-
- @Test
- void testSaveAbbreviationsToFilesCreatesNewFilesWithWrittenAbbreviations() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
- Abbreviation testAbbreviation = new Abbreviation("JabRefTestEntry", "JTE");
- editAbbreviation(testAbbreviation);
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
-
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- selectLastAbbreviation();
- viewModel.deleteAbbreviation();
- Abbreviation testAbbreviation1 = new Abbreviation("SomeOtherEntry", "SOE");
- addAbbrevaition(testAbbreviation1);
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation1)));
-
- viewModel.saveJournalAbbreviationFiles();
- List expected = Arrays.asList(
- "Abbreviations;Abb;A",
- "Test Entry;TE;T",
- "MoreEntries;ME;M",
- "JabRefTestEntry;JTE;JTE");
- List actual = Files.readAllLines(testFile4Entries, StandardCharsets.UTF_8);
-
- assertEquals(expected, actual);
-
- expected = Arrays.asList(
- "EntryEntry;EE;EE",
- "Abbreviations;Abb;A",
- "Test Entry;TE;T",
- "SomeOtherEntry;SOE;SOE");
- actual = Files.readAllLines(testFile5EntriesWithDuplicate, StandardCharsets.UTF_8);
-
- assertEquals(expected, actual);
- }
-
- @Test
- void testSaveExternalFilesListToPreferences() throws Exception {
- addFourTestFileToViewModelAndPreferences();
- List expected = Stream.of(testFile1Entries, testFile3Entries, testFile4Entries, testFile5EntriesWithDuplicate)
- .map(Path::toString).collect(Collectors.toList());
- verify(abbreviationPreferences).setExternalJournalLists(expected);
- }
-
- private Path createTestFile(Path folder, String name, String content) throws Exception {
- Path file = folder.resolve(name);
- Files.writeString(file, content);
- return file;
- }
-
- private void addAbbrevaition(Abbreviation testAbbreviation) throws Exception {
- viewModel.addAbbreviation(testAbbreviation.getName(), testAbbreviation.getAbbreviation());
- }
-
- private void editAbbreviation(Abbreviation testAbbreviation) throws Exception {
- viewModel.editAbbreviation(testAbbreviation.getName(), testAbbreviation.getAbbreviation());
- }
-
- private void addFourTestFileToViewModelAndPreferences() throws Exception {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.storeSettings();
- }
-
- /**
- * Select the last abbreviation in the list of abbreviations
- */
- private void selectLastAbbreviation() {
- viewModel.currentAbbreviationProperty()
- .set(viewModel.abbreviationsProperty().get(viewModel.abbreviationsCountProperty().get() - 1));
- }
-}
diff --git a/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelMixedAbbreviationsTabTest.java b/src/test/java/org/jabref/gui/preferences/journals/JournalAbbreviationsViewModelTabTest.java
similarity index 58%
rename from src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelMixedAbbreviationsTabTest.java
rename to src/test/java/org/jabref/gui/preferences/journals/JournalAbbreviationsViewModelTabTest.java
index 9c906027888..c7db04c42e4 100644
--- a/src/test/java/org/jabref/gui/journals/JournalAbbreviationsViewModelMixedAbbreviationsTabTest.java
+++ b/src/test/java/org/jabref/gui/preferences/journals/JournalAbbreviationsViewModelTabTest.java
@@ -1,9 +1,9 @@
-package org.jabref.gui.journals;
+package org.jabref.gui.preferences.journals;
+import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -13,9 +13,6 @@
import javafx.collections.ObservableList;
import org.jabref.gui.DialogService;
-import org.jabref.gui.preferences.journals.AbbreviationViewModel;
-import org.jabref.gui.preferences.journals.AbbreviationsFileViewModel;
-import org.jabref.gui.preferences.journals.JournalAbbreviationsTabViewModel;
import org.jabref.gui.util.CurrentThreadTaskExecutor;
import org.jabref.gui.util.TaskExecutor;
import org.jabref.logic.journals.Abbreviation;
@@ -27,6 +24,9 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import static org.jabref.logic.util.OS.NEWLINE;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -39,32 +39,62 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-class JournalAbbreviationsViewModelMixedAbbreviationsTabTest {
+class JournalAbbreviationsViewModelTabTest {
private JournalAbbreviationsTabViewModel viewModel;
private Path emptyTestFile;
- private Path testFile1Entries;
- private Path testFile3Entries;
- private Path testFile4Entries;
- private Path testFile5EntriesWithDuplicate;
- private JournalAbbreviationPreferences abbreviationPreferences;
+ private Path tempFolder;
+ private PreferencesService preferencesService;
private final JournalAbbreviationRepository repository = JournalAbbreviationLoader.loadBuiltInRepository();
private DialogService dialogService;
+ public static Stream provideTestFiles() {
+ return Stream.of(
+ // Mixed abbreviations
+ Arguments.of(
+ List.of(List.of("testFile1Entries.csv", "Test Entry;TE" + NEWLINE + ""),
+ List.of("testFile3Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + ""),
+ List.of("testFile4Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "Entry;E" + NEWLINE + ""),
+ List.of("testFile5Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "EntryEntry;EE" + NEWLINE + "")),
+ List.of(
+ List.of("Abbreviations;Abb;Abb", "Test Entry;TE;T", "MoreEntries;ME;M", "JabRefTestEntry;JTE;JTE"),
+ List.of("EntryEntry;EE;EE", "Abbreviations;Abb;Abb", "Test Entry;TE;T", "SomeOtherEntry;SOE;SOE"))),
+
+ // No shortest unique abbreviations
+ Arguments.of(
+ List.of(List.of("testFile1Entries.csv", "Test Entry;TE" + NEWLINE + ""),
+ List.of("testFile3Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME" + NEWLINE + ""),
+ List.of("testFile4Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME" + NEWLINE + "Entry;E" + NEWLINE + ""),
+ List.of("testFile5Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME" + NEWLINE + "EntryEntry;EE" + NEWLINE + "")),
+ List.of(
+ List.of("Abbreviations;Abb;Abb", "Test Entry;TE;TE", "MoreEntries;ME;ME", "JabRefTestEntry;JTE;JTE"),
+ List.of("EntryEntry;EE;EE", "Abbreviations;Abb;Abb", "Test Entry;TE;TE", "SomeOtherEntry;SOE;SOE"))),
+
+ // Shortest unique abbreviations
+ Arguments.of(
+ List.of(List.of("testFile1Entries.csv", "Test Entry;TE;T" + NEWLINE + ""),
+ List.of("testFile3Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + ""),
+ List.of("testFile4Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "Entry;En;E" + NEWLINE + ""),
+ List.of("testFile5Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "EntryEntry;EE" + NEWLINE + "")),
+ List.of(
+ List.of("Abbreviations;Abb;A", "Test Entry;TE;T", "MoreEntries;ME;M", "JabRefTestEntry;JTE;JTE"),
+ List.of("EntryEntry;EE;EE", "Abbreviations;Abb;A", "Test Entry;TE;T", "SomeOtherEntry;SOE;SOE")))
+ );
+ }
+
@BeforeEach
void setUpViewModel(@TempDir Path tempFolder) throws Exception {
- abbreviationPreferences = mock(JournalAbbreviationPreferences.class);
- PreferencesService preferences = mock(PreferencesService.class);
- when(preferences.getJournalAbbreviationPreferences()).thenReturn(abbreviationPreferences);
+ JournalAbbreviationPreferences abbreviationPreferences = mock(JournalAbbreviationPreferences.class);
+ preferencesService = mock(PreferencesService.class);
+ when(preferencesService.getJournalAbbreviationPreferences()).thenReturn(abbreviationPreferences);
dialogService = mock(DialogService.class);
+ this.tempFolder = tempFolder;
+
TaskExecutor taskExecutor = new CurrentThreadTaskExecutor();
- viewModel = new JournalAbbreviationsTabViewModel(preferences, dialogService, taskExecutor, repository);
- emptyTestFile = createTestFile(tempFolder, "emptyTestFile.csv", "");
- testFile1Entries = createTestFile(tempFolder, "testFile1Entries.csv", "Test Entry;TE" + NEWLINE + "");
- testFile3Entries = createTestFile(tempFolder, "testFile3Entries.csv", "Abbreviations;Abb;A" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "");
- testFile4Entries = createTestFile(tempFolder, "testFile4Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "Entry;E" + NEWLINE + "");
- testFile5EntriesWithDuplicate = createTestFile(tempFolder, "testFile5Entries.csv", "Abbreviations;Abb" + NEWLINE + "Test Entry;TE;T" + NEWLINE + "Test Entry;TE" + NEWLINE + "MoreEntries;ME;M" + NEWLINE + "EntryEntry;EE" + NEWLINE + "");
+ viewModel = new JournalAbbreviationsTabViewModel(preferencesService, dialogService, taskExecutor, repository);
+
+ emptyTestFile = createTestFile("emptyTestFile.csv", "");
}
@Test
@@ -73,22 +103,21 @@ void testInitialHasNoFilesAndNoAbbreviations() {
assertEquals(0, viewModel.abbreviationsProperty().size());
}
- @Test
- void testInitialWithSavedFilesIncrementsFilesCounter() {
- addFourTestFileToViewModelAndPreferences();
- viewModel.createFileObjects();
-
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testInitialWithSavedFilesIncrementsFilesCounter(List> testFiles) throws IOException {
+ addFourTestFileToViewModelAndPreferences(testFiles);
assertEquals(4, viewModel.journalFilesProperty().size());
}
- @Test
- void testRemoveDuplicatesWhenReadingFiles() {
- addFourTestFileToViewModelAndPreferences();
- viewModel.createFileObjects();
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testRemoveDuplicatesWhenReadingFiles(List> testFiles) throws IOException {
+ addFourTestFileToViewModelAndPreferences(testFiles);
viewModel.selectLastJournalFile();
- // should result in 4 real abbreviations and one pseudo abbreviation
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.journalFilesProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
}
@Test
@@ -97,54 +126,58 @@ void addFileIncreasesCounterOfOpenFilesAndHasNoAbbreviations() {
viewModel.addNewFile();
assertEquals(1, viewModel.journalFilesProperty().size());
- assertEquals(1, viewModel.abbreviationsProperty().size());
+ assertEquals(0, viewModel.abbreviationsProperty().size());
}
- @Test
- void addDuplicatedFileResultsInErrorDialog() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void addDuplicatedFileResultsInErrorDialog(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(0))));
viewModel.addNewFile();
viewModel.addNewFile();
verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
}
- @Test
- void testOpenDuplicatedFileResultsInAnException() {
- when(dialogService.showFileOpenDialog(any())).thenReturn(Optional.of(testFile1Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testOpenDuplicatedFileResultsInAnException(List> testFiles) throws IOException {
+ when(dialogService.showFileOpenDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(0))));
viewModel.openFile();
viewModel.openFile();
verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
}
- @Test
- void testSelectLastJournalFileSwitchesFilesAndTheirAbbreviations() {
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testSelectLastJournalFileSwitchesFilesAndTheirAbbreviations(List> testFiles) throws IOException {
when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
- assertEquals(1, viewModel.abbreviationsCountProperty().get());
+ assertEquals(0, viewModel.abbreviationsCountProperty().get());
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(0))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
- assertEquals(2, viewModel.abbreviationsCountProperty().get());
+ assertEquals(1, viewModel.abbreviationsCountProperty().get());
}
- @Test
- void testOpenValidFileContainsTheSpecificEntryAndEnoughAbbreviations() {
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testOpenValidFileContainsTheSpecificEntryAndEnoughAbbreviations(List> testFiles) throws IOException {
Abbreviation testAbbreviation = new Abbreviation("Test Entry", "TE");
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(1))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
assertEquals(1, viewModel.journalFilesProperty().size());
- // our test file has 3 abbreviations and one pseudo abbreviation
- assertEquals(4, viewModel.abbreviationsProperty().size());
+ assertEquals(3, viewModel.abbreviationsProperty().size());
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
}
- @Test
- void testRemoveLastListSetsCurrentFileAndCurrentAbbreviationToNull() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testRemoveLastListSetsCurrentFileAndCurrentAbbreviationToNull(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(0))));
viewModel.addNewFile();
viewModel.removeCurrentFile();
@@ -154,22 +187,23 @@ void testRemoveLastListSetsCurrentFileAndCurrentAbbreviationToNull() {
assertNull(viewModel.currentAbbreviationProperty().get());
}
- @Test
- void testMixedFileUsage() {
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testMixedFileUsage(List> testFiles) throws IOException {
Abbreviation testAbbreviation = new Abbreviation("Entry", "E");
Abbreviation testAbbreviation2 = new Abbreviation("EntryEntry", "EE");
// simulate open file button twice
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(1))));
viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(2))));
viewModel.addNewFile();
viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(1));
// size of the list of journal files should be incremented by two
assertEquals(2, viewModel.journalFilesProperty().size());
// our second test file has 4 abbreviations
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
// check some abbreviation
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
@@ -181,17 +215,17 @@ void testMixedFileUsage() {
// size of the list of journal files should be incremented by one
assertEquals(3, viewModel.journalFilesProperty().size());
// a new file has zero abbreviations
- assertEquals(1, viewModel.abbreviationsProperty().size());
+ assertEquals(0, viewModel.abbreviationsProperty().size());
// simulate open file button
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(3))));
viewModel.addNewFile();
viewModel.currentFileProperty().set(viewModel.journalFilesProperty().get(3));
// size of the list of journal files should be incremented by one
assertEquals(4, viewModel.journalFilesProperty().size());
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
// check some abbreviation
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation2)));
}
@@ -210,57 +244,57 @@ void testBuiltInListsIncludeAllBuiltInAbbreviations() {
assertEquals(expected, actualAbbreviations);
}
- @Test
- void testCurrentFilePropertyChangeActiveFile() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testCurrentFilePropertyChangeActiveFile(List> testFiles) throws IOException {
+ for (List testFile : testFiles) {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFile)));
+ viewModel.addNewFile();
+ }
viewModel.selectLastJournalFile();
+
AbbreviationsFileViewModel test1 = viewModel.journalFilesProperty().get(0);
AbbreviationsFileViewModel test3 = viewModel.journalFilesProperty().get(1);
AbbreviationsFileViewModel test4 = viewModel.journalFilesProperty().get(2);
AbbreviationsFileViewModel test5 = viewModel.journalFilesProperty().get(3);
// test if the last opened file is active, but duplicated entry has been removed
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
viewModel.currentFileProperty().set(test1);
// test if the current abbreviations matches with the ones in testFile1Entries
- assertEquals(2, viewModel.abbreviationsProperty().size());
+ assertEquals(1, viewModel.abbreviationsProperty().size());
viewModel.currentFileProperty().set(test3);
- assertEquals(4, viewModel.abbreviationsProperty().size());
+ assertEquals(3, viewModel.abbreviationsProperty().size());
viewModel.currentFileProperty().set(test1);
- assertEquals(2, viewModel.abbreviationsProperty().size());
+ assertEquals(1, viewModel.abbreviationsProperty().size());
viewModel.currentFileProperty().set(test4);
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
viewModel.currentFileProperty().set(test5);
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
}
- @Test
- void testAddAbbreviationIncludesAbbreviationsInAbbreviationList() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testAddAbbreviationIncludesAbbreviationsInAbbreviationList(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(2))));
viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(3))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
+ addAbbreviation(testAbbreviation);
- assertEquals(6, viewModel.abbreviationsProperty().size());
+ assertEquals(5, viewModel.abbreviationsProperty().size());
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
}
- @Test
- void testAddDuplicatedAbbreviationResultsInException() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testAddDuplicatedAbbreviationResultsInException(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(1))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
viewModel.addAbbreviation("YetAnotherEntry", "YAE");
@@ -274,22 +308,23 @@ void testEditSameAbbreviationWithNoChangeDoesNotResultInException() {
viewModel.addNewFile();
viewModel.selectLastJournalFile();
Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
+ addAbbreviation(testAbbreviation);
editAbbreviation(testAbbreviation);
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
}
- @Test
- void testEditAbbreviationIncludesNewAbbreviationInAbbreviationsList() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testEditAbbreviationIncludesNewAbbreviationInAbbreviationsList(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(2))));
viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(3))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
selectLastAbbreviation();
Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- editAbbreviation(testAbbreviation);
+ addAbbreviation(testAbbreviation);
assertEquals(5, viewModel.abbreviationsProperty().size());
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
@@ -297,88 +332,62 @@ void testEditAbbreviationIncludesNewAbbreviationInAbbreviationsList() {
when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(emptyTestFile));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
- editAbbreviation(testAbbreviation);
+ // addAbbreviation(testAbbreviation);
- assertEquals(1, viewModel.abbreviationsProperty().size());
+ assertEquals(0, viewModel.abbreviationsProperty().size());
assertFalse(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
}
- @Test
- void testEditAbbreviationToExistingOneResultsInException() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testEditAbbreviationToExistingOneResultsInException(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(1))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
selectLastAbbreviation();
- assertEquals(4, viewModel.abbreviationsProperty().size());
+ assertEquals(3, viewModel.abbreviationsProperty().size());
viewModel.editAbbreviation("YetAnotherEntry", "YAE");
- viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(2));
+ viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(1));
viewModel.editAbbreviation("YetAnotherEntry", "YAE");
verify(dialogService).showErrorDialogAndWait(anyString(), anyString());
}
- @Test
- void testEditAbbreviationToEmptyNameResultsInException() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testEditAbbreviationToEmptyNameResultsInException(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(1))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
selectLastAbbreviation();
- assertEquals(4, viewModel.abbreviationsProperty().size());
+ assertEquals(3, viewModel.abbreviationsProperty().size());
viewModel.editAbbreviation("", "YAE");
verify(dialogService).showErrorDialogAndWait(anyString());
}
- @Test
- void testEditAbbreviationToEmptyAbbreviationResultsInException() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testEditAbbreviationToEmptyAbbreviationResultsInException(List> testFiles) throws IOException {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFiles.get(1))));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
selectLastAbbreviation();
- assertEquals(4, viewModel.abbreviationsProperty().size());
+ assertEquals(3, viewModel.abbreviationsProperty().size());
viewModel.editAbbreviation("YetAnotherEntry", "");
verify(dialogService).showErrorDialogAndWait(anyString());
}
- @Test
- void testDeleteAbbreviationSelectsPreviousOne() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
-
- assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
- assertEquals(new AbbreviationViewModel(testAbbreviation), viewModel.currentAbbreviationProperty().get());
-
- viewModel.deleteAbbreviation();
-
- assertEquals(5, viewModel.abbreviationsProperty().size());
- // check if the previous (the last) element is the current abbreviation
- assertEquals(viewModel.currentAbbreviationProperty().get(), viewModel.abbreviationsProperty().get(4));
- }
-
- @Test
- void testDeleteAbbreviationSelectsNextOne() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- viewModel.selectLastJournalFile();
- Abbreviation testAbbreviation = new Abbreviation("YetAnotherEntry", "YAE");
- addAbbrevaition(testAbbreviation);
- viewModel.currentAbbreviationProperty().set(viewModel.abbreviationsProperty().get(1));
- viewModel.deleteAbbreviation();
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testSaveAbbreviationsToFilesCreatesNewFilesWithWrittenAbbreviations(List> testFiles, List> testEntries) throws Exception {
+ Path testFile4Entries = createTestFile(testFiles.get(2));
+ Path testFile5EntriesWithDuplicate = createTestFile(testFiles.get(3));
- assertEquals(new AbbreviationViewModel(testAbbreviation), viewModel.currentAbbreviationProperty().get());
- }
-
- @Test
- void testSaveAbbreviationsToFilesCreatesNewFilesWithWrittenAbbreviations() throws Exception {
when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
viewModel.addNewFile();
viewModel.selectLastJournalFile();
@@ -386,7 +395,7 @@ void testSaveAbbreviationsToFilesCreatesNewFilesWithWrittenAbbreviations() throw
Abbreviation testAbbreviation = new Abbreviation("JabRefTestEntry", "JTE");
editAbbreviation(testAbbreviation);
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation)));
when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
@@ -395,47 +404,28 @@ void testSaveAbbreviationsToFilesCreatesNewFilesWithWrittenAbbreviations() throw
selectLastAbbreviation();
viewModel.deleteAbbreviation();
Abbreviation testAbbreviation1 = new Abbreviation("SomeOtherEntry", "SOE");
- addAbbrevaition(testAbbreviation1);
+ addAbbreviation(testAbbreviation1);
- assertEquals(5, viewModel.abbreviationsProperty().size());
+ assertEquals(4, viewModel.abbreviationsProperty().size());
assertTrue(viewModel.abbreviationsProperty().contains(new AbbreviationViewModel(testAbbreviation1)));
viewModel.saveJournalAbbreviationFiles();
- List expected = Arrays.asList(
- "Abbreviations;Abb;Abb",
- "Test Entry;TE;T",
- "MoreEntries;ME;M",
- "JabRefTestEntry;JTE;JTE");
- List actual = Files.readAllLines(testFile4Entries, StandardCharsets.UTF_8);
- assertEquals(expected, actual);
+ List actual = Files.readAllLines(testFile4Entries, StandardCharsets.UTF_8);
+ assertEquals(testEntries.get(0), actual);
- expected = Arrays.asList(
- "EntryEntry;EE;EE",
- "Abbreviations;Abb;Abb",
- "Test Entry;TE;T",
- "SomeOtherEntry;SOE;SOE");
actual = Files.readAllLines(testFile5EntriesWithDuplicate, StandardCharsets.UTF_8);
-
- assertEquals(expected, actual);
+ assertEquals(testEntries.get(1), actual);
}
- @Test
- void testSaveExternalFilesListToPreferences() {
- addFourTestFileToViewModelAndPreferences();
- List expected = Stream.of(testFile1Entries, testFile3Entries, testFile4Entries, testFile5EntriesWithDuplicate)
- .map(Path::toString)
- .collect(Collectors.toList());
- verify(abbreviationPreferences).setExternalJournalLists(expected);
+ @ParameterizedTest
+ @MethodSource("provideTestFiles")
+ void testSaveExternalFilesListToPreferences(List> testFiles) throws IOException {
+ addFourTestFileToViewModelAndPreferences(testFiles);
+ verify(preferencesService).storeJournalAbbreviationPreferences(any());
}
- private Path createTestFile(Path folder, String name, String content) throws Exception {
- Path file = folder.resolve(name);
- Files.writeString(file, content);
- return file;
- }
-
- private void addAbbrevaition(Abbreviation testAbbreviation) {
+ private void addAbbreviation(Abbreviation testAbbreviation) {
viewModel.addAbbreviation(testAbbreviation.getName(), testAbbreviation.getAbbreviation());
}
@@ -443,18 +433,6 @@ private void editAbbreviation(Abbreviation testAbbreviation) {
viewModel.editAbbreviation(testAbbreviation.getName(), testAbbreviation.getAbbreviation());
}
- private void addFourTestFileToViewModelAndPreferences() {
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile1Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile3Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile4Entries));
- viewModel.addNewFile();
- when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(testFile5EntriesWithDuplicate));
- viewModel.addNewFile();
- viewModel.storeSettings();
- }
-
/**
* Select the last abbreviation in the list of abbreviations
*/
@@ -462,4 +440,22 @@ private void selectLastAbbreviation() {
viewModel.currentAbbreviationProperty()
.set(viewModel.abbreviationsProperty().get(viewModel.abbreviationsCountProperty().get() - 1));
}
+
+ private void addFourTestFileToViewModelAndPreferences(List> testFiles) throws IOException {
+ for (List testFile : testFiles) {
+ when(dialogService.showFileSaveDialog(any())).thenReturn(Optional.of(createTestFile(testFile.get(0), testFile.get(1))));
+ viewModel.addNewFile();
+ }
+ viewModel.storeSettings();
+ }
+
+ private Path createTestFile(String name, String content) throws IOException {
+ Path file = this.tempFolder.resolve(name);
+ Files.writeString(file, content);
+ return file;
+ }
+
+ private Path createTestFile(List testFile) throws IOException {
+ return createTestFile(testFile.get(0), testFile.get(1));
+ }
}
diff --git a/src/test/java/org/jabref/logic/importer/fetcher/ACMPortalFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/ACMPortalFetcherTest.java
index 02e98ab4939..e3180d06c7d 100644
--- a/src/test/java/org/jabref/logic/importer/fetcher/ACMPortalFetcherTest.java
+++ b/src/test/java/org/jabref/logic/importer/fetcher/ACMPortalFetcherTest.java
@@ -50,14 +50,7 @@ void searchByQueryFindsEntry() throws Exception {
.withField(StandardField.TITLE, "The relationship of code churn and architectural violations in the open source software JabRef")
.withField(StandardField.URL, "https://doi.org/10.1145/3129790.3129810")
.withField(StandardField.PAGETOTAL, "7")
- .withField(StandardField.PAGES, "152–158"),
- new BibEntry(StandardEntryType.Book)
- .withField(StandardField.YEAR, "2016")
- .withField(StandardField.TITLE, "Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering")
- .withField(StandardField.LOCATION, "Seattle, WA, USA")
- .withField(StandardField.ISBN, "9781450342186")
- .withField(StandardField.PUBLISHER, "Association for Computing Machinery")
- .withField(StandardField.ADDRESS, "New York, NY, USA")
+ .withField(StandardField.PAGES, "152–158")
);
List fetchedEntries = fetcher.performSearch("The relationship of code churn and architectural violations in the open source software JabRef");
diff --git a/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java
index 8fe530bcfce..b5ead872a6f 100644
--- a/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java
+++ b/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java
@@ -48,7 +48,7 @@ public void setUp() {
abram2017.setField(StandardField.AUTHOR, "Ittai Abraham and Dahlia Malkhi and Kartik Nayak and Ling Ren and Alexander Spiegelman");
abram2017.setField(StandardField.DATE, "2017-11-18");
abram2017.setField(StandardField.HOWPUBLISHED, "Cryptology ePrint Archive, Report 2017/1118");
- abram2017.setField(StandardField.NOTE, "\\url{https://eprint.iacr.org/2017/1118}");
+ abram2017.setField(StandardField.NOTE, "\\url{https://ia.cr/2017/1118}");
abram2017.setField(StandardField.TITLE, "Solida: A Blockchain Protocol Based on Reconfigurable Byzantine Consensus");
abram2017.setField(StandardField.URL, "https://eprint.iacr.org/2017/1118/20171124:064527");
abram2017.setField(StandardField.VERSION, "20171124:064527");
@@ -61,7 +61,7 @@ public void setUp() {
beierle2016.setField(StandardField.AUTHOR, "Christof Beierle and Thorsten Kranz and Gregor Leander");
beierle2016.setField(StandardField.DATE, "2017-02-17");
beierle2016.setField(StandardField.HOWPUBLISHED, "Cryptology ePrint Archive, Report 2016/119");
- beierle2016.setField(StandardField.NOTE, "\\url{https://eprint.iacr.org/2016/119}");
+ beierle2016.setField(StandardField.NOTE, "\\url{https://ia.cr/2016/119}");
beierle2016.setField(StandardField.TITLE, "Lightweight Multiplication in GF(2^n) with Applications to MDS Matrices");
beierle2016.setField(StandardField.URL, "https://eprint.iacr.org/2016/119/20170217:150415");
beierle2016.setField(StandardField.VERSION, "20170217:150415");
@@ -74,7 +74,7 @@ public void setUp() {
delgado2017.setField(StandardField.AUTHOR, "Sergi Delgado-Segura and Cristina Pérez-Solà and Guillermo Navarro-Arribas and Jordi Herrera-Joancomartí");
delgado2017.setField(StandardField.DATE, "2018-01-19");
delgado2017.setField(StandardField.HOWPUBLISHED, "Cryptology ePrint Archive, Report 2017/1095");
- delgado2017.setField(StandardField.NOTE, "\\url{https://eprint.iacr.org/2017/1095}");
+ delgado2017.setField(StandardField.NOTE, "\\url{https://ia.cr/2017/1095}");
delgado2017.setField(StandardField.TITLE, "Analysis of the Bitcoin UTXO set");
delgado2017.setField(StandardField.URL, "https://eprint.iacr.org/2017/1095/20180119:113352");
delgado2017.setField(StandardField.VERSION, "20180119:113352");
diff --git a/src/test/java/org/jabref/logic/importer/fetcher/ZbMATHTest.java b/src/test/java/org/jabref/logic/importer/fetcher/ZbMATHTest.java
index 5d281fa7213..a78b9b0227c 100644
--- a/src/test/java/org/jabref/logic/importer/fetcher/ZbMATHTest.java
+++ b/src/test/java/org/jabref/logic/importer/fetcher/ZbMATHTest.java
@@ -35,7 +35,8 @@ void setUp() throws Exception {
donaldsonEntry.setCitationKey("zbMATH03800580");
donaldsonEntry.setField(StandardField.AUTHOR, "S. K. {Donaldson}");
donaldsonEntry.setField(StandardField.JOURNAL, "Journal of Differential Geometry");
- donaldsonEntry.setField(StandardField.ISSN, "0022-040X; 1945-743X/e");
+ donaldsonEntry.setField(StandardField.DOI, "10.4310/jdg/1214437665");
+ donaldsonEntry.setField(StandardField.ISSN, "0022-040X");
donaldsonEntry.setField(StandardField.LANGUAGE, "English");
donaldsonEntry.setField(StandardField.KEYWORDS, "57N13 57R10 53C05 58J99 57R65");
donaldsonEntry.setField(StandardField.PAGES, "279--315");
diff --git a/src/test/java/org/jabref/logic/importer/fileformat/ACMPortalParserTest.java b/src/test/java/org/jabref/logic/importer/fileformat/ACMPortalParserTest.java
index 245461167c9..66bb5759249 100644
--- a/src/test/java/org/jabref/logic/importer/fileformat/ACMPortalParserTest.java
+++ b/src/test/java/org/jabref/logic/importer/fileformat/ACMPortalParserTest.java
@@ -72,12 +72,12 @@ void testParseEntries() throws IOException, ParseException {
for (BibEntry bibEntry : bibEntries) {
bibEntry.clearField(StandardField.ABSTRACT);
}
- assertEquals(searchEntryList, bibEntries);
+ assertEquals(searchEntryList.get(0), bibEntries.get(0));
}
@Test
void testParseDoiSearchPage() throws ParseException, IOException {
- List testDoiList = List.of("10.1145/3129790.3129810", "10.1145/2950290");
+ List testDoiList = List.of("10.1145/3129790.3129810");
CookieHandler.setDefault(new CookieManager());
List doiList = parser.parseDoiSearchPage(new URLDownload(searchUrl).asInputStream());
assertEquals(testDoiList, doiList);
diff --git a/src/test/java/org/jabref/logic/importer/util/FileFieldParserTest.java b/src/test/java/org/jabref/logic/importer/util/FileFieldParserTest.java
index 11c74196d5c..4ccf9a150b6 100644
--- a/src/test/java/org/jabref/logic/importer/util/FileFieldParserTest.java
+++ b/src/test/java/org/jabref/logic/importer/util/FileFieldParserTest.java
@@ -136,6 +136,18 @@ private static Stream stringsToParseTestData() throws Exception {
Arguments.of(
Collections.singletonList(new LinkedFile("desc", Path.of("file.pdf"), "PDF")),
"desc:file.pdf:PDF:asdf"
+ ),
+
+ // url
+ Arguments.of(
+ Collections.singletonList(new LinkedFile(new URL("https://books.google.de/"), "")),
+ "https://books.google.de/"
+ ),
+
+ // url as file
+ Arguments.of(
+ Collections.singletonList(new LinkedFile("", new URL("http://ceur-ws.org/Vol-438"), "URL")),
+ ":http\\://ceur-ws.org/Vol-438:URL"
)
);
}