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