package com.limegroup.gnutella.settings; import java.awt.Color; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Properties; import junit.framework.Test; import junit.framework.TestSuite; import com.limegroup.gnutella.util.BaseTestCase; import com.limegroup.gnutella.util.CommonUtils; /** * Tests the setting for character arrays. */ public class SettingTest extends BaseTestCase { private static final long EXPIRY_INTERVAL = 15 * 24 * 60 * 60 * 1000l; //15 days private static final String LAST_EXPIRE_TIME = "LAST_EXPIRE_TIME"; File settingsFile; private final char[] chars = {'a','b','c'}; private final String[] strings = new String[]{"string1", "string2", "string3"}; private File[] files; class TestSettings { Properties DEF_PROPS; Properties PROPS; SettingsFactory FACTORY; BooleanSetting BOOL_SETTING; ByteSetting BYTE_SETTING; ColorSetting COLOR_SETTING; FileSetting FILE_SETTING; IntSetting INT_SETTING; LongSetting LONG_SETTING; StringSetting STRING_SETTING; CharArraySetting CHAR_ARRAY_SETTING; StringArraySetting STRING_ARRAY_SETTING; FileArraySetting FILE_ARRAY_SETTING; IntSetting EXPIRABLE_INT_SETTING; BooleanSetting EXPIRABLE_BOOLEAN_SETTING; ProxyFileSetting PROXY_FILE_SETTING; TestSettings(File file) throws IOException { FACTORY = new SettingsFactory(file); BOOL_SETTING = FACTORY.createBooleanSetting("BOOL_SETTING", true); BYTE_SETTING = FACTORY.createByteSetting("BYTE_SETTING", (byte)23); COLOR_SETTING = FACTORY.createColorSetting("COLOR_SETTING", new Color(255, 127, 63)); FILE_SETTING = FACTORY.createFileSetting("FILE_SETTING", new File("/temp/turkey.txt")); INT_SETTING = FACTORY.createIntSetting("INT_SETTING", 143); LONG_SETTING = FACTORY.createLongSetting("LONG_SETTING", 666666); STRING_SETTING = FACTORY.createStringSetting("STRING_SETTING", "terrific"); CHAR_ARRAY_SETTING = FACTORY.createCharArraySetting("CHAR_ARRAY_SETTING", chars); STRING_ARRAY_SETTING = FACTORY.createStringArraySetting("STRING_ARRAY_SETTING", strings); FILE_ARRAY_SETTING = FACTORY.createFileArraySetting("FILE_ARRAY_SETTING", files); EXPIRABLE_INT_SETTING = FACTORY.createExpirableIntSetting("EXPIRABLE_INT_SETTING", 12061980); EXPIRABLE_BOOLEAN_SETTING = FACTORY.createExpirableBooleanSetting("EXPIRABLE_BOOLEAN_SETTING", false); PROXY_FILE_SETTING = FACTORY.createProxyFileSetting ("PROXY_FILE_SETTING", FILE_SETTING); FACTORY.getProperties().setProperty(LAST_EXPIRE_TIME, String.valueOf(System.currentTimeMillis())); } } public SettingTest(java.lang.String testName) { super(testName); } public static void main(java.lang.String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite(SettingTest.class); return suite; } public void setUp() throws Exception { settingsFile = new File(getSaveDirectory(), "testSettings.props"); settingsFile.delete(); } public void tearDown() { settingsFile.delete(); } public void testSetting() throws Exception { // Necessary to work on OSX without the graphics environment .. // harmless elsewhere. System.setProperty("java.awt.headless", "true"); String testFilePath; String testFilePath2; File[] testFileArray; if(CommonUtils.isUnix() || CommonUtils.isMacOSX()) { testFilePath = "/mickey-mouse.com"; testFilePath2 = "/temp/turkey.txt"; testFileArray = new File[] { new File("/temp/A"), new File("/temp/B") }; } else { // assume we're on windows testFilePath = "c:/mickey-mouse.com"; testFilePath2 = "c:/temp/turkey.txt"; testFileArray = new File[] { new File("c:/temp/A"), new File("c:/temp/B") }; } files = new File[]{ new File(testFilePath), new File(testFilePath2) }; // Delete any existing file and create a new set of settings */ TestSettings settings = new TestSettings(settingsFile); TestSettings settings2 = new TestSettings(settingsFile); // Confirm all of the default values // (Which requires one full conversion to and from their string values assertEquals("Bool default", true, settings.BOOL_SETTING.getValue()); assertEquals("Byte default", (byte)23, settings.BYTE_SETTING.getValue()); assertEquals("Color default", new Color(255,127,63), settings.COLOR_SETTING.getValue()); assertEquals("Int default", 143, settings.INT_SETTING.getValue()); assertEquals("Long default", 666666, settings.LONG_SETTING.getValue()); assertEquals("String default", "terrific", settings.STRING_SETTING.getValue()); assertTrue("char arrays should be equal", Arrays.equals(new char[]{'a','b','c'}, settings.CHAR_ARRAY_SETTING.getValue())); assertTrue("string arrays should be equal", Arrays.equals(new String[]{"string1", "string2", "string3"}, settings.STRING_ARRAY_SETTING.getValue())); assertTrue("file arrays should be equal", Arrays.equals(files, settings.FILE_ARRAY_SETTING.getValue())); assertEquals("Expiring Int default", 12061980, settings.EXPIRABLE_INT_SETTING.getValue()); assertEquals("Expiring Boolean default", false, settings.EXPIRABLE_BOOLEAN_SETTING.getValue()); // Confirm that we can set everything settings.BOOL_SETTING.setValue(false); settings.BYTE_SETTING.setValue((byte)6); settings.COLOR_SETTING.setValue(new Color(66, 44, 67)); settings.FILE_SETTING.setValue(new File(testFilePath)); settings.INT_SETTING.setValue(234); settings.LONG_SETTING.setValue(555555); settings.STRING_SETTING.setValue("OK so far"); settings.CHAR_ARRAY_SETTING.setValue(new char[] {'d', 'e', 'f'}); settings.STRING_ARRAY_SETTING.setValue(new String[]{"OK", "so", "far"}); settings.FILE_ARRAY_SETTING.setValue(new File[]{new File("/temp/A"), new File("/temp/B")}); settings.EXPIRABLE_INT_SETTING.setValue(0xFFFF); settings.EXPIRABLE_BOOLEAN_SETTING.setValue(true); assertEquals("Bool set", false, settings.BOOL_SETTING.getValue()); assertEquals("Byte set", (byte)6, settings.BYTE_SETTING.getValue()); assertEquals("Color set", new Color(66,44,67), settings.COLOR_SETTING.getValue()); assertEquals("File set", new File(testFilePath), settings.FILE_SETTING.getValue()); assertEquals("Int set", 234, settings.INT_SETTING.getValue()); assertEquals("Long set", 555555, settings.LONG_SETTING.getValue()); assertEquals("String set", "OK so far", settings.STRING_SETTING.getValue()); assertTrue("char arrays should be equal", Arrays.equals(new char[]{'d','e','f'}, settings.CHAR_ARRAY_SETTING.getValue())); assertTrue("string arrays should be equal", Arrays.equals(new String[]{"OK", "so", "far"}, settings.STRING_ARRAY_SETTING.getValue())); assertTrue("file arrays should be equal", Arrays.equals(testFileArray, settings.FILE_ARRAY_SETTING.getValue())); assertEquals("Expiring Int set", 0xFFFF, settings.EXPIRABLE_INT_SETTING.getValue()); assertEquals("Expiring Boolean set", true, settings.EXPIRABLE_BOOLEAN_SETTING.getValue()); // Write property to file and confirm that everything reloads properly settings.FACTORY.save(); settings = new TestSettings(settingsFile); assertEquals("Bool set", false, settings.BOOL_SETTING.getValue()); assertEquals("Byte set", (byte)6, settings.BYTE_SETTING.getValue()); assertEquals("Color set", new Color(66,44,67), settings.COLOR_SETTING.getValue()); assertEquals("File set", new File(testFilePath), settings.FILE_SETTING.getValue()); assertEquals("Int set", 234, settings.INT_SETTING.getValue()); assertEquals("Long set", 555555, settings.LONG_SETTING.getValue()); assertEquals("String set", "OK so far", settings.STRING_SETTING.getValue()); assertTrue("char arrays should be equal", Arrays.equals(new char[]{'d','e','f'}, settings.CHAR_ARRAY_SETTING.getValue())); assertTrue("string arrays should be equal", Arrays.equals(new String[]{"OK", "so", "far"}, settings.STRING_ARRAY_SETTING.getValue())); assertTrue("file arrays should be equal", Arrays.equals(testFileArray, settings.FILE_ARRAY_SETTING.getValue())); assertEquals("Expiring Int set", 0xFFFF, settings.EXPIRABLE_INT_SETTING.getValue()); assertEquals("Expiring Boolean set", true, settings.EXPIRABLE_BOOLEAN_SETTING.getValue()); // Confirm that the backup object still has its default settings assertEquals("Bool default", true, settings2.BOOL_SETTING.getValue()); assertEquals("Byte default", (byte)23, settings2.BYTE_SETTING.getValue()); assertEquals("Color default", new Color(255,127,63), settings2.COLOR_SETTING.getValue()); assertEquals("File default", new File(testFilePath2), settings2.FILE_SETTING.getValue()); assertEquals("Int default", 143, settings2.INT_SETTING.getValue()); assertEquals("Long default", 666666, settings2.LONG_SETTING.getValue()); assertEquals("String default", "terrific", settings2.STRING_SETTING.getValue()); assertTrue("char arrays should be equal", Arrays.equals(new char[]{'a','b','c'}, settings2.CHAR_ARRAY_SETTING.getValue())); assertTrue("string arrays should be equal", Arrays.equals(new String[]{ "string1", "string2", "string3" }, settings2.STRING_ARRAY_SETTING.getValue())); assertTrue("file arrays should be equal", Arrays.equals(files, settings2.FILE_ARRAY_SETTING.getValue())); assertEquals("Expiring Int default", 12061980, settings2.EXPIRABLE_INT_SETTING.getValue()); assertEquals("Expiring Boolean default", false, settings2.EXPIRABLE_BOOLEAN_SETTING.getValue()); // reload it from the real file and make sure we got everything settings2.FACTORY.reload(); assertEquals("Bool set", false, settings2.BOOL_SETTING.getValue()); assertEquals("Byte set", (byte)6, settings2.BYTE_SETTING.getValue()); assertEquals("Color set", new Color(66,44,67), settings2.COLOR_SETTING.getValue()); assertEquals("File set", new File(testFilePath), settings2.FILE_SETTING.getValue()); assertEquals("Int set", 234, settings2.INT_SETTING.getValue()); assertEquals("Long set", 555555, settings2.LONG_SETTING.getValue()); assertEquals("String set", "OK so far", settings2.STRING_SETTING.getValue()); assertTrue("char arrays should be equal", Arrays.equals(new char[]{'d','e','f'}, settings2.CHAR_ARRAY_SETTING.getValue())); assertTrue("string arrays should be equal", Arrays.equals(new String[]{"OK", "so", "far"}, settings2.STRING_ARRAY_SETTING.getValue())); assertTrue("file arrays should be equal", Arrays.equals(testFileArray, settings2.FILE_ARRAY_SETTING.getValue())); // proxy file settings // proxy is still unset so it should return the default setting's file assertEquals("Proxy default comparison", settings2.PROXY_FILE_SETTING.getValue(), settings2.FILE_SETTING.getValue()); // set new value File proxyFile = new File("proxy-file-test"); settings2.PROXY_FILE_SETTING.setValue(proxyFile); assertNotEquals("Proxy set value comparison", settings2.PROXY_FILE_SETTING.getValue(), settings2.FILE_SETTING.getValue()); // revert to default settings2.PROXY_FILE_SETTING.revertToDefault(); assertEquals("Proxy default comparison after revert", settings2.PROXY_FILE_SETTING.getValue(), settings2.FILE_SETTING.getValue()); assertEquals("Expiring Int set", 0xFFFF, settings2.EXPIRABLE_INT_SETTING.getValue()); assertEquals("Expiring Boolean set", true, settings2.EXPIRABLE_BOOLEAN_SETTING.getValue()); settings2.FACTORY.save(); // Change the date to NOW - 14days settings = new TestSettings(settingsFile); Properties PROPS = settings.FACTORY.getProperties(); PROPS.setProperty(LAST_EXPIRE_TIME, String.valueOf(System.currentTimeMillis()-EXPIRY_INTERVAL)); settings.FACTORY.save(); // Do they have their default values now? settings2 = new TestSettings(settingsFile); assertEquals("Expiring Int default", 12061980, settings2.EXPIRABLE_INT_SETTING.getValue()); assertEquals("Expiring Int default", true, settings2.EXPIRABLE_INT_SETTING.isDefault()); assertEquals("Expiring Boolean default", false, settings2.EXPIRABLE_BOOLEAN_SETTING.getValue()); assertEquals("Expiring Boolean default", true, settings2.EXPIRABLE_BOOLEAN_SETTING.isDefault()); } /** * Tests the methods of FileArraySetting. */ public void testFileArraySetting() throws Exception { SettingsFactory factory = new SettingsFactory(new File(getSaveDirectory(), "testSettings.props")); FileArraySetting setting = factory.createFileArraySetting("FILE_ARRAY_SETTING", files); // test add, remove, contains, indexOf, length setting.setValue(new File[0]); assertEquals("Empty FileArraySetting", setting.length(), 0); File fileNew = new File("new"); File fileOld = new File("old"); setting.add(fileNew); assertEquals("Expected non-empty FileArraySetting 1", setting.length(), 1); assertEquals("Expected index of 0", setting.indexOf(fileNew), 0); assertTrue("Expected FileArraySetting to contain new file", setting.contains(fileNew)); assertFalse("Expected FileArraySetting not to contain old file", setting.contains(fileOld)); setting.add(fileOld); setting.remove(fileNew); assertEquals("Expected non-empty FileArraySetting 2", setting.length(), 1); assertTrue("Expected FileArraySetting to contain old file", setting.contains(fileOld)); assertFalse("Expected FileArraySetting not to contain new file", setting.contains(fileNew)); assertEquals("Expected index of 0", setting.indexOf(fileOld), 0); assertEquals("Expected index of -1", setting.indexOf(fileNew), -1); // test adding null setting.add(null); assertEquals("adding null should not work", setting.length(), 1); assertFalse("containing null should be ok", setting.contains(null)); assertEquals("Expected index of -1", setting.indexOf(null), -1); setting.remove(null); assertEquals("removing null should be ok", setting.length(), 1); assertFalse("containing null should be ok", setting.contains(null)); assertEquals("Expected index of -1", setting.indexOf(null), -1); } }