1 package org.robolectric.shadows; 2 3 import static com.google.common.truth.Truth.assertThat; 4 import static org.robolectric.Robolectric.buildActivity; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.view.SurfaceHolder; 9 import android.view.SurfaceView; 10 import android.view.Window; 11 import androidx.test.ext.junit.runners.AndroidJUnit4; 12 import org.junit.Test; 13 import org.junit.runner.RunWith; 14 import org.robolectric.Shadows; 15 16 @RunWith(AndroidJUnit4.class) 17 public class ShadowSurfaceViewTest { 18 19 private SurfaceHolder.Callback callback1 = new TestCallback(); 20 private SurfaceHolder.Callback callback2 = new TestCallback(); 21 22 private SurfaceView view = new SurfaceView(buildActivity(Activity.class).create().get()); 23 private SurfaceHolder surfaceHolder = view.getHolder(); 24 private ShadowSurfaceView shadowSurfaceView = (ShadowSurfaceView) Shadows.shadowOf(view); 25 private ShadowSurfaceView.FakeSurfaceHolder fakeSurfaceHolder = 26 shadowSurfaceView.getFakeSurfaceHolder(); 27 28 @Test 29 public void addCallback() { 30 assertThat(fakeSurfaceHolder.getCallbacks()).isEmpty(); 31 32 surfaceHolder.addCallback(callback1); 33 34 assertThat(fakeSurfaceHolder.getCallbacks()).contains(callback1); 35 36 surfaceHolder.addCallback(callback2); 37 38 assertThat(fakeSurfaceHolder.getCallbacks()).contains(callback1); 39 assertThat(fakeSurfaceHolder.getCallbacks()).contains(callback2); 40 } 41 42 @Test 43 public void removeCallback() { 44 surfaceHolder.addCallback(callback1); 45 surfaceHolder.addCallback(callback2); 46 47 assertThat(fakeSurfaceHolder.getCallbacks().size()).isEqualTo(2); 48 49 surfaceHolder.removeCallback(callback1); 50 51 assertThat(fakeSurfaceHolder.getCallbacks()).doesNotContain(callback1); 52 assertThat(fakeSurfaceHolder.getCallbacks()).contains(callback2); 53 } 54 55 @Test 56 public void canCreateASurfaceView_attachedToAWindowWithActionBar() throws Exception { 57 TestActivity testActivity = buildActivity(TestActivity.class).create().start().resume().visible().get(); 58 assertThat(testActivity).isNotNull(); 59 } 60 61 private static class TestCallback implements SurfaceHolder.Callback { 62 @Override 63 public void surfaceCreated(SurfaceHolder holder) { 64 } 65 66 @Override 67 public void surfaceDestroyed(SurfaceHolder holder) { 68 } 69 70 @Override 71 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 72 } 73 } 74 75 private static class TestActivity extends Activity { 76 @Override 77 protected void onCreate(Bundle savedInstanceState) { 78 super.onCreate(savedInstanceState); 79 requestWindowFeature(Window.FEATURE_ACTION_BAR); 80 setContentView(new SurfaceView(this)); 81 } 82 } 83 } 84