/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.util.HashMap; import java.util.HashSet; import java.util.NoSuchElementException; import java.util.Set; import junit.framework.JUnit4TestAdapter; import org.beanfabrics.event.OptionsEvent; import org.beanfabrics.event.OptionsListener; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * @author Michael Karneim */ public class OptionsTest { public static junit.framework.Test suite() { return new JUnit4TestAdapter(OptionsTest.class); } public OptionsTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Test public void create() { new Options(); } @Test public void put() { Options<Integer> opt = new Options<Integer>(); opt.put(1, "one"); assertEquals("opt.size()", 1, opt.size()); assertEquals("opt.get(1)", "one", opt.get(1)); } @Test public void putNullKey() { Options<Integer> opt = new Options<Integer>(); opt.put(null, "nothing"); assertEquals("opt.size()", 1, opt.size()); assertEquals("opt.get(null)", "nothing", opt.get(null)); } @Test public void putNullValue() { Options<Integer> opt = new Options<Integer>(); try { opt.put(1, null); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException ex) { // ok. } } @Test public void putAllWithNullValue() { Options<Integer> opt = new Options<Integer>(); HashMap<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "one"); map.put(2, "two"); map.put(0, null); try { opt.putAll(map); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException ex) { // ok. } } @Test public void putMore() { Options<Integer> opt = new Options<Integer>(); opt.put(null, "nothing"); assertEquals("opt.size()", 1, opt.size()); assertEquals("opt.get(null)", "nothing", opt.get(null)); opt.put(1, "one"); assertEquals("opt.size()", 2, opt.size()); assertEquals("opt.get(1)", "one", opt.get(1)); opt.put(2, "two"); assertEquals("opt.size()", 3, opt.size()); assertEquals("opt.get(null)", "nothing", opt.get(null)); assertEquals("opt.get(1)", "one", opt.get(1)); assertEquals("opt.get(2)", "two", opt.get(2)); } @Test public void putDuplicateValues() { Options<Integer> opt = new Options<Integer>(); opt.put(1, "car"); assertEquals("opt.size()", 1, opt.size()); assertEquals("opt.get(1)", "car", opt.get(1)); try { opt.put(2, "car"); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException ex) { // ok. } } @Test public void putAll() { Options<Integer> opt = new Options<Integer>(); HashMap all = new HashMap(); for (int i = 0; i < 10; ++i) { all.put(i, "value " + i); } opt.putAll(all); assertEquals("opt.size()", 10, opt.size()); for (int i = 0; i < 10; ++i) { assertEquals("", "value " + i, opt.get(i)); } } @Test public void putAll2() { Options<Integer> opt = new Options<Integer>(); HashMap all = new HashMap(); for (int i = 0; i < 10; ++i) { all.put(i, "value " + i); } opt.putAll(all); HashMap all2 = new HashMap(); for (int i = 5; i < 15; ++i) { all2.put(i, "value " + i); } Counter counter = new Counter(); opt.addOptionsListener(counter); opt.putAll(all2); assertEquals("opt.size()", 15, opt.size()); assertEquals("counter.changed", 1, counter.changed); for (int i = 0; i < 15; ++i) { assertEquals("", "value " + i, opt.get(i)); } } @Test public void putAllDuplicateValues() { Options<Integer> opt = new Options<Integer>(); opt.put(10, "value 0"); HashMap all = new HashMap(); for (int i = 0; i < 10; ++i) { all.put(i, "value " + i); } try { opt.putAll(all); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException ex) { // ok. } } @Test public void clear() { Options<Integer> opt = new Options<Integer>(); opt.put(1, "one"); opt.put(2, "two"); Counter counter = new Counter(); opt.addOptionsListener(counter); opt.clear(); assertEquals("opt.size()", 0, opt.size()); assertEquals("counter.changed", 1, counter.changed); } @Test public void remove() { Options<Integer> opt = new Options<Integer>(); opt.put(1, "one"); Counter counter = new Counter(); opt.addOptionsListener(counter); opt.remove(1); assertEquals("opt.size()", 0, opt.size()); assertEquals("counter.changed", 1, counter.changed); assertEquals("opt.get(1)", null, opt.get(1)); } @Test public void removeAll() { Options<Integer> opt = new Options<Integer>(); opt.put(1, "one"); opt.put(2, "two"); opt.put(3, "three"); opt.put(4, "four"); assertEquals("opt.size()", 4, opt.size()); Set<Integer> remove = new HashSet<Integer>(); remove.add(1); remove.add(2); remove.add(4); Counter counter = new Counter(); opt.addOptionsListener(counter); opt.removeAll(remove); assertEquals("opt.size()", 1, opt.size()); assertEquals("counter.changed", 1, counter.changed); assertEquals("opt.get(1)", null, opt.get(1)); assertEquals("opt.get(2)", null, opt.get(2)); assertEquals("opt.get(3)", "three", opt.get(3)); assertEquals("opt.get(4)", null, opt.get(4)); } @Test public void getKey() { String ONE = "one"; String TWO = "two"; String THREE = "three"; Options<Integer> opt = new Options<Integer>(); opt.put(1, ONE); opt.put(2, TWO); opt.put(3, THREE); assertEquals("opt.getKey(THREE)", 3, (int)opt.getKey(THREE)); assertEquals("opt.getKey(TWO)", 2, (int)opt.getKey(TWO)); assertEquals("opt.getKey(ONE)", 1, (int)opt.getKey(ONE)); try { opt.getKey("foo"); fail("expected NoSuchElementException"); } catch (NoSuchElementException ex) { // ok. } } @Test public void events() { Options<Integer> opt = new Options<Integer>(); Counter counter = new Counter(); opt.addOptionsListener(counter); assertEquals("counter.changed", 0, counter.changed); opt.put(1, "one"); assertEquals("counter.changed", 1, counter.changed); opt.put(2, "two"); assertEquals("counter.changed", 2, counter.changed); HashMap all = new HashMap(); for (int i = 0; i < 10; ++i) { all.put(i, "value " + i); } opt.putAll(all); assertEquals("counter.changed", 3, counter.changed); opt.put(1, "one"); assertEquals("counter.changed", 4, counter.changed); opt.remove(1); assertEquals("counter.changed", 5, counter.changed); opt.remove(1); // no change assertEquals("counter.changed", 5, counter.changed); } private static class Counter implements OptionsListener { int changed; public void changed(OptionsEvent evt) { changed++; } } }