blob: 30fd8efbcffac702e49d38989ae50d84330455d5 [file] [log] [blame]
/*
* Copyright (C) 2017 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 android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.text.InputType;
import android.view.ContextThemeWrapper;
import android.widget.FrameLayout;
import androidx.leanback.test.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class GuidedActionStylistTest {
private static final int DEFAULT_MAX_LINES = 0;
// Simulate Android Context
private Context mContext;
// The GuidedActionStylist for testing purpose
private GuidedActionsStylist mGuidedActionsStylist;
// Mocked view holder, required by the parameter of onBindViewHolder method
private GuidedActionsStylist.ViewHolder mViewHolder;
// Mocked action object, required by the parameter of onBindViewHolder method
private GuidedAction mGuidedAction;
@Before
public void setUp() throws Exception {
// Get context from instrumentation registry firstly
mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
// Then apply the theme on the context
mContext = new ContextThemeWrapper(mContext,
R.style.Widget_Leanback_GuidedSubActionsListStyle);
// Prepare GuidedActionStylist object
mGuidedActionsStylist = new GuidedActionsStylist();
InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
// Create view holder object programmatically
mViewHolder = mGuidedActionsStylist.onCreateViewHolder(new FrameLayout(mContext));
}
});
}
/**
* Test cases when multilineDescription is set to true
*/
@Test
public void testWhenMultiLineDescriptionSetToTrue() {
// Create a action and set multilineDescription to true
mGuidedAction = new GuidedAction.Builder(mContext).multilineDescription(true).build();
// Execute onBindViewHolder method so we can monitor the internal state
mGuidedActionsStylist.onBindViewHolder(mViewHolder, mGuidedAction);
// double check if multilineDescription option has been enabled
assertTrue(mGuidedAction.hasMultilineDescription());
// currently the title view and description view using the same flag. So when we execute
// multilineDescription(true) method, the multi line mode should be enabled both for title
// view and description view.
// Test cases should be updated when we change this behavior
assertTrue((mViewHolder.mTitleView.getInputType() & InputType.TYPE_TEXT_FLAG_MULTI_LINE)
== InputType.TYPE_TEXT_FLAG_MULTI_LINE);
assertTrue((mViewHolder.mDescriptionView.getInputType()
& InputType.TYPE_TEXT_FLAG_MULTI_LINE) == InputType.TYPE_TEXT_FLAG_MULTI_LINE);
}
/**
* Test cases when multilineDescription is set to false
*/
@Test
public void testWhenMultiLineDescriptionSetToFalse() {
// Create a action and set multilineDescription to false
mGuidedAction = new GuidedAction.Builder(mContext).multilineDescription(false).build();
// Execute onBindViewHolder method so we can monitor the internal state
mGuidedActionsStylist.onBindViewHolder(mViewHolder, mGuidedAction);
// double check if multilineDescription option has been disabled
assertFalse(mGuidedAction.hasMultilineDescription());
// currently the title view and description view using the same flag. So when we execute
// multilineDescription(true) method, the multi line mode should be disabled both for title
// view and description view.
// Test cases should be updated when we change this behavior
assertEquals(mViewHolder.mTitleView.getMaxLines(), DEFAULT_MAX_LINES);
assertEquals(mViewHolder.mDescriptionView.getMaxLines(), DEFAULT_MAX_LINES);
}
}