// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: TestUserPreferences.java,v 1.28 2008/02/28 15:59:46 spyromus Exp $ // package com.salas.bb.domain.prefs; import com.salas.bb.utils.StringUtils; import junit.framework.TestCase; import java.lang.reflect.Method; import java.util.prefs.Preferences; import static com.salas.bb.domain.prefs.UserPreferences.*; /** * @see UserPreferences */ public class TestUserPreferences extends TestCase { private UserPreferences prefs; private Preferences p; protected void setUp() throws Exception { prefs = new UserPreferences(); p = Preferences.userNodeForPackage(TestUserPreferences.class); } /** * Checks each property. * * @throws Exception in case of any errors. */ public void testPreferences() throws Exception { checkIntProperty(PROP_AUTO_PURGE_INTERVAL_MINUTES, KEY_AUTO_PURGE_INTERVAL_MINUTES); checkBooleanProperty(PROP_BACKGROUND_DEBUG_MODE, KEY_BACKGROUND_DEBUG_MODE); checkStringProperty(PROP_INTERNET_BROWSER, KEY_INTERNET_BROWSER); checkBooleanProperty(PROP_MARK_READ_WHEN_CHANGING_CHANNELS, KEY_MARK_READ_WHEN_CHANGING_CHANNELS); checkBooleanProperty(PROP_MARK_READ_WHEN_CHANGING_GUIDES, KEY_MARK_READ_WHEN_CHANGING_GUIDES); checkIntProperty(PROP_PURGE_COUNT, KEY_PURGE_COUNT); checkIntProperty(PROP_RSS_POLL_MIN, KEY_RSS_POLL_MIN); checkBooleanProperty(PROP_MARK_READ_AFTER_DELAY, KEY_MARK_READ_AFTER_DELAY); checkIntProperty(PROP_MARK_READ_AFTER_SECONDS, KEY_MARK_READ_AFTER_SECONDS); checkBooleanProperty(PROP_USE_PERSISTENCE, KEY_USE_PERSISTENCE); checkIntProperty(PROP_GOOD_CHANNEL_STARZ, KEY_GOOD_CHANNEL_STARZ); checkBooleanProperty(PROP_SORTING_ENABLED); checkBooleanProperty(PROP_REVERSED_SORT_BY_CLASS_1); checkBooleanProperty(PROP_REVERSED_SORT_BY_CLASS_2); checkIntProperty(PROP_SORT_BY_CLASS_1); checkIntProperty(PROP_SORT_BY_CLASS_2); checkIntProperty(PROP_FEED_SELECTION_DELAY); checkBooleanProperty(PROP_PRESERVE_UNREAD); checkBooleanProperty(PROP_COPY_LINKS_IN_HREF_FORMAT); checkBooleanProperty(PROP_AA_TEXT); checkIntProperty(PROP_TAGS_STORAGE); checkStringProperty(PROP_TAGS_DELICIOUS_USER); checkStringProperty(PROP_TAGS_DELICIOUS_PASSWORD); checkBooleanProperty(PROP_TAGS_AUTOFETCH); checkBooleanProperty(PROP_CHECKING_FOR_UPDATES_ON_STARTUP); checkBooleanProperty(PROP_SHOW_TOOLBAR_LABELS); checkBooleanProperty(PROP_SHOW_UNREAD_BUTTON_MENU); checkBooleanProperty(PROP_SHOW_TOOLBAR); checkLongProperty(PROP_READING_LIST_UPDATE_PERIOD); checkIntProperty(PROP_FEED_IMPORT_LIMIT); checkBooleanProperty(PROP_UPDATE_FEEDS); checkBooleanProperty(PROP_UPDATE_READING_LISTS); checkIntProperty(PROP_ON_READING_LIST_UPDATE_ACTIONS); checkIntProperty(PROP_GUIDE_SELECTION_MODE); checkBooleanProperty(PROP_PROXY_ENABLED); checkStringProperty(PROP_PROXY_HOST); checkIntProperty(PROP_PROXY_PORT); checkBooleanProperty(PROP_SHOWING_NEW_PUB_ALERT); checkBooleanProperty(PROP_BROWSE_ON_DBL_CLICK); checkBooleanProperty(PROP_PING_ON_RL_PUBLICATION); checkStringProperty(PROP_PING_ON_RL_PUBLICATION_URL); checkBooleanProperty(PROP_NOTIFICATIONS_ENABLED); checkBooleanProperty(PROP_SOUND_ON_NEW_ARTICLES); checkBooleanProperty(PROP_SOUND_ON_NO_UNREAD); checkIntProperty(PROP_NOTIFICATIONS_SHOW_PERIOD); checkStringProperty(PROP_NO_DISCOVERY_EXTENSIONS); checkBooleanProperty(PROP_SHOW_APPICON_IN_SYSTRAY); checkBooleanProperty(PROP_MINIMIZE_TO_SYSTRAY); checkIntProperty(PROP_DIB_MODE); checkIntProperty(PROP_BRIEF_SENTENCES); checkIntProperty(PROP_BRIEF_MIN_LENGTH); checkIntProperty(PROP_BRIEF_MAX_LENGTH); checkBooleanProperty(PROP_PIN_TAGGING); checkStringProperty(PROP_PIN_TAGS); checkIntProperty(PROP_PAGE_SIZE); checkStringProperty(PROP_WH_IGNORE); checkBooleanProperty(PROP_WH_NOSELFLINKS); checkBooleanProperty(PROP_WH_SUPPRESS_SAME_SOURCE_LINKS); checkLongProperty(PROP_WH_SETTINGS_CHANGE_TIME); checkBooleanProperty(PROP_ALWAYS_USE_ENGLISH); checkBooleanProperty(PROP_AUTO_EXPAND_MINI); } /** * Checks the boolean property with key equal to name. * * @param name name of property. * * @throws Exception in case of any problems. */ private void checkBooleanProperty(String name) throws Exception { checkBooleanProperty(name, name); } /** * Checks the boolean property. * * @param name name of property. * @param key key in preferences storage the property associated with. * * @throws Exception in case of any problems. */ private void checkBooleanProperty(String name, String key) throws Exception { Method propsGetter = Preferences.class.getMethod("getBoolean", String.class, Boolean.TYPE); checkProperty(name, key, Boolean.TYPE, Boolean.TRUE, Boolean.FALSE, propsGetter); } /** * Checks the integer property with key equal to name. * * @param name name of property. * * @throws Exception in case of any problems. */ private void checkIntProperty(String name) throws Exception { checkIntProperty(name, name); } /** * Checks the integer property. * * @param name name of property. * @param key key in preferences storage the property associated with. * * @throws Exception in case of any problems. */ private void checkIntProperty(String name, String key) throws Exception { Method propsGetter = Preferences.class.getMethod("getInt", String.class, Integer.TYPE); checkProperty(name, key, Integer.TYPE, 1, 2, propsGetter); } /** * Checks the long property with key equal to name. * * @param name name of property. * * @throws Exception in case of any problems. */ private void checkLongProperty(String name) throws Exception { checkLongProperty(name, name); } /** * Checks the long property. * * @param name name of property. * @param key key in preferences storage the property associated with. * * @throws Exception in case of any problems. */ private void checkLongProperty(String name, String key) throws Exception { Method propsGetter = Preferences.class.getMethod("getLong", String.class, Long.TYPE); checkProperty(name, key, Long.TYPE, (long)1, (long)2, propsGetter); } /** * Checks the string property. * * @param name name of property. * * @throws Exception in case of any problems. */ private void checkStringProperty(String name) throws Exception { checkStringProperty(name, name); } /** * Checks the string property. * * @param name name of property. * @param key key in preferences storage the property associated with. * * @throws Exception in case of any problems. */ private void checkStringProperty(String name, String key) throws Exception { Method propsGetter = Preferences.class.getMethod("get", String.class, String.class); checkProperty(name, key, String.class, "a", "b", propsGetter); } /** * Checks property of any type. * * @param name name of property. * @param key key in preferences storage the property associated with. * @param paramClass class of property. * @param s1 first sample value. * @param s2 second sample value. * @param propsGetter getter method for preferences storage. * * @throws Exception in case of any problems. */ private void checkProperty(String name, String key, Class paramClass, Object s1, Object s2, Method propsGetter) throws Exception { String capName = StringUtils.capitalise(name); Class clazz = UserPreferences.class; Method getter = clazz.getMethod(((Boolean.TYPE == paramClass) ? "is" : "get") + capName); Method setter = clazz.getMethod("set" + capName, paramClass); // Store test setter.invoke(prefs, s1); prefs.storeIn(p); assertEquals(s1, getter.invoke(prefs)); assertEquals(propsGetter.invoke(p, key, s2), s1); setter.invoke(prefs, s2); prefs.storeIn(p); assertEquals(s2, getter.invoke(prefs)); assertEquals(s2, propsGetter.invoke(p, key, s1)); // Restore test p.clear(); setter.invoke(prefs, s1); prefs.storeIn(p); setter.invoke(prefs, s2); prefs.restoreFrom(p); assertEquals(s1, getter.invoke(prefs)); } }