1package com.xtremelabs.robolectric.shadows;
2
3
4import android.media.AudioManager;
5import com.xtremelabs.robolectric.Robolectric;
6import com.xtremelabs.robolectric.WithTestDefaultsRunner;
7import org.junit.Before;
8import org.junit.Test;
9import org.junit.runner.RunWith;
10
11import static org.junit.Assert.*;
12
13@RunWith(WithTestDefaultsRunner.class)
14public class AudioManagerTest {
15    private AudioManager audioManager;
16    private ShadowAudioManager shadowAudioManager;
17    private AudioManager.OnAudioFocusChangeListener listener;
18
19    @Before
20    public void setUp() throws Exception {
21        audioManager = Robolectric.newInstanceOf(AudioManager.class);
22        shadowAudioManager = Robolectric.shadowOf(audioManager);
23        listener = new AudioManager.OnAudioFocusChangeListener() {
24            @Override
25            public void onAudioFocusChange(int focusChange) {
26            }
27        };
28    }
29
30    @Test
31    public void requestAudioFocus_shouldRecordArgumentsOfMostRecentCall() {
32        assertNull(shadowAudioManager.getLastAudioFocusRequest());
33        audioManager.requestAudioFocus(listener, 999, 888);
34        assertSame(listener, shadowAudioManager.getLastAudioFocusRequest().listener);
35        assertEquals(999, shadowAudioManager.getLastAudioFocusRequest().streamType);
36        assertEquals(888, shadowAudioManager.getLastAudioFocusRequest().durationHint);
37    }
38
39    @Test
40    public void requestAudioFocus_shouldReturnTheSpecifiedValue() {
41        int value = audioManager.requestAudioFocus(listener, 999, 888);
42        assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, value);
43
44        shadowAudioManager.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_FAILED);
45
46        value = audioManager.requestAudioFocus(listener, 999, 888);
47        assertEquals(AudioManager.AUDIOFOCUS_REQUEST_FAILED, value);
48    }
49
50    @Test
51    public void abandonAudioFocus_shouldRecordTheListenerOfTheMostRecentCall() {
52        audioManager.abandonAudioFocus(null);
53        assertNull(shadowAudioManager.getLastAbandonedAudioFocusListener());
54
55        audioManager.abandonAudioFocus(listener);
56        assertSame(listener, shadowAudioManager.getLastAbandonedAudioFocusListener());
57    }
58
59    @Test
60    public void shouldGetStreamMaxVolume() throws Exception {
61        shadowAudioManager.setStreamMaxVolume(45);
62
63        assertEquals(45, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
64    }
65
66    @Test
67    public void shouldGetVolume() throws Exception {
68        shadowAudioManager.setStreamVolume(5);
69
70        assertEquals(5, audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
71    }
72
73    @Test
74    public void shouldSetVolume() throws Exception {
75        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 8, 0);
76
77        assertEquals(8, audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
78        assertEquals(8, shadowAudioManager.getStreamVolume());
79    }
80
81}
82