184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam/*
284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * Copyright (C) 2016 The Android Open Source Project
384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam *
484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * Licensed under the Apache License, Version 2.0 (the "License");
584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * you may not use this file except in compliance with the License.
684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * You may obtain a copy of the License at
784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam *
884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam *      http://www.apache.org/licenses/LICENSE-2.0
984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam *
1084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * Unless required by applicable law or agreed to in writing, software
1184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * distributed under the License is distributed on an "AS IS" BASIS,
1284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * See the License for the specific language governing permissions and
1484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam * limitations under the License.
1584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam */
1684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
1784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lampackage com.android.setupwizardlib.test;
1884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
1984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.content.Context;
2084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.graphics.drawable.Drawable;
2184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.graphics.drawable.InsetDrawable;
2284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.os.Build;
2384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.support.v7.widget.RecyclerView;
2484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.test.InstrumentationTestCase;
2584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.test.suitebuilder.annotation.SmallTest;
2684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.view.ContextThemeWrapper;
2784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.view.LayoutInflater;
2884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.view.View;
2984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport android.view.ViewGroup;
3084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
3184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lamimport com.android.setupwizardlib.GlifPreferenceLayout;
3284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
3384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lampublic class GlifPreferenceLayoutTest extends InstrumentationTestCase {
3484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
3584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    private Context mContext;
3684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
3784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    @Override
3884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    protected void setUp() throws Exception {
3984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        super.setUp();
4084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        mContext = new ContextThemeWrapper(getInstrumentation().getContext(),
4184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam                R.style.SuwThemeGlif_Light);
4284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
4384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
4484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    @SmallTest
4584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public void testDefaultTemplate() {
4684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        GlifPreferenceLayout layout = new TestLayout(mContext);
4784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertPreferenceTemplateInflated(layout);
4884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
4984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
5084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    @SmallTest
5184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public void testGetRecyclerView() {
5284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        GlifPreferenceLayout layout = new TestLayout(mContext);
5384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertPreferenceTemplateInflated(layout);
5484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertNotNull("getRecyclerView should not be null", layout.getRecyclerView());
5584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
5684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
5784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    @SmallTest
5884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public void testOnCreateRecyclerView() {
5984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        GlifPreferenceLayout layout = new TestLayout(mContext);
6084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertPreferenceTemplateInflated(layout);
6184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        final RecyclerView recyclerView = layout.onCreateRecyclerView(LayoutInflater.from(mContext),
6284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam                layout, null /* savedInstanceState */);
6384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertNotNull("RecyclerView created should not be null", recyclerView);
6484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
6584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
6684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    @SmallTest
6784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public void testDividerInset() {
6884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        GlifPreferenceLayout layout = new TestLayout(mContext);
6984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
7084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam            layout.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
7184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        }
7284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertPreferenceTemplateInflated(layout);
7384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
7484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        layout.addView(layout.onCreateRecyclerView(LayoutInflater.from(mContext), layout,
7584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam                null /* savedInstanceState */));
7684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
7784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        layout.setDividerInset(10);
7884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertEquals("Divider inset should be 10", 10, layout.getDividerInset());
7984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
8084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        final Drawable divider = layout.getDivider();
8184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertTrue("Divider should be instance of InsetDrawable", divider instanceof InsetDrawable);
8284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
8384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
8484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    private void assertPreferenceTemplateInflated(GlifPreferenceLayout layout) {
8584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        View contentContainer = layout.findViewById(R.id.suw_layout_content);
8684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        assertTrue("@id/suw_layout_content should be a ViewGroup",
8784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam                contentContainer instanceof ViewGroup);
8884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
8984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        if (layout instanceof TestLayout) {
9084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam            assertNotNull("Header text view should not be null",
9184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam                    ((TestLayout) layout).findManagedViewById(R.id.suw_layout_title));
9284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam            assertNotNull("Icon view should not be null",
9384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam                    ((TestLayout) layout).findManagedViewById(R.id.suw_layout_icon));
9484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        }
9584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
9684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
9784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    // Make some methods public for testing
9884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public static class TestLayout extends GlifPreferenceLayout {
9984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
10084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        public TestLayout(Context context) {
10184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam            super(context);
10284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        }
10384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
10484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        @Override
10584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        public View findManagedViewById(int id) {
10684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam            return super.findManagedViewById(id);
10784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        }
10884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
10984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam}
110