package org.robolectric.shadows; import android.R; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.ProgressBar; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import org.robolectric.annotation.Config; import org.robolectric.android.controller.ActivityController; import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1; import static android.os.Build.VERSION_CODES.M; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowWindowTest { @Test public void getFlag_shouldReturnWindowFlags() throws Exception { Activity activity = Robolectric.buildActivity(Activity.class).create().get(); Window window = activity.getWindow(); assertThat(shadowOf(window).getFlag(WindowManager.LayoutParams.FLAG_FULLSCREEN)).isFalse(); window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); assertThat(shadowOf(window).getFlag(WindowManager.LayoutParams.FLAG_FULLSCREEN)).isTrue(); window.setFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON, WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); assertThat(shadowOf(window).getFlag(WindowManager.LayoutParams.FLAG_FULLSCREEN)).isTrue(); } @Test public void getTitle_shouldReturnWindowTitle() throws Exception { Activity activity = Robolectric.buildActivity(Activity.class).create().get(); Window window = activity.getWindow(); window.setTitle("My Window Title"); assertThat(shadowOf(window).getTitle()).isEqualTo("My Window Title"); } @Test public void getBackgroundDrawable_returnsSetDrawable() throws Exception { Activity activity = Robolectric.buildActivity(Activity.class).create().get(); Window window = activity.getWindow(); ShadowWindow shadowWindow = shadowOf(window); assertThat(shadowWindow.getBackgroundDrawable()).isNull(); window.setBackgroundDrawableResource(R.drawable.btn_star); assertThat(shadowOf(shadowWindow.getBackgroundDrawable()).createdFromResId).isEqualTo(R.drawable.btn_star); } @Test public void getSoftInputMode_returnsSoftInputMode() throws Exception { TestActivity activity = Robolectric.buildActivity(TestActivity.class).create().get(); Window window = activity.getWindow(); ShadowWindow shadowWindow = shadowOf(window); window.setSoftInputMode(7); assertThat(shadowWindow.getSoftInputMode()).isEqualTo(7); } @Test public void getProgressBar_returnsTheProgressBar() { Activity activity = Robolectric.buildActivity(TestActivity.class).create().get(); ProgressBar progress = shadowOf(activity.getWindow()).getProgressBar(); assertThat(progress.getVisibility()).isEqualTo(View.INVISIBLE); activity.setProgressBarVisibility(true); assertThat(progress.getVisibility()).isEqualTo(View.VISIBLE); activity.setProgressBarVisibility(false); assertThat(progress.getVisibility()).isEqualTo(View.GONE); } @Test public void getIndeterminateProgressBar_returnsTheIndeterminateProgressBar() { ActivityController<TestActivity> testActivityActivityController = Robolectric.buildActivity(TestActivity.class); TestActivity activity = testActivityActivityController.get(); activity.requestFeature = Window.FEATURE_INDETERMINATE_PROGRESS; testActivityActivityController.create(); ProgressBar indeterminate = shadowOf(activity.getWindow()).getIndeterminateProgressBar(); assertThat(indeterminate.getVisibility()).isEqualTo(View.INVISIBLE); activity.setProgressBarIndeterminateVisibility(true); assertThat(indeterminate.getVisibility()).isEqualTo(View.VISIBLE); activity.setProgressBarIndeterminateVisibility(false); assertThat(indeterminate.getVisibility()).isEqualTo(View.GONE); } @Test @Config(maxSdk = LOLLIPOP_MR1) public void forPreM_create_shouldCreateImplPhoneWindow() throws Exception { assertThat(ShadowWindow.create(RuntimeEnvironment.application).getClass().getName()) .isEqualTo("com.android.internal.policy.impl.PhoneWindow"); } @Test @Config(minSdk = M) public void forM_create_shouldCreatePhoneWindow() throws Exception { assertThat(ShadowWindow.create(RuntimeEnvironment.application).getClass().getName()) .isEqualTo("com.android.internal.policy.PhoneWindow"); } public static class TestActivity extends Activity { public int requestFeature = Window.FEATURE_PROGRESS; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.Theme_Holo_Light); getWindow().requestFeature(requestFeature); setContentView(new LinearLayout(this)); getActionBar().setIcon(R.drawable.ic_lock_power_off); } } }