samples/openfixed/test/org/apidesign/openfixed/PendingTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sun, 20 Mar 2011 18:52:47 +0100
changeset 374 35da2d439e3d
permissions -rw-r--r--
Calculator and various ways to deliver changes in its counter to listeners
jtulach@374
     1
package org.apidesign.openfixed;
jtulach@374
     2
jtulach@374
     3
import java.util.List;
jtulach@374
     4
import java.util.concurrent.CountDownLatch;
jtulach@374
     5
jtulach@374
     6
/** Test the Calculator.createPending() behavior.
jtulach@374
     7
 *
jtulach@374
     8
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jtulach@374
     9
 */
jtulach@374
    10
public class PendingTest extends CalculatorBase {
jtulach@374
    11
    
jtulach@374
    12
    public PendingTest(String testName) {
jtulach@374
    13
        super(testName);
jtulach@374
    14
    }
jtulach@374
    15
jtulach@374
    16
    @Override
jtulach@374
    17
    protected Calculator create() {
jtulach@374
    18
        return Calculator.createPending();
jtulach@374
    19
    }
jtulach@374
    20
jtulach@374
    21
    public void testPendingEvents() throws Exception {
jtulach@374
    22
        BlockingListener bl = new BlockingListener();
jtulach@374
    23
        
jtulach@374
    24
        Calculator calc = create();
jtulach@374
    25
        calc.addModificationListener(bl);
jtulach@374
    26
        
jtulach@374
    27
        calc.add(10);
jtulach@374
    28
        bl.first.await();
jtulach@374
    29
        
jtulach@374
    30
        calc.add(1);
jtulach@374
    31
        calc.add(2);
jtulach@374
    32
        calc.add(3);
jtulach@374
    33
        
jtulach@374
    34
        bl.cdl.countDown();
jtulach@374
    35
        
jtulach@374
    36
        List<ModificationEvent> events = bl.assertEvents("Four changes together", 4);
jtulach@374
    37
        
jtulach@374
    38
        assertEquals("No pending events for first event", 0, events.get(0).getPending());
jtulach@374
    39
        assertEquals("Group of three, two remaining", 2, events.get(1).getPending());
jtulach@374
    40
        assertEquals("Group of three, one remaining", 1, events.get(2).getPending());
jtulach@374
    41
        assertEquals("Group of three, last one", 0, events.get(3).getPending());
jtulach@374
    42
    }
jtulach@374
    43
    
jtulach@374
    44
    static class BlockingListener extends MockListener {
jtulach@374
    45
        CountDownLatch first = new CountDownLatch(1);
jtulach@374
    46
        CountDownLatch cdl = new CountDownLatch(1);
jtulach@374
    47
jtulach@374
    48
        @Override
jtulach@374
    49
        public synchronized void modification(ModificationEvent ev) {
jtulach@374
    50
            try {
jtulach@374
    51
                first.countDown();
jtulach@374
    52
                cdl.await();
jtulach@374
    53
            } catch (InterruptedException ex) {
jtulach@374
    54
                throw new IllegalStateException(ex);
jtulach@374
    55
            }
jtulach@374
    56
            super.modification(ev);
jtulach@374
    57
        }
jtulach@374
    58
    }
jtulach@374
    59
    
jtulach@374
    60
}