1+ package org.wordpress.aztec
2+
3+ import org.junit.Assert.*
4+ import org.junit.Before
5+ import org.junit.Test
6+ import org.junit.runner.RunWith
7+ import org.junit.runners.JUnit4
8+
9+ @RunWith(JUnit4 ::class )
10+ class AztecContentChangeWatcherTest {
11+ private lateinit var aztecContentChangeWatcher: AztecContentChangeWatcher
12+ @Before
13+ fun setUp () {
14+ aztecContentChangeWatcher = AztecContentChangeWatcher ()
15+ }
16+
17+ @Test
18+ fun `notifies registered observer` () {
19+ // Given
20+ var contentChanged = false
21+ setupRegisteredObserver {
22+ contentChanged = true
23+ }
24+
25+ // When
26+ aztecContentChangeWatcher.notifyContentChanged()
27+
28+ // Then
29+ assertTrue(contentChanged)
30+ }
31+
32+ @Test
33+ fun `does not notify unregistered observer` () {
34+ // Given
35+ var contentChanged = false
36+ val observer = setupRegisteredObserver {
37+ contentChanged = true
38+ }
39+
40+ // When
41+ aztecContentChangeWatcher.unregisterObserver(observer)
42+ aztecContentChangeWatcher.notifyContentChanged()
43+
44+ // Then
45+ assertFalse(contentChanged)
46+ }
47+
48+ @Test
49+ fun `observer is garbage collected and reference is lost` () {
50+ // Given
51+ var contentChanged = false
52+ setupRegisteredObserver {
53+ contentChanged = true
54+ }
55+ System .gc()
56+
57+ // When
58+ aztecContentChangeWatcher.notifyContentChanged()
59+
60+ // Then
61+ assertFalse(contentChanged)
62+ }
63+
64+ private fun setupRegisteredObserver (onContentChanged : () -> Unit ): AztecContentChangeWatcher .AztecTextChangeObserver {
65+ val observer = object : AztecContentChangeWatcher .AztecTextChangeObserver {
66+ override fun onContentChanged () {
67+ onContentChanged()
68+ }
69+ }
70+ aztecContentChangeWatcher.registerObserver(observer)
71+ return observer
72+ }
73+ }
0 commit comments