/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.support.percent; import android.support.percent.test.R; import android.support.test.filters.SmallTest; import android.view.View; import org.junit.Before; import org.junit.Test; /** * The arrangement of child views in the layout class is as follows: * * +---------------------------------------------+ * | | * | TTTTTTTTTTTTTTTTTTTTT | * | | * | L | * | L CCCCCCCCCCCCCCCCCC | * | L CCCCCCCCCCCCCCCCCC | * | L CCCCCCCCCCCCCCCCCC R | * | L CCCCCCCCCCCCCCCCCC R | * | L CCCCCCCCCCCCCCCCCC R | * | CCCCCCCCCCCCCCCCCC R | * | CCCCCCCCCCCCCCCCCC R | * | R | * | | * | BBBBBBBBBBBBBBBBBBBBB | * | | * +---------------------------------------------+ * * Child views are exercising the following percent-based constraints supported by * <code>PercentRelativeLayout</code>: * * <ul> * <li>Top child (marked with T) - width, aspect ratio, top margin, left margin.</li> * <li>Left child (marked with L) - height, aspect ratio, top margin, left margin.</li> * <li>Bottom child (marked with B) - width, aspect ratio, bottom margin, right margin.</li> * <li>Right child (marked with R) - height, aspect ratio, bottom margin, right margin.</li> * <li>Center child (marked with C) - margin (all sides) from the other four children.</li> * </ul> */ @SmallTest public class PercentRelativeTest extends BaseInstrumentationTestCase<TestRelativeActivity> { private PercentRelativeLayout mPercentRelativeLayout; private int mContainerWidth; private int mContainerHeight; public PercentRelativeTest() { super(TestRelativeActivity.class); } @Before public void setUp() throws Exception { final TestRelativeActivity activity = mActivityTestRule.getActivity(); mPercentRelativeLayout = (PercentRelativeLayout) activity.findViewById(R.id.container); mContainerWidth = mPercentRelativeLayout.getWidth(); mContainerHeight = mPercentRelativeLayout.getHeight(); } @Test public void testTopChild() { final View childToTest = mPercentRelativeLayout.findViewById(R.id.child_top); final int childWidth = childToTest.getWidth(); final int childHeight = childToTest.getHeight(); assertFuzzyEquals("Child width as 50% of the container", 0.5f * mContainerWidth, childWidth); assertFuzzyEquals("Child aspect ratio of 2000%", 0.05f * childWidth, childHeight); final int childLeft = childToTest.getLeft(); final int childTop = childToTest.getTop(); assertFuzzyEquals("Child left margin as 20% of the container", 0.2f * mContainerWidth, childLeft); assertFuzzyEquals("Child top margin as 5% of the container", 0.05f * mContainerHeight, childTop); } @Test public void testLeftChild() { final View childToTest = mPercentRelativeLayout.findViewById(R.id.child_left); final int childWidth = childToTest.getWidth(); final int childHeight = childToTest.getHeight(); assertFuzzyEquals("Child height as 50% of the container", 0.5f * mContainerHeight, childHeight); assertFuzzyEquals("Child aspect ratio of 5%", 0.05f * childHeight, childWidth); final int childLeft = childToTest.getLeft(); final int childTop = childToTest.getTop(); assertFuzzyEquals("Child left margin as 5% of the container", 0.05f * mContainerWidth, childLeft); assertFuzzyEquals("Child top margin as 20% of the container", 0.2f * mContainerHeight, childTop); } @Test public void testBottomChild() { final View childToTest = mPercentRelativeLayout.findViewById(R.id.child_bottom); final int childWidth = childToTest.getWidth(); final int childHeight = childToTest.getHeight(); assertFuzzyEquals("Child width as 40% of the container", 0.4f * mContainerWidth, childWidth); assertFuzzyEquals("Child aspect ratio of 2000%", 0.05f * childWidth, childHeight); final int childRight = childToTest.getRight(); final int childBottom = childToTest.getBottom(); assertFuzzyEquals("Child right margin as 20% of the container", 0.2f * mContainerWidth, mContainerWidth - childRight); assertFuzzyEquals("Child bottom margin as 5% of the container", 0.05f * mContainerHeight, mContainerHeight - childBottom); } @Test public void testRightChild() { final View childToTest = mPercentRelativeLayout.findViewById(R.id.child_right); final int childWidth = childToTest.getWidth(); final int childHeight = childToTest.getHeight(); assertFuzzyEquals("Child height as 50% of the container", 0.4f * mContainerHeight, childHeight); assertFuzzyEquals("Child aspect ratio of 5%", 0.05f * childHeight, childWidth); final int childRight = childToTest.getRight(); final int childBottom = childToTest.getBottom(); assertFuzzyEquals("Child right margin as 5% of the container", 0.05f * mContainerWidth, mContainerWidth - childRight); assertFuzzyEquals("Child bottom margin as 20% of the container", 0.2f * mContainerHeight, mContainerHeight - childBottom); } @Test public void testCenterChild() { final View childToTest = mPercentRelativeLayout.findViewById(R.id.child_center); final int childLeft = childToTest.getLeft(); final int childTop = childToTest.getTop(); final int childRight = childToTest.getRight(); final int childBottom = childToTest.getBottom(); final View leftChild = mPercentRelativeLayout.findViewById(R.id.child_left); assertFuzzyEquals("Child left margin as 10% of the container", leftChild.getRight() + 0.1f * mContainerWidth, childLeft); final View topChild = mPercentRelativeLayout.findViewById(R.id.child_top); assertFuzzyEquals("Child top margin as 10% of the container", topChild.getBottom() + 0.1f * mContainerHeight, childTop); final View rightChild = mPercentRelativeLayout.findViewById(R.id.child_right); assertFuzzyEquals("Child right margin as 10% of the container", rightChild.getLeft() - 0.1f * mContainerWidth, childRight); final View bottomChild = mPercentRelativeLayout.findViewById(R.id.child_bottom); assertFuzzyEquals("Child bottom margin as 10% of the container", bottomChild.getTop() - 0.1f * mContainerHeight, childBottom); } }