aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Boekenoogen <jboekeno@google.com>2012-09-26 20:44:50 -0700
committerJon Boekenoogen <jboekeno@google.com>2012-09-26 20:52:23 -0700
commitc0aae508c123cc2bbbfebc45b9b1716a82187474 (patch)
tree62d7b5f3981c16817dc4233e8f539ce5fc1d114d
parent70ffa98f3d32a2fd7aae7cb4ddce5fd31754cfe5 (diff)
downloadrobolectric-c0aae508c123cc2bbbfebc45b9b1716a82187474.tar.gz
Implement ShadowProcess myPid and ShadowBinder getCallingPid
-rw-r--r--src/main/java/com/xtremelabs/robolectric/Robolectric.java12
-rw-r--r--src/main/java/com/xtremelabs/robolectric/shadows/ShadowBinder.java19
-rw-r--r--src/main/java/com/xtremelabs/robolectric/shadows/ShadowProcess.java40
-rw-r--r--src/test/java/com/xtremelabs/robolectric/shadows/BinderTest.java30
-rw-r--r--src/test/java/com/xtremelabs/robolectric/shadows/ProcessTest.java28
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));
+ }
+}