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