1 package com.xtremelabs.robolectric.shadows; 2 3 import android.app.Activity; 4 import android.app.TabActivity; 5 import android.view.View; 6 import android.widget.TabHost; 7 import android.widget.TabHost.TabContentFactory; 8 import android.widget.TabWidget; 9 import android.widget.TextView; 10 import com.xtremelabs.robolectric.R; 11 import com.xtremelabs.robolectric.WithTestDefaultsRunner; 12 import org.junit.Test; 13 import org.junit.runner.RunWith; 14 15 import static com.xtremelabs.robolectric.Robolectric.shadowOf; 16 import static org.hamcrest.CoreMatchers.instanceOf; 17 import static org.hamcrest.CoreMatchers.is; 18 import static org.hamcrest.core.IsEqual.equalTo; 19 import static org.junit.Assert.assertNull; 20 import static org.junit.Assert.assertThat; 21 22 @RunWith(WithTestDefaultsRunner.class) 23 public class TabHostTest { 24 25 @Test newTabSpec_shouldMakeATabSpec()26 public void newTabSpec_shouldMakeATabSpec() throws Exception { 27 TabHost tabHost = new TabHost(null); 28 TabHost.TabSpec tabSpec = tabHost.newTabSpec("Foo"); 29 assertThat(tabSpec.getTag(), equalTo("Foo")); 30 } 31 32 @Test shouldAddTabsToLayoutWhenAddedToHost()33 public void shouldAddTabsToLayoutWhenAddedToHost() { 34 TabHost tabHost = new TabHost(null); 35 36 View fooView = new View(null); 37 TabHost.TabSpec foo = tabHost.newTabSpec("Foo").setIndicator(fooView); 38 39 View barView = new View(null); 40 TabHost.TabSpec bar = tabHost.newTabSpec("Bar").setIndicator(barView); 41 42 tabHost.addTab(foo); 43 tabHost.addTab(bar); 44 45 assertThat(tabHost.getChildAt(0), is(fooView)); 46 assertThat(tabHost.getChildAt(1), is(barView)); 47 } 48 49 @Test shouldReturnTabSpecsByTag()50 public void shouldReturnTabSpecsByTag() throws Exception { 51 TabHost tabHost = new TabHost(null); 52 TabHost.TabSpec foo = tabHost.newTabSpec("Foo"); 53 TabHost.TabSpec bar = tabHost.newTabSpec("Bar"); 54 TabHost.TabSpec baz = tabHost.newTabSpec("Baz"); 55 56 tabHost.addTab(foo); 57 tabHost.addTab(bar); 58 tabHost.addTab(baz); 59 60 assertThat(shadowOf(tabHost).getSpecByTag("Bar"), is(bar)); 61 assertThat(shadowOf(tabHost).getSpecByTag("Baz"), is(baz)); 62 assertNull(shadowOf(tabHost).getSpecByTag("Whammie")); 63 } 64 65 @Test shouldFireTheTabChangeListenerWhenCurrentTabIsSet()66 public void shouldFireTheTabChangeListenerWhenCurrentTabIsSet() throws Exception { 67 TabHost tabHost = new TabHost(null); 68 69 TabHost.TabSpec foo = tabHost.newTabSpec("Foo"); 70 TabHost.TabSpec bar = tabHost.newTabSpec("Bar"); 71 TabHost.TabSpec baz = tabHost.newTabSpec("Baz"); 72 73 tabHost.addTab(foo); 74 tabHost.addTab(bar); 75 tabHost.addTab(baz); 76 77 TestOnTabChangeListener listener = new TestOnTabChangeListener(); 78 tabHost.setOnTabChangedListener(listener); 79 80 tabHost.setCurrentTab(2); 81 82 assertThat(listener.tag, equalTo("Baz")); 83 } 84 85 @Test shouldFireTheTabChangeListenerWhenTheCurrentTabIsSetByTag()86 public void shouldFireTheTabChangeListenerWhenTheCurrentTabIsSetByTag() throws Exception { 87 TabHost tabHost = new TabHost(null); 88 89 TabHost.TabSpec foo = tabHost.newTabSpec("Foo"); 90 TabHost.TabSpec bar = tabHost.newTabSpec("Bar"); 91 TabHost.TabSpec baz = tabHost.newTabSpec("Baz"); 92 93 tabHost.addTab(foo); 94 tabHost.addTab(bar); 95 tabHost.addTab(baz); 96 97 TestOnTabChangeListener listener = new TestOnTabChangeListener(); 98 tabHost.setOnTabChangedListener(listener); 99 100 tabHost.setCurrentTabByTag("Bar"); 101 102 assertThat(listener.tag, equalTo("Bar")); 103 } 104 105 @Test shouldRetrieveTheCurrentViewFromTabContentFactory()106 public void shouldRetrieveTheCurrentViewFromTabContentFactory() { 107 TabHost tabHost = new TabHost(null); 108 109 TabHost.TabSpec foo = tabHost.newTabSpec("Foo").setContent( 110 new TabContentFactory() { 111 public View createTabContent(String tag) { 112 TextView tv = new TextView(null); 113 tv.setText("The Text of " + tag); 114 return tv; 115 } 116 }); 117 118 tabHost.addTab(foo); 119 tabHost.setCurrentTabByTag("Foo"); 120 TextView textView = (TextView) tabHost.getCurrentView(); 121 122 assertThat(textView.getText().toString(), equalTo("The Text of Foo")); 123 } 124 @Test shouldRetrieveTheCurrentViewFromViewId()125 public void shouldRetrieveTheCurrentViewFromViewId() { 126 Activity a = new Activity(); 127 a.setContentView(com.xtremelabs.robolectric.R.layout.main); 128 TabHost tabHost = new TabHost(a); 129 TabHost.TabSpec foo = tabHost.newTabSpec("Foo") 130 .setContent(com.xtremelabs.robolectric.R.id.title); 131 132 tabHost.addTab(foo); 133 tabHost.setCurrentTabByTag("Foo"); 134 TextView textView = (TextView) tabHost.getCurrentView(); 135 136 assertThat(textView.getText().toString(), equalTo("Main Layout")); 137 } 138 139 private static class TestOnTabChangeListener implements TabHost.OnTabChangeListener { 140 private String tag; 141 142 @Override onTabChanged(String tag)143 public void onTabChanged(String tag) { 144 this.tag = tag; 145 } 146 } 147 148 @Test canGetCurrentTabTag()149 public void canGetCurrentTabTag() throws Exception { 150 TabHost tabHost = new TabHost(null); 151 152 TabHost.TabSpec foo = tabHost.newTabSpec("Foo"); 153 TabHost.TabSpec bar = tabHost.newTabSpec("Bar"); 154 TabHost.TabSpec baz = tabHost.newTabSpec("Baz"); 155 156 tabHost.addTab(foo); 157 tabHost.addTab(bar); 158 tabHost.addTab(baz); 159 160 tabHost.setCurrentTabByTag("Bar"); 161 162 assertThat(tabHost.getCurrentTabTag(), equalTo("Bar")); 163 } 164 165 @Test canGetCurrentTab()166 public void canGetCurrentTab() throws Exception { 167 TabHost tabHost = new TabHost(null); 168 169 TabHost.TabSpec foo = tabHost.newTabSpec("Foo"); 170 TabHost.TabSpec bar = tabHost.newTabSpec("Bar"); 171 TabHost.TabSpec baz = tabHost.newTabSpec("Baz"); 172 173 tabHost.addTab(foo); 174 tabHost.addTab(bar); 175 tabHost.addTab(baz); 176 assertThat(shadowOf(tabHost).getCurrentTabSpec(), equalTo(foo)); 177 assertThat(tabHost.getCurrentTab(), equalTo(0)); 178 tabHost.setCurrentTabByTag("Bar"); 179 assertThat(tabHost.getCurrentTab(), equalTo(1)); 180 assertThat(shadowOf(tabHost).getCurrentTabSpec(), equalTo(bar)); 181 tabHost.setCurrentTabByTag("Foo"); 182 assertThat(tabHost.getCurrentTab(), equalTo(0)); 183 assertThat(shadowOf(tabHost).getCurrentTabSpec(), equalTo(foo)); 184 tabHost.setCurrentTabByTag("Baz"); 185 assertThat(tabHost.getCurrentTab(), equalTo(2)); 186 assertThat(shadowOf(tabHost).getCurrentTabSpec(), equalTo(baz)); 187 } 188 189 @Test setCurrentTabByTagShouldAcceptNullAsParameter()190 public void setCurrentTabByTagShouldAcceptNullAsParameter() throws Exception { 191 TabHost tabHost = new TabHost(null); 192 TabHost.TabSpec foo = tabHost.newTabSpec("Foo"); 193 tabHost.addTab(foo); 194 195 tabHost.setCurrentTabByTag(null); 196 assertThat(tabHost.getCurrentTabTag(), equalTo("Foo")); 197 } 198 199 @Test shouldGetTabWidget()200 public void shouldGetTabWidget() throws Exception { 201 TabActivity activity = new TabActivity(); 202 activity.setContentView(R.layout.tab_activity); 203 TabHost host = new TabHost(activity); 204 assertThat(host.getTabWidget(), instanceOf(TabWidget.class)); 205 } 206 } 207