Merge branch 'master' of https://github.com/mportuesisf/robolectric into mportuesisf-master
Conflicts:
src/com/xtremelabs/robolectric/Robolectric.java
src/com/xtremelabs/robolectric/shadows/ShadowApplication.java
src/com/xtremelabs/robolectric/shadows/ShadowIntent.java
src/com/xtremelabs/robolectric/shadows/ShadowPreferenceManager.java
src/com/xtremelabs/robolectric/view/TestWindowManager.java
test/com/xtremelabs/robolectric/shadows/DisplayTest.java
test/com/xtremelabs/robolectric/shadows/PreferenceManagerTest.java
diff --git a/.gitignore b/.gitignore
index e552798..5023274 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@
pages
.DS_Store
*~
+local.properties
\#*\#
\ No newline at end of file
diff --git a/src/com/xtremelabs/robolectric/Robolectric.java b/src/com/xtremelabs/robolectric/Robolectric.java
index 7c99d39..18ecc69 100644
--- a/src/com/xtremelabs/robolectric/Robolectric.java
+++ b/src/com/xtremelabs/robolectric/Robolectric.java
@@ -12,6 +12,7 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.location.LocationManager;
+import android.media.AudioManager;
import android.os.Handler;
import android.os.Looper;
import android.view.Display;
@@ -80,6 +81,7 @@
ShadowAlertDialog.ShadowBuilder.class,
ShadowApplication.class,
ShadowAppWidgetManager.class,
+ ShadowAudioManager.class,
ShadowBaseAdapter.class,
ShadowBitmapDrawable.class,
ShadowBundle.class,
@@ -275,10 +277,13 @@
public static ShadowDisplay shadowOf(Display instance) {
return ((ShadowDisplay) shadowOf_(instance));
}
+
+ public static ShadowAudioManager shadowOf(AudioManager instance) {
+ return ((ShadowAudioManager) shadowOf_(instance));
+ }
@SuppressWarnings({"unchecked"})
public static <P, R> P shadowOf_(R instance) {
return (P) ShadowWrangler.getInstance().shadowOf(instance);
}
-
}
diff --git a/src/com/xtremelabs/robolectric/shadows/ShadowApplication.java b/src/com/xtremelabs/robolectric/shadows/ShadowApplication.java
index d902f39..d2c0c94 100644
--- a/src/com/xtremelabs/robolectric/shadows/ShadowApplication.java
+++ b/src/com/xtremelabs/robolectric/shadows/ShadowApplication.java
@@ -6,6 +6,7 @@
import android.content.*;
import android.content.res.Resources;
import android.location.LocationManager;
+import android.media.AudioManager;
import android.net.wifi.WifiManager;
import android.test.mock.MockContentResolver;
import android.view.LayoutInflater;
@@ -37,6 +38,7 @@
private LocationManager locationManager;
private WifiManager wifiManager;
private WindowManager windowManager;
+ private AudioManager audioManager;
private List<Intent> startedActivities = new ArrayList<Intent>();
private List<Intent> startedServices = new ArrayList<Intent>();
private List<Wrapper> registeredReceivers = new ArrayList<Wrapper>();
@@ -85,7 +87,9 @@
} else if (name.equals(Context.WIFI_SERVICE)) {
return wifiManager == null ? wifiManager = newInstanceOf(WifiManager.class) : wifiManager;
} else if (name.equals(Context.WINDOW_SERVICE)) {
- return windowManager == null ? windowManager = new TestWindowManager() : windowManager;
+ return windowManager == null ? windowManager = new TestWindowManager() : windowManager;
+ } else if (name.equals(Context.AUDIO_SERVICE)) {
+ return audioManager == null ? audioManager = newInstanceOf(AudioManager.class) : audioManager;
}
return null;
}
diff --git a/src/com/xtremelabs/robolectric/shadows/ShadowAudioManager.java b/src/com/xtremelabs/robolectric/shadows/ShadowAudioManager.java
new file mode 100644
index 0000000..820aef1
--- /dev/null
+++ b/src/com/xtremelabs/robolectric/shadows/ShadowAudioManager.java
@@ -0,0 +1,57 @@
+package com.xtremelabs.robolectric.shadows;
+
+import com.xtremelabs.robolectric.util.Implementation;
+import com.xtremelabs.robolectric.util.Implements;
+
+import android.media.AudioManager;
+
+@SuppressWarnings({"UnusedDeclaration"})
+@Implements(AudioManager.class)
+public class ShadowAudioManager {
+
+ private int streamMaxVolume = 15;
+ private int streamVolume = 7;
+
+ private int flags;
+
+ @Implementation
+ public int getStreamMaxVolume(int streamType) {
+ return streamMaxVolume;
+ }
+
+ @Implementation
+ public int getStreamVolume(int streamType) {
+ return streamVolume;
+ }
+
+ @Implementation
+ public void setStreamVolume(int streamType, int index, int flags) {
+ this.streamVolume = index;
+ this.flags = flags;
+ }
+
+ public int getStreamMaxVolume() {
+ return streamMaxVolume;
+ }
+
+ public void setStreamMaxVolume(int streamMaxVolume) {
+ this.streamMaxVolume = streamMaxVolume;
+ }
+
+ public int getStreamVolume() {
+ return streamVolume;
+ }
+
+ public void setStreamVolume(int streamVolume) {
+ this.streamVolume = streamVolume;
+ }
+
+ public int getFlags() {
+ return flags;
+ }
+
+ public void setFlags(int flags) {
+ this.flags = flags;
+ }
+
+}
diff --git a/src/com/xtremelabs/robolectric/shadows/ShadowHandler.java b/src/com/xtremelabs/robolectric/shadows/ShadowHandler.java
index 8f2bfda..4cc69c6 100644
--- a/src/com/xtremelabs/robolectric/shadows/ShadowHandler.java
+++ b/src/com/xtremelabs/robolectric/shadows/ShadowHandler.java
@@ -53,6 +53,13 @@
});
return true;
}
+
+ @Implementation
+ public final boolean sendEmptyMessage(int what) {
+ final Message msg = new Message();
+ msg.what = what;
+ return sendMessage(msg);
+ }
public static void flush() {
shadowOf(Looper.myLooper()).idle();
diff --git a/test/com/xtremelabs/robolectric/shadows/ApplicationTest.java b/test/com/xtremelabs/robolectric/shadows/ApplicationTest.java
index 206b6e4..baebe9d 100644
--- a/test/com/xtremelabs/robolectric/shadows/ApplicationTest.java
+++ b/test/com/xtremelabs/robolectric/shadows/ApplicationTest.java
@@ -1,9 +1,16 @@
package com.xtremelabs.robolectric.shadows;
import android.app.Activity;
+import android.app.AlarmManager;
import android.app.Application;
import android.content.Context;
import android.content.ContextWrapper;
+import android.location.LocationManager;
+import android.media.AudioManager;
+import android.net.wifi.WifiManager;
+import android.view.LayoutInflater;
+import android.view.WindowManager;
+
import com.xtremelabs.robolectric.R;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
@@ -14,6 +21,7 @@
import org.junit.runner.RunWith;
import static org.hamcrest.Matchers.sameInstance;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
@@ -47,4 +55,22 @@
assertEquals("title from resourceLoader1", new ContextWrapper(app1).getResources().getString(R.id.title));
assertEquals("title from resourceLoader2", new ContextWrapper(app2).getResources().getString(R.id.title));
}
+
+ @Test
+ public void shouldProvideServices() throws Exception {
+ Application app = Robolectric.application;
+
+ Object service = app.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ assertTrue(service instanceof LayoutInflater);
+ service = app.getSystemService(Context.ALARM_SERVICE);
+ assertTrue(service instanceof AlarmManager);
+ service = app.getSystemService(Context.LOCATION_SERVICE);
+ assertTrue(service instanceof LocationManager);
+ service = app.getSystemService(Context.WIFI_SERVICE);
+ assertTrue(service instanceof WifiManager);
+ service = app.getSystemService(Context.WINDOW_SERVICE);
+ assertTrue(service instanceof WindowManager);
+ service = app.getSystemService(Context.AUDIO_SERVICE);
+ assertTrue(service instanceof AudioManager);
+ }
}
diff --git a/test/com/xtremelabs/robolectric/shadows/AudioManagerTest.java b/test/com/xtremelabs/robolectric/shadows/AudioManagerTest.java
new file mode 100644
index 0000000..75387db
--- /dev/null
+++ b/test/com/xtremelabs/robolectric/shadows/AudioManagerTest.java
@@ -0,0 +1,54 @@
+package com.xtremelabs.robolectric.shadows;
+
+
+import android.media.AudioManager;
+import com.xtremelabs.robolectric.Robolectric;
+import com.xtremelabs.robolectric.WithTestDefaultsRunner;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(WithTestDefaultsRunner.class)
+public class AudioManagerTest {
+
+ private AudioManager audioManager;
+ private ShadowAudioManager shadowAudioManager;
+
+ @Before
+ public void setUp() throws Exception {
+ Robolectric.bindDefaultShadowClasses();
+
+ audioManager = Robolectric.newInstanceOf(AudioManager.class);
+ shadowAudioManager = Robolectric.shadowOf(audioManager);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void shouldGetStreamMaxVolume() throws Exception {
+ shadowAudioManager.setStreamMaxVolume(45);
+
+ assertEquals(45, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
+ }
+
+ @Test
+ public void shouldGetVolume() throws Exception {
+ shadowAudioManager.setStreamVolume(5);
+
+ assertEquals(5, audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
+ }
+
+ @Test
+ public void shouldSetVolume() throws Exception {
+ audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 8, 0);
+
+ assertEquals(8, audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
+ assertEquals(8, shadowAudioManager.getStreamVolume());
+ }
+
+}