Merge "Create robolectric tests for WifiNetworkDetailsFragment."
This commit is contained in:
committed by
Android (Google) Code Review
commit
94d2dece74
@@ -32,6 +32,7 @@ import android.support.v7.preference.PreferenceCategory;
|
|||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.PreferenceController;
|
import com.android.settings.core.PreferenceController;
|
||||||
import com.android.settings.core.lifecycle.Lifecycle;
|
import com.android.settings.core.lifecycle.Lifecycle;
|
||||||
@@ -53,15 +54,24 @@ public class WifiDetailPreferenceController extends PreferenceController impleme
|
|||||||
LifecycleObserver, OnResume {
|
LifecycleObserver, OnResume {
|
||||||
private static final String TAG = "WifiDetailsPrefCtrl";
|
private static final String TAG = "WifiDetailsPrefCtrl";
|
||||||
|
|
||||||
private static final String KEY_CONNECTION_DETAIL_PREF = "connection_detail";
|
@VisibleForTesting
|
||||||
private static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength";
|
static final String KEY_CONNECTION_DETAIL_PREF = "connection_detail";
|
||||||
private static final String KEY_FREQUENCY_PREF = "frequency";
|
@VisibleForTesting
|
||||||
private static final String KEY_SECURITY_PREF = "security";
|
static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength";
|
||||||
private static final String KEY_IP_ADDRESS_PREF = "ip_address";
|
@VisibleForTesting
|
||||||
private static final String KEY_ROUTER_PREF = "router";
|
static final String KEY_FREQUENCY_PREF = "frequency";
|
||||||
private static final String KEY_SUBNET_MASK_PREF = "subnet_mask";
|
@VisibleForTesting
|
||||||
private static final String KEY_DNS_PREF = "dns";
|
static final String KEY_SECURITY_PREF = "security";
|
||||||
private static final String KEY_IPV6_ADDRESS_CATEGORY = "ipv6_details_category";
|
@VisibleForTesting
|
||||||
|
static final String KEY_IP_ADDRESS_PREF = "ip_address";
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String KEY_ROUTER_PREF = "router";
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String KEY_SUBNET_MASK_PREF = "subnet_mask";
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String KEY_DNS_PREF = "dns";
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String KEY_IPV6_ADDRESS_CATEGORY = "ipv6_details_category";
|
||||||
|
|
||||||
private AccessPoint mAccessPoint;
|
private AccessPoint mAccessPoint;
|
||||||
private NetworkInfo mNetworkInfo;
|
private NetworkInfo mNetworkInfo;
|
||||||
@@ -166,7 +176,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme
|
|||||||
R.color.wifi_details_icon_color, mContext.getTheme()));
|
R.color.wifi_details_icon_color, mContext.getTheme()));
|
||||||
mSignalStrengthPref.setIcon(wifiIconDark);
|
mSignalStrengthPref.setIcon(wifiIconDark);
|
||||||
|
|
||||||
int summarySignalLevel = WifiManager.calculateSignalLevel(mRssi, mSignalStr.length);
|
int summarySignalLevel = mAccessPoint.getLevel();
|
||||||
mSignalStrengthPref.setDetailText(mSignalStr[summarySignalLevel]);
|
mSignalStrengthPref.setDetailText(mSignalStr[summarySignalLevel]);
|
||||||
|
|
||||||
// Frequency Pref
|
// Frequency Pref
|
||||||
|
@@ -23,7 +23,6 @@ import android.widget.Button;
|
|||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
|
||||||
import com.android.settings.applications.LayoutPreference;
|
import com.android.settings.applications.LayoutPreference;
|
||||||
import com.android.settings.core.PreferenceController;
|
import com.android.settings.core.PreferenceController;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
34
tests/robotests/src/android/net/NetworkBadging.java
Normal file
34
tests/robotests/src/android/net/NetworkBadging.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package android.net;
|
||||||
|
|
||||||
|
import android.annotation.IntDef;
|
||||||
|
import android.annotation.Nullable;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation for {@link android.net.NetworkBadging}.
|
||||||
|
*
|
||||||
|
* <p>Can be removed once Robolectric supports Android O.
|
||||||
|
*/
|
||||||
|
public class NetworkBadging {
|
||||||
|
@IntDef({BADGING_NONE, BADGING_SD, BADGING_HD, BADGING_4K})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface Badging {}
|
||||||
|
|
||||||
|
public static final int BADGING_NONE = 0;
|
||||||
|
public static final int BADGING_SD = 10;
|
||||||
|
public static final int BADGING_HD = 20;
|
||||||
|
public static final int BADGING_4K = 30;
|
||||||
|
|
||||||
|
private static Drawable drawable;
|
||||||
|
|
||||||
|
public static Drawable getWifiIcon(
|
||||||
|
int signalLevel, @NetworkBadging.Badging int badging, @Nullable Resources.Theme theme) {
|
||||||
|
return new ColorDrawable(Color.GREEN);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
package android.net.wifi;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empty class def for {@link android.net.wifi.WifiNetworkScoreCache}.
|
||||||
|
*
|
||||||
|
* <p>Can be removed once Robolectric supports Android O.
|
||||||
|
*/
|
||||||
|
public class WifiNetworkScoreCache {
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,185 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.android.settings.wifi.details;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.Matchers.any;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.NetworkBadging;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
import android.net.wifi.WifiInfo;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.support.v7.preference.Preference;
|
||||||
|
import android.support.v7.preference.PreferenceCategory;
|
||||||
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.SettingsRobolectricTestRunner;
|
||||||
|
import com.android.settings.TestConfig;
|
||||||
|
import com.android.settings.core.lifecycle.Lifecycle;
|
||||||
|
import com.android.settings.wifi.WifiDetailPreference;
|
||||||
|
import com.android.settingslib.wifi.AccessPoint;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Answers;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
|
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||||
|
public class WifiDetailPreferenceControllerTest {
|
||||||
|
|
||||||
|
private static final int LEVEL = 1;
|
||||||
|
private static final int RSSI = -55;
|
||||||
|
private static final String SECURITY = "None";
|
||||||
|
|
||||||
|
private Context mContext = RuntimeEnvironment.application;
|
||||||
|
|
||||||
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
|
private Drawable mockWifiIcon;
|
||||||
|
|
||||||
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
|
private PreferenceScreen mockScreen;
|
||||||
|
|
||||||
|
@Mock private AccessPoint mockAccessPoint;
|
||||||
|
@Mock private WifiManager mockWifiManager;
|
||||||
|
@Mock private NetworkInfo mockNetworkInfo;
|
||||||
|
@Mock private WifiConfiguration mockWifiConfig;
|
||||||
|
@Mock private WifiInfo mockWifiInfo;
|
||||||
|
|
||||||
|
@Mock private Preference mockConnectionDetailPref;
|
||||||
|
@Mock private WifiDetailPreference mockSignalStrengthPref;
|
||||||
|
@Mock private WifiDetailPreference mockFrequencyPref;
|
||||||
|
@Mock private WifiDetailPreference mockSecurityPref;
|
||||||
|
@Mock private WifiDetailPreference mockIpAddressPref;
|
||||||
|
@Mock private WifiDetailPreference mockRouterPref;
|
||||||
|
@Mock private WifiDetailPreference mockSubnetPref;
|
||||||
|
@Mock private WifiDetailPreference mockDnsPref;
|
||||||
|
@Mock private PreferenceCategory mockIpv6AddressCategory;
|
||||||
|
|
||||||
|
private Lifecycle mLifecycle;
|
||||||
|
private WifiDetailPreferenceController mController;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
|
mLifecycle = new Lifecycle();
|
||||||
|
mController = new WifiDetailPreferenceController(
|
||||||
|
mockAccessPoint, mContext, mLifecycle, mockWifiManager);
|
||||||
|
|
||||||
|
when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfig);
|
||||||
|
when(mockAccessPoint.getLevel()).thenReturn(LEVEL);
|
||||||
|
when(mockAccessPoint.getNetworkInfo()).thenReturn(mockNetworkInfo);
|
||||||
|
when(mockAccessPoint.getRssi()).thenReturn(RSSI);
|
||||||
|
when(mockAccessPoint.getSecurityString(false)).thenReturn(SECURITY);
|
||||||
|
|
||||||
|
setupMockedPreferenceScreen();
|
||||||
|
|
||||||
|
when (mockWifiInfo.getRssi()).thenReturn(RSSI);
|
||||||
|
when(mockWifiManager.getConnectionInfo()).thenReturn(mockWifiInfo);
|
||||||
|
when(mockWifiManager.getWifiApConfiguration()).thenReturn(mockWifiConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupMockedPreferenceScreen() {
|
||||||
|
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_CONNECTION_DETAIL_PREF))
|
||||||
|
.thenReturn(mockConnectionDetailPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_SIGNAL_STRENGTH_PREF))
|
||||||
|
.thenReturn(mockSignalStrengthPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_FREQUENCY_PREF))
|
||||||
|
.thenReturn(mockFrequencyPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_SECURITY_PREF))
|
||||||
|
.thenReturn(mockSecurityPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_IP_ADDRESS_PREF))
|
||||||
|
.thenReturn(mockIpAddressPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_ROUTER_PREF))
|
||||||
|
.thenReturn(mockRouterPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_SUBNET_MASK_PREF))
|
||||||
|
.thenReturn(mockSubnetPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_DNS_PREF))
|
||||||
|
.thenReturn(mockDnsPref);
|
||||||
|
when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_IPV6_ADDRESS_CATEGORY))
|
||||||
|
.thenReturn(mockIpv6AddressCategory);
|
||||||
|
|
||||||
|
mController.displayPreference(mockScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isAvailable_shouldAlwaysReturnTrue() {
|
||||||
|
assertThat(mController.isAvailable()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void securityPreference_stringShouldBeSet() {
|
||||||
|
verify(mockSecurityPref).setDetailText(SECURITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void latestWifiInfoAndConfig_shouldBeFetchedOnResume() {
|
||||||
|
mController.onResume();
|
||||||
|
|
||||||
|
verify(mockWifiManager).getConnectionInfo();
|
||||||
|
verify(mockWifiManager).getWifiApConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void connectionDetailPref_shouldHaveIconSet() {
|
||||||
|
Drawable expectedIcon =
|
||||||
|
NetworkBadging.getWifiIcon(LEVEL, NetworkBadging.BADGING_NONE, mContext.getTheme());
|
||||||
|
|
||||||
|
mController.onResume();
|
||||||
|
|
||||||
|
verify(mockConnectionDetailPref).setIcon(expectedIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void connectionDetailPref_shouldHaveTitleSet() {
|
||||||
|
String summary = "summary";
|
||||||
|
when(mockAccessPoint.getSettingsSummary()).thenReturn(summary);
|
||||||
|
|
||||||
|
mController.onResume();
|
||||||
|
|
||||||
|
verify(mockConnectionDetailPref).setTitle(summary);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void signalStrengthPref_shouldHaveIconSet() {
|
||||||
|
mController.onResume();
|
||||||
|
|
||||||
|
verify(mockSignalStrengthPref).setIcon(any(Drawable.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void signalStrengthPref_shouldHaveDetailTextSet() {
|
||||||
|
String expectedStrength =
|
||||||
|
mContext.getResources().getStringArray(R.array.wifi_signal)[LEVEL];
|
||||||
|
|
||||||
|
mController.onResume();
|
||||||
|
|
||||||
|
verify(mockSignalStrengthPref).setDetailText(expectedStrength);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user