1package com.xtremelabs.robolectric.shadows;
2
3import android.content.Context;
4import android.view.View;
5import android.view.ViewStub;
6import android.widget.LinearLayout;
7import com.xtremelabs.robolectric.R;
8import com.xtremelabs.robolectric.Robolectric;
9import com.xtremelabs.robolectric.WithTestDefaultsRunner;
10import com.xtremelabs.robolectric.tester.android.util.TestAttributeSet;
11import org.junit.Before;
12import org.junit.Test;
13import org.junit.runner.RunWith;
14
15import static org.junit.Assert.*;
16
17@RunWith(WithTestDefaultsRunner.class)
18public class ViewStubTest {
19    private Context ctxt;
20
21    @Before public void setUp() throws Exception {
22        ctxt = Robolectric.application;
23    }
24
25    @Test
26    public void inflate_shouldReplaceOriginalWithLayout() throws Exception {
27        ViewStub viewStub = new ViewStub(ctxt);
28        int stubId = 12345;
29        int inflatedId = 12346;
30
31        viewStub.setId(stubId);
32        viewStub.setInflatedId(inflatedId);
33        viewStub.setLayoutResource(R.layout.media);
34
35        LinearLayout root = new LinearLayout(ctxt);
36        root.addView(new View(ctxt));
37        root.addView(viewStub);
38        root.addView(new View(ctxt));
39
40        View inflatedView = viewStub.inflate();
41        assertNotNull(inflatedView);
42        assertSame(inflatedView, root.findViewById(inflatedId));
43
44        assertNull(root.findViewById(stubId));
45
46        assertEquals(1, root.indexOfChild(inflatedView));
47        assertEquals(3, root.getChildCount());
48    }
49
50    @Test
51    public void shouldApplyAttributes() throws Exception {
52        ViewStub viewStub = new ViewStub(ctxt,
53                new TestAttributeSet()
54                        .put("android:inflatedId", "@+id/include_id")
55                        .put("android:layout", "@layout/media")
56        );
57
58        assertEquals(R.id.include_id, viewStub.getInflatedId());
59        assertEquals(R.layout.media, viewStub.getLayoutResource());
60    }
61}
62