@@ -39,89 +39,88 @@ import org.junit.runner.RunWith
39
39
class FirebaseSessionsDependenciesTest {
40
40
@After
41
41
fun cleanUp () {
42
- // Reset any registered subscribers after each test.
42
+ // Reset all dependencies after each test.
43
43
FirebaseSessionsDependencies .reset()
44
44
}
45
45
46
46
@Test
47
47
fun register_dependencyAdded_canGet () {
48
+ val crashlyticsSubscriber = FakeSessionSubscriber (sessionSubscriberName = CRASHLYTICS )
49
+ FirebaseSessionsDependencies .addDependency(CRASHLYTICS )
48
50
FirebaseSessionsDependencies .register(crashlyticsSubscriber)
49
51
50
- assertThat(FirebaseSessionsDependencies [CRASHLYTICS ]).isEqualTo(crashlyticsSubscriber)
52
+ assertThat(FirebaseSessionsDependencies .getSubscriber(CRASHLYTICS ))
53
+ .isEqualTo(crashlyticsSubscriber)
51
54
}
52
55
53
56
@Test
54
- fun register_alreadyRegistered_throws () {
57
+ fun register_alreadyRegisteredSameName_ignoresSecondSubscriber () {
58
+ val firstSubscriber = FakeSessionSubscriber (sessionSubscriberName = CRASHLYTICS )
59
+ val secondSubscriber = FakeSessionSubscriber (sessionSubscriberName = CRASHLYTICS )
60
+
61
+ FirebaseSessionsDependencies .addDependency(CRASHLYTICS )
62
+
55
63
// Register the first time, no problem.
56
- FirebaseSessionsDependencies .register(crashlyticsSubscriber )
64
+ FirebaseSessionsDependencies .register(firstSubscriber )
57
65
58
- val thrown =
59
- assertThrows(IllegalArgumentException ::class .java) {
60
- // Attempt to register the same subscriber a second time.
61
- FirebaseSessionsDependencies .register(crashlyticsSubscriber)
62
- }
66
+ // Attempt to register a second subscriber with the same name.
67
+ FirebaseSessionsDependencies .register(secondSubscriber)
63
68
64
- assertThat(thrown).hasMessageThat().contains( " Subscriber CRASHLYTICS already registered " )
69
+ assertThat(FirebaseSessionsDependencies .getSubscriber( CRASHLYTICS )).isEqualTo(firstSubscriber )
65
70
}
66
71
67
72
@Test
68
73
fun getSubscriber_dependencyAdded_notRegistered_throws () {
69
- val thrown =
70
- assertThrows(IllegalStateException ::class .java) { FirebaseSessionsDependencies [CRASHLYTICS ] }
74
+ FirebaseSessionsDependencies .addDependency(PERFORMANCE )
71
75
72
- assertThat(thrown).hasMessageThat().contains(" Subscriber CRASHLYTICS has not been registered" )
73
- }
74
-
75
- @Test
76
- fun getSubscriber_notDepended_throws () {
77
76
val thrown =
78
77
assertThrows(IllegalStateException ::class .java) {
79
- // Performance was never added as a dependency.
80
- FirebaseSessionsDependencies [PERFORMANCE ]
78
+ FirebaseSessionsDependencies .getSubscriber(PERFORMANCE )
81
79
}
82
80
83
- assertThat(thrown).hasMessageThat().contains(" Cannot get dependency PERFORMANCE " )
81
+ assertThat(thrown).hasMessageThat().contains(" Subscriber PERFORMANCE has not been registered " )
84
82
}
85
83
86
84
@Test
87
- fun addDependencyTwice_throws () {
85
+ fun getSubscriber_notDepended_throws () {
88
86
val thrown =
89
- assertThrows(IllegalArgumentException ::class .java) {
90
- // CRASHLYTICS has already been added. Attempt to add it again .
91
- FirebaseSessionsDependencies .addDependency (CRASHLYTICS )
87
+ assertThrows(IllegalStateException ::class .java) {
88
+ // Crashlytics was never added as a dependency .
89
+ FirebaseSessionsDependencies .getSubscriber (CRASHLYTICS )
92
90
}
93
91
94
- assertThat(thrown).hasMessageThat().contains(" Dependency CRASHLYTICS already added " )
92
+ assertThat(thrown).hasMessageThat().contains(" Cannot get dependency CRASHLYTICS " )
95
93
}
96
94
97
95
@Test
98
96
fun getSubscribers_waitsForRegister (): Unit = runBlocking {
97
+ val crashlyticsSubscriber = FakeSessionSubscriber (sessionSubscriberName = CRASHLYTICS )
98
+ FirebaseSessionsDependencies .addDependency(CRASHLYTICS )
99
+
99
100
// Wait a few seconds and then register.
100
101
launch {
101
102
delay(2 .seconds)
102
103
FirebaseSessionsDependencies .register(crashlyticsSubscriber)
103
104
}
104
105
105
106
// Block until the register happens.
106
- val subscribers = runBlocking { FirebaseSessionsDependencies .getSubscribers() }
107
+ val subscribers = FirebaseSessionsDependencies .getSubscribers()
107
108
108
109
assertThat(subscribers).containsExactly(CRASHLYTICS , crashlyticsSubscriber)
109
110
}
110
111
112
+ @Test
113
+ fun getSubscribers_noDependencies () = runTest {
114
+ val subscribers = FirebaseSessionsDependencies .getSubscribers()
115
+
116
+ assertThat(subscribers).isEmpty()
117
+ }
118
+
111
119
@Test(expected = TimeoutCancellationException ::class )
112
120
fun getSubscribers_neverRegister_waitsForever () = runTest {
121
+ FirebaseSessionsDependencies .addDependency(CRASHLYTICS )
122
+
113
123
// The register never happens, wait until the timeout.
114
124
withTimeout(2 .seconds) { FirebaseSessionsDependencies .getSubscribers() }
115
125
}
116
-
117
- companion object {
118
- init {
119
- // Add only Crashlytics as a dependency, not Performance.
120
- // This is similar to how 1P SDKs will add themselves as dependencies. Note that this
121
- // dependency is added for all unit tests after this class is loaded into memory.
122
- FirebaseSessionsDependencies .addDependency(CRASHLYTICS )
123
- }
124
- }
125
-
126
- private val crashlyticsSubscriber = FakeSessionSubscriber (sessionSubscriberName = CRASHLYTICS )
127
126
}
0 commit comments