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