Skip to content

Commit b085127

Browse files
committed
test: add comprehensive unit tests for NewRelicVideoCore
1 parent 0c30d62 commit b085127

27 files changed

+9102
-3
lines changed

NewRelicVideoCore/build.gradle

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
plugins {
22
id 'com.android.library'
33
id 'maven-publish'
4+
id 'jacoco'
45
}
56
android {
67
compileSdkVersion 34
@@ -19,6 +20,7 @@ android {
1920
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
2021
buildConfigField("long", "VERSION_CODE", "${defaultConfig.versionCode}")
2122
buildConfigField("String","VERSION_NAME","\"${defaultConfig.versionName}\"")
23+
testCoverageEnabled true
2224
}
2325
release {
2426
minifyEnabled false
@@ -28,8 +30,18 @@ android {
2830
}
2931
}
3032
compileOptions {
31-
sourceCompatibility JavaVersion.VERSION_1_8
32-
targetCompatibility JavaVersion.VERSION_1_8
33+
sourceCompatibility JavaVersion.VERSION_17
34+
targetCompatibility JavaVersion.VERSION_17
35+
}
36+
testOptions {
37+
unitTests {
38+
all {
39+
jacoco {
40+
includeNoLocationClasses = true
41+
excludes = ['jdk.internal.*']
42+
}
43+
}
44+
}
3345
}
3446
namespace 'com.newrelic.videoagent.core'
3547
}
@@ -44,6 +56,8 @@ dependencies {
4456
// implementation 'androidx.leanback:leanback:1.0.0'
4557

4658
testImplementation 'junit:junit:4.13.2'
59+
testImplementation 'org.robolectric:robolectric:4.13'
60+
testImplementation 'org.mockito:mockito-core:5.7.0'
4761
// Updated AndroidX Test dependencies that are compatible with Android 12+
4862
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
4963
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
@@ -62,3 +76,71 @@ afterEvaluate {
6276
}
6377
}
6478
}
79+
80+
jacoco {
81+
toolVersion = "0.8.10"
82+
}
83+
84+
tasks.register('jacocoTestReport', JacocoReport) {
85+
mustRunAfter 'testDebugUnitTest'
86+
87+
reports {
88+
xml.required = true
89+
html.required = true
90+
csv.required = false
91+
}
92+
93+
def fileFilter = [
94+
'**/R.class',
95+
'**/R$*.class',
96+
'**/BuildConfig.*',
97+
'**/Manifest*.*',
98+
'**/*Test*.*',
99+
'android/**/*.*'
100+
]
101+
102+
def debugTree = fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: fileFilter)
103+
def mainSrc = "${project.projectDir}/src/main/java"
104+
105+
sourceDirectories.setFrom(files([mainSrc]))
106+
classDirectories.setFrom(files([debugTree]))
107+
executionData.setFrom(files("${project.buildDir}/outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec"))
108+
}
109+
110+
tasks.register('jacocoCoverageVerification', JacocoCoverageVerification) {
111+
mustRunAfter 'testDebugUnitTest'
112+
113+
violationRules {
114+
rule {
115+
enabled = true
116+
element = 'BUNDLE'
117+
limit {
118+
counter = 'INSTRUCTION'
119+
value = 'COVEREDRATIO'
120+
minimum = 0.50
121+
}
122+
}
123+
}
124+
125+
def fileFilter = [
126+
'**/R.class',
127+
'**/R$*.class',
128+
'**/BuildConfig.*',
129+
'**/Manifest*.*',
130+
'**/*Test*.*',
131+
'android/**/*.*'
132+
]
133+
134+
def debugTree = fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: fileFilter)
135+
def mainSrc = "${project.projectDir}/src/main/java"
136+
137+
sourceDirectories.setFrom(files([mainSrc]))
138+
139+
classDirectories.setFrom(files([debugTree]))
140+
executionData.setFrom(files("${project.buildDir}/outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec"))
141+
}
142+
143+
tasks.named('check') {
144+
dependsOn 'jacocoCoverageVerification'
145+
}
146+
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
package com.newrelic.videoagent.core;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.*;
6+
7+
/**
8+
* Unit tests for NRDef that verify constant values.
9+
*/
10+
public class NRDefTest {
11+
12+
@Test
13+
public void testVideoEventConstants() {
14+
assertEquals("VideoAction", NRDef.NR_VIDEO_EVENT);
15+
assertEquals("VideoAdAction", NRDef.NR_VIDEO_AD_EVENT);
16+
assertEquals("VideoErrorAction", NRDef.NR_VIDEO_ERROR_EVENT);
17+
assertEquals("VideoCustomAction", NRDef.NR_VIDEO_CUSTOM_EVENT);
18+
}
19+
20+
@Test
21+
public void testSourceConstant() {
22+
assertEquals("ANDROID", NRDef.SRC);
23+
}
24+
25+
@Test
26+
public void testTrackerReadyConstants() {
27+
assertEquals("TRACKER_READY", NRDef.TRACKER_READY);
28+
assertEquals("PLAYER_READY", NRDef.PLAYER_READY);
29+
}
30+
31+
@Test
32+
public void testContentEventConstants() {
33+
assertEquals("CONTENT_REQUEST", NRDef.CONTENT_REQUEST);
34+
assertEquals("CONTENT_START", NRDef.CONTENT_START);
35+
assertEquals("CONTENT_PAUSE", NRDef.CONTENT_PAUSE);
36+
assertEquals("CONTENT_RESUME", NRDef.CONTENT_RESUME);
37+
assertEquals("CONTENT_END", NRDef.CONTENT_END);
38+
}
39+
40+
@Test
41+
public void testContentSeekConstants() {
42+
assertEquals("CONTENT_SEEK_START", NRDef.CONTENT_SEEK_START);
43+
assertEquals("CONTENT_SEEK_END", NRDef.CONTENT_SEEK_END);
44+
}
45+
46+
@Test
47+
public void testContentBufferConstants() {
48+
assertEquals("CONTENT_BUFFER_START", NRDef.CONTENT_BUFFER_START);
49+
assertEquals("CONTENT_BUFFER_END", NRDef.CONTENT_BUFFER_END);
50+
}
51+
52+
@Test
53+
public void testContentMiscConstants() {
54+
assertEquals("CONTENT_HEARTBEAT", NRDef.CONTENT_HEARTBEAT);
55+
assertEquals("CONTENT_RENDITION_CHANGE", NRDef.CONTENT_RENDITION_CHANGE);
56+
assertEquals("CONTENT_ERROR", NRDef.CONTENT_ERROR);
57+
}
58+
59+
@Test
60+
public void testAdEventConstants() {
61+
assertEquals("AD_REQUEST", NRDef.AD_REQUEST);
62+
assertEquals("AD_START", NRDef.AD_START);
63+
assertEquals("AD_PAUSE", NRDef.AD_PAUSE);
64+
assertEquals("AD_RESUME", NRDef.AD_RESUME);
65+
assertEquals("AD_END", NRDef.AD_END);
66+
}
67+
68+
@Test
69+
public void testAdSeekConstants() {
70+
assertEquals("AD_SEEK_START", NRDef.AD_SEEK_START);
71+
assertEquals("AD_SEEK_END", NRDef.AD_SEEK_END);
72+
}
73+
74+
@Test
75+
public void testAdBufferConstants() {
76+
assertEquals("AD_BUFFER_START", NRDef.AD_BUFFER_START);
77+
assertEquals("AD_BUFFER_END", NRDef.AD_BUFFER_END);
78+
}
79+
80+
@Test
81+
public void testAdMiscConstants() {
82+
assertEquals("AD_HEARTBEAT", NRDef.AD_HEARTBEAT);
83+
assertEquals("AD_RENDITION_CHANGE", NRDef.AD_RENDITION_CHANGE);
84+
assertEquals("AD_ERROR", NRDef.AD_ERROR);
85+
}
86+
87+
@Test
88+
public void testAdBreakConstants() {
89+
assertEquals("AD_BREAK_START", NRDef.AD_BREAK_START);
90+
assertEquals("AD_BREAK_END", NRDef.AD_BREAK_END);
91+
}
92+
93+
@Test
94+
public void testAdInteractionConstants() {
95+
assertEquals("AD_QUARTILE", NRDef.AD_QUARTILE);
96+
assertEquals("AD_CLICK", NRDef.AD_CLICK);
97+
}
98+
99+
@Test
100+
public void testVersionConstant() {
101+
assertNotNull(NRDef.NRVIDEO_CORE_VERSION);
102+
assertFalse(NRDef.NRVIDEO_CORE_VERSION.isEmpty());
103+
}
104+
105+
@Test
106+
public void testAllContentConstantsAreUnique() {
107+
String[] contentConstants = {
108+
NRDef.CONTENT_REQUEST,
109+
NRDef.CONTENT_START,
110+
NRDef.CONTENT_PAUSE,
111+
NRDef.CONTENT_RESUME,
112+
NRDef.CONTENT_END,
113+
NRDef.CONTENT_SEEK_START,
114+
NRDef.CONTENT_SEEK_END,
115+
NRDef.CONTENT_BUFFER_START,
116+
NRDef.CONTENT_BUFFER_END,
117+
NRDef.CONTENT_HEARTBEAT,
118+
NRDef.CONTENT_RENDITION_CHANGE,
119+
NRDef.CONTENT_ERROR
120+
};
121+
122+
for (int i = 0; i < contentConstants.length; i++) {
123+
for (int j = i + 1; j < contentConstants.length; j++) {
124+
assertNotEquals(contentConstants[i], contentConstants[j]);
125+
}
126+
}
127+
}
128+
129+
@Test
130+
public void testAllAdConstantsAreUnique() {
131+
String[] adConstants = {
132+
NRDef.AD_REQUEST,
133+
NRDef.AD_START,
134+
NRDef.AD_PAUSE,
135+
NRDef.AD_RESUME,
136+
NRDef.AD_END,
137+
NRDef.AD_SEEK_START,
138+
NRDef.AD_SEEK_END,
139+
NRDef.AD_BUFFER_START,
140+
NRDef.AD_BUFFER_END,
141+
NRDef.AD_HEARTBEAT,
142+
NRDef.AD_RENDITION_CHANGE,
143+
NRDef.AD_ERROR,
144+
NRDef.AD_BREAK_START,
145+
NRDef.AD_BREAK_END,
146+
NRDef.AD_QUARTILE,
147+
NRDef.AD_CLICK
148+
};
149+
150+
for (int i = 0; i < adConstants.length; i++) {
151+
for (int j = i + 1; j < adConstants.length; j++) {
152+
assertNotEquals(adConstants[i], adConstants[j]);
153+
}
154+
}
155+
}
156+
157+
@Test
158+
public void testContentConstantsStartWithCONTENT() {
159+
assertTrue(NRDef.CONTENT_REQUEST.startsWith("CONTENT_"));
160+
assertTrue(NRDef.CONTENT_START.startsWith("CONTENT_"));
161+
assertTrue(NRDef.CONTENT_PAUSE.startsWith("CONTENT_"));
162+
assertTrue(NRDef.CONTENT_RESUME.startsWith("CONTENT_"));
163+
assertTrue(NRDef.CONTENT_END.startsWith("CONTENT_"));
164+
assertTrue(NRDef.CONTENT_SEEK_START.startsWith("CONTENT_"));
165+
assertTrue(NRDef.CONTENT_SEEK_END.startsWith("CONTENT_"));
166+
assertTrue(NRDef.CONTENT_BUFFER_START.startsWith("CONTENT_"));
167+
assertTrue(NRDef.CONTENT_BUFFER_END.startsWith("CONTENT_"));
168+
assertTrue(NRDef.CONTENT_HEARTBEAT.startsWith("CONTENT_"));
169+
assertTrue(NRDef.CONTENT_RENDITION_CHANGE.startsWith("CONTENT_"));
170+
assertTrue(NRDef.CONTENT_ERROR.startsWith("CONTENT_"));
171+
}
172+
173+
@Test
174+
public void testAdConstantsStartWithAD() {
175+
assertTrue(NRDef.AD_REQUEST.startsWith("AD_"));
176+
assertTrue(NRDef.AD_START.startsWith("AD_"));
177+
assertTrue(NRDef.AD_PAUSE.startsWith("AD_"));
178+
assertTrue(NRDef.AD_RESUME.startsWith("AD_"));
179+
assertTrue(NRDef.AD_END.startsWith("AD_"));
180+
assertTrue(NRDef.AD_SEEK_START.startsWith("AD_"));
181+
assertTrue(NRDef.AD_SEEK_END.startsWith("AD_"));
182+
assertTrue(NRDef.AD_BUFFER_START.startsWith("AD_"));
183+
assertTrue(NRDef.AD_BUFFER_END.startsWith("AD_"));
184+
assertTrue(NRDef.AD_HEARTBEAT.startsWith("AD_"));
185+
assertTrue(NRDef.AD_RENDITION_CHANGE.startsWith("AD_"));
186+
assertTrue(NRDef.AD_ERROR.startsWith("AD_"));
187+
assertTrue(NRDef.AD_BREAK_START.startsWith("AD_"));
188+
assertTrue(NRDef.AD_BREAK_END.startsWith("AD_"));
189+
assertTrue(NRDef.AD_QUARTILE.startsWith("AD_"));
190+
assertTrue(NRDef.AD_CLICK.startsWith("AD_"));
191+
}
192+
193+
@Test
194+
public void testConstantsAreNotNull() {
195+
assertNotNull(NRDef.NRVIDEO_CORE_VERSION);
196+
assertNotNull(NRDef.NR_VIDEO_EVENT);
197+
assertNotNull(NRDef.NR_VIDEO_AD_EVENT);
198+
assertNotNull(NRDef.NR_VIDEO_ERROR_EVENT);
199+
assertNotNull(NRDef.NR_VIDEO_CUSTOM_EVENT);
200+
assertNotNull(NRDef.SRC);
201+
assertNotNull(NRDef.TRACKER_READY);
202+
assertNotNull(NRDef.PLAYER_READY);
203+
}
204+
205+
@Test
206+
public void testConstantsAreNotEmpty() {
207+
assertFalse(NRDef.NRVIDEO_CORE_VERSION.isEmpty());
208+
assertFalse(NRDef.NR_VIDEO_EVENT.isEmpty());
209+
assertFalse(NRDef.NR_VIDEO_AD_EVENT.isEmpty());
210+
assertFalse(NRDef.NR_VIDEO_ERROR_EVENT.isEmpty());
211+
assertFalse(NRDef.NR_VIDEO_CUSTOM_EVENT.isEmpty());
212+
assertFalse(NRDef.SRC.isEmpty());
213+
assertFalse(NRDef.TRACKER_READY.isEmpty());
214+
assertFalse(NRDef.PLAYER_READY.isEmpty());
215+
}
216+
}

0 commit comments

Comments
 (0)