/* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) * any later version. * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package org.esa.snap.rcp.layermanager.layersrc; import org.esa.snap.ui.UserInputHistory; import org.junit.Test; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import java.util.prefs.BackingStoreException; import java.util.prefs.NodeChangeListener; import java.util.prefs.PreferenceChangeListener; import java.util.prefs.Preferences; import static org.junit.Assert.*; public class HistoryComboBoxModelTest { @Test public void testAddElement() { final HistoryComboBoxModel model = new HistoryComboBoxModel(new UserInputHistory(3, "historyItem")); assertEquals(0, model.getSize()); model.setSelectedItem("one"); assertEquals(1, model.getSize()); model.setSelectedItem("two"); model.setSelectedItem("three"); assertEquals(3, model.getSize()); assertEquals("three", model.getElementAt(0)); assertEquals("two", model.getElementAt(1)); assertEquals("one", model.getElementAt(2)); model.setSelectedItem("four"); assertEquals(3, model.getSize()); assertEquals("four", model.getElementAt(0)); assertEquals("three", model.getElementAt(1)); assertEquals("two", model.getElementAt(2)); model.setSelectedItem("five"); assertEquals(3, model.getSize()); assertEquals("five", model.getElementAt(0)); assertEquals("four", model.getElementAt(1)); assertEquals("three", model.getElementAt(2)); } @Test public void testAddElementWithInnitilaizedProperties() { final Preferences preferences = new DummyPreferences(); preferences.put("historyItem.0", "one"); preferences.put("historyItem.1", "two"); final UserInputHistory history = new UserInputHistory(3, "historyItem"); history.initBy(preferences); final HistoryComboBoxModel model = new HistoryComboBoxModel(history); assertEquals(2, model.getSize()); assertEquals("one", model.getElementAt(0)); assertEquals("two", model.getElementAt(1)); model.setSelectedItem("three"); assertEquals(3, model.getSize()); assertEquals("three", model.getElementAt(0)); assertEquals("one", model.getElementAt(1)); assertEquals("two", model.getElementAt(2)); model.setSelectedItem("four"); assertEquals(3, model.getSize()); assertEquals("four", model.getElementAt(0)); assertEquals("three", model.getElementAt(1)); assertEquals("one", model.getElementAt(2)); } @Test public void testValidation() { final Preferences preferences = new DummyPreferences(); preferences.put("historyItem.0", "one"); preferences.put("historyItem.1", "two"); preferences.put("historyItem.2", "three"); final UserInputHistory history = new UserInputHistory(3, "historyItem") { @Override protected boolean isValidItem(String item) { return "two".equals(item); } }; history.initBy(preferences); final HistoryComboBoxModel model = new HistoryComboBoxModel(history); assertEquals(1, model.getSize()); assertEquals("two", model.getElementAt(0)); } @Test public void testSetSelected() { final Preferences preferences = new DummyPreferences(); preferences.put("historyItem.0", "one"); preferences.put("historyItem.1", "two"); final UserInputHistory history = new UserInputHistory(3, "historyItem"); history.initBy(preferences); final HistoryComboBoxModel model = new HistoryComboBoxModel(history); assertEquals(2, model.getSize()); assertEquals("one", model.getElementAt(0)); assertEquals("two", model.getElementAt(1)); model.setSelectedItem("two"); assertEquals(2, model.getSize()); assertEquals("two", model.getElementAt(0)); assertEquals("one", model.getElementAt(1)); model.setSelectedItem("three"); assertEquals(3, model.getSize()); assertEquals("three", model.getElementAt(0)); assertEquals("two", model.getElementAt(1)); assertEquals("one", model.getElementAt(2)); model.setSelectedItem("one"); assertEquals(3, model.getSize()); assertEquals("one", model.getElementAt(0)); assertEquals("three", model.getElementAt(1)); assertEquals("two", model.getElementAt(2)); model.setSelectedItem("four"); assertEquals(3, model.getSize()); assertEquals("four", model.getElementAt(0)); assertEquals("one", model.getElementAt(1)); assertEquals("three", model.getElementAt(2)); } @Test public void testSetSelectedOnEmptyHistory() { final HistoryComboBoxModel model = new HistoryComboBoxModel(new UserInputHistory(3, "historyItem")); assertEquals(0, model.getSize()); model.setSelectedItem("one"); assertEquals(1, model.getSize()); assertEquals("one", model.getElementAt(0)); model.setSelectedItem("two"); assertEquals(2, model.getSize()); assertEquals("two", model.getElementAt(0)); assertEquals("one", model.getElementAt(1)); } @Test public void testLoadHistory() { final Preferences preferences = new DummyPreferences(); preferences.put("historyItem.0", "one"); final UserInputHistory history = new UserInputHistory(3, "historyItem"); history.initBy(preferences); final HistoryComboBoxModel model = new HistoryComboBoxModel(history); assertEquals(1, model.getSize()); preferences.put("historyItem.1", "two"); preferences.put("historyItem.2", "three"); model.getHistory().initBy(preferences); assertEquals(3, model.getSize()); assertEquals("one", model.getElementAt(0)); assertEquals("two", model.getElementAt(1)); assertEquals("three", model.getElementAt(2)); } @Test public void testLoadHistoryOverwritesCurrentModel() { final Preferences preferences = new DummyPreferences(); preferences.put("historyItem.0", "one"); final UserInputHistory history = new UserInputHistory(3, "historyItem"); history.initBy(preferences); final HistoryComboBoxModel model = new HistoryComboBoxModel(history); assertEquals(1, model.getSize()); model.setSelectedItem("two"); model.setSelectedItem("three"); assertEquals(3, model.getSize()); preferences.put("historyItem.1", "two2"); preferences.put("historyItem.2", "three3"); model.getHistory().initBy(preferences); assertEquals(3, model.getSize()); assertEquals("one", model.getElementAt(0)); assertEquals("two2", model.getElementAt(1)); assertEquals("three3", model.getElementAt(2)); } @Test public void testSaveHistory() { final HistoryComboBoxModel model = new HistoryComboBoxModel(new UserInputHistory(3, "historyItem")); model.setSelectedItem("one"); model.setSelectedItem("two"); final Preferences preferences = new DummyPreferences(); model.getHistory().copyInto(preferences); assertEquals("two", preferences.get("historyItem.0", "")); assertEquals("one", preferences.get("historyItem.1", "")); assertEquals("", preferences.get("historyItem.2", "")); model.setSelectedItem("three"); model.getHistory().copyInto(preferences); assertEquals("three", preferences.get("historyItem.0", "")); assertEquals("two", preferences.get("historyItem.1", "")); assertEquals("one", preferences.get("historyItem.2", "")); } private class DummyPreferences extends Preferences { Map<String, Object> propertyMap; DummyPreferences() { propertyMap = new HashMap<String, Object>(); } @Override public void put(String key, String value) { propertyMap.put(key, value); } @Override public String get(String key, String def) { final Object value = propertyMap.get(key); if (value != null) { return value.toString(); } return def; } @Override public void remove(String key) { } @Override public void clear() throws BackingStoreException { } @Override public void putInt(String key, int value) { propertyMap.put(key, value); } @Override public int getInt(String key, int def) { final Object value = propertyMap.get(key); if (value != null) { return Integer.parseInt(value.toString()); } return def; } @Override public void putLong(String key, long value) { } @Override public long getLong(String key, long def) { return 0; } @Override public void putBoolean(String key, boolean value) { } @Override public boolean getBoolean(String key, boolean def) { return false; } @Override public void putFloat(String key, float value) { } @Override public float getFloat(String key, float def) { return 0; } @Override public void putDouble(String key, double value) { } @Override public double getDouble(String key, double def) { return 0; } @Override public void putByteArray(String key, byte[] value) { } @Override public byte[] getByteArray(String key, byte[] def) { return new byte[0]; } @Override public String[] keys() throws BackingStoreException { return new String[0]; } @Override public String[] childrenNames() throws BackingStoreException { return new String[0]; } @Override public Preferences parent() { return null; } @Override public Preferences node(String pathName) { return null; } @Override public boolean nodeExists(String pathName) throws BackingStoreException { return false; } @Override public void removeNode() throws BackingStoreException { } @Override public String name() { return null; } @Override public String absolutePath() { return null; } @Override public boolean isUserNode() { return false; } @Override public String toString() { return null; } @Override public void flush() throws BackingStoreException { } @Override public void sync() throws BackingStoreException { } @Override public void addPreferenceChangeListener(PreferenceChangeListener pcl) { } @Override public void removePreferenceChangeListener(PreferenceChangeListener pcl) { } @Override public void addNodeChangeListener(NodeChangeListener ncl) { } @Override public void removeNodeChangeListener(NodeChangeListener ncl) { } @Override public void exportNode(OutputStream os) throws IOException, BackingStoreException { } @Override public void exportSubtree(OutputStream os) throws IOException, BackingStoreException { } } }