1e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot/* 2e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * Copyright (C) 2015 The Android Open Source Project 3e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * 4e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * Licensed under the Apache License, Version 2.0 (the "License"); 5e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * you may not use this file except in compliance with the License. 6e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * You may obtain a copy of the License at 7e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * 8e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * http://www.apache.org/licenses/LICENSE-2.0 9e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * 10e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * Unless required by applicable law or agreed to in writing, software 11e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * distributed under the License is distributed on an "AS IS" BASIS, 12e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * See the License for the specific language governing permissions and 14e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * limitations under the License. 15e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot */ 16e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 17e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotpackage com.android.managedprovisioning; 18e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 19e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport android.content.Intent; 20e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport android.os.BaseBundle; 217079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport android.os.PersistableBundle; 22e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport android.test.AndroidTestCase; 23e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport android.test.suitebuilder.annotation.SmallTest; 24e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 2577bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ngimport java.util.Objects; 26e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport java.util.Set; 27e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 28e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport static junit.framework.Assert.assertFalse; 29e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotimport static junit.framework.Assert.assertTrue; 30e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 31e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevotpublic class TestUtils extends AndroidTestCase { 32e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot @SmallTest 33e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public void testIntentWithActionEquals() { 34e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i = new Intent("aa"); 35e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot assertTrue(intentEquals(i, i)); 36e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 37e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 38e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot @SmallTest 39e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public void testIntentWithExtraEquals() { 40e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i = new Intent().putExtra("bb", "cc"); 41e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot assertTrue(intentEquals(i, i)); 42e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 43e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 44e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot @SmallTest 45e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public void testIntentActionNotEqual() { 46e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i1 = new Intent("aa"); 47e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i2 = new Intent("bb"); 48e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot assertFalse(intentEquals(i1, i2)); 49e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 50e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 51e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot @SmallTest 52e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public void testIntentExtraNotEqual() { 53e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i1 = new Intent().putExtra("aa", "bb"); 54e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i2 = new Intent().putExtra("aa", "cc"); 55e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot assertFalse(intentEquals(i1, i2)); 56e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 57e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 58e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot @SmallTest 59e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public void testIntentNotSameExtra() { 60e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i1 = new Intent().putExtra("aa", "bb"); 61e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Intent i2 = new Intent().putExtra("dd", "cc"); 62e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot assertFalse(intentEquals(i1, i2)); 63e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 64e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 65e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot /** 66e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * This method uses Object.equals to compare the extras. 67e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * Which means that it will always return false if one of the intents has an extra with an 68e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot * embedded bundle. 69e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot */ 70e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public static boolean intentEquals(Intent intent1, Intent intent2) { 71e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot // both are null? return true 72e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot if (intent1 == null && intent2 == null) { 73e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return true; 74e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 75e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot // Only one is null? return false 76e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot if (intent1 == null || intent2 == null) { 77e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return false; 78e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 79e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return intent1.filterEquals(intent2) && bundleEquals(intent1.getExtras(), 80e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot intent2.getExtras()); 81e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 82e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 83e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public static boolean bundleEquals(BaseBundle bundle1, BaseBundle bundle2) { 84e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot // both are null? return true 85e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot if (bundle1 == null && bundle2 == null) { 86e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return true; 87e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 88e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot // Only one is null? return false 89e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot if (bundle1 == null || bundle2 == null) { 90e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return false; 91e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 92e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot if (bundle1.size() != bundle2.size()) { 93e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return false; 94e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 95e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Set<String> keys = bundle1.keySet(); 96e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot for (String key : keys) { 97e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Object value1 = bundle1.get(key); 98e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot Object value2 = bundle2.get(key); 9977bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng if (!Objects.equals(value1, value2)) { 100e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return false; 101e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 102e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 103e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return true; 104e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 105e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 106e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public static void assertIntentEquals(Intent i1, Intent i2) { 107e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot if (!intentEquals(i1, i2)) { 108e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot failIntentsNotEqual(i1, i2); 109e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 110e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 111e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 112e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public static void failIntentsNotEqual(Intent i1, Intent i2) { 113e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot fail("Intent " + intentToString(i1) + " is not equal to " + intentToString(i2)); 114e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 115e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot 116e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot public static String intentToString(Intent i) { 117e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot return i.toString() + " with extras " + i.getExtras(); 118e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot } 1197079df5a3fb155947004843ee8ec25b36127e3edSteven Ng 1207079df5a3fb155947004843ee8ec25b36127e3edSteven Ng public static PersistableBundle createTestAdminExtras() { 1217079df5a3fb155947004843ee8ec25b36127e3edSteven Ng PersistableBundle adminExtras = new PersistableBundle(); 1227079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putBoolean("boolean", true); 1237079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putBooleanArray("boolean_array", new boolean[] { true, false }); 1247079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putDouble("double", 1.1); 1257079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putDoubleArray("double_array", new double[] { 1.1, 2.2 }); 1267079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putInt("int", 1); 1277079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putIntArray("int_array", new int[] { 1, 2 } ); 1287079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putLong("long", 1L); 1297079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putLongArray("long_array", new long[] { 1L, 2L }); 1307079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putString("string", "Hello"); 1317079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putStringArray("string_array", new String[] { "Hello", "World" } ); 1327079df5a3fb155947004843ee8ec25b36127e3edSteven Ng 1337079df5a3fb155947004843ee8ec25b36127e3edSteven Ng PersistableBundle nestedBundle = new PersistableBundle(); 1347079df5a3fb155947004843ee8ec25b36127e3edSteven Ng nestedBundle.putInt("int", 1); 1357079df5a3fb155947004843ee8ec25b36127e3edSteven Ng nestedBundle.putStringArray("string_array", new String[] { "Hello", "World" } ); 1367079df5a3fb155947004843ee8ec25b36127e3edSteven Ng adminExtras.putPersistableBundle("persistable_bundle", nestedBundle); 1377079df5a3fb155947004843ee8ec25b36127e3edSteven Ng return adminExtras; 1387079df5a3fb155947004843ee8ec25b36127e3edSteven Ng } 139e35cc9733194b380637728d39c14dcfc0adee84bNicolas Prevot} 140