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