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