1/* 2 * Copyright (C) 2015 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 17package com.android.managedprovisioning; 18 19import android.content.Intent; 20import android.os.BaseBundle; 21import android.os.PersistableBundle; 22import android.test.AndroidTestCase; 23import android.test.suitebuilder.annotation.SmallTest; 24 25import java.util.Objects; 26import java.util.Set; 27 28import static junit.framework.Assert.assertFalse; 29import static junit.framework.Assert.assertTrue; 30 31public class TestUtils extends AndroidTestCase { 32 @SmallTest 33 public void testIntentWithActionEquals() { 34 Intent i = new Intent("aa"); 35 assertTrue(intentEquals(i, i)); 36 } 37 38 @SmallTest 39 public void testIntentWithExtraEquals() { 40 Intent i = new Intent().putExtra("bb", "cc"); 41 assertTrue(intentEquals(i, i)); 42 } 43 44 @SmallTest 45 public void testIntentActionNotEqual() { 46 Intent i1 = new Intent("aa"); 47 Intent i2 = new Intent("bb"); 48 assertFalse(intentEquals(i1, i2)); 49 } 50 51 @SmallTest 52 public void testIntentExtraNotEqual() { 53 Intent i1 = new Intent().putExtra("aa", "bb"); 54 Intent i2 = new Intent().putExtra("aa", "cc"); 55 assertFalse(intentEquals(i1, i2)); 56 } 57 58 @SmallTest 59 public void testIntentNotSameExtra() { 60 Intent i1 = new Intent().putExtra("aa", "bb"); 61 Intent i2 = new Intent().putExtra("dd", "cc"); 62 assertFalse(intentEquals(i1, i2)); 63 } 64 65 /** 66 * This method uses Object.equals to compare the extras. 67 * Which means that it will always return false if one of the intents has an extra with an 68 * embedded bundle. 69 */ 70 public static boolean intentEquals(Intent intent1, Intent intent2) { 71 // both are null? return true 72 if (intent1 == null && intent2 == null) { 73 return true; 74 } 75 // Only one is null? return false 76 if (intent1 == null || intent2 == null) { 77 return false; 78 } 79 return intent1.filterEquals(intent2) && bundleEquals(intent1.getExtras(), 80 intent2.getExtras()); 81 } 82 83 public static boolean bundleEquals(BaseBundle bundle1, BaseBundle bundle2) { 84 // both are null? return true 85 if (bundle1 == null && bundle2 == null) { 86 return true; 87 } 88 // Only one is null? return false 89 if (bundle1 == null || bundle2 == null) { 90 return false; 91 } 92 if (bundle1.size() != bundle2.size()) { 93 return false; 94 } 95 Set<String> keys = bundle1.keySet(); 96 for (String key : keys) { 97 Object value1 = bundle1.get(key); 98 Object value2 = bundle2.get(key); 99 if (!Objects.equals(value1, value2)) { 100 return false; 101 } 102 } 103 return true; 104 } 105 106 public static void assertIntentEquals(Intent i1, Intent i2) { 107 if (!intentEquals(i1, i2)) { 108 failIntentsNotEqual(i1, i2); 109 } 110 } 111 112 public static void failIntentsNotEqual(Intent i1, Intent i2) { 113 fail("Intent " + intentToString(i1) + " is not equal to " + intentToString(i2)); 114 } 115 116 public static String intentToString(Intent i) { 117 return i.toString() + " with extras " + i.getExtras(); 118 } 119 120 public static PersistableBundle createTestAdminExtras() { 121 PersistableBundle adminExtras = new PersistableBundle(); 122 adminExtras.putBoolean("boolean", true); 123 adminExtras.putBooleanArray("boolean_array", new boolean[] { true, false }); 124 adminExtras.putDouble("double", 1.1); 125 adminExtras.putDoubleArray("double_array", new double[] { 1.1, 2.2 }); 126 adminExtras.putInt("int", 1); 127 adminExtras.putIntArray("int_array", new int[] { 1, 2 } ); 128 adminExtras.putLong("long", 1L); 129 adminExtras.putLongArray("long_array", new long[] { 1L, 2L }); 130 adminExtras.putString("string", "Hello"); 131 adminExtras.putStringArray("string_array", new String[] { "Hello", "World" } ); 132 133 PersistableBundle nestedBundle = new PersistableBundle(); 134 nestedBundle.putInt("int", 1); 135 nestedBundle.putStringArray("string_array", new String[] { "Hello", "World" } ); 136 adminExtras.putPersistableBundle("persistable_bundle", nestedBundle); 137 return adminExtras; 138 } 139} 140