Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Unified Diff: components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java

Issue 1829023002: Add fake for InstanceIDWithSubtype.java, in order to re-use unit test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@iid2jni
Patch Set: Move FakeInstanceIDWithSubtype to javatests/ Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
index 8af5f6e3a3ab82669d5b8bb60d3fb302b45da8d7..704006c7efcc2db5ea1370c94eee47e8f45b42d4 100644
--- a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
+++ b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
@@ -23,7 +23,10 @@ public class InstanceIDWithSubtype extends InstanceID {
/** Cached instances. May be accessed from multiple threads; synchronize on InstanceID.class. */
private static Map<String, InstanceIDWithSubtype> sSubtypeInstances = new HashMap<>();
- private InstanceIDWithSubtype(Context context, String subtype) {
+ /** Fake subclasses can set this so getInstance creates instances of them. */
+ protected static FakeFactory sFakeFactoryForTesting = null;
Peter Beverloo 2016/04/15 00:00:17 Maybe remove "protected" and mark this as @Visible
johnme 2016/04/15 16:00:42 Marked it as @VisibleForTesting, but kept protecte
+
+ protected InstanceIDWithSubtype(Context context, String subtype) {
super(context, subtype, null /* options */);
mSubtype = subtype;
}
@@ -41,7 +44,7 @@ public class InstanceIDWithSubtype extends InstanceID {
// Synchronize on the base class, to match the synchronized statements in
// InstanceID.getInstance.
synchronized (InstanceID.class) {
- if (sSubtypeInstances.isEmpty()) {
+ if (sSubtypeInstances.isEmpty() && sFakeFactoryForTesting == null) {
// The static InstanceID.getInstance method performs some one-time initialization
// logic that is also necessary for users of this sub-class. To work around this,
// first get (but don't use) the default InstanceID.
@@ -50,7 +53,11 @@ public class InstanceIDWithSubtype extends InstanceID {
InstanceIDWithSubtype existing = sSubtypeInstances.get(subtype);
if (existing == null) {
- existing = new InstanceIDWithSubtype(context, subtype);
+ if (sFakeFactoryForTesting != null) {
+ existing = sFakeFactoryForTesting.create(context, subtype);
+ } else {
+ existing = new InstanceIDWithSubtype(context, subtype);
+ }
sSubtypeInstances.put(subtype, existing);
}
return existing;
@@ -69,4 +76,21 @@ public class InstanceIDWithSubtype extends InstanceID {
public String getSubtype() {
return mSubtype;
}
+
+ /** Stored instances. May be accessed from multiple threads; synchronize on InstanceID.class. */
+ public static Map<String, InstanceIDWithSubtype> getInstanceIDsForTesting() {
Peter Beverloo 2016/04/15 00:00:17 Why are you making sFakeFactoryForTesting visible
johnme 2016/04/15 16:00:43 Because I'm going to need access to getInstanceIDs
+ if (!Thread.holdsLock(InstanceID.class)) {
+ throw new AssertionError("Should be synchronized on InstanceID.class");
+ }
+ return sSubtypeInstances;
+ }
+
+ public static boolean usingFake() {
Peter Beverloo 2016/04/15 00:00:17 Unused.
johnme 2016/04/15 16:00:43 Removed.
+ return sFakeFactoryForTesting != null;
+ }
+
+ /** Fake subclasses can set {@link #sFakeFactoryForTesting} to an implementation of this. */
+ public interface FakeFactory {
+ public InstanceIDWithSubtype create(Context context, String subtype);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698