aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src/cgeo/geocaching/utils/MemorySubjectTest.java
blob: ee4695004f890211bcc898f5914eaa8573e91fd7 (plain)
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
package cgeo.geocaching.utils;

import android.test.AndroidTestCase;

public class MemorySubjectTest extends AndroidTestCase {

    private static class Observer implements IObserver<Integer> {
        private int times = 0;
        private Integer value;

        @Override
        public void update(final Integer data) {
            value = data;
            times++;
        }
    }

    private Observer observer;
    private MemorySubject<Integer> memorySubject;

    @Override
    public void setUp() throws Exception {
        super.setUp();
        observer = new Observer();
        memorySubject = new MemorySubject<Integer>();
    }

    public void testInitial() {
        assertNull(observer.value);
        assertEquals(0, observer.times);
        assertNull(memorySubject.getMemory());
    }

    public void testMemory() {
        memorySubject.addObserver(observer);
        memorySubject.notifyObservers(10);
        assertEquals(Integer.valueOf(10), observer.value);
        assertEquals(1, observer.times);
        assertEquals(Integer.valueOf(10), memorySubject.getMemory());
        memorySubject.notifyObservers(20);
        assertEquals(Integer.valueOf(20), observer.value);
        assertEquals(2, observer.times);
        assertEquals(Integer.valueOf(20), memorySubject.getMemory());
    }

    public void testAttach() {
        memorySubject.notifyObservers(10);
        assertNull(observer.value);
        assertEquals(0, observer.times);
        memorySubject.addObserver(observer);
        assertEquals(Integer.valueOf(10), observer.value);
        assertEquals(1, observer.times);
        memorySubject.notifyObservers(20);
        assertEquals(Integer.valueOf(20), observer.value);
        assertEquals(2, observer.times);
    }

    public void testDetach() {
        memorySubject.addObserver(observer);
        memorySubject.notifyObservers(10);
        assertEquals(Integer.valueOf(10), observer.value);
        assertEquals(1, observer.times);
        assertEquals(Integer.valueOf(10), memorySubject.getMemory());
        memorySubject.deleteObserver(observer);
        memorySubject.notifyObservers(20);
        assertEquals(Integer.valueOf(10), observer.value);
        assertEquals(1, observer.times);
        assertEquals(Integer.valueOf(20), memorySubject.getMemory());
    }

    public void testMultiple() {
        final Observer otherObserver = new Observer();
        memorySubject.addObserver(otherObserver);
        testDetach();
        assertEquals(Integer.valueOf(20), otherObserver.value);
        assertEquals(2, otherObserver.times);
    }

}