1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package android.support.v17.leanback.widget; 17 18import static org.junit.Assert.assertEquals; 19import static org.junit.Assert.assertFalse; 20import static org.junit.Assert.assertTrue; 21import static org.junit.Assert.fail; 22 23import android.content.Context; 24import android.graphics.Bitmap; 25import android.support.test.InstrumentationRegistry; 26import android.support.test.filters.MediumTest; 27import android.support.test.runner.AndroidJUnit4; 28import android.support.v17.leanback.R; 29import android.support.v17.leanback.app.HeadersFragment; 30import android.view.ContextThemeWrapper; 31import android.view.View; 32import android.view.ViewGroup.LayoutParams; 33import android.widget.FrameLayout; 34 35import org.junit.Before; 36import org.junit.Test; 37import org.junit.runner.RunWith; 38 39@MediumTest 40@RunWith(AndroidJUnit4.class) 41public class PresenterTest { 42 private Context mContext; 43 44 @Before 45 public void setup() throws Exception { 46 mContext = InstrumentationRegistry.getTargetContext(); 47 } 48 49 @Test 50 public void testZoomFactors() throws Throwable { 51 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_SMALL); 52 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_MEDIUM); 53 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE); 54 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_XSMALL); 55 try { 56 new ListRowPresenter(100); 57 fail("Should have thrown exception"); 58 } catch (IllegalArgumentException exception) { 59 } 60 } 61 62 private void testHeaderPresenter(RowHeaderPresenter p) { 63 int expectedVisibility; 64 Presenter.ViewHolder vh = p.onCreateViewHolder(new FrameLayout(mContext)); 65 p.onBindViewHolder(vh, null); 66 expectedVisibility = p.isNullItemVisibilityGone() ? View.GONE : View.VISIBLE; 67 assertTrue("Header visibility", 68 vh.view.getVisibility() == expectedVisibility); 69 p.onBindViewHolder(vh, new Row(null)); 70 assertTrue("Header visibility", 71 vh.view.getVisibility() == expectedVisibility); 72 p.onBindViewHolder(vh, new Row(new HeaderItem(""))); 73 assertTrue("Header visibility", 74 vh.view.getVisibility() == View.VISIBLE); 75 } 76 77 @Test 78 public void testHeaderPresenter() throws Throwable { 79 HeadersFragment hf = new HeadersFragment(); 80 PresenterSelector ps = hf.getPresenterSelector(); 81 82 Presenter p = ps.getPresenter(new Row()); 83 assertTrue("Row header instance", 84 p instanceof RowHeaderPresenter); 85 assertFalse("isNullItemVisibilityGone", 86 ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 87 testHeaderPresenter((RowHeaderPresenter) p); 88 89 p = ps.getPresenter(new SectionRow("Section Name")); 90 assertTrue("Row header instance", 91 p instanceof RowHeaderPresenter); 92 assertFalse("isNullItemVisibilityGone", 93 ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 94 testHeaderPresenter((RowHeaderPresenter) p); 95 96 p = ps.getPresenter(new DividerRow()); 97 assertTrue("Row header instance", 98 p instanceof DividerPresenter); 99 100 ListRowPresenter lrp = new ListRowPresenter(); 101 assertTrue("Row header instance", 102 lrp.getHeaderPresenter() instanceof RowHeaderPresenter); 103 RowHeaderPresenter rhp = (RowHeaderPresenter) lrp.getHeaderPresenter(); 104 assertTrue("isNullItemVisibilityGone", 105 rhp.isNullItemVisibilityGone()); 106 testHeaderPresenter(rhp); 107 } 108 109 @Test 110 public void testRowHeaderPresenter() { 111 RowHeaderPresenter p = new RowHeaderPresenter(); 112 p.setNullItemVisibilityGone(true); 113 RowHeaderPresenter.ViewHolder vh = (RowHeaderPresenter.ViewHolder) 114 p.onCreateViewHolder(new FrameLayout(mContext)); 115 p.onBindViewHolder(vh, null); 116 assertEquals("Header visibility", View.GONE, vh.view.getVisibility()); 117 p.onBindViewHolder(vh, new Row(null)); 118 assertEquals("Header visibility", View.GONE, vh.view.getVisibility()); 119 120 p.onBindViewHolder(vh, new Row(new HeaderItem(""))); 121 assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility()); 122 assertEquals("Header Description visibility", View.GONE, 123 vh.mDescriptionView.getVisibility()); 124 125 HeaderItem item = new HeaderItem(""); 126 item.setDescription("description"); 127 p.onBindViewHolder(vh, new Row(item)); 128 assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility()); 129 assertEquals("Header Description visibility", View.VISIBLE, 130 vh.mDescriptionView.getVisibility()); 131 } 132 133 @Test 134 public void testSingleRowHeaderPresenter() { 135 RowHeaderPresenter p = new RowHeaderPresenter(); 136 RowHeaderPresenter.ViewHolder vh = new RowHeaderPresenter.ViewHolder( 137 new RowHeaderView(mContext)); 138 HeaderItem item = new HeaderItem(""); 139 p.onBindViewHolder(vh, new Row(item)); 140 assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility()); 141 } 142 143 @Test 144 public void testPlaybackControlsRowPresenter() { 145 Context context = new ContextThemeWrapper(mContext, R.style.Theme_Leanback); 146 Presenter detailsPresenter = new AbstractDetailsDescriptionPresenter() { 147 @Override 148 protected void onBindDescription(ViewHolder vh, Object item) { 149 vh.getTitle().setText("The quick brown fox jumped over the lazy dog"); 150 vh.getSubtitle().setText("Subtitle"); 151 } 152 }; 153 PlaybackControlsRowPresenter controlsRowPresenter = new PlaybackControlsRowPresenter( 154 detailsPresenter); 155 PlaybackControlsRowPresenter.ViewHolder vh = (PlaybackControlsRowPresenter.ViewHolder) 156 controlsRowPresenter.onCreateViewHolder(new FrameLayout(context)); 157 158 Object item = new Object(); 159 PlaybackControlsRow controlsRow = new PlaybackControlsRow(item); 160 161 controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 162 assertEquals("Controls card right panel layout height", 163 vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 164 LayoutParams.WRAP_CONTENT); 165 assertEquals("Description dock layout height", 166 vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 167 LayoutParams.WRAP_CONTENT); 168 controlsRowPresenter.onUnbindRowViewHolder(vh); 169 170 controlsRow.setImageBitmap( 171 context, Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)); 172 controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 173 AssertHelper.assertGreaterThan("Controls card right panel layout height", 174 vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 0); 175 assertEquals("Description dock layout height", 176 vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 0); 177 controlsRowPresenter.onUnbindRowViewHolder(vh); 178 } 179} 180