react-native-acoustic-connect-beta 19.0.4 → 19.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,5 @@
1
+ ## [19.0.6](https://github.com/aipoweredmarketer/react-native-acoustic-connect-beta/compare/19.0.5...19.0.6) (2026-07-02)
2
+ ## [19.0.5](https://github.com/aipoweredmarketer/react-native-acoustic-connect-beta/compare/19.0.4...19.0.5) (2026-07-02)
1
3
  ## [19.0.4](https://github.com/aipoweredmarketer/react-native-acoustic-connect-beta/compare/19.0.3...19.0.4) (2026-07-01)
2
4
  ## [19.0.3](https://github.com/aipoweredmarketer/react-native-acoustic-connect-beta/compare/19.0.2...19.0.3) (2026-06-30)
3
5
  ## [19.0.2](https://github.com/aipoweredmarketer/react-native-acoustic-connect-beta/compare/19.0.1...19.0.2) (2026-06-30)
@@ -32,6 +32,7 @@ def isNewArchitectureEnabled() {
32
32
 
33
33
  apply plugin: "com.android.library"
34
34
  apply plugin: 'org.jetbrains.kotlin.android'
35
+ apply plugin: 'jacoco'
35
36
  apply from: '../nitrogen/generated/android/AcousticConnectRN+autolinking.gradle'
36
37
 
37
38
  if (isNewArchitectureEnabled()) {
@@ -117,6 +118,17 @@ android {
117
118
  disable "GradleCompatible"
118
119
  }
119
120
 
121
+ testOptions {
122
+ unitTests {
123
+ // Unstubbed android.jar methods return defaults instead of throwing —
124
+ // needed for the few framework calls Robolectric doesn't cover.
125
+ returnDefaultValues = true
126
+ // Robolectric needs the library manifest + resources on the test
127
+ // classpath.
128
+ includeAndroidResources = true
129
+ }
130
+ }
131
+
120
132
  compileOptions {
121
133
  sourceCompatibility JavaVersion.VERSION_1_8
122
134
  targetCompatibility JavaVersion.VERSION_1_8
@@ -233,3 +245,62 @@ if (isNewArchitectureEnabled()) {
233
245
  codegenJavaPackageName = "com.acousticconnectrn"
234
246
  }
235
247
  }
248
+
249
+ // JVM unit tests (android/src/test) — run from a consumer app's gradle, e.g.
250
+ // cd example/android && ./gradlew :react-native-acoustic-connect-beta:testDebugUnitTest
251
+ // No emulator: testDebugUnitTest does not trigger externalNativeBuild/CMake.
252
+ // RN + nitro are compileOnly above (provided by the host app), so they are
253
+ // re-declared for the test runtime classpath; the Connect SDK is already
254
+ // `implementation` and flows to tests automatically. Note: nitro's Promise is
255
+ // JNI-backed, so the push*/logIdentity Promise-returning methods cannot be
256
+ // exercised in JVM tests — they are covered by the sample-build CI gates.
257
+ dependencies {
258
+ testImplementation "junit:junit:4.13.2"
259
+ testImplementation "io.mockk:mockk:1.13.16"
260
+ // @Config(sdk = [35]) in the tests until Robolectric supports SDK 36.
261
+ testImplementation "org.robolectric:robolectric:4.14.1"
262
+ // Deliberately `+`, matching the compileOnly declaration above: this
263
+ // coordinate never resolves from a repository — the RN Gradle plugin
264
+ // substitutes it with the HOST app's `com.facebook.react:react-android`
265
+ // at resolution time, so tests always run against the same RN version the
266
+ // consuming build uses. Pinning (e.g. `0.82.1`) would name an artifact
267
+ // version that doesn't exist on Maven for RN >= 0.72 and adds only false
268
+ // precision; without the substitution both forms fail loudly.
269
+ //noinspection GradleDynamicVersion
270
+ testImplementation "com.facebook.react:react-native:+"
271
+ testImplementation project(":react-native-nitro-modules")
272
+ }
273
+
274
+ // Coverage for the JVM unit tests. Robolectric needs
275
+ // includeNoLocationClasses to attribute coverage to instrumented classes.
276
+ tasks.withType(Test).configureEach {
277
+ jacoco {
278
+ includeNoLocationClasses = true
279
+ excludes = ['jdk.internal.*']
280
+ }
281
+ }
282
+
283
+ // XML (parsed by the Jenkins Slack summary) + HTML (archived artifact)
284
+ // coverage report over the debug unit tests. Registered afterEvaluate
285
+ // because AGP creates the variant test task then. Generated nitro bindings
286
+ // are excluded — they are codegen output, not logic this module owns.
287
+ project.afterEvaluate {
288
+ tasks.register('jacocoDebugUnitTestReport', JacocoReport) {
289
+ dependsOn 'testDebugUnitTest'
290
+ group = 'verification'
291
+ description = 'JaCoCo coverage report for the debug JVM unit tests.'
292
+
293
+ def generatedExcludes = ['com/margelo/nitro/**', '**/BuildConfig*']
294
+ classDirectories.setFrom(files(
295
+ fileTree(dir: "${buildDir}/tmp/kotlin-classes/debug", excludes: generatedExcludes),
296
+ fileTree(dir: "${buildDir}/intermediates/javac/debug", includes: ['**/classes/**'], excludes: generatedExcludes)
297
+ ))
298
+ sourceDirectories.setFrom(files("${projectDir}/src/main/java"))
299
+ executionData.setFrom(fileTree(dir: buildDir, includes: ['jacoco/testDebugUnitTest.exec']))
300
+
301
+ reports {
302
+ xml.required = true
303
+ html.required = true
304
+ }
305
+ }
306
+ }
@@ -1,4 +1,4 @@
1
- #Wed Jul 01 01:01:06 PDT 2026
1
+ #Thu Jul 02 10:44:10 PDT 2026
2
2
  UseWhiteList=true
3
3
  PrintScreen=3
4
4
  UseRandomSample=false
@@ -1206,7 +1206,8 @@ class HybridAcousticConnectRN : HybridAcousticConnectRNSpec(),
1206
1206
  * @param values The map to be converted.
1207
1207
  * @return A HashMap<String?, String?> representation of the input map which library can use.
1208
1208
  */
1209
- private fun convertToMap(values: Map<String, Variant_Boolean_String_Double>): HashMap<String?, String?> {
1209
+ // internal (not private) so the unit tests in src/test can exercise it.
1210
+ internal fun convertToMap(values: Map<String, Variant_Boolean_String_Double>): HashMap<String?, String?> {
1210
1211
  val map = HashMap<String?, String?>()
1211
1212
  for (key in values.keys) {
1212
1213
  val value = values[key]
@@ -1223,7 +1224,8 @@ class HybridAcousticConnectRN : HybridAcousticConnectRNSpec(),
1223
1224
  * @param values The map to be converted.
1224
1225
  * @return A HashMap<String?, String?> representation of the input map which library can use.
1225
1226
  */
1226
- private fun convertToMapAny(values: Map<String, Variant_Boolean_String_Double>): java.util.HashMap<String?, Any?>? {
1227
+ // internal (not private) so the unit tests in src/test can exercise it.
1228
+ internal fun convertToMapAny(values: Map<String, Variant_Boolean_String_Double>): java.util.HashMap<String?, Any?>? {
1227
1229
  val map = HashMap<String?, Any?>()
1228
1230
  for (key in values.keys) {
1229
1231
  val value = values[key]
package/package.json CHANGED
@@ -11,13 +11,19 @@
11
11
  },
12
12
  "description": "BETA: React native plugin for Acoustic Connect",
13
13
  "devDependencies": {
14
+ "@babel/core": "^7.25.2",
15
+ "@babel/runtime": "^7.25.0",
14
16
  "@expo/config-plugins": "~55.0.10",
15
17
  "@expo/config-types": "^55.0.5",
16
18
  "@jamesacarr/eslint-formatter-github-actions": "^0.2.0",
19
+ "@react-native/babel-preset": "0.82.1",
17
20
  "@release-it/bumper": "^7.0.1",
18
21
  "@release-it/conventional-changelog": "^10.0.0",
22
+ "@testing-library/react-native": "^13.3.3",
19
23
  "@types/jest": "^29.5.12",
20
24
  "@types/react": "^19.0.10",
25
+ "jest": "^29.7.0",
26
+ "jest-junit": "^16.0.0",
21
27
  "jetifier": "^1.6.3",
22
28
  "nitrogen": "0.35.9",
23
29
  "prettier-plugin-kotlin": "^2.1.0",
@@ -25,6 +31,7 @@
25
31
  "react-native": "0.82.1",
26
32
  "react-native-builder-bob": "^0.37.0",
27
33
  "react-native-nitro-modules": "0.35.9",
34
+ "react-test-renderer": "19.1.1",
28
35
  "release-it": "^19.0.2",
29
36
  "typescript": "5.0.4"
30
37
  },
@@ -59,6 +66,8 @@
59
66
  ],
60
67
  "files": [
61
68
  "src",
69
+ "!src/**/__tests__/**",
70
+ "!src/**/*.test.*",
62
71
  "react-native.config.js",
63
72
  "lib",
64
73
  "nitrogen",
@@ -67,6 +76,7 @@
67
76
  "android/gradle.properties",
68
77
  "android/CMakeLists.txt",
69
78
  "android/src",
79
+ "!android/src/test/**",
70
80
  "android/config.gradle",
71
81
  "android/src/main/assets/**",
72
82
  "ios/**/*.h",
@@ -138,7 +148,7 @@
138
148
  [
139
149
  "typescript",
140
150
  {
141
- "project": "tsconfig.json"
151
+ "project": "tsconfig.build.json"
142
152
  }
143
153
  ]
144
154
  ]
@@ -205,8 +215,10 @@
205
215
  "prepack": "npm run build:plugin",
206
216
  "rebuild": "npm run codegen && npm run rebuildExample --prefix ./example",
207
217
  "release": "release-it",
208
- "test": "echo \"Error: no test specified\" && exit 1",
218
+ "test": "jest",
219
+ "test:all": "npm test && npm run test:plugin",
209
220
  "test:plugin": "npm run build:plugin && node --test plugin/__tests__/",
221
+ "test:watch": "jest --watch",
210
222
  "typecheck": "tsc --noEmit",
211
223
  "verifyConnectSetup": "node cli/index.mjs doctor $INIT_CWD",
212
224
  "yalcPublish": "npm run rebuild && yalc publish"
@@ -214,7 +226,7 @@
214
226
  "source": "src/index",
215
227
  "summary": "react-native ios android tealeaf connect cxa wxca er enhanced-replay",
216
228
  "types": "./lib/typescript/src/index.d.ts",
217
- "version": "19.0.4",
229
+ "version": "19.0.6",
218
230
  "workspaces": [
219
231
  "example",
220
232
  "Examples/bare-workflow"