1b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv/*
2b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * Copyright (C) 2016 The Android Open Source Project
3b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv *
4b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * use this file except in compliance with the License. You may obtain a copy of
6b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * the License at
7b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv *
8b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * http://www.apache.org/licenses/LICENSE-2.0
9b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv *
10b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * Unless required by applicable law or agreed to in writing, software
11b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * License for the specific language governing permissions and limitations under
14b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv * the License.
15b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv */
16b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
17b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvpackage android.view;
18b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
19b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.app.Activity;
20b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.graphics.Bitmap;
21b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.graphics.BitmapFactory;
22b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.support.test.filters.SmallTest;
23b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.support.test.rule.ActivityTestRule;
24b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.support.test.runner.AndroidJUnit4;
25b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport android.util.SparseIntArray;
26b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
27b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport com.android.frameworks.coretests.R;
28b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
29b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport org.junit.Assert;
30b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport org.junit.Before;
31b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport org.junit.Rule;
32b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport org.junit.Test;
33b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport org.junit.runner.RunWith;
34b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
35b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvimport static org.junit.Assert.assertTrue;
36b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
37b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv@RunWith(AndroidJUnit4.class)
38b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyvpublic class ViewCaptureTest {
39b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
40b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    private static final SparseIntArray EXPECTED_CHILDREN_VISIBILITY = new SparseIntArray();
41b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    static {
42b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        EXPECTED_CHILDREN_VISIBILITY.append(R.id.child1, View.VISIBLE);
43b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        EXPECTED_CHILDREN_VISIBILITY.append(R.id.child2, View.INVISIBLE);
44b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        EXPECTED_CHILDREN_VISIBILITY.append(R.id.child3, View.GONE);
45b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        EXPECTED_CHILDREN_VISIBILITY.append(R.id.child4, View.VISIBLE);
46b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    }
47b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
48b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    @Rule
49b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    public ActivityTestRule<ViewCaptureTestActivity> mActivityRule = new ActivityTestRule<>(
50b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv            ViewCaptureTestActivity.class);
51b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
52b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    private Activity mActivity;
53b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    private ViewGroup mViewToCapture;
54b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
55b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    @Before
56b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    public void setUp() throws Exception {
57b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        mActivity = mActivityRule.getActivity();
58b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        mViewToCapture = (ViewGroup) mActivity.findViewById(R.id.capture);
59b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    }
60b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
61b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    @Test
62b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    @SmallTest
63b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    public void testCreateSnapshot() {
64b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        assertChildrenVisibility();
65b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        testCreateSnapshot(true, R.drawable.view_capture_test_no_children_golden);
66b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        assertChildrenVisibility();
67b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        testCreateSnapshot(false, R.drawable.view_capture_test_with_children_golden);
68b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        assertChildrenVisibility();
69b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    }
70b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
71b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    private void testCreateSnapshot(boolean skipChildren, int goldenResId) {
72b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        Bitmap result = mViewToCapture.createSnapshot(Bitmap.Config.ARGB_8888, 0, skipChildren);
73b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        Bitmap golden = BitmapFactory.decodeResource(mActivity.getResources(), goldenResId);
74b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        assertTrue(golden.sameAs(result));
75b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    }
76b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv
77b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    private void assertChildrenVisibility() {
78b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        for (int i = 0; i < EXPECTED_CHILDREN_VISIBILITY.size(); i++) {
79b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv            int id = EXPECTED_CHILDREN_VISIBILITY.keyAt(i);
80b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv            View child = mViewToCapture.findViewById(id);
81b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv            Assert.assertEquals(EXPECTED_CHILDREN_VISIBILITY.get(id), child.getVisibility());
82b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv        }
83b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv    }
84b37d44e26778bcaeb02a9b73997ffcb97ff7328fsergeyv}
85