blob: 946f25b2d9c9fb2460d5d4b9c65ef3c5bfe070c5 [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import android.view.ViewTreeObserver;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static com.xtremelabs.robolectric.Robolectric.shadowOf;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(WithTestDefaultsRunner.class)
public class ViewTreeObserverTest {
private ViewTreeObserver viewTreeObserver;
private TestOnGlobalLayoutListener listener1;
private TestOnGlobalLayoutListener listener2;
@Before
public void setUp() throws Exception {
viewTreeObserver = Robolectric.Reflection.newInstanceOf(ViewTreeObserver.class);
listener1 = new TestOnGlobalLayoutListener();
listener2 = new TestOnGlobalLayoutListener();
}
@Test
public void shouldRecordMultipleOnGlobalLayoutListenersAndFireThemWhenAsked() throws Exception {
viewTreeObserver.addOnGlobalLayoutListener(listener1);
viewTreeObserver.addOnGlobalLayoutListener(listener2);
shadowOf(viewTreeObserver).fireOnGlobalLayoutListeners();
assertTrue(listener1.onGlobalLayoutWasCalled);
assertTrue(listener2.onGlobalLayoutWasCalled);
listener1.reset();
listener2.reset();
viewTreeObserver.removeGlobalOnLayoutListener(listener1);
shadowOf(viewTreeObserver).fireOnGlobalLayoutListeners();
assertFalse(listener1.onGlobalLayoutWasCalled);
assertTrue(listener2.onGlobalLayoutWasCalled);
listener1.reset();
listener2.reset();
viewTreeObserver.removeGlobalOnLayoutListener(listener2);
shadowOf(viewTreeObserver).fireOnGlobalLayoutListeners();
assertFalse(listener1.onGlobalLayoutWasCalled);
assertFalse(listener2.onGlobalLayoutWasCalled);
}
@Test
public void getGlobalLayoutListeners_shouldReturnTheListeners() throws Exception {
viewTreeObserver.addOnGlobalLayoutListener(listener1);
viewTreeObserver.addOnGlobalLayoutListener(listener2);
List<ViewTreeObserver.OnGlobalLayoutListener> listeners = shadowOf(viewTreeObserver).getOnGlobalLayoutListeners();
assertTrue(listeners.size() == 2);
assertTrue(listeners.contains(listener1));
assertTrue(listeners.contains(listener2));
}
private static class TestOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
boolean onGlobalLayoutWasCalled;
@Override
public void onGlobalLayout() {
onGlobalLayoutWasCalled = true;
}
public void reset() {
onGlobalLayoutWasCalled = false;
}
}
}