Home | History | Annotate | Download | only in location
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package android.location;
     18 
     19 import android.test.suitebuilder.annotation.SmallTest;
     20 import android.util.Log;
     21 import java.lang.reflect.Constructor;
     22 import java.util.ArrayList;
     23 import java.util.List;
     24 import junit.framework.TestCase;
     25 
     26 /**
     27  * Unit tests for {@link GnssStatus}.
     28  */
     29 @SmallTest
     30 public class GnssStatusTest extends TestCase {
     31 
     32   private static final String TAG = GnssStatusTest.class.getSimpleName();
     33   public void setUp() throws Exception {
     34     super.setUp();
     35   }
     36 
     37   /*
     38    * Create {@link GnssStatus} with default value, verify whether its fields are set correctly.
     39    *
     40    */
     41   public void testEmptyGnssStatus() throws Exception {
     42     Log.i(TAG, "testEmptyGnssStatus");
     43     List<SatelliteInfo> svInfos = new ArrayList<>();
     44     GnssStatus gnssStatus = createGnssStatus(svInfos);
     45     verifyGnssStatus(svInfos, gnssStatus);
     46   }
     47 
     48   /*
     49    * Create {@link GnssStatus} with only one satellite info, verify whether its fields are set
     50    * correctly.
     51    */
     52   public void testOneSatelliteGnssStatus() throws Exception {
     53     Log.i(TAG, "testOneSatelliteGnssStatus");
     54     List<SatelliteInfo> svInfos = new ArrayList<>();
     55     SatelliteInfo svInfo =
     56         new SatelliteInfo(100,1, true, true, true, true, 100f, 20.3f, 45.5f, 100.23f);
     57     svInfos.add(svInfo);
     58     GnssStatus gnssStatus = createGnssStatus(svInfos);
     59     verifyGnssStatus(svInfos, gnssStatus);
     60   }
     61 
     62   /*
     63    * Create {@link GnssStatus} with multiple satellite info, verify whether its fields are set
     64    * correctly.
     65    */
     66   public void testMultipleSatellitesGnssStatus() throws Exception {
     67     Log.i(TAG, "testMultipleSatellitesGnssStatus");
     68     List<SatelliteInfo> svInfos = new ArrayList<>();
     69     SatelliteInfo svInfo1 =
     70         new SatelliteInfo(20, 1,true, true, true, true, 10.1f, 20.3f, 45.5f, 111.23f);
     71     SatelliteInfo svInfo2 =
     72         new SatelliteInfo(50, 2, true, false, true, false, 20.2f, 21.3f, 46.5f, 222.23f);
     73     SatelliteInfo svInfo3 =
     74         new SatelliteInfo(192, 3, false, true, false, true, 30.3f, 22.3f, 47.5f, 333.23f);
     75     SatelliteInfo svInfo4 =
     76         new SatelliteInfo(250, 4, false, false, false, false, 40.4f, 23.3f, 48.5f, 444.23f);
     77     svInfos.add(svInfo1);
     78     svInfos.add(svInfo2);
     79     svInfos.add(svInfo3);
     80     svInfos.add(svInfo4);
     81     GnssStatus gnssStatus = createGnssStatus(svInfos);
     82     verifyGnssStatus(svInfos, gnssStatus);
     83   }
     84 
     85   private void verifyGnssStatus(List<SatelliteInfo> svInfos, GnssStatus gnssStatus) {
     86     Log.i(TAG, String.format("Verifing {0} satellites info.",svInfos.size()));
     87     assertEquals(TAG + "::SatelliteCount", svInfos.size(),
     88         gnssStatus.getSatelliteCount());
     89     for (int i = 0; i< svInfos.size(); i++) {
     90       SatelliteInfo svInfo = svInfos.get(i);
     91       assertEquals(TAG + "::Svid", svInfo.mSvid, gnssStatus.getSvid(i));
     92       assertEquals(TAG + "::ConstellationType", svInfo.mConstellationType,
     93           gnssStatus.getConstellationType(i));
     94       assertEquals(TAG + "::Cn0DbHz", svInfo.mCn0DbHz, gnssStatus.getCn0DbHz(i));
     95       assertEquals(TAG + "::Elevation", svInfo.mElevation,
     96           gnssStatus.getElevationDegrees(i));
     97       assertEquals(TAG + "::Azimuth", svInfo.mAzimuth, gnssStatus.getAzimuthDegrees(i));
     98       assertEquals(TAG + "::CarrierFrequencyHz", svInfo.mCarrierFrequency,
     99           gnssStatus.getCarrierFrequencyHz(i));
    100       assertEquals(TAG + "::hasEphemerisData", svInfo.mHasEphemris,
    101           gnssStatus.hasEphemerisData(i));
    102       assertEquals(TAG + "::HasAlmanacData", svInfo.mHasAlmanac,
    103           gnssStatus.hasAlmanacData(i));
    104       assertEquals(TAG + "::UsedInFix", svInfo.mUsedInFix, gnssStatus.usedInFix(i));
    105       assertEquals(TAG + "::HasCarrierFrequencyHz", svInfo.mHasCarriesFrequency,
    106           gnssStatus.hasCarrierFrequencyHz(i));
    107     }
    108   }
    109 
    110   private static GnssStatus createGnssStatus(List<SatelliteInfo> svInfos) throws Exception {
    111     Class<?> intClass = Integer.TYPE;
    112     Class<?> floatArrayClass = Class.forName("[F");
    113     Class<?> intArrayClass = Class.forName("[I");
    114     Class[] cArg = new Class[6];
    115     cArg[0] = intClass;
    116     cArg[1] = intArrayClass;
    117     cArg[2] = floatArrayClass;
    118     cArg[3] = floatArrayClass;
    119     cArg[4] = floatArrayClass;
    120     cArg[5] = floatArrayClass;
    121     Constructor<GnssStatus>  ctor = GnssStatus.class.getDeclaredConstructor(cArg);
    122     ctor.setAccessible(true);
    123     return ctor.newInstance(svInfos.size(),
    124         SatelliteInfo.getSvidWithFlagsArray(svInfos),
    125         SatelliteInfo.getCn0sArray(svInfos),
    126         SatelliteInfo.getElevationsArray(svInfos),
    127         SatelliteInfo.getAzimuthsArray(svInfos),
    128         SatelliteInfo.getCarrierFrequencyArray(svInfos));
    129   }
    130 }
    131