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;
20262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport android.test.AndroidTestCase;
21262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
22262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.Arrays;
23262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.HashSet;
24262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.List;
25262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovimport java.util.Set;
26262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
27262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolovpublic class RestrictionsManagerTest extends AndroidTestCase {
28262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    private RestrictionsManager mRm;
29262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
30262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    @Override
31262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    protected void setUp() throws Exception {
32262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        super.setUp();
33262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        mRm = (RestrictionsManager) mContext.getSystemService(Context.RESTRICTIONS_SERVICE);
34262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    }
35262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
36262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    public void testGetManifestRestrictions() {
37262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        String packageName = getContext().getPackageName();
38262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        List<RestrictionEntry> manifestRestrictions = mRm.getManifestRestrictions(packageName);
39262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(6, manifestRestrictions.size());
40262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Set<String> verifiedKeys = new HashSet<>(Arrays.asList("bundle_key", "bundle_array_key",
41262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                "bundle_array_bundle_key"));
42262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        for (RestrictionEntry entry : manifestRestrictions) {
43262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov            if ("bundle_key".equals(entry.getKey())) {
44262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                assertEquals("bundle_key entry should have 2 children entries",
45262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        2, entry.getRestrictions().length);
46262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                verifiedKeys.remove(entry.getKey());
47262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov            } else if ("bundle_array_key".equals(entry.getKey())) {
48262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                assertEquals("bundle_array_key should have 2 children entries",
49262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        2, entry.getRestrictions().length);
50262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                assertNotNull(entry.getRestrictions());
51262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                for (RestrictionEntry childEntry : entry.getRestrictions()) {
52262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                    if ("bundle_array_bundle_key".equals(childEntry.getKey())) {
53262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        assertNotNull(childEntry.getRestrictions());
54262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        assertEquals("bundle_array_bundle_key should have 1 child entry",
55262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                                1, childEntry.getRestrictions().length);
56262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                        verifiedKeys.remove(childEntry.getKey());
57262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                    }
58262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                }
59262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov                verifiedKeys.remove(entry.getKey());
60262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov            }
61262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        }
62262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertTrue("Entries" + verifiedKeys + " were not found", verifiedKeys.isEmpty());
63262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    }
64262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
65262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    public void testConvertRestrictionsToBundle() {
66262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        String packageName = getContext().getPackageName();
67262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        List<RestrictionEntry> manifestRestrictions = mRm.getManifestRestrictions(packageName);
68262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Bundle bundle = RestrictionsManager.convertRestrictionsToBundle(manifestRestrictions);
69262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(6, bundle.size());
70262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Bundle childBundle = bundle.getBundle("bundle_key");
71262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertNotNull(childBundle);
72262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(2, childBundle.size());
73262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        Parcelable[] childBundleArray = bundle.getParcelableArray("bundle_array_key");
74262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov        assertEquals(2, childBundleArray.length);
75262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov    }
76262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov
77262f9952e6e78e00a6d42bab97d73dccfb9607f4Fyodor Kupolov}
78