blob: 1d73cbacca63089c3cce5901b53bbd6ba4edbb02 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.leanback.widget;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import androidx.leanback.R;
import androidx.leanback.app.HeadersFragment;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@MediumTest
@RunWith(AndroidJUnit4.class)
public class PresenterTest {
private Context mContext;
@Before
public void setup() throws Exception {
mContext = InstrumentationRegistry.getTargetContext();
}
@Test
public void testZoomFactors() throws Throwable {
new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_SMALL);
new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_MEDIUM);
new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE);
new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_XSMALL);
try {
new ListRowPresenter(100);
fail("Should have thrown exception");
} catch (IllegalArgumentException exception) {
}
}
private void testHeaderPresenter(RowHeaderPresenter p) {
int expectedVisibility;
Presenter.ViewHolder vh = p.onCreateViewHolder(new FrameLayout(mContext));
p.onBindViewHolder(vh, null);
expectedVisibility = p.isNullItemVisibilityGone() ? View.GONE : View.VISIBLE;
assertTrue("Header visibility",
vh.view.getVisibility() == expectedVisibility);
p.onBindViewHolder(vh, new Row(null));
assertTrue("Header visibility",
vh.view.getVisibility() == expectedVisibility);
p.onBindViewHolder(vh, new Row(new HeaderItem("")));
assertTrue("Header visibility",
vh.view.getVisibility() == View.VISIBLE);
}
@Test
public void testHeaderPresenter() throws Throwable {
HeadersFragment hf = new HeadersFragment();
PresenterSelector ps = hf.getPresenterSelector();
Presenter p = ps.getPresenter(new Row());
assertTrue("Row header instance",
p instanceof RowHeaderPresenter);
assertFalse("isNullItemVisibilityGone",
((RowHeaderPresenter) p).isNullItemVisibilityGone());
testHeaderPresenter((RowHeaderPresenter) p);
p = ps.getPresenter(new SectionRow("Section Name"));
assertTrue("Row header instance",
p instanceof RowHeaderPresenter);
assertFalse("isNullItemVisibilityGone",
((RowHeaderPresenter) p).isNullItemVisibilityGone());
testHeaderPresenter((RowHeaderPresenter) p);
p = ps.getPresenter(new DividerRow());
assertTrue("Row header instance",
p instanceof DividerPresenter);
ListRowPresenter lrp = new ListRowPresenter();
assertTrue("Row header instance",
lrp.getHeaderPresenter() instanceof RowHeaderPresenter);
RowHeaderPresenter rhp = (RowHeaderPresenter) lrp.getHeaderPresenter();
assertTrue("isNullItemVisibilityGone",
rhp.isNullItemVisibilityGone());
testHeaderPresenter(rhp);
}
@Test
public void testRowHeaderPresenter() {
RowHeaderPresenter p = new RowHeaderPresenter();
p.setNullItemVisibilityGone(true);
RowHeaderPresenter.ViewHolder vh = (RowHeaderPresenter.ViewHolder)
p.onCreateViewHolder(new FrameLayout(mContext));
p.onBindViewHolder(vh, null);
assertEquals("Header visibility", View.GONE, vh.view.getVisibility());
p.onBindViewHolder(vh, new Row(null));
assertEquals("Header visibility", View.GONE, vh.view.getVisibility());
p.onBindViewHolder(vh, new Row(new HeaderItem("")));
assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility());
assertEquals("Header Description visibility", View.GONE,
vh.mDescriptionView.getVisibility());
HeaderItem item = new HeaderItem("");
item.setDescription("description");
p.onBindViewHolder(vh, new Row(item));
assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility());
assertEquals("Header Description visibility", View.VISIBLE,
vh.mDescriptionView.getVisibility());
}
@Test
public void testSingleRowHeaderPresenter() {
RowHeaderPresenter p = new RowHeaderPresenter();
RowHeaderPresenter.ViewHolder vh = new RowHeaderPresenter.ViewHolder(
new RowHeaderView(mContext));
HeaderItem item = new HeaderItem("");
p.onBindViewHolder(vh, new Row(item));
assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility());
}
@Test
public void testPlaybackControlsRowPresenter() {
Context context = new ContextThemeWrapper(mContext, R.style.Theme_Leanback);
Presenter detailsPresenter = new AbstractDetailsDescriptionPresenter() {
@Override
protected void onBindDescription(ViewHolder vh, Object item) {
vh.getTitle().setText("The quick brown fox jumped over the lazy dog");
vh.getSubtitle().setText("Subtitle");
}
};
PlaybackControlsRowPresenter controlsRowPresenter = new PlaybackControlsRowPresenter(
detailsPresenter);
PlaybackControlsRowPresenter.ViewHolder vh = (PlaybackControlsRowPresenter.ViewHolder)
controlsRowPresenter.onCreateViewHolder(new FrameLayout(context));
Object item = new Object();
PlaybackControlsRow controlsRow = new PlaybackControlsRow(item);
controlsRowPresenter.onBindRowViewHolder(vh, controlsRow);
assertEquals("Controls card right panel layout height",
vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height,
LayoutParams.WRAP_CONTENT);
assertEquals("Description dock layout height",
vh.view.findViewById(R.id.description_dock).getLayoutParams().height,
LayoutParams.WRAP_CONTENT);
controlsRowPresenter.onUnbindRowViewHolder(vh);
controlsRow.setImageBitmap(
context, Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888));
controlsRowPresenter.onBindRowViewHolder(vh, controlsRow);
AssertHelper.assertGreaterThan("Controls card right panel layout height",
vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 0);
assertEquals("Description dock layout height",
vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 0);
controlsRowPresenter.onUnbindRowViewHolder(vh);
}
}