1262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov/*
2262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * Copyright (C) 2015 The Android Open Source Project
3262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov *
4262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * Licensed under the Apache License, Version 2.0 (the "License");
5262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * you may not use this file except in compliance with the License.
6262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * You may obtain a copy of the License at
7262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov *
8262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov *      http://www.apache.org/licenses/LICENSE-2.0
9262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov *
10262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * Unless required by applicable law or agreed to in writing, software
11262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * distributed under the License is distributed on an "AS IS" BASIS,
12262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * See the License for the specific language governing permissions and
14262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov * limitations under the License
15262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov */
16262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovpackage android.content;
17262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
18262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport android.os.Bundle;
19262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport android.os.Parcelable;
20bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikasimport android.support.test.filters.LargeTest;
21262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport android.test.AndroidTestCase;
22262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
23262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.Arrays;
24262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.HashSet;
25262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.List;
26262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.Set;
27262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
28bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikas@LargeTest
29262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovpublic class RestrictionsManagerTest extends AndroidTestCase {
30262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    private RestrictionsManager mRm;
31262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
32262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    @Override
33262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    protected void setUp() throws Exception {
34262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        super.setUp();
35262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        mRm = (RestrictionsManager) mContext.getSystemService(Context.RESTRICTIONS_SERVICE);
36262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    }
37262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
38262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    public void testGetManifestRestrictions() {
39262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        String packageName = getContext().getPackageName();
40262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        List<RestrictionEntry> manifestRestrictions = mRm.getManifestRestrictions(packageName);
41262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(6, manifestRestrictions.size());
42262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Set<String> verifiedKeys = new HashSet<>(Arrays.asList("bundle_key", "bundle_array_key",
43262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                "bundle_array_bundle_key"));
44262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        for (RestrictionEntry entry : manifestRestrictions) {
45262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov            if ("bundle_key".equals(entry.getKey())) {
46262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                assertEquals("bundle_key entry should have 2 children entries",
47262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        2, entry.getRestrictions().length);
48262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                verifiedKeys.remove(entry.getKey());
49262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov            } else if ("bundle_array_key".equals(entry.getKey())) {
50262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                assertEquals("bundle_array_key should have 2 children entries",
51262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        2, entry.getRestrictions().length);
52262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                assertNotNull(entry.getRestrictions());
53262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                for (RestrictionEntry childEntry : entry.getRestrictions()) {
54262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                    if ("bundle_array_bundle_key".equals(childEntry.getKey())) {
55262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        assertNotNull(childEntry.getRestrictions());
56262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        assertEquals("bundle_array_bundle_key should have 1 child entry",
57262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                                1, childEntry.getRestrictions().length);
58262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        verifiedKeys.remove(childEntry.getKey());
59262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                    }
60262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                }
61262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                verifiedKeys.remove(entry.getKey());
62262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov            }
63262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        }
64262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertTrue("Entries" + verifiedKeys + " were not found", verifiedKeys.isEmpty());
65262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    }
66262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
67262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    public void testConvertRestrictionsToBundle() {
68262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        String packageName = getContext().getPackageName();
69262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        List<RestrictionEntry> manifestRestrictions = mRm.getManifestRestrictions(packageName);
70262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Bundle bundle = RestrictionsManager.convertRestrictionsToBundle(manifestRestrictions);
71262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(6, bundle.size());
72262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Bundle childBundle = bundle.getBundle("bundle_key");
73262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertNotNull(childBundle);
74262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(2, childBundle.size());
75262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Parcelable[] childBundleArray = bundle.getParcelableArray("bundle_array_key");
76262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(2, childBundleArray.length);
77262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    }
78262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
791d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak    public void testConvertRestrictionsToBundle_bundleArray() {
801d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        String packageName = getContext().getPackageName();
811d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        List<RestrictionEntry> manifestRestrictions = mRm.getManifestRestrictions(packageName);
821d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        Bundle bundle = RestrictionsManager.convertRestrictionsToBundle(manifestRestrictions);
831d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        assertEquals(6, bundle.size());
841d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        Parcelable[] array = bundle.getParcelableArray("bundle_array_key");
851d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        assertNotNull(array);
861d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        assertEquals(2, array.length);
871d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        Bundle firstBundle = (Bundle) array[0];
881d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        assertEquals(0, firstBundle.size());
891d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        Bundle secondBundle = (Bundle) array[1];
901d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        assertEquals(1, secondBundle.size());
911d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak        assertTrue(secondBundle.containsKey("bundle_array_bundle_int_key"));
921d18efe080f63f6518f06ebfb85d2bad4556590cTony Mak    }
93262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov}
94