BACKPORT: Add CTS for CellInfoNr

This add the cts test case for CellInfoNr in
TelephonyManager#getAllCellInfo()

Backport of "d5153e71af: Add more Cts for TelephonyMangaer & CellInfo"

Test: atest CellInfoTest.java
Bug: 122612520
Bug: 122612001
Merged-In: Idb7ff676b646f7b47914dfd2d0bf21cad02111df
Change-Id: Idb7ff676b646f7b47914dfd2d0bf21cad02111df
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java b/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
index 22f8199..eaa5722 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
@@ -21,24 +21,25 @@
 import android.telephony.CellIdentityCdma;
 import android.telephony.CellIdentityGsm;
 import android.telephony.CellIdentityLte;
+import android.telephony.CellIdentityNr;
 import android.telephony.CellIdentityWcdma;
 import android.telephony.CellInfo;
 import android.telephony.CellInfoCdma;
 import android.telephony.CellInfoGsm;
 import android.telephony.CellInfoLte;
+import android.telephony.CellInfoNr;
 import android.telephony.CellInfoWcdma;
 import android.telephony.CellSignalStrengthCdma;
 import android.telephony.CellSignalStrengthGsm;
 import android.telephony.CellSignalStrengthLte;
+import android.telephony.CellSignalStrengthNr;
 import android.telephony.CellSignalStrengthWcdma;
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 import android.test.AndroidTestCase;
 import android.util.Log;
 
-
 import java.util.List;
-import java.util.Objects;
 
 /**
  * Test TelephonyManager.getAllCellInfo()
@@ -163,6 +164,8 @@
                 verifyGsmInfo((CellInfoGsm) cellInfo);
             } else if (cellInfo instanceof CellInfoCdma) {
                 verifyCdmaInfo((CellInfoCdma) cellInfo);
+            } else if (cellInfo instanceof CellInfoNr) {
+                verifyNrInfo((CellInfoNr) cellInfo);
             }
         }
 
@@ -189,7 +192,7 @@
 
         CellInfoCdma newCi = CellInfoCdma.CREATOR.createFromParcel(p);
         assertTrue(cdma.equals(newCi));
-        assertEquals("hashCode() did not get right hasdCode", cdma.hashCode(), newCi.hashCode());
+        assertEquals("hashCode() did not get right hashCode", cdma.hashCode(), newCi.hashCode());
     }
 
     private void verifyCellIdentityCdma(CellIdentityCdma cdma) {
@@ -298,7 +301,6 @@
         // mncStr must either be null or match mnc integer.
         assertTrue("MncString must match Mnc Integer, str=" + mncStr + " int=" + mnc,
                 mncStr == null || mnc == Integer.parseInt(mncStr));
-
     }
 
     // Verify lte cell information is within correct range.
@@ -311,6 +313,81 @@
         verifyCellSignalStrengthLteParcel(lte.getCellSignalStrength());
     }
 
+    // Verify NR 5G cell information is within correct range.
+    private void verifyNrInfo(CellInfoNr nr) {
+        verifyCellConnectionStatus(nr.getCellConnectionStatus());
+        verifyCellIdentityNr((CellIdentityNr) nr.getCellIdentity());
+        verifyCellIdentityNrParcel((CellIdentityNr) nr.getCellIdentity());
+        verifyCellSignalStrengthNr((CellSignalStrengthNr) nr.getCellSignalStrength());
+        verifyCellSignalStrengthNrParcel((CellSignalStrengthNr) nr.getCellSignalStrength());
+    }
+
+    private void verifyCellSignalStrengthNrParcel(CellSignalStrengthNr nr) {
+        Parcel p = Parcel.obtain();
+        nr.writeToParcel(p, 0);
+        p.setDataPosition(0);
+
+        CellSignalStrengthNr newCss = CellSignalStrengthNr.CREATOR.createFromParcel(p);
+        assertEquals(nr, newCss);
+    }
+
+    private void verifyCellIdentityNrParcel(CellIdentityNr nr) {
+        Parcel p = Parcel.obtain();
+        nr.writeToParcel(p, 0);
+        p.setDataPosition(0);
+
+        CellIdentityNr newCi = CellIdentityNr.CREATOR.createFromParcel(p);
+        assertEquals(nr, newCi);
+    }
+
+    private void verifyCellIdentityNr(CellIdentityNr nr) {
+        int pci = nr.getPci();
+        assertTrue("getPci() out of range [0, 1007], pci = " + pci, 0 <= pci && pci <= 1007);
+
+        int tac = nr.getTac();
+        assertTrue("getTac() out of range [0, 65536], tac = " + tac, 0 <= tac && tac <= 65536);
+
+        int channelNumber = nr.getChannelNumber();
+        assertTrue("getChannelNumber() out of range [0, 3279165], channelNumber = " + channelNumber,
+                0 <= channelNumber && channelNumber <= 3279165);
+
+        String mccStr = nr.getMccString();
+        String mncStr = nr.getMncString();
+        // mccStr is set as NULL if empty, unknown or invalid.
+        assertTrue("getMccString() out of range [0, 999], mcc=" + mccStr,
+                mccStr == null || mccStr.matches("^[0-9]{3}$"));
+
+        // mncStr is set as NULL if empty, unknown or invalid.
+        assertTrue("getMncString() out of range [0, 999], mnc=" + mncStr,
+                mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
+
+        assertNotNull("getOperatorAlphaLong() returns NULL!", nr.getOperatorAlphaLong());
+        assertNotNull("getOperatorAlphaShort() returns NULL!", nr.getOperatorAlphaShort());
+    }
+
+    private void verifyCellSignalStrengthNr(CellSignalStrengthNr nr) {
+        int csiRsrp = nr.getCsiRsrp();
+        int csiRsrq = nr.getCsiRsrq();
+        int csiSinr = nr.getSsSinr();
+        int ssRsrp = nr.getSsRsrp();
+        int ssRsrq = nr.getSsRsrq();
+        int ssSinr = nr.getSsSinr();
+
+        assertTrue("getCsiRsrp() out of range [-140, -44] | Integer.MAX_INTEGER, csiRsrp = "
+                        + csiRsrp, -140 <= csiRsrp && csiRsrp <= -44
+                || csiRsrp == Integer.MAX_VALUE);
+        assertTrue("getCsiRsrq() out of range [-20, -3] | Integer.MAX_INTEGER, csiRsrq = "
+                + csiRsrq, -20 <= csiRsrq && csiRsrq <= -3 || csiRsrq == Integer.MAX_VALUE);
+        assertTrue("getCsiSinr() out of range [-23, 40] | Integer.MAX_INTEGER, csiSinr = "
+                + csiSinr, -23 <= csiSinr && csiSinr <= 40 || csiSinr == Integer.MAX_VALUE);
+        assertTrue("getSsRsrp() out of range [-140, -44] | Integer.MAX_INTEGER, ssRsrp = "
+                        + ssRsrp, -140 <= ssRsrp && ssRsrp <= -44 || ssRsrp == Integer.MAX_VALUE);
+        assertTrue("getSsRsrq() out of range [-20, -3] | Integer.MAX_INTEGER, ssRsrq = "
+                + ssRsrq, -20 <= ssRsrq && ssRsrq <= -3 || ssRsrq == Integer.MAX_VALUE);
+        assertTrue("getSsSinr() out of range [-23, 40] | Integer.MAX_INTEGER, ssSinr = "
+                + ssSinr, -23 <= ssSinr && ssSinr <= 40 || ssSinr == Integer.MAX_VALUE);
+    }
+
     private void verifyCellInfoLteParcelandHashcode(CellInfoLte lte) {
         Parcel p = Parcel.obtain();
         lte.writeToParcel(p, 0);
@@ -318,7 +395,7 @@
 
         CellInfoLte newCi = CellInfoLte.CREATOR.createFromParcel(p);
         assertTrue(lte.equals(newCi));
-        assertEquals("hashCode() did not get right hasdCode", lte.hashCode(), newCi.hashCode());
+        assertEquals("hashCode() did not get right hashCode", lte.hashCode(), newCi.hashCode());
     }
 
     private void verifyCellIdentityLte(CellIdentityLte lte) {
@@ -458,7 +535,7 @@
 
         CellInfoWcdma newCi = CellInfoWcdma.CREATOR.createFromParcel(p);
         assertTrue(wcdma.equals(newCi));
-        assertEquals("hashCode() did not get right hasdCode", wcdma.hashCode(), newCi.hashCode());
+        assertEquals("hashCode() did not get right hashCode", wcdma.hashCode(), newCi.hashCode());
     }
 
     private void verifyCellIdentityWcdma(CellIdentityWcdma wcdma) {
@@ -548,7 +625,7 @@
 
         CellInfoGsm newCi = CellInfoGsm.CREATOR.createFromParcel(p);
         assertTrue(gsm.equals(newCi));
-        assertEquals("hashCode() did not get right hasdCode", gsm.hashCode(), newCi.hashCode());
+        assertEquals("hashCode() did not get right hashCode", gsm.hashCode(), newCi.hashCode());
     }
 
     private void verifyCellIdentityGsm(CellIdentityGsm gsm) {