diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
index 46da3ca..62a5f3f 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2009 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.
@@ -16,72 +16,68 @@
 
 package android.net.cts;
 
-import dalvik.annotation.ToBeFixed;
-
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.DetailedState;
 import android.net.NetworkInfo.State;
-import android.os.Parcel;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestStatus;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
 
 @TestTargetClass(NetworkInfo.class)
 public class NetworkInfoTest extends AndroidTestCase {
-    ConnectivityManager mConnectivityManager;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mConnectivityManager = (ConnectivityManager) mContext
-                .getSystemService(Context.CONNECTIVITY_SERVICE);
+    public static final int TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE;
+    public static final int TYPE_WIFI = ConnectivityManager.TYPE_WIFI;
+    public static final String MOBILE_TYPE_NAME = "MOBILE";
+    public static final String WIFI_TYPE_NAME = "WIFI";
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Test constructor(s) of NetworkInfo.",
+        method = "NetworkInfo",
+        args = {int.class}
+    )
+    public void testConstructor() {
+        new NetworkInfo(ConnectivityManager.TYPE_MOBILE);
     }
 
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "isConnectedOrConnecting",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "setFailover",
             args = {boolean.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "isFailover",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "getType",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "getTypeName",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "setIsAvailable",
             args = {boolean.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "isAvailable",
             args = {}
         ),
@@ -93,88 +89,69 @@
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
-            method = "describeContents",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "getDetailedState",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "getState",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "getReason",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "getExtraInfo",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "toString",
             args = {}
         )
     })
     public void testAccessNetworkInfoProperties() {
-        NetworkInfo[] ni = mConnectivityManager.getAllNetworkInfo();
+        ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(
+                Context.CONNECTIVITY_SERVICE);
+
+        NetworkInfo[] ni = cm.getAllNetworkInfo();
         assertTrue(ni.length >= 2);
-        assertFalse(ni[ConnectivityManager.TYPE_MOBILE].isFailover());
-        assertFalse(ni[ConnectivityManager.TYPE_WIFI].isFailover());
+
+        assertFalse(ni[TYPE_MOBILE].isFailover());
+        assertFalse(ni[TYPE_WIFI].isFailover());
 
         // test environment:connect as TYPE_MOBILE, and connect to internet.
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getType(),
-                ConnectivityManager.TYPE_MOBILE);
-        assertEquals(ni[ConnectivityManager.TYPE_WIFI].getType(), ConnectivityManager.TYPE_WIFI);
-        assertEquals("MOBILE", ni[ConnectivityManager.TYPE_MOBILE].getTypeName());
-        assertEquals("WIFI", ni[ConnectivityManager.TYPE_WIFI].getTypeName());
-        assertTrue(ni[ConnectivityManager.TYPE_MOBILE].isConnectedOrConnecting());
-        assertFalse(ni[ConnectivityManager.TYPE_WIFI].isConnectedOrConnecting());
-        assertTrue(ni[ConnectivityManager.TYPE_MOBILE].isAvailable());
-        assertFalse(ni[ConnectivityManager.TYPE_WIFI].isAvailable());
-        assertTrue(ni[ConnectivityManager.TYPE_MOBILE].isConnected());
-        assertFalse(ni[ConnectivityManager.TYPE_WIFI].isConnected());
+        assertEquals(ni[TYPE_MOBILE].getType(), TYPE_MOBILE);
+        assertEquals(ni[TYPE_WIFI].getType(), TYPE_WIFI);
 
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].describeContents(), 0);
-        assertEquals(ni[ConnectivityManager.TYPE_WIFI].describeContents(), 0);
+        assertEquals(MOBILE_TYPE_NAME, ni[TYPE_MOBILE].getTypeName());
+        assertEquals(WIFI_TYPE_NAME, ni[TYPE_WIFI].getTypeName());
 
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getState(), State.CONNECTED);
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getDetailedState(),
-                DetailedState.CONNECTED);
+        assertTrue(ni[TYPE_MOBILE].isConnectedOrConnecting());
+        assertFalse(ni[TYPE_WIFI].isConnectedOrConnecting());
 
-        assertNull(ni[ConnectivityManager.TYPE_MOBILE].getReason());
-        assertNull(ni[ConnectivityManager.TYPE_WIFI].getReason());
-        assertEquals("internet", ni[ConnectivityManager.TYPE_MOBILE].getExtraInfo());
-        assertNull(ni[ConnectivityManager.TYPE_WIFI].getExtraInfo());
+        assertTrue(ni[TYPE_MOBILE].isAvailable());
+        assertFalse(ni[TYPE_WIFI].isAvailable());
 
-        assertNotNull(ni[ConnectivityManager.TYPE_MOBILE].toString());
-        assertNotNull(ni[ConnectivityManager.TYPE_WIFI].toString());
-    }
+        assertTrue(ni[TYPE_MOBILE].isConnected());
+        assertFalse(ni[TYPE_WIFI].isConnected());
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test writeToParcel(Parcel dest, int flags).",
-        method = "writeToParcel",
-        args = {android.os.Parcel.class, java.lang.Integer.class}
-    )
-    //@ToBeFixed(bug = "1703933", explanation = "Cannot test if the data was written correctly,"
-    public void testWriteToParcel() {
-        NetworkInfo[] networkInfos = mConnectivityManager.getAllNetworkInfo();
-        NetworkInfo mobileInfo = networkInfos[ConnectivityManager.TYPE_MOBILE];
-        Parcel p = Parcel.obtain();
+        assertEquals(State.CONNECTED, ni[TYPE_MOBILE].getState());
+        assertEquals(State.UNKNOWN, ni[TYPE_WIFI].getState());
 
-        mobileInfo.writeToParcel(p, 1);
+        assertEquals(DetailedState.CONNECTED, ni[TYPE_MOBILE].getDetailedState());
+        assertEquals(DetailedState.IDLE, ni[TYPE_WIFI].getDetailedState());
+
+        assertNotNull(ni[TYPE_MOBILE].getReason());
+        assertNull(ni[TYPE_WIFI].getReason());
+
+        assertNotNull(ni[TYPE_MOBILE].getExtraInfo());
+        assertNull(ni[TYPE_WIFI].getExtraInfo());
+
+        assertNotNull(ni[TYPE_MOBILE].toString());
+        assertNotNull(ni[TYPE_WIFI].toString());
     }
 }
