Skip to content

Commit 312d14a

Browse files
authored
dataconnect: some small new APIs and major testing refactor (#6424)
1 parent b9013d5 commit 312d14a

File tree

100 files changed

+9083
-6525
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+9083
-6525
lines changed

firebase-dataconnect/CHANGELOG.md

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Unreleased
2-
2+
* [changed] Requires Data Connect emulator version 1.6.1 or later for code generation.
3+
* [feature] QueryRef and MutationRef gain methods copy(), withDataDeserializer(),
4+
and withVariablesSerializer().
5+
([#6424](https://github.com/firebase/firebase-android-sdk/pull/6424))
6+
* [feature] GeneratedConnector gains methods copy(), operations(), queries(),
7+
and mutations().
8+
([#6424](https://github.com/firebase/firebase-android-sdk/pull/6424))
9+
* [feature] GeneratedQuery and GeneratedMutation gain methods copy(),
10+
withVariablesSerializer(), and withDataDeserializer().
11+
([#6424](https://github.com/firebase/firebase-android-sdk/pull/6424))
12+
* [feature] GeneratedConnector, GeneratedQuery, and GeneratedMutation now
13+
must implement equals() to be a _logical_ comparsion, rather than just
14+
checking for _referencial_ equality using the `===` operator.
15+
([#6424](https://github.com/firebase/firebase-android-sdk/pull/6424))
16+
* [feature] FirebaseDataConnectExperimental annotation added, and some
17+
APIs have been annotated with it, requiring applications that make use of
18+
these experimental APIs to opt-in using
19+
`@OptIn(FirebaseDataConnectExperimental::class)` to suppress warnings or
20+
errors related to using these experimental APIs.
21+
([#6424](https://github.com/firebase/firebase-android-sdk/pull/6424))
322

423
# 16.0.0-beta02
524
* [changed] Updated protobuf dependency to `3.25.5` to fix

firebase-dataconnect/androidTestutil/src/main/kotlin/com/google/firebase/dataconnect/testutil/DataConnectIntegrationTestBase.kt

-27
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@ package com.google.firebase.dataconnect.testutil
1818

1919
import androidx.test.ext.junit.runners.AndroidJUnit4
2020
import com.google.firebase.dataconnect.ConnectorConfig
21-
import com.google.firebase.util.nextAlphanumericString
2221
import io.kotest.property.Arb
2322
import io.kotest.property.RandomSource
2423
import io.kotest.property.arbitrary.Codepoint
2524
import io.kotest.property.arbitrary.alphanumeric
2625
import io.kotest.property.arbitrary.arbitrary
2726
import io.kotest.property.arbitrary.string
28-
import kotlin.random.Random
2927
import org.junit.Rule
3028
import org.junit.rules.TestName
3129
import org.junit.runner.RunWith
@@ -84,28 +82,3 @@ abstract class DataConnectIntegrationTestBase {
8482
/** The name of the currently-running test, in the form "ClassName.MethodName". */
8583
val DataConnectIntegrationTestBase.testName
8684
get() = this::class.qualifiedName + "." + testNameRule.methodName
87-
88-
/**
89-
* Generates and returns a string containing random alphanumeric characters, including the name of
90-
* the currently-running test as returned from [testName].
91-
*
92-
* @param prefix A prefix to include in the returned string; if null (the default) then no prefix
93-
* will be included.
94-
* @param numRandomChars The number of random characters to include in the returned string; if null
95-
* (the default) then a default number will be used. At the time of writing, the default number of
96-
* characters is 20 (but this may change in the future).
97-
* @return a string containing random characters and incorporating the other information identified
98-
* above.
99-
*/
100-
fun DataConnectIntegrationTestBase.randomAlphanumericString(
101-
prefix: String? = null,
102-
numRandomChars: Int? = null
103-
): String = buildString {
104-
if (prefix != null) {
105-
append(prefix)
106-
append("_")
107-
}
108-
append(testName)
109-
append("_")
110-
append(Random.nextAlphanumericString(length = numRandomChars ?: 20))
111-
}

firebase-dataconnect/api.txt

+31-4
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ package com.google.firebase.dataconnect {
106106
property @Nullable public abstract kotlinx.serialization.modules.SerializersModule variablesSerializersModule;
107107
}
108108

109+
@kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING, message="This declaration is \"experimental\": its signature and/or semantics " + "may change in backwards-incompatible ways at any time without notice, " + "up to and including complete removal. " + "If you have a use case that relies on this declaration please open a " + "\"feature request\" issue at https://github.com/firebase/firebase-android-sdk " + "requesting this declaration\'s promotion from \"experimental\" to \"fully-supported\".") @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface FirebaseDataConnectExperimental {
110+
}
111+
109112
public final class FirebaseDataConnectKt {
110113
method @NonNull public static com.google.firebase.dataconnect.FirebaseDataConnect getInstance(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion, @NonNull com.google.firebase.FirebaseApp app, @NonNull com.google.firebase.dataconnect.ConnectorConfig config, @NonNull com.google.firebase.dataconnect.DataConnectSettings settings = com.google.firebase.dataconnect.DataConnectSettings());
111114
method @NonNull public static com.google.firebase.dataconnect.FirebaseDataConnect getInstance(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion, @NonNull com.google.firebase.dataconnect.ConnectorConfig config, @NonNull com.google.firebase.dataconnect.DataConnectSettings settings = com.google.firebase.dataconnect.DataConnectSettings());
@@ -122,7 +125,10 @@ package com.google.firebase.dataconnect {
122125
}
123126

124127
public interface MutationRef<Data, Variables> extends com.google.firebase.dataconnect.OperationRef<Data,Variables> {
128+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public com.google.firebase.dataconnect.MutationRef<Data,Variables> copy(@NonNull String operationName, @Nullable Variables variables, @NonNull kotlinx.serialization.DeserializationStrategy<? extends Data> dataDeserializer, @NonNull kotlinx.serialization.SerializationStrategy<? super Variables> variablesSerializer, @NonNull com.google.firebase.dataconnect.FirebaseDataConnect.CallerSdkType callerSdkType, @Nullable kotlinx.serialization.modules.SerializersModule dataSerializersModule, @Nullable kotlinx.serialization.modules.SerializersModule variablesSerializersModule);
125129
method @Nullable public suspend Object execute(@NonNull kotlin.coroutines.Continuation<? super com.google.firebase.dataconnect.MutationResult<Data,Variables>>);
130+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewData> com.google.firebase.dataconnect.MutationRef<NewData,Variables> withDataDeserializer(@NonNull kotlinx.serialization.DeserializationStrategy<? extends NewData> dataDeserializer, @Nullable kotlinx.serialization.modules.SerializersModule dataSerializersModule);
131+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewVariables> com.google.firebase.dataconnect.MutationRef<Data,NewVariables> withVariablesSerializer(@Nullable NewVariables variables, @NonNull kotlinx.serialization.SerializationStrategy<? super NewVariables> variablesSerializer, @Nullable kotlinx.serialization.modules.SerializersModule variablesSerializersModule);
126132
}
127133

128134
public interface MutationResult<Data, Variables> extends com.google.firebase.dataconnect.OperationResult<Data,Variables> {
@@ -131,6 +137,7 @@ package com.google.firebase.dataconnect {
131137
}
132138

133139
public interface OperationRef<Data, Variables> {
140+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public com.google.firebase.dataconnect.OperationRef<Data,Variables> copy(@NonNull String operationName = this.operationName, @Nullable Variables variables = this.variables, @NonNull kotlinx.serialization.DeserializationStrategy<? extends Data> dataDeserializer = this.dataDeserializer, @NonNull kotlinx.serialization.SerializationStrategy<? super Variables> variablesSerializer = this.variablesSerializer, @NonNull com.google.firebase.dataconnect.FirebaseDataConnect.CallerSdkType callerSdkType = this.callerSdkType, @Nullable kotlinx.serialization.modules.SerializersModule dataSerializersModule = this.dataSerializersModule, @Nullable kotlinx.serialization.modules.SerializersModule variablesSerializersModule = this.variablesSerializersModule);
134141
method public boolean equals(@Nullable Object other);
135142
method @Nullable public suspend Object execute(@NonNull kotlin.coroutines.Continuation<? super com.google.firebase.dataconnect.OperationResult<Data,Variables>>);
136143
method @NonNull public com.google.firebase.dataconnect.FirebaseDataConnect.CallerSdkType getCallerSdkType();
@@ -143,6 +150,8 @@ package com.google.firebase.dataconnect {
143150
method @Nullable public kotlinx.serialization.modules.SerializersModule getVariablesSerializersModule();
144151
method public int hashCode();
145152
method @NonNull public String toString();
153+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewData> com.google.firebase.dataconnect.OperationRef<NewData,Variables> withDataDeserializer(@NonNull kotlinx.serialization.DeserializationStrategy<? extends NewData> dataDeserializer, @Nullable kotlinx.serialization.modules.SerializersModule dataSerializersModule = this.dataSerializersModule);
154+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewVariables> com.google.firebase.dataconnect.OperationRef<Data,NewVariables> withVariablesSerializer(@Nullable NewVariables variables, @NonNull kotlinx.serialization.SerializationStrategy<? super NewVariables> variablesSerializer, @Nullable kotlinx.serialization.modules.SerializersModule variablesSerializersModule = this.variablesSerializersModule);
146155
property @NonNull public abstract com.google.firebase.dataconnect.FirebaseDataConnect.CallerSdkType callerSdkType;
147156
property @NonNull public abstract com.google.firebase.dataconnect.FirebaseDataConnect dataConnect;
148157
property @NonNull public abstract kotlinx.serialization.DeserializationStrategy<Data> dataDeserializer;
@@ -191,8 +200,11 @@ package com.google.firebase.dataconnect {
191200
}
192201

193202
public interface QueryRef<Data, Variables> extends com.google.firebase.dataconnect.OperationRef<Data,Variables> {
203+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public com.google.firebase.dataconnect.QueryRef<Data,Variables> copy(@NonNull String operationName, @Nullable Variables variables, @NonNull kotlinx.serialization.DeserializationStrategy<? extends Data> dataDeserializer, @NonNull kotlinx.serialization.SerializationStrategy<? super Variables> variablesSerializer, @NonNull com.google.firebase.dataconnect.FirebaseDataConnect.CallerSdkType callerSdkType, @Nullable kotlinx.serialization.modules.SerializersModule dataSerializersModule, @Nullable kotlinx.serialization.modules.SerializersModule variablesSerializersModule);
194204
method @Nullable public suspend Object execute(@NonNull kotlin.coroutines.Continuation<? super com.google.firebase.dataconnect.QueryResult<Data,Variables>>);
195205
method @NonNull public com.google.firebase.dataconnect.QuerySubscription<Data,Variables> subscribe();
206+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewData> com.google.firebase.dataconnect.QueryRef<NewData,Variables> withDataDeserializer(@NonNull kotlinx.serialization.DeserializationStrategy<? extends NewData> dataDeserializer, @Nullable kotlinx.serialization.modules.SerializersModule dataSerializersModule);
207+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewVariables> com.google.firebase.dataconnect.QueryRef<Data,NewVariables> withVariablesSerializer(@Nullable NewVariables variables, @NonNull kotlinx.serialization.SerializationStrategy<? super NewVariables> variablesSerializer, @Nullable kotlinx.serialization.modules.SerializersModule variablesSerializersModule);
196208
}
197209

198210
public interface QueryResult<Data, Variables> extends com.google.firebase.dataconnect.OperationResult<Data,Variables> {
@@ -224,33 +236,48 @@ package com.google.firebase.dataconnect {
224236

225237
package com.google.firebase.dataconnect.generated {
226238

227-
public interface GeneratedConnector {
239+
public interface GeneratedConnector<T extends com.google.firebase.dataconnect.generated.GeneratedConnector<T>> {
240+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public T copy(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect dataConnect = this.dataConnect);
228241
method public boolean equals(@Nullable Object other);
229242
method @NonNull public com.google.firebase.dataconnect.FirebaseDataConnect getDataConnect();
230243
method public int hashCode();
244+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public java.util.List<com.google.firebase.dataconnect.generated.GeneratedMutation<T,?,?>> mutations();
245+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public java.util.List<com.google.firebase.dataconnect.generated.GeneratedOperation<T,?,?>> operations();
246+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public java.util.List<com.google.firebase.dataconnect.generated.GeneratedQuery<T,?,?>> queries();
231247
method @NonNull public String toString();
232248
property @NonNull public abstract com.google.firebase.dataconnect.FirebaseDataConnect dataConnect;
233249
}
234250

235-
public interface GeneratedMutation<C extends com.google.firebase.dataconnect.generated.GeneratedConnector, Data, Variables> extends com.google.firebase.dataconnect.generated.GeneratedOperation<C,Data,Variables> {
251+
public interface GeneratedMutation<Connector extends com.google.firebase.dataconnect.generated.GeneratedConnector<Connector>, Data, Variables> extends com.google.firebase.dataconnect.generated.GeneratedOperation<Connector,Data,Variables> {
252+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public com.google.firebase.dataconnect.generated.GeneratedMutation<Connector,Data,Variables> copy(@NonNull Connector connector, @NonNull String operationName, @NonNull kotlinx.serialization.DeserializationStrategy<? extends Data> dataDeserializer, @NonNull kotlinx.serialization.SerializationStrategy<? super Variables> variablesSerializer);
236253
method @NonNull public default com.google.firebase.dataconnect.MutationRef<Data,Variables> ref(@Nullable Variables variables);
254+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewData> com.google.firebase.dataconnect.generated.GeneratedMutation<Connector,NewData,Variables> withDataDeserializer(@NonNull kotlinx.serialization.DeserializationStrategy<? extends NewData> dataDeserializer);
255+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewVariables> com.google.firebase.dataconnect.generated.GeneratedMutation<Connector,Data,NewVariables> withVariablesSerializer(@NonNull kotlinx.serialization.SerializationStrategy<? super NewVariables> variablesSerializer);
237256
}
238257

239-
public interface GeneratedOperation<Connector extends com.google.firebase.dataconnect.generated.GeneratedConnector, Data, Variables> {
258+
public interface GeneratedOperation<Connector extends com.google.firebase.dataconnect.generated.GeneratedConnector<Connector>, Data, Variables> {
259+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public com.google.firebase.dataconnect.generated.GeneratedOperation<Connector,Data,Variables> copy(@NonNull Connector connector = this.connector, @NonNull String operationName = this.operationName, @NonNull kotlinx.serialization.DeserializationStrategy<? extends Data> dataDeserializer = this.dataDeserializer, @NonNull kotlinx.serialization.SerializationStrategy<? super Variables> variablesSerializer = this.variablesSerializer);
260+
method public boolean equals(@Nullable Object other);
240261
method @NonNull public Connector getConnector();
241262
method @NonNull public kotlinx.serialization.DeserializationStrategy<Data> getDataDeserializer();
242263
method @NonNull public String getOperationName();
243264
method @NonNull public kotlinx.serialization.SerializationStrategy<Variables> getVariablesSerializer();
265+
method public int hashCode();
244266
method @NonNull public default com.google.firebase.dataconnect.OperationRef<Data,Variables> ref(@Nullable Variables variables);
245267
method @NonNull public String toString();
268+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewData> com.google.firebase.dataconnect.generated.GeneratedOperation<Connector,NewData,Variables> withDataDeserializer(@NonNull kotlinx.serialization.DeserializationStrategy<? extends NewData> dataDeserializer);
269+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewVariables> com.google.firebase.dataconnect.generated.GeneratedOperation<Connector,Data,NewVariables> withVariablesSerializer(@NonNull kotlinx.serialization.SerializationStrategy<? super NewVariables> variablesSerializer);
246270
property @NonNull public abstract Connector connector;
247271
property @NonNull public abstract kotlinx.serialization.DeserializationStrategy<Data> dataDeserializer;
248272
property @NonNull public abstract String operationName;
249273
property @NonNull public abstract kotlinx.serialization.SerializationStrategy<Variables> variablesSerializer;
250274
}
251275

252-
public interface GeneratedQuery<C extends com.google.firebase.dataconnect.generated.GeneratedConnector, Data, Variables> extends com.google.firebase.dataconnect.generated.GeneratedOperation<C,Data,Variables> {
276+
public interface GeneratedQuery<Connector extends com.google.firebase.dataconnect.generated.GeneratedConnector<Connector>, Data, Variables> extends com.google.firebase.dataconnect.generated.GeneratedOperation<Connector,Data,Variables> {
277+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public com.google.firebase.dataconnect.generated.GeneratedQuery<Connector,Data,Variables> copy(@NonNull Connector connector, @NonNull String operationName, @NonNull kotlinx.serialization.DeserializationStrategy<? extends Data> dataDeserializer, @NonNull kotlinx.serialization.SerializationStrategy<? super Variables> variablesSerializer);
253278
method @NonNull public default com.google.firebase.dataconnect.QueryRef<Data,Variables> ref(@Nullable Variables variables);
279+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewData> com.google.firebase.dataconnect.generated.GeneratedQuery<Connector,NewData,Variables> withDataDeserializer(@NonNull kotlinx.serialization.DeserializationStrategy<? extends NewData> dataDeserializer);
280+
method @NonNull @com.google.firebase.dataconnect.FirebaseDataConnectExperimental public <NewVariables> com.google.firebase.dataconnect.generated.GeneratedQuery<Connector,Data,NewVariables> withVariablesSerializer(@NonNull kotlinx.serialization.SerializationStrategy<? super NewVariables> variablesSerializer);
254281
}
255282

256283
}

firebase-dataconnect/connectors/connectors.gradle.kts

-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ dependencies {
7575
testImplementation(libs.kotlin.coroutines.test)
7676
testImplementation(libs.mockk)
7777
testImplementation(libs.robolectric)
78-
testImplementation(libs.truth)
7978

8079
androidTestImplementation(project(":firebase-dataconnect:androidTestutil"))
8180
androidTestImplementation(project(":firebase-dataconnect:testutil"))

0 commit comments

Comments
 (0)