Robolectric not running onLayout or onMeasure, measureSpec always 0

204 views
Skip to first unread message

Haakon Gjersvik Eriksen

unread,
Mar 19, 2014, 11:10:13 AM3/19/14
to robol...@googlegroups.com

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());
    }

}

Reply all
Reply to author
Forward
0 new messages