1/*
2 * Copyright (C) 2017 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 androidx.core.app;
18
19import static org.junit.Assert.assertSame;
20import static org.mockito.AdditionalMatchers.aryEq;
21import static org.mockito.ArgumentMatchers.eq;
22import static org.mockito.ArgumentMatchers.same;
23import static org.mockito.Mockito.mock;
24import static org.mockito.Mockito.verify;
25import static org.mockito.Mockito.verifyNoMoreInteractions;
26
27import android.Manifest;
28import android.app.Activity;
29import android.support.test.filters.SmallTest;
30import android.support.test.runner.AndroidJUnit4;
31import android.support.v4.BaseInstrumentationTestCase;
32import android.view.View;
33
34import androidx.core.app.ActivityCompat.PermissionCompatDelegate;
35import androidx.core.test.R;
36
37import org.junit.Test;
38import org.junit.runner.RunWith;
39
40@RunWith(AndroidJUnit4.class)
41@SmallTest
42public class ActivityCompatTest extends BaseInstrumentationTestCase<TestActivity> {
43
44    public ActivityCompatTest() {
45        super(TestActivity.class);
46    }
47
48    private Activity getActivity() {
49        return mActivityTestRule.getActivity();
50    }
51
52    @Test
53    public void testPermissionDelegate() {
54        Activity activity = mActivityTestRule.getActivity();
55        ActivityCompat.PermissionCompatDelegate delegate = mock(PermissionCompatDelegate.class);
56
57        // First test setting the delegate
58        ActivityCompat.setPermissionCompatDelegate(delegate);
59
60        ActivityCompat.requestPermissions(activity, new String[]{
61                Manifest.permission.ACCESS_FINE_LOCATION}, 42);
62        verify(delegate).requestPermissions(same(activity), aryEq(
63                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}), eq(42));
64
65        // Test clearing the delegate
66        ActivityCompat.setPermissionCompatDelegate(null);
67
68        ActivityCompat.requestPermissions(activity, new String[]{
69                Manifest.permission.ACCESS_FINE_LOCATION}, 42);
70        verifyNoMoreInteractions(delegate);
71    }
72
73    @Test
74    public void testRequireViewByIdFound() {
75        View view = getActivity().findViewById(R.id.view);
76        assertSame(view, ActivityCompat.requireViewById(getActivity(), R.id.view));
77    }
78
79    @Test(expected = IllegalArgumentException.class)
80    public void testRequireViewByIdMissing() {
81        // container isn't present inside activity
82        ActivityCompat.requireViewById(getActivity(), R.id.container);
83    }
84
85    @Test(expected = IllegalArgumentException.class)
86    public void testRequireViewByIdInvalid() {
87        // NO_ID is always invalid
88        ActivityCompat.requireViewById(getActivity(), View.NO_ID);
89    }
90
91}
92