package org.getcomposer.core.test; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.HashMap; import org.junit.Test; import com.dubture.getcomposer.core.ComposerPackage; import com.dubture.getcomposer.core.VersionedPackage; import com.dubture.getcomposer.core.collection.Dependencies; import com.dubture.getcomposer.core.collection.Persons; import com.dubture.getcomposer.core.collection.Psr; import com.dubture.getcomposer.core.objects.Autoload; import com.dubture.getcomposer.core.objects.JsonObject; import com.dubture.getcomposer.core.objects.Namespace; import com.dubture.getcomposer.core.objects.Person; public class ListenerTest extends ComposertTestCase { private ComposerPackage pkg; private String property; private Object oldValue; private Object newValue; private int changes = 0; private HashMap<String, Integer> listenerCounter; @Override protected void setUp() throws Exception { pkg = createDummyPackage(); listenerCounter = new HashMap<String, Integer>(); changes = 0; pkg.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { property = e.getPropertyName(); oldValue = e.getOldValue(); newValue = e.getNewValue(); changes++; if (!listenerCounter.containsKey(property)) { listenerCounter.put(property, 0); } listenerCounter.put(property, listenerCounter.get(property) + 1); // debug output // System.out.println("Prop Change: " + e.getPropertyName() + ", old Value: " + e.getOldValue() + ", new Value: " + e.getNewValue()); } }); } @Test public void testName() { String name = "foo/bar"; pkg.setName(name); assertEquals(1, changes); assertEquals("name", property); assertEquals(name, newValue); assertEquals(NAME, oldValue); assertFalse(oldValue.equals(newValue)); changes = 0; pkg.remove("name"); assertEquals(1, changes); assertEquals("name", property); assertEquals(null, newValue); assertEquals(name, oldValue); assertFalse(oldValue.equals(newValue)); changes = 0; pkg.setName(NAME); assertEquals(1, changes); assertEquals("name", property); assertEquals(NAME, newValue); assertEquals(null, oldValue); assertFalse(newValue.equals(oldValue)); } @Test public void testAuthors() { // set name of first author String name = "hans"; Persons authors = pkg.getAuthors(); Person p1 = authors.get(1); p1.setName("hans"); assertEquals(1, authors.indexOf(p1)); assertEquals(1, changes); assertEquals("authors.#1.name", property); assertEquals(name, newValue); assertEquals(PERSON2, oldValue); assertFalse(oldValue.equals(newValue)); // add author changes = 0; Person p = new Person(); p.setName(name); authors.add(p); assertEquals(1, changes); assertEquals("authors.#2", property); assertEquals(p, newValue); assertEquals(null, oldValue); assertFalse(newValue.equals(oldValue)); // change property to same value changes = 0; p.setName(name); assertEquals(0, changes); // remove an author changes = 0; p = authors.get(1); authors.remove(p); assertEquals(1, changes); assertEquals("authors.#1", property); assertEquals(null, newValue); assertEquals(p, oldValue); assertFalse(oldValue.equals(newValue)); } @Test public void testCustom() { String p = "prop"; JsonObject o = new JsonObject(); pkg.set(p, o); assertEquals(1, changes); assertEquals(p, property); assertEquals(o, newValue); assertEquals(null, oldValue); assertFalse(newValue.equals(oldValue)); changes = 0; String p2 = "prop2"; String v = "val"; o.set(p2, v); assertEquals(1, changes); assertEquals(p+"."+p2, property); assertEquals(v, newValue); assertEquals(null, oldValue); assertFalse(newValue.equals(oldValue)); } private int getCounter(String key) { if (!listenerCounter.containsKey(key)) { return 0; } return (int)listenerCounter.get(key); } @Test public void testLicense() { pkg.getLicense().add("GPL"); assertEquals(1, getCounter("license.#2")); pkg.getLicense().add("LGPL"); assertEquals(1, getCounter("license.#3")); changes = 0; pkg.getLicense().add("MIT"); assertEquals(0, changes); pkg.getLicense().clear(); assertEquals(4, getCounter("license.#0")); } @Test public void testKeywords() { pkg.getKeywords().add("fool"); assertEquals(1, getCounter("keywords.#2")); pkg.getKeywords().add("bar"); assertEquals(1, getCounter("keywords.#3")); } @Test public void testAutoload() { Autoload al = pkg.getAutoload(); Psr psr = al.getPsr0(); // psr Namespace ns1 = new Namespace(); ns1.setNamespace("test"); psr.add(ns1); assertEquals(1, getCounter("autoload.psr-0.test")); ns1.add("new/path"); assertEquals(1, getCounter("autoload.psr-0.test.#0")); // classmap al.getClassMap().add("file/to/path.php"); assertEquals(1, getCounter("autoload.classmap.#3")); // files al.getFiles().add("another/file/to/path.php"); assertEquals(1, getCounter("autoload.files.#1")); } @Test public void testDependencies() { Dependencies require = pkg.getRequireDev(); VersionedPackage phpunit = require.get(PHPUNIT); phpunit.setVersion("1.2.3"); assertEquals(1, changes); assertEquals("require-dev.phpunit/phpunit.version", property); assertEquals("1.2.3", newValue); assertEquals(PHPUNIT_VERSION, oldValue); assertFalse(oldValue.equals(newValue)); } }