ObservableTest.java
001 package fr.isae.observer;
002 
003 import org.junit.*;
004 import static org.junit.Assert.*;
005 
006 /**
007  *  Unit Test for class Observable.
008  *
009  *
010  * Created: Tue Oct 20 13:39:51 2014
011  *
012  @author <a href="mailto:garion@isae.fr">Christophe Garion</a>
013  @version 1.0
014  */
015 public class ObservableTest {
016 
017     private static class DummyObservable extends Observable {
018 
019     }
020 
021     private static class DummyObserver extends Observateur {
022 
023         private boolean flag;
024 
025         DummyObserver() {
026             this.flag = false;
027         }
028 
029         public void miseAJour() {
030             this.flag = true;
031         }
032 
033         boolean isFlagSet() {
034             return this.flag;
035         }
036     }
037 
038     private DummyObservable observable1;
039     private DummyObservable observable2;
040     private DummyObserver   observer1;
041     private DummyObserver   observer2;
042     private DummyObserver   observer3;
043     private DummyObserver   observer4;
044     private DummyObserver   observer5;
045 
046     /**
047      * Setup for the tests. There are 2 observable (observable1 and
048      * observable2) and 5 observer (observer1 to observer5). observer1 to
049      * observer3 observe observable1 and observer3 to observer5 observe
050      * observable2.
051      */
052     @Before public void setUp() {
053         this.observable1 = new DummyObservable();
054         this.observable2 = new DummyObservable();
055 
056         this.observer1   = new DummyObserver();
057         this.observer2   = new DummyObserver();
058         this.observer3   = new DummyObserver();
059         this.observer4   = new DummyObserver();
060         this.observer5   = new DummyObserver();
061 
062         this.observable1.inscrire(this.observer1);
063         this.observable1.inscrire(this.observer2);
064         this.observable1.inscrire(this.observer3);
065 
066         this.observable2.inscrire(this.observer3);
067         this.observable2.inscrire(this.observer4);
068         this.observable2.inscrire(this.observer5);
069     }
070 
071     /**
072      * Test method for avertir for observable1.
073      */
074     @Test public void testAvertirObservable1() {
075         this.initialCheck();
076 
077         this.observable1.avertir();
078 
079         DummyObserver mustBeTrue[] this.observer1,
080                                        this.observer2,
081                                        this.observer3 };
082 
083         DummyObserver mustBeFalse[] this.observer4,
084                                         this.observer5 };
085 
086         checkFlags(mustBeTrue, mustBeFalse);
087     }
088 
089     /**
090      * Test method for avertir for observable2.
091      */
092     @Test public void testAvertirObservable2() {
093         this.initialCheck();
094 
095         this.observable2.avertir();
096 
097         DummyObserver mustBeTrue[] this.observer3,
098                                        this.observer4,
099                                        this.observer5 };
100 
101         DummyObserver mustBeFalse[] this.observer1,
102                                         this.observer2 };
103 
104         checkFlags(mustBeTrue, mustBeFalse);
105     }
106 
107     /**
108      * Test method for observable1 when removing observer2
109      * as observer.
110      */
111     @Test public void testAnnulerObservable1() {
112         this.initialCheck();
113 
114         this.observable1.annuler(this.observer2);
115         this.observable1.avertir();
116 
117         DummyObserver mustBeTrue[] this.observer1,
118                                        this.observer3 };
119 
120         DummyObserver mustBeFalse[] this.observer2,
121                                         this.observer4,
122                                         this.observer5 };
123 
124         checkFlags(mustBeTrue, mustBeFalse);
125     }
126 
127     private void initialCheck() {
128         assertFalse(this.observer1.isFlagSet());
129         assertFalse(this.observer2.isFlagSet());
130         assertFalse(this.observer3.isFlagSet());
131         assertFalse(this.observer4.isFlagSet());
132         assertFalse(this.observer5.isFlagSet());
133     }
134 
135     private void checkFlags(DummyObserver mustBeTrue[],
136                             DummyObserver mustBeFalse[]) {
137         for (DummyObserver obs : mustBeTrue) {
138             assertTrue(obs.isFlagSet());
139         }
140 
141         for (DummyObserver obs : mustBeFalse) {
142             assertFalse(obs.isFlagSet());
143         }
144     }
145 }