Skip to content

Commit 6ddd7d2

Browse files
authored
add more extension functions for dynamic-links-ktx (#1753)
1 parent 739dd16 commit 6ddd7d2

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

firebase-dynamic-links/ktx/api.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ package com.google.firebase.dynamiclinks.ktx {
55
ctor public FirebaseDynamicLinksKt();
66
method @NonNull public static void androidParameters(@NonNull com.google.firebase.dynamiclinks.DynamicLink.Builder, @NonNull kotlin.jvm.functions.Function1<? super com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters.Builder,kotlin.Unit> init);
77
method @NonNull public static void androidParameters(@NonNull com.google.firebase.dynamiclinks.DynamicLink.Builder, @NonNull String packageName, @NonNull kotlin.jvm.functions.Function1<? super com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters.Builder,kotlin.Unit> init);
8+
method @Nullable public static operator android.net.Uri component1(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink);
9+
method @Nullable public static operator android.net.Uri component1(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData);
10+
method @Nullable public static operator android.net.Uri component2(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink);
11+
method public static operator int component2(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData);
12+
method @NonNull public static operator java.util.List<com.google.firebase.dynamiclinks.ShortDynamicLink.Warning> component3(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink);
13+
method public static operator long component3(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData);
814
method @NonNull public static com.google.firebase.dynamiclinks.DynamicLink dynamicLink(@NonNull com.google.firebase.dynamiclinks.FirebaseDynamicLinks, @NonNull kotlin.jvm.functions.Function1<? super com.google.firebase.dynamiclinks.DynamicLink.Builder,kotlin.Unit> init);
915
method @NonNull public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks dynamicLinks(@NonNull com.google.firebase.ktx.Firebase, @NonNull com.google.firebase.FirebaseApp app);
1016
method @NonNull public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getDynamicLinks(@NonNull com.google.firebase.ktx.Firebase);

firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.google.firebase.components.Component
2121
import com.google.firebase.components.ComponentRegistrar
2222
import com.google.firebase.dynamiclinks.DynamicLink
2323
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks
24+
import com.google.firebase.dynamiclinks.PendingDynamicLinkData
2425
import com.google.firebase.dynamiclinks.ShortDynamicLink
2526
import com.google.firebase.ktx.Firebase
2627
import com.google.firebase.platforminfo.LibraryVersionComponent
@@ -117,6 +118,24 @@ fun FirebaseDynamicLinks.shortLinkAsync(suffix: Int, init: DynamicLink.Builder.(
117118
return builder.buildShortDynamicLink(suffix)
118119
}
119120

121+
/** Destructuring declaration for [ShortDynamicLink] to provide shortLink. */
122+
operator fun ShortDynamicLink.component1() = shortLink
123+
124+
/** Destructuring declaration for [ShortDynamicLink] to provide previewLink. */
125+
operator fun ShortDynamicLink.component2() = previewLink
126+
127+
/** Destructuring declaration for [ShortDynamicLink] to provide warnings. */
128+
operator fun ShortDynamicLink.component3(): List<ShortDynamicLink.Warning> = warnings
129+
130+
/** Destructuring declaration for [PendingDynamicLinkData] to provide link. */
131+
operator fun PendingDynamicLinkData.component1() = link
132+
133+
/** Destructuring declaration for [PendingDynamicLinkData] to provide minimumAppVersion. */
134+
operator fun PendingDynamicLinkData.component2() = minimumAppVersion
135+
136+
/** Destructuring declaration for [PendingDynamicLinkData] to provide clickTimestamp. */
137+
operator fun PendingDynamicLinkData.component3() = clickTimestamp
138+
120139
internal const val LIBRARY_NAME: String = "fire-dl-ktx"
121140

122141
/** @suppress */

firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@ import com.google.common.truth.Truth.assertThat
1919
import com.google.firebase.FirebaseApp
2020
import com.google.firebase.FirebaseOptions
2121
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks
22+
import com.google.firebase.dynamiclinks.PendingDynamicLinkData
23+
import com.google.firebase.dynamiclinks.ShortDynamicLink
2224
import com.google.firebase.ktx.Firebase
2325
import com.google.firebase.ktx.app
2426
import com.google.firebase.ktx.initialize
2527
import org.junit.After
2628
import org.junit.Before
2729
import org.junit.Test
2830
import org.junit.runner.RunWith
31+
import org.mockito.Mockito.`when`
32+
import org.mockito.Mockito.mock
2933
import org.robolectric.RobolectricTestRunner
3034
import org.robolectric.RuntimeEnvironment
3135

@@ -223,4 +227,45 @@ class DynamicLinksTests : BaseTestCase() {
223227
val efr = Integer.parseInt(dynamicLink.uri.getQueryParameter("efr")!!) == 1
224228
assertThat(efr).isEqualTo(forcedRedirect)
225229
}
230+
231+
@Test
232+
fun `ShortDynamicLink destructure declaration works`() {
233+
val fakeWarning = object : ShortDynamicLink.Warning {
234+
override fun getMessage() = "Warning"
235+
override fun getCode() = "warning"
236+
}
237+
238+
val expectedShortLink = Uri.parse("https://example.com")
239+
val expectedPreviewLink = Uri.parse("https://example.com/preview")
240+
val expectedWarnings = mutableListOf<ShortDynamicLink.Warning>(fakeWarning)
241+
242+
val mockShortDynamicLink = mock(ShortDynamicLink::class.java)
243+
`when`(mockShortDynamicLink.shortLink).thenReturn(expectedShortLink)
244+
`when`(mockShortDynamicLink.previewLink).thenReturn(expectedPreviewLink)
245+
`when`(mockShortDynamicLink.warnings).thenReturn(expectedWarnings)
246+
247+
val (shortLink, previewLink, warnings) = mockShortDynamicLink
248+
249+
assertThat(shortLink).isEqualTo(expectedShortLink)
250+
assertThat(previewLink).isEqualTo(expectedPreviewLink)
251+
assertThat(warnings).isEqualTo(expectedWarnings)
252+
}
253+
254+
@Test
255+
fun `PendingDynamicLinkData destructure declaration works`() {
256+
val expectedLink = Uri.parse("https://example.com")
257+
val expectedMinAppVersion = 30
258+
val expectedTimestamp = 172947600L
259+
260+
val mockPendingData = mock(PendingDynamicLinkData::class.java)
261+
`when`(mockPendingData.link).thenReturn(expectedLink)
262+
`when`(mockPendingData.minimumAppVersion).thenReturn(expectedMinAppVersion)
263+
`when`(mockPendingData.clickTimestamp).thenReturn(expectedTimestamp)
264+
265+
val (link, minAppVersion, timestamp) = mockPendingData
266+
267+
assertThat(link).isEqualTo(expectedLink)
268+
assertThat(minAppVersion).isEqualTo(expectedMinAppVersion)
269+
assertThat(timestamp).isEqualTo(expectedTimestamp)
270+
}
226271
}

0 commit comments

Comments
 (0)