• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static com.google.common.truth.Truth.assertThat;
4 import static org.robolectric.Shadows.shadowOf;
5 import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
6 
7 import android.view.View;
8 import android.widget.AdapterView;
9 import android.widget.TextView;
10 import androidx.test.ext.junit.runners.AndroidJUnit4;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 
17 @RunWith(AndroidJUnit4.class)
18 public abstract class AdapterViewBehavior {
19   private AdapterView<ShadowCountingAdapter> adapterView;
20 
21   @Before
setUp()22   public void setUp() throws Exception {
23     shadowMainLooper().pause();
24     adapterView = createAdapterView();
25   }
26 
createAdapterView()27   public abstract AdapterView<ShadowCountingAdapter> createAdapterView();
28 
29   @Test
shouldIgnoreSetSelectionCallsWithInvalidPosition()30   public void shouldIgnoreSetSelectionCallsWithInvalidPosition() {
31     final List<String> transcript = new ArrayList<>();
32 
33     adapterView.setOnItemSelectedListener(
34         new AdapterView.OnItemSelectedListener() {
35           @Override
36           public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
37             transcript.add("onItemSelected fired");
38           }
39 
40           @Override
41           public void onNothingSelected(AdapterView<?> parent) {}
42         });
43 
44     shadowMainLooper().idle();
45     assertThat(transcript).isEmpty();
46     adapterView.setSelection(AdapterView.INVALID_POSITION);
47     shadowMainLooper().idle();
48     assertThat(transcript).isEmpty();
49   }
50 
51   @Test
testSetAdapter_shouldCauseViewsToBeRenderedAsynchronously()52   public void testSetAdapter_shouldCauseViewsToBeRenderedAsynchronously() throws Exception {
53     adapterView.setAdapter(new ShadowCountingAdapter(2));
54 
55     assertThat(adapterView.getCount()).isEqualTo(2);
56     assertThat(adapterView.getChildCount()).isEqualTo(0);
57 
58     shadowOf(adapterView).populateItems();
59     assertThat(adapterView.getChildCount()).isEqualTo(2);
60     assertThat(((TextView) adapterView.getChildAt(0)).getText().toString()).isEqualTo("Item 0");
61     assertThat(((TextView) adapterView.getChildAt(1)).getText().toString()).isEqualTo("Item 1");
62   }
63 
64   @Test
testSetEmptyView_shouldHideAdapterViewIfAdapterIsNull()65   public void testSetEmptyView_shouldHideAdapterViewIfAdapterIsNull() throws Exception {
66     adapterView.setAdapter(null);
67 
68     View emptyView = new View(adapterView.getContext());
69     adapterView.setEmptyView(emptyView);
70 
71     assertThat(adapterView.getVisibility()).isEqualTo(View.GONE);
72     assertThat(emptyView.getVisibility()).isEqualTo(View.VISIBLE);
73   }
74 
75   @Test
testSetEmptyView_shouldHideAdapterViewIfAdapterViewIsEmpty()76   public void testSetEmptyView_shouldHideAdapterViewIfAdapterViewIsEmpty() throws Exception {
77     adapterView.setAdapter(new ShadowCountingAdapter(0));
78 
79     View emptyView = new View(adapterView.getContext());
80     adapterView.setEmptyView(emptyView);
81 
82     assertThat(adapterView.getVisibility()).isEqualTo(View.GONE);
83     assertThat(emptyView.getVisibility()).isEqualTo(View.VISIBLE);
84   }
85 
86   @Test
testSetEmptyView_shouldHideEmptyViewIfAdapterViewIsNotEmpty()87   public void testSetEmptyView_shouldHideEmptyViewIfAdapterViewIsNotEmpty() throws Exception {
88     adapterView.setAdapter(new ShadowCountingAdapter(1));
89 
90     View emptyView = new View(adapterView.getContext());
91     adapterView.setEmptyView(emptyView);
92 
93     assertThat(adapterView.getVisibility()).isEqualTo(View.VISIBLE);
94     assertThat(emptyView.getVisibility()).isEqualTo(View.GONE);
95   }
96 
97   @Test
testSetEmptyView_shouldHideEmptyViewWhenAdapterGetsNewItem()98   public void testSetEmptyView_shouldHideEmptyViewWhenAdapterGetsNewItem() throws Exception {
99     ShadowCountingAdapter adapter = new ShadowCountingAdapter(0);
100     adapterView.setAdapter(adapter);
101 
102     View emptyView = new View(adapterView.getContext());
103     adapterView.setEmptyView(emptyView);
104 
105     assertThat(adapterView.getVisibility()).isEqualTo(View.GONE);
106     assertThat(emptyView.getVisibility()).isEqualTo(View.VISIBLE);
107 
108     adapter.setCount(1);
109 
110     shadowMainLooper().idle();
111 
112     assertThat(adapterView.getVisibility()).isEqualTo(View.VISIBLE);
113     assertThat(emptyView.getVisibility()).isEqualTo(View.GONE);
114   }
115 
116   @Test
testSetEmptyView_shouldHideAdapterViewWhenAdapterBecomesEmpty()117   public void testSetEmptyView_shouldHideAdapterViewWhenAdapterBecomesEmpty() throws Exception {
118     ShadowCountingAdapter adapter = new ShadowCountingAdapter(1);
119     adapterView.setAdapter(adapter);
120 
121     View emptyView = new View(adapterView.getContext());
122     adapterView.setEmptyView(emptyView);
123 
124     assertThat(adapterView.getVisibility()).isEqualTo(View.VISIBLE);
125     assertThat(emptyView.getVisibility()).isEqualTo(View.GONE);
126 
127     adapter.setCount(0);
128 
129     shadowMainLooper().idle();
130 
131     assertThat(adapterView.getVisibility()).isEqualTo(View.GONE);
132     assertThat(emptyView.getVisibility()).isEqualTo(View.VISIBLE);
133   }
134 }
135