package org.robolectric.shadows; import android.content.Context; import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowWifiP2pManagerTest { private WifiP2pManager manager; private ShadowWifiP2pManager shadowManager; @Mock private WifiP2pManager.ChannelListener mockListener; private WifiP2pManager.Channel channel; @Before public void setUp() { MockitoAnnotations.initMocks(this); manager = (WifiP2pManager) RuntimeEnvironment.application.getSystemService(Context.WIFI_P2P_SERVICE); shadowManager = shadowOf(manager); channel = manager.initialize(RuntimeEnvironment.application, RuntimeEnvironment.application.getMainLooper(), mockListener); assertThat(channel).isNotNull(); } @Test public void createGroup_success() { TestActionListener testListener = new TestActionListener(); manager.createGroup(channel, testListener); assertThat(testListener.success).isTrue(); } @Test public void createGroup_nullListener() { manager.createGroup(channel, null); // Should not fail with a null listener } @Test public void createGroup_fail() { TestActionListener testListener = new TestActionListener(); RuntimeEnvironment.getMasterScheduler().pause(); manager.createGroup(channel, testListener); shadowManager.setNextActionFailure(WifiP2pManager.BUSY); RuntimeEnvironment.getMasterScheduler().unPause(); assertThat(testListener.success).isFalse(); assertThat(testListener.reason).isEqualTo(WifiP2pManager.BUSY); } @Test public void clearActionFailure() { shadowManager.setNextActionFailure(WifiP2pManager.ERROR); TestActionListener testListener = new TestActionListener(); manager.createGroup(channel, testListener); assertThat(testListener.success).isFalse(); manager.createGroup(channel, testListener); assertThat(testListener.success).isTrue(); } @Test public void removeGroup_success() { TestActionListener testListener = new TestActionListener(); manager.removeGroup(channel, testListener); assertThat(testListener.success).isTrue(); } @Test public void removeGroup_nullListener() { manager.removeGroup(channel, null); // Should not fail with a null listener } @Test public void removeGroup_failure() { TestActionListener testListener = new TestActionListener(); RuntimeEnvironment.getMasterScheduler().pause(); manager.removeGroup(channel, testListener); shadowManager.setNextActionFailure(WifiP2pManager.BUSY); RuntimeEnvironment.getMasterScheduler().unPause(); assertThat(testListener.success).isFalse(); assertThat(testListener.reason).isEqualTo(WifiP2pManager.BUSY); } @Test public void requestGroupInfo() { TestGroupInfoListener listener = new TestGroupInfoListener(); WifiP2pGroup wifiP2pGroup = new WifiP2pGroup(); shadowOf(wifiP2pGroup).setInterface("ssid"); shadowOf(wifiP2pGroup).setPassphrase("passphrase"); shadowOf(wifiP2pGroup).setNetworkName("networkname"); shadowManager.setGroupInfo(channel, wifiP2pGroup); manager.requestGroupInfo(channel, listener); assertThat(listener.group.getNetworkName()).isEqualTo(wifiP2pGroup.getNetworkName()); assertThat(listener.group.getInterface()).isEqualTo(wifiP2pGroup.getInterface()); assertThat(listener.group.getPassphrase()).isEqualTo(wifiP2pGroup.getPassphrase()); } @Test public void requestGroupInfo_nullListener() { WifiP2pGroup wifiP2pGroup = new WifiP2pGroup(); shadowManager.setGroupInfo(channel, wifiP2pGroup); manager.requestGroupInfo(channel, null); // Should not fail with a null listener } private static class TestActionListener implements WifiP2pManager.ActionListener { private int reason; private boolean success; @Override public void onSuccess() { success = true; } @Override public void onFailure(int reason) { success = false; this.reason = reason; } } private static class TestGroupInfoListener implements WifiP2pManager.GroupInfoListener { private WifiP2pGroup group; @Override public void onGroupInfoAvailable(WifiP2pGroup group) { this.group = group; } } }