1aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar/* 2aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * 4aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * you may not use this file except in compliance with the License. 6aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * You may obtain a copy of the License at 7aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * 8aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * 10aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * See the License for the specific language governing permissions and 14aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar * limitations under the License. 15aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar */ 16aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 17aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarpackage android.support.v7.widget.test; 18aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 19aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.app.Activity; 20aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.os.Debug; 21aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.support.v7.widget.GridLayout; 22aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.test.ActivityInstrumentationTestCase2; 2316670557859a9342b7d147d593b022ea4cc39786Fabrice Di Meglioimport android.support.v7.gridlayout.R; 24aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.test.UiThreadTest; 25aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.view.Gravity; 26aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.view.View; 27aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.view.ViewGroup; 28aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarimport android.widget.Toast; 29aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 30a8bda6f79fa68d0072377059893f50f2b1acacd0Chris Banes/** 31a8bda6f79fa68d0072377059893f50f2b1acacd0Chris Banes * @hide 32a8bda6f79fa68d0072377059893f50f2b1acacd0Chris Banes */ 33aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyarpublic class GridLayoutTest extends ActivityInstrumentationTestCase2 { 34aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 35aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public GridLayoutTest() { 36aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar super("android.support.v7.widget.test", GridLayoutTestActivity.class); 37aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 38aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 39aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar private void setContentView(final int layoutId) throws Throwable { 40aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar final Activity activity = getActivity(); 41aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar runTestOnUiThread(new Runnable() { 42aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar @Override 43aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public void run() { 44aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar activity.setContentView(layoutId); 45aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 46aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar }); 47aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 48aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 49aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public void testUseDefaultMargin() throws Throwable { 50aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar setContentView(R.layout.use_default_margin_test); 51aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar getInstrumentation().waitForIdleSync(); 52aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int left = getActivity().findViewById(R.id.leftView).getWidth(); 53aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int right = getActivity().findViewById(R.id.rightView).getWidth(); 54aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int total = getActivity().findViewById(R.id.gridView).getWidth(); 55aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("left item should get some width", left > 0); 56aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("right item should get some width", right > 0); 57aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("test sanity", total > 0); 58aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("left view should be almost two times right view " + left + " vs " + right, 59aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar Math.abs(right * 2 - left) < 2); 60aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 61aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 62aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public void testImplicitFillHorizontal() throws Throwable { 63aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar setContentView(R.layout.fill_horizontal_test); 64aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar getInstrumentation().waitForIdleSync(); 65aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int left = getActivity().findViewById(R.id.leftView).getWidth(); 66aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int right = getActivity().findViewById(R.id.rightView).getWidth(); 67aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int total = getActivity().findViewById(R.id.gridView).getWidth(); 68aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("left item should get some width", left > 0); 69aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("right item should get some width", right > 0); 70aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("test sanity", total > 0); 71aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("left view should be almost two times right view " + left + " vs " + right, 72aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar Math.abs(right * 2 - left) < 2); 73aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 74aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 75aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public void testMakeViewGone() throws Throwable { 76aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar setContentView(R.layout.make_view_gone_test); 77aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar getInstrumentation().waitForIdleSync(); 78aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int left = getActivity().findViewById(R.id.leftView).getWidth(); 79aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar final int right = getActivity().findViewById(R.id.rightView).getWidth(); 80aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int total = getActivity().findViewById(R.id.gridView).getWidth(); 81aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("left item should get some width", left > 0); 82aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("right item should get some width", right > 0); 83aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("test sanity", total > 0); 84aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar // set second view to gone 85aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar runTestOnUiThread(new Runnable() { 86aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar @Override 87aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public void run() { 88aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar final View rightView = getActivity().findViewById(R.id.rightView); 89aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar GridLayout.LayoutParams lp = (GridLayout.LayoutParams) rightView.getLayoutParams(); 90aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar lp.setGravity(Gravity.NO_GRAVITY); 91aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar rightView.setVisibility(View.GONE); 92aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 93aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar }); 94aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar getInstrumentation().waitForIdleSync(); 95aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar left = getActivity().findViewById(R.id.leftView).getWidth(); 96aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertEquals(total, left); 97aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 98aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar public void testWrapContentInOtherDirection() throws Throwable { 99aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar setContentView(R.layout.height_wrap_content_test); 100aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar getInstrumentation().waitForIdleSync(); 101aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int left = getActivity().findViewById(R.id.leftView).getHeight(); 102aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar final int right = getActivity().findViewById(R.id.rightView).getHeight(); 103aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar final View gridView = getActivity().findViewById(R.id.gridView); 104aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar int total = gridView.getHeight(); 105aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("test sanity", left > 0); 106aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("test sanity", right > 0); 107aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("test sanity", total > 0); 108aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("right should be taller than left", right > left); 109aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar assertTrue("total height should be smaller than what it could be", 110aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar total < ((ViewGroup)gridView.getParent()).getHeight()); 111aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar 112aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar } 113aba8d47bf2f26c657a83ab3fbd24f531df5b0510Yigit Boyar} 114