Skip to content

Commit cc31c3f

Browse files
Tests are running
1 parent 423882b commit cc31c3f

File tree

11 files changed

+110
-64
lines changed

11 files changed

+110
-64
lines changed

analytics/build.gradle

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,32 @@ android {
3737
}
3838
}
3939

40+
// testOptions {
41+
// unitTests.returnDefaultValues = true
42+
// }
4043
}
4144

4245
dependencies {
46+
4347
implementation fileTree(dir: 'libs', include: ['*.jar'])
4448

49+
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
50+
4551
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
4652
testImplementation 'junit:junit:4.12'
53+
54+
4755
androidTestImplementation 'com.android.support.test:runner:1.0.2'
4856
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
49-
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
50-
57+
// required if you want to use Mockito for unit tests
58+
testImplementation 'org.mockito:mockito-core:2.7.22'
59+
// required if you want to use Mockito for Android tests
60+
androidTestImplementation 'org.mockito:mockito-android:2.7.22'
61+
62+
// testCompile 'org.powermock:powermock:1.6.5'
63+
// testCompile 'org.powermock:powermock-module-junit4:1.6.5'
64+
//
65+
// testCompile 'org.powermock:powermock-api-mockito:1.6.5'
5166

5267

5368
}

analytics/src/main/java/com/sofakingforever/analytics/Analytics.kt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.sofakingforever.analytics
33
import android.content.Context
44
import android.util.Log
55
import com.sofakingforever.analytics.events.base.Event
6+
import com.sofakingforever.analytics.exceptions.EventNotTrackedException
67

78
/**
89
* The *Analytics* class is in charge of tracking any *Event* implementation.
@@ -47,8 +48,7 @@ class Analytics(context: Context, private vararg val dispatchers: AnalyticsDispa
4748
try {
4849
dispatcher.track(it)
4950
} catch (e: Exception) {
50-
Log.e("Analytics", "${dispatcher.kit.name} dispatcher couldn't fire \"${it.javaClass.name}\" event", e)
51-
settings.exceptionHandler?.onException(e)
51+
settings.exceptionHandler?.onException(EventNotTrackedException(dispatcher, it, e))
5252
}
5353
}
5454

@@ -58,18 +58,10 @@ class Analytics(context: Context, private vararg val dispatchers: AnalyticsDispa
5858

5959
fun setKitEnabled(kit: AnalyticsKit, enabled: Boolean) {
6060
enabledKitMap[kit] = enabled
61-
// dispatchers.filter { d -> d.kit == kit }
62-
// .forEach { dispatcher ->
63-
//
64-
// }
6561
}
6662

6763
fun setDispatcherEnabled(dispatcherName: String, enabled: Boolean) {
6864
enabledDispatcherMap[dispatcherName] = enabled
69-
// dispatchers.filter { d -> d.dispatcherName == dispatcherName }
70-
// .forEach { dispatcher ->
71-
// dispatcher.enabled = enabled
72-
// }
7365
}
7466

7567
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.sofakingforever.analytics.exceptions
2+
3+
import com.sofakingforever.analytics.AnalyticsDispatcher
4+
import com.sofakingforever.analytics.events.base.Event
5+
6+
class EventNotTrackedException(message: String?, cause: Throwable?) : RuntimeException(message, cause) {
7+
8+
constructor(dispatcher: AnalyticsDispatcher, event: Event, t: Throwable) : this("${dispatcher.dispatcherName} dispatcher couldn't fire \"${event.javaClass.name}\" event", t)
9+
10+
}
Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,47 @@
11
package com.sofakingforever.library
22

3-
import android.app.Application
3+
import android.content.Context
4+
import android.util.Log
45
import com.sofakingforever.analytics.Analytics
56
import com.sofakingforever.analytics.AnalyticsSettings
7+
import com.sofakingforever.analytics.exceptions.EventNotTrackedException
68
import com.sofakingforever.analytics.exceptions.UnsupportedEventException
79
import com.sofakingforever.library.dispatcher.TestKit
810
import com.sofakingforever.library.dispatcher.TestableDispatcher
9-
import com.sofakingforever.library.events.TestEvent
11+
import com.sofakingforever.library.events.InitDispatcherEvent
12+
import com.sofakingforever.library.events.TestContentViewEvent
13+
import com.sofakingforever.library.events.TestCustomEvent
1014
import com.sofakingforever.library.events.UnsupportedEvent
1115
import org.junit.Test
16+
import org.mockito.Mockito
17+
import org.mockito.Mockito.mock
1218

1319
class AnalyticsUnitTest {
1420

21+
private val contextMock = mock(Context::class.java)
1522

16-
private val dispatcher = TestableDispatcher()
17-
private val analytics = Analytics(Application(), dispatcher).apply {
18-
19-
// todo - java.lang.RuntimeException: Method e in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.
20-
this.log = false
23+
private lateinit var analytics: Analytics
2124

22-
this.settings.exceptionHandler = object : AnalyticsSettings.ExceptionHandler {
23-
override fun onException(e: Exception) {
24-
raisedException = e
25-
}
25+
private val dispatcher = TestableDispatcher()
26+
private var raisedException: Exception? = null
2627

27-
}
28+
init {
29+
Mockito.`when`(contextMock.applicationContext).thenReturn(contextMock)
2830
}
29-
private var raisedException: Exception? = null
3031

3132
@Test
3233
fun testAnalytics() {
3334

35+
analytics = Analytics(contextMock, dispatcher).apply {
36+
37+
this.settings.exceptionHandler = object : AnalyticsSettings.ExceptionHandler {
38+
override fun onException(e: Exception) {
39+
raisedException = e
40+
}
41+
42+
}
43+
}
44+
3445
// track some events
3546
trackTestEvents()
3647

@@ -43,31 +54,35 @@ class AnalyticsUnitTest {
4354
// track an unsupported event
4455
analytics.track(UnsupportedEvent())
4556

46-
47-
assert(raisedException != null && raisedException is UnsupportedEventException)
57+
// assert UnsupportedEventException was raised
58+
assert(raisedException != null)
59+
assert(raisedException is EventNotTrackedException)
60+
assert((raisedException as EventNotTrackedException).cause is UnsupportedEventException)
4861

4962
}
5063

5164

5265
private fun trackTestEvents() {
5366

54-
analytics.track(TestEvent(1))
67+
analytics.track(TestCustomEvent(1))
5568

5669
analytics.setDispatcherEnabled(TestableDispatcher.DispatcherName, false)
5770

58-
analytics.track(TestEvent(2))
71+
analytics.track(TestCustomEvent(2))
5972

6073
analytics.setDispatcherEnabled(TestableDispatcher.DispatcherName, true)
6174

62-
analytics.track(TestEvent(3))
75+
analytics.track(TestCustomEvent(3))
6376

6477
analytics.setKitEnabled(TestKit.instance, false)
6578

66-
analytics.track(TestEvent(4))
79+
analytics.track(TestCustomEvent(4))
6780

6881
analytics.setKitEnabled(TestKit.instance, true)
6982

70-
analytics.track(TestEvent(5))
83+
analytics.track(TestCustomEvent(5))
84+
85+
analytics.track(TestContentViewEvent(1))
7186

7287
}
7388

@@ -77,11 +92,12 @@ class AnalyticsUnitTest {
7792

7893
val eventList = dispatcher.eventList
7994

80-
// expect to find 3 events + init event
81-
assert(eventList.size == 4)
82-
assert(eventList[0] is TestableDispatcher.InitEvent)
83-
assert((eventList[1] as TestEvent).number == 1)
84-
assert((eventList[2] as TestEvent).number == 3)
85-
assert((eventList[3] as TestEvent).number == 5)
95+
// expect to find 3 custom events , 1 contentview and 1 init event
96+
assert(eventList.size == 5)
97+
assert(eventList[0] is InitDispatcherEvent)
98+
assert((eventList[1] as TestCustomEvent).number == 1)
99+
assert((eventList[2] as TestCustomEvent).number == 3)
100+
assert((eventList[3] as TestCustomEvent).number == 5)
101+
assert((eventList[4] as TestContentViewEvent).number == 1)
86102
}
87103
}

analytics/src/test/java/com/sofakingforever/library/DispatcherTest.kt

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.sofakingforever.library
22

33
import android.app.Application
4-
import com.sofakingforever.analytics.Analytics
5-
import com.sofakingforever.analytics.AnalyticsSettings
6-
import com.sofakingforever.library.dispatcher.TestKit
74
import com.sofakingforever.library.dispatcher.TestableDispatcher
8-
import com.sofakingforever.library.events.TestEvent
5+
import com.sofakingforever.library.events.InitDispatcherEvent
6+
import com.sofakingforever.library.events.TestCustomEvent
97
import org.junit.Test
108

119

@@ -20,22 +18,22 @@ class DispatcherTest {
2018

2119
dispatcher.initDispatcher(Application())
2220

23-
dispatcher.track(TestEvent(1))
21+
dispatcher.track(TestCustomEvent(1))
2422

25-
dispatcher.track(TestEvent(2))
23+
dispatcher.track(TestCustomEvent(2))
2624

27-
dispatcher.track(TestEvent(3))
25+
dispatcher.track(TestCustomEvent(3))
2826

29-
dispatcher.track(TestEvent(4))
27+
dispatcher.track(TestCustomEvent(4))
3028

31-
dispatcher.track(TestEvent(5))
29+
dispatcher.track(TestCustomEvent(5))
3230

3331
val eventList = dispatcher.eventList
3432

3533
// expect to find 5 events + init event
3634
assert(eventList.size == 6)
37-
assert(eventList[0] is TestableDispatcher.InitEvent)
38-
assert((eventList[1] as TestEvent).number == 1)
35+
assert(eventList[0] is InitDispatcherEvent)
36+
assert((eventList[1] as TestCustomEvent).number == 1)
3937

4038
// that's enough
4139

analytics/src/test/java/com/sofakingforever/library/dispatcher/TestKit.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.sofakingforever.analytics.AnalyticsKit
55
class TestKit private constructor() : AnalyticsKit {
66
override val name: String = "Test Kit"
77

8-
98
private object Holder {
109
val INSTANCE = TestKit()
1110
}

analytics/src/test/java/com/sofakingforever/library/dispatcher/TestableDispatcher.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.sofakingforever.analytics.events.CustomEvent
88
import com.sofakingforever.analytics.events.InviteEvent
99
import com.sofakingforever.analytics.events.SetUserProperty
1010
import com.sofakingforever.analytics.events.base.Event
11-
import com.sofakingforever.library.events.InitTestEvent
11+
import com.sofakingforever.library.events.InitDispatcherEvent
1212

1313
class TestableDispatcher : AnalyticsDispatcher {
1414

@@ -18,11 +18,10 @@ class TestableDispatcher : AnalyticsDispatcher {
1818

1919
override val dispatcherName: String = DispatcherName
2020

21-
2221
val eventList: MutableList<Event> = mutableListOf()
2322

2423
override fun initDispatcher(context: Context) {
25-
track(InitTestEvent())
24+
track(InitDispatcherEvent())
2625
}
2726

2827
override fun trackContentView(contentView: ContentViewEvent) {
@@ -42,7 +41,7 @@ class TestableDispatcher : AnalyticsDispatcher {
4241
}
4342

4443
override fun track(event: Event) {
45-
if (event is InitTestEvent) {
44+
if (event is InitDispatcherEvent) {
4645
eventList.add(event)
4746
} else {
4847
super.track(event)

analytics/src/test/java/com/sofakingforever/library/events/InitTestEvent.kt renamed to analytics/src/test/java/com/sofakingforever/library/events/InitDispatcherEvent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package com.sofakingforever.library.events
22

33
import com.sofakingforever.analytics.events.base.Event
44

5-
class InitTestEvent : Event
5+
class InitDispatcherEvent : Event
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.sofakingforever.library.events
2+
3+
import com.sofakingforever.analytics.AnalyticsKit
4+
import com.sofakingforever.analytics.events.ContentViewEvent
5+
6+
class TestContentViewEvent(val number: Int) : ContentViewEvent {
7+
override fun getViewName(kit: AnalyticsKit): String = "Content View #$number"
8+
9+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.sofakingforever.library.events
2+
3+
import com.sofakingforever.analytics.AnalyticsKit
4+
import com.sofakingforever.analytics.events.CustomEvent
5+
6+
class TestCustomEvent(val number: Int) : CustomEvent {
7+
override fun getEventName(kit: AnalyticsKit): String = "Custom Event #$number"
8+
9+
override fun getParameters(kit: AnalyticsKit): MutableMap<String, Any> {
10+
val parameters = super.getParameters(kit)
11+
parameters["int"] = -2
12+
parameters["long"] = +2L
13+
parameters["boolean"] = true
14+
parameters["string"] = "fun #$number"
15+
return parameters
16+
}
17+
}

analytics/src/test/java/com/sofakingforever/library/events/TestEvent.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)