package org.hyperic.util; import junit.framework.TestCase; import org.hyperic.util.config.ConfigOption; import org.hyperic.util.config.ConfigSchema; import org.hyperic.util.config.StringConfigOption; import javax.swing.text.html.HTMLDocument; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; public class ConfigSchemaTest extends TestCase { public ConfigSchemaTest(String name) { super(name); } private ConfigOption[] generateConfigOptions(int num) { ConfigOption[] opts = new ConfigOption[num]; for (int i = 0 ; i < num; i++) { StringConfigOption opt = new StringConfigOption("Opt Name", "Opt Description"); opts[i] = opt; } return opts; } public void testConfigOptionsImmutable() throws Exception { ConfigOption[] opts = generateConfigOptions(10); ConfigSchema schema = new ConfigSchema(opts); try { schema.getOptions().remove(0); fail("Able to remove options from getOptions()"); } catch (UnsupportedOperationException e) { // Expected } } public void testConfigOptionsConcurrency() throws Exception { final int NUM = 10; ConfigOption[] opts1 = generateConfigOptions(NUM); ConfigOption[] opts2 = generateConfigOptions(NUM); ConfigSchema schema = new ConfigSchema(opts1); int count = 0; List opts = schema.getOptions(); for (Iterator i = schema.getOptions().iterator(); i.hasNext(); ) { ConfigOption o = (ConfigOption)i.next(); if (++count == 5) { // Setting options during iteration should not throw a ConcurrentModificationException schema.addOptions(Arrays.asList(opts2)); } } } }