diff options
author | Jon Boekenoogen <jboekeno@google.com> | 2012-09-26 20:44:50 -0700 |
---|---|---|
committer | Jon Boekenoogen <jboekeno@google.com> | 2012-09-26 20:52:23 -0700 |
commit | c0aae508c123cc2bbbfebc45b9b1716a82187474 (patch) | |
tree | 62d7b5f3981c16817dc4233e8f539ce5fc1d114d | |
parent | 70ffa98f3d32a2fd7aae7cb4ddce5fd31754cfe5 (diff) | |
download | robolectric-c0aae508c123cc2bbbfebc45b9b1716a82187474.tar.gz |
Implement ShadowProcess myPid and ShadowBinder getCallingPid
5 files changed, 125 insertions, 4 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/Robolectric.java b/src/main/java/com/xtremelabs/robolectric/Robolectric.java index fce246c3a..ec5e78c0c 100644 --- a/src/main/java/com/xtremelabs/robolectric/Robolectric.java +++ b/src/main/java/com/xtremelabs/robolectric/Robolectric.java @@ -275,6 +275,7 @@ public class Robolectric { ShadowPreferenceGroup.class, ShadowPreferenceManager.class, ShadowPreferenceScreen.class, + ShadowProcess.class, ShadowProgressBar.class, ShadowProgressDialog.class, ShadowRadioButton.class, @@ -356,6 +357,7 @@ public class Robolectric { public static void resetStaticState() { ShadowWrangler.getInstance().silence(); Robolectric.application = new Application(); + ShadowBinder.reset(); ShadowBitmapFactory.reset(); ShadowDrawable.reset(); ShadowMediaStore.reset(); @@ -367,6 +369,7 @@ public class Robolectric { ShadowLocalBroadcastManager.reset(); ShadowMimeTypeMap.reset(); ShadowStatFs.reset(); + ShadowProcess.reset(); } public static <T> T directlyOn(T shadowedObject) { @@ -384,7 +387,7 @@ public class Robolectric { public static ShadowAccountManager shadowOf(AccountManager instance) { return (ShadowAccountManager) shadowOf_(instance); } - + public static ShadowActivity shadowOf(Activity instance) { return (ShadowActivity) shadowOf_(instance); } @@ -428,7 +431,7 @@ public class Robolectric { public static ShadowAnimationSet shadowOf(AnimationSet instance) { return (ShadowAnimationSet) shadowOf_(instance); } - + public static ShadowAnimationUtils shadowOf(AnimationUtils instance) { return (ShadowAnimationUtils) shadowOf_(instance); } @@ -448,7 +451,7 @@ public class Robolectric { public static ShadowAssetManager shadowOf(AssetManager instance) { return (ShadowAssetManager) Robolectric.shadowOf_(instance); } - + @SuppressWarnings("rawtypes") public static ShadowAsyncTask shadowOf(AsyncTask instance){ return (ShadowAsyncTask) Robolectric.shadowOf_( instance ); @@ -882,7 +885,7 @@ public class Robolectric { public static ShadowSparseBooleanArray shadowOf(SparseBooleanArray other) { return (ShadowSparseBooleanArray) Robolectric.shadowOf_(other); } - + public static ShadowSparseIntArray shadowOf(SparseIntArray other){ return (ShadowSparseIntArray) Robolectric.shadowOf_( other ); } @@ -1056,6 +1059,7 @@ public class Robolectric { * @param contentType the contentType of the response * @deprecated use {@link #addPendingHttpResponse(int, String, Header...)} instead */ + @Deprecated public static void addPendingHttpResponseWithContentType(int statusCode, String responseBody, Header contentType) { getFakeHttpLayer().addPendingHttpResponse(statusCode, responseBody, contentType); } diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowBinder.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowBinder.java index 1e5464768..b103c8d76 100644 --- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowBinder.java +++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowBinder.java @@ -4,6 +4,7 @@ import android.os.Binder; import android.os.Parcel; import android.os.RemoteException; import android.os.ShadowBinderBridge; + import com.xtremelabs.robolectric.internal.Implementation; import com.xtremelabs.robolectric.internal.Implements; import com.xtremelabs.robolectric.internal.RealObject; @@ -13,8 +14,26 @@ public class ShadowBinder { @RealObject Binder realObject; + private static Integer callingPid; + @Implementation public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { return new ShadowBinderBridge(realObject).onTransact(code, data, reply, flags); } + + @Implementation + public static final int getCallingPid() { + if (callingPid != null) { + return callingPid; + } + return android.os.Process.myPid(); + } + + public static void setCallingPid(int pid) { + ShadowBinder.callingPid = pid; + } + + public static void reset() { + ShadowBinder.callingPid = null; + } } diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowProcess.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowProcess.java new file mode 100644 index 000000000..024e8d08e --- /dev/null +++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowProcess.java @@ -0,0 +1,40 @@ +package com.xtremelabs.robolectric.shadows; + +import com.xtremelabs.robolectric.internal.Implementation; +import com.xtremelabs.robolectric.internal.Implements; + +import java.lang.management.ManagementFactory; + +@Implements(android.os.Process.class) +public class ShadowProcess { + + private static Integer pid; + + @Implementation + public static final int myPid() { + if (pid != null) { + return pid; + } + + // Returns machine info in the form {pid}@{ComputerName} + String machineId = ManagementFactory.getRuntimeMXBean().getName(); + + String[] parts = machineId.split("@"); + if (parts.length == 2) { + try { + return Integer.parseInt(parts[0]); + } catch (NumberFormatException e) { + // Shouldn't occur on most systems, but default to zero in case it does. + } + } + return 0; + } + + public static void setPid(int pid) { + ShadowProcess.pid = pid; + } + + public static void reset() { + ShadowProcess.pid = null; + } +} diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/BinderTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/BinderTest.java new file mode 100644 index 000000000..2b5ba9a9d --- /dev/null +++ b/src/test/java/com/xtremelabs/robolectric/shadows/BinderTest.java @@ -0,0 +1,30 @@ +package com.xtremelabs.robolectric.shadows; + +import static org.junit.Assert.assertThat; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; + +import android.os.Binder; + +import com.xtremelabs.robolectric.WithTestDefaultsRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(WithTestDefaultsRunner.class) +public class BinderTest { + + @Test + public void testSetCallingPid() { + ShadowBinder.setCallingPid(47); + + assertThat(Binder.getCallingPid(), equalTo(47)); + } + + @Test + public void testCallingProcessIsJvmProcessId() { + int pid = Binder.getCallingPid(); + + assertThat(pid, not(equalTo(0))); + } +} diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ProcessTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ProcessTest.java new file mode 100644 index 000000000..e49ff5efb --- /dev/null +++ b/src/test/java/com/xtremelabs/robolectric/shadows/ProcessTest.java @@ -0,0 +1,28 @@ +package com.xtremelabs.robolectric.shadows; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; + +import com.xtremelabs.robolectric.WithTestDefaultsRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(WithTestDefaultsRunner.class) +public class ProcessTest { + + @Test + public void testMyPidIsJvmProcessId() { + int pid = android.os.Process.myPid(); + + assertThat(pid, not(equalTo(0))); + } + + @Test + public void testSetPid() { + ShadowProcess.setPid(47); + + assertThat(android.os.Process.myPid(), equalTo(47)); + } +} |