1/* 2 * Copyright 2016, 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.task; 18 19import static org.mockito.Matchers.any; 20import static org.mockito.Matchers.anyInt; 21import static org.mockito.Mockito.times; 22import static org.mockito.Mockito.verify; 23import static org.mockito.Mockito.verifyZeroInteractions; 24import static org.mockito.Mockito.when; 25 26import android.content.IntentFilter; 27import android.content.pm.PackageManager; 28import android.content.pm.UserInfo; 29import android.os.UserHandle; 30import android.os.UserManager; 31import android.support.test.filters.SmallTest; 32 33import java.util.Arrays; 34import java.util.Collections; 35 36import org.junit.Before; 37import org.junit.Test; 38import org.mockito.Mock; 39import org.mockito.MockitoAnnotations; 40 41/** 42 * Unit tests for {@link CrossProfileIntentFiltersSetter} 43 */ 44@SmallTest 45public class CrossProfileIntentFiltersSetterTest { 46 47 private static final int TEST_PARENT_USER_ID = 101; 48 private static final int TEST_PROFILE_USER_ID = 123; 49 50 @Mock PackageManager mPackageManager; 51 @Mock UserManager mUserManager; 52 53 private CrossProfileIntentFiltersSetter mSetter; 54 55 @Before 56 public void setUp() { 57 MockitoAnnotations.initMocks(this); 58 59 mSetter = new CrossProfileIntentFiltersSetter(mPackageManager, mUserManager); 60 } 61 62 @Test 63 public void testSetFilters() { 64 // WHEN setting the filters 65 mSetter.setFilters(TEST_PARENT_USER_ID, TEST_PROFILE_USER_ID); 66 67 // THEN the right number of filters is applied 68 verify(mPackageManager, times(CrossProfileIntentFiltersSetter.FILTERS.size())) 69 .addCrossProfileIntentFilter(any(IntentFilter.class), anyInt(), anyInt(), anyInt()); 70 71 // THEN the HOME intent should be forwarded from the profile to the parent 72 verify(mPackageManager).addCrossProfileIntentFilter( 73 CrossProfileIntentFiltersSetter.HOME.filter, 74 TEST_PROFILE_USER_ID, TEST_PARENT_USER_ID, 75 CrossProfileIntentFiltersSetter.HOME.flags); 76 77 // THEN the ACTION_SEND intent should be forwarded from the parent to the profile 78 verify(mPackageManager).addCrossProfileIntentFilter( 79 CrossProfileIntentFiltersSetter.ACTION_SEND.filter, 80 TEST_PARENT_USER_ID, TEST_PROFILE_USER_ID, 81 CrossProfileIntentFiltersSetter.ACTION_SEND.flags); 82 } 83 84 @Test 85 public void testResetFilters_NoProfiles() { 86 // GIVEN that the user has no profiles 87 UserInfo ui = new UserInfo(UserHandle.USER_SYSTEM, null, UserInfo.FLAG_PRIMARY); 88 when(mUserManager.getProfiles(TEST_PARENT_USER_ID)) 89 .thenReturn(Collections.singletonList(ui)); 90 91 // WHEN calling reset filters 92 mSetter.resetFilters(TEST_PARENT_USER_ID); 93 94 // THEN nothing should happen 95 verifyZeroInteractions(mPackageManager); 96 } 97 98 @Test 99 public void testResetFilters_OneProfile() { 100 // GIVEN that the user has no profiles 101 UserInfo parent = new UserInfo(TEST_PARENT_USER_ID, null, UserInfo.FLAG_PRIMARY); 102 UserInfo profile = new UserInfo(TEST_PROFILE_USER_ID, null, UserInfo.FLAG_MANAGED_PROFILE); 103 when(mUserManager.getProfiles(TEST_PARENT_USER_ID)) 104 .thenReturn(Arrays.asList(parent, profile)); 105 106 // WHEN calling reset filters 107 mSetter.resetFilters(TEST_PARENT_USER_ID); 108 109 // THEN the existing filters should be removed 110 verify(mPackageManager).clearCrossProfileIntentFilters(TEST_PARENT_USER_ID); 111 verify(mPackageManager).clearCrossProfileIntentFilters(TEST_PROFILE_USER_ID); 112 113 // THEN the right number of filters is applied 114 verify(mPackageManager, times(CrossProfileIntentFiltersSetter.FILTERS.size())) 115 .addCrossProfileIntentFilter(any(IntentFilter.class), anyInt(), anyInt(), anyInt()); 116 } 117} 118