From 8ffaf93ab98d9d9004a212cb78a68c59345ce253 Mon Sep 17 00:00:00 2001 From: Alan Barker Date: Mon, 19 May 2025 09:43:21 -0400 Subject: [PATCH 1/3] feat: Add support for inline contexts for custom events --- .../src/main/java/com/launchdarkly/sdktest/TestService.java | 2 +- launchdarkly-android-client-sdk/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contract-tests/src/main/java/com/launchdarkly/sdktest/TestService.java b/contract-tests/src/main/java/com/launchdarkly/sdktest/TestService.java index ab27b379..c356d55c 100644 --- a/contract-tests/src/main/java/com/launchdarkly/sdktest/TestService.java +++ b/contract-tests/src/main/java/com/launchdarkly/sdktest/TestService.java @@ -34,7 +34,7 @@ public class TestService extends NanoHTTPD { "strongly-typed", "tags", "auto-env-attributes", - "inline-context", + "inline-context-all", "anonymous-redaction", "client-prereq-events" }; diff --git a/launchdarkly-android-client-sdk/build.gradle b/launchdarkly-android-client-sdk/build.gradle index 22ce5c97..c135b313 100644 --- a/launchdarkly-android-client-sdk/build.gradle +++ b/launchdarkly-android-client-sdk/build.gradle @@ -66,7 +66,7 @@ ext.versions = [ "jacksonDatabind": "2.10.5.1", "junit": "4.13", "launchdarklyJavaSdkCommon": "2.1.1", - "launchdarklyJavaSdkInternal": "1.3.0", + "launchdarklyJavaSdkInternal": "1.4.0", "launchdarklyLogging": "1.1.1", "okhttp": "4.9.2", "timber": "5.0.1", From 5a601cd54378e902ba28ba7e95b08ab685b46824 Mon Sep 17 00:00:00 2001 From: Alan Barker Date: Mon, 19 May 2025 11:20:40 -0400 Subject: [PATCH 2/3] fix: Failing event tests --- .../sdk/android/LDClientEventTest.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java index 97aaf420..d603c7a3 100644 --- a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java +++ b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java @@ -9,6 +9,7 @@ import androidx.test.core.app.ApplicationProvider; +import com.launchdarkly.sdk.ArrayBuilder; import com.launchdarkly.sdk.EvaluationReason; import com.launchdarkly.sdk.LDContext; import com.launchdarkly.sdk.LDValue; @@ -366,13 +367,22 @@ private void assertIdentifyEvent(LDValue event, LDContext context) { assertEquals("identify", event.get("kind").stringValue()); } - private void assertContextKeys(LDValue event, LDContext context) { - ObjectBuilder o = LDValue.buildObject(); + private void assertContexts(LDValue event, LDContext context) { + ArrayBuilder a = LDValue.buildArray(); for (int i = 0; i < context.getIndividualContextCount(); i++) { - o.put(context.getIndividualContext(i).getKind().toString(), - context.getIndividualContext(i).getKey()); + LDContext individualContext = context.getIndividualContext(i); + ObjectBuilder objContext = LDValue.buildObject(); + objContext.put("anonymous", individualContext.isAnonymous()); + objContext.put("context_key", individualContext.getKey()); + objContext.put("context_kind", individualContext.getKind().toString()); + ObjectBuilder objCustom = LDValue.buildObject(); + for (String customAttributeName : individualContext.getCustomAttributeNames()) { + objCustom.put(customAttributeName, individualContext.getValue(customAttributeName)); + } + objContext.put("attributes_json", objCustom.build()); + a.add(objContext.build()); } - assertEquals(o.build(), event.get("contextKeys")); + assertEquals(a.build(), event.get("contexts")); } private void assertFeatureEvent(LDValue event, LDContext context) { @@ -381,7 +391,7 @@ private void assertFeatureEvent(LDValue event, LDContext context) { private void assertCustomEvent(LDValue event, LDContext context, String eventKey) { assertEquals("custom", event.get("kind").stringValue()); - assertContextKeys(event, context); + assertContexts(event, context); assertEquals(eventKey, event.get("key").stringValue()); } From dc4496f0e3026d42dac4738280c90880c20254b1 Mon Sep 17 00:00:00 2001 From: Alan Barker Date: Mon, 19 May 2025 12:45:06 -0400 Subject: [PATCH 3/3] fix: 2nd try fixing failing event tests --- .../sdk/android/LDClientEventTest.java | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java index d603c7a3..b8331b78 100644 --- a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java +++ b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEventTest.java @@ -2,6 +2,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -9,7 +10,6 @@ import androidx.test.core.app.ApplicationProvider; -import com.launchdarkly.sdk.ArrayBuilder; import com.launchdarkly.sdk.EvaluationReason; import com.launchdarkly.sdk.LDContext; import com.launchdarkly.sdk.LDValue; @@ -367,22 +367,10 @@ private void assertIdentifyEvent(LDValue event, LDContext context) { assertEquals("identify", event.get("kind").stringValue()); } - private void assertContexts(LDValue event, LDContext context) { - ArrayBuilder a = LDValue.buildArray(); - for (int i = 0; i < context.getIndividualContextCount(); i++) { - LDContext individualContext = context.getIndividualContext(i); - ObjectBuilder objContext = LDValue.buildObject(); - objContext.put("anonymous", individualContext.isAnonymous()); - objContext.put("context_key", individualContext.getKey()); - objContext.put("context_kind", individualContext.getKind().toString()); - ObjectBuilder objCustom = LDValue.buildObject(); - for (String customAttributeName : individualContext.getCustomAttributeNames()) { - objCustom.put(customAttributeName, individualContext.getValue(customAttributeName)); - } - objContext.put("attributes_json", objCustom.build()); - a.add(objContext.build()); - } - assertEquals(a.build(), event.get("contexts")); + private void assertContext(LDValue event, LDContext context) { + assertNotNull(event.get("context")); + assertEquals(context.getKind().toString(), event.get("context").get("kind").stringValue()); + assertEquals(context.getKey(), event.get("context").get("key").stringValue()); } private void assertFeatureEvent(LDValue event, LDContext context) { @@ -391,7 +379,7 @@ private void assertFeatureEvent(LDValue event, LDContext context) { private void assertCustomEvent(LDValue event, LDContext context, String eventKey) { assertEquals("custom", event.get("kind").stringValue()); - assertContexts(event, context); + assertContext(event, context); assertEquals(eventKey, event.get("key").stringValue()); }