1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
package org.biojava.bio.symbol;
import junit.framework.TestCase;
import org.biojava.bio.Annotatable;
import org.biojava.bio.Annotation;
import org.biojava.bio.SmallAnnotation;
import org.biojava.utils.AssertionFailure;
import org.biojava.utils.ChangeEvent;
import org.biojava.utils.ChangeListener;
import org.biojava.utils.ChangeType;
import org.biojava.utils.ChangeVetoException;
/**
* Regression test for event forwarding bug found by James Worthington.
*
* @author Matthew Pocock
*/
public abstract class AbstractSymbolEventTest
extends TestCase
{
Annotation ann;
Symbol sym;
protected void setUp()
throws Exception
{
Annotation initialAnno = new SmallAnnotation();
sym = createSymbol(initialAnno);
ann = sym.getAnnotation();
}
protected abstract Symbol createSymbol(Annotation ann) throws Exception;
protected void doChange()
{
try {
ann.setProperty("pigs", "dogs");
} catch (ChangeVetoException e) {
throw new AssertionFailure(e);
}
}
public void testUnknown()
{
EventCounter uc = new EventCounter("unknown");
sym.addChangeListener(uc, ChangeType.UNKNOWN);
doChange();
assertEquals("Prechange fired", 1, uc.getPre());
assertEquals("Postchange fired", 1, uc.getPost());
}
public void testAnnotation()
{
EventCounter an = new EventCounter("annotation");
sym.addChangeListener(an, Annotatable.ANNOTATION);
doChange();
assertEquals("Prechange fired", 1, an.getPre());
assertEquals("Postchange fired", 1, an.getPost());
}
public void testProperty()
{
EventCounter pr = new EventCounter("property");
sym.addChangeListener(pr, Annotation.PROPERTY);
doChange();
assertEquals("Prechange fired", 0, pr.getPre());
assertEquals("Postchange fired", 0, pr.getPost());
}
public void testUnknownAnnotation()
{
EventCounter uc = new EventCounter("unknown");
EventCounter an = new EventCounter("annotation");
sym.addChangeListener(uc, ChangeType.UNKNOWN);
sym.addChangeListener(an, Annotatable.ANNOTATION);
doChange();
assertEquals("Prechange fired", 1, uc.getPre());
assertEquals("Postchange fired", 1, uc.getPost());
assertEquals("Prechange fired", 1, an.getPre());
assertEquals("Postchange fired", 1, an.getPost());
}
public void testUnknownProptery()
{
EventCounter uc = new EventCounter("unknown");
EventCounter pr = new EventCounter("property");
sym.addChangeListener(uc, ChangeType.UNKNOWN);
sym.addChangeListener(pr, Annotation.PROPERTY);
doChange();
assertEquals("Prechange fired", 1, uc.getPre());
assertEquals("Postchange fired", 1, uc.getPost());
assertEquals("Prechange fired", 0, pr.getPre());
assertEquals("Postchange fired", 0, pr.getPost());
}
public void testUnknownAnnotationProperty()
{
EventCounter uc = new EventCounter("unknown");
EventCounter an = new EventCounter("annotation");
EventCounter pr = new EventCounter("property");
sym.addChangeListener(uc, ChangeType.UNKNOWN);
sym.addChangeListener(an, Annotatable.ANNOTATION);
sym.addChangeListener(pr, Annotation.PROPERTY);
doChange();
assertEquals("Prechange fired", 1, uc.getPre());
assertEquals("Postchange fired", 1, uc.getPost());
assertEquals("Prechange fired", 1, an.getPre());
assertEquals("Postchange fired", 1, an.getPost());
assertEquals("Prechange fired", 0, pr.getPre());
assertEquals("Postchange fired", 0, pr.getPost());
}
public void testAnnotationUnknown()
{
EventCounter an = new EventCounter("annotation");
EventCounter uc = new EventCounter("unknown");
sym.addChangeListener(an, Annotatable.ANNOTATION);
sym.addChangeListener(uc, ChangeType.UNKNOWN);
doChange();
assertEquals("Prechange fired", 1, uc.getPre());
assertEquals("Postchange fired", 1, uc.getPost());
assertEquals("Prechange fired", 1, an.getPre());
assertEquals("Postchange fired", 1, an.getPost());
}
private class EventCounter
implements ChangeListener
{
private final String name;
private int pre = 0;
private int post = 0;
public EventCounter(String name)
{
this.name = name;
}
public void preChange(ChangeEvent cev)
throws ChangeVetoException
{
pre++;
}
public void postChange(ChangeEvent cev)
{
post++;
}
public void clear()
{
pre = 0;
post = 0;
}
public int getPre()
{
return pre;
}
public int getPost()
{
return post;
}
public String getName()
{
return name;
}
public String toString()
{
return name;
}
}
}
|