Hi,
I have a custom ViewGroup which I'd like to test with Robolectric. However, it doesn't seem as if the onLayout or onMeasure methods are being called. I can call measure() manually, but unless I call it with MeasureSpec.EXACTLY, it will be called with width and height specifications set to 0. Is this by design, or am I doing something wrong?
Here's my test (minus import statements). The custom view, FinnArrayView, is a simple ListView-like adapter based ViewGroup.
@RunWith(RobolectricTestRunner.class)
@Config(manifest = "finn_app/AndroidManifest.xml")
public class FinnArrayViewTest {
private LinearLayout container;
private Activity activity;
@Before
public void setUp() throws Exception {
final ActivityController<Activity> activityController = Robolectric.buildActivity(Activity.class).create();
activity = activityController.get();
activity.setTheme(R.style.Theme_FINN_NoActionBar);
container = (LinearLayout) LayoutInflater.from(activity).inflate(R.layout.test_finnarrayview, null);
}
@Test
public void testFinnArrayView() {
FinnArrayView finnArrayView = (FinnArrayView) container.findViewById(R.id.test_arrayview);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity, R.layout.test_textview);
adapter.add(String.valueOf("testitem #1"));
adapter.add(String.valueOf("testitem #2"));
finnArrayView.setAdapter(adapter);
finnArrayView.measure(View.MeasureSpec.makeMeasureSpec(400, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(400, View.MeasureSpec.EXACTLY));
Assert.assertEquals(400, finnArrayView.getMeasuredHeight());
finnArrayView.measure(View.MeasureSpec.makeMeasureSpec(400, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(400, View.MeasureSpec.UNSPECIFIED));
Assert.assertEquals(400, finnArrayView.getMeasuredHeight());
}
}