Test cases for measured width/height in ShadowView
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowView.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowView.java
index ce8cee1..555be36 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowView.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowView.java
@@ -395,9 +395,14 @@
Method onMeasureMethod = realView.getClass().getDeclaredMethod("onMeasure", Integer.TYPE, Integer.TYPE );
onMeasureMethod.setAccessible(true);
onMeasureMethod.invoke( realView, widthMeasureSpec, heightMeasureSpec );
- } catch ( NoSuchMethodException e ) { throw new RuntimeException(e); }
- catch ( IllegalAccessException e ) { throw new RuntimeException(e); }
- catch ( InvocationTargetException e ) { throw new RuntimeException(e); }
+ } catch ( NoSuchMethodException e ) {
+ // use default shadow implementation
+ onMeasure(widthMeasureSpec, heightMeasureSpec);
+ } catch ( IllegalAccessException e ) {
+ throw new RuntimeException(e);
+ } catch ( InvocationTargetException e ) {
+ throw new RuntimeException(e);
+ }
}
@Implementation
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ViewTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ViewTest.java
index 6a1a800..1f1b1e1 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/ViewTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/ViewTest.java
@@ -4,10 +4,8 @@
import android.content.Context;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
+import android.view.*;
+import android.view.View.MeasureSpec;
import android.view.animation.Animation;
import android.widget.LinearLayout;
import com.xtremelabs.robolectric.R;
@@ -334,6 +332,44 @@
shadowOf(view1).finishedAnimation();
assertTrue(view1.onAnimationEndWasCalled);
}
+
+ @Test
+ public void test_measuredDimension() {
+ // View does not provide its own onMeasure implementation
+ TestView view1 = new TestView(new Activity());
+
+ assertThat(view1.getHeight(), equalTo(0));
+ assertThat(view1.getWidth(), equalTo(0));
+ assertThat(view1.getMeasuredHeight(), equalTo(0));
+ assertThat(view1.getMeasuredWidth(), equalTo(0));
+
+ view1.measure( MeasureSpec.makeMeasureSpec(150, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(300, MeasureSpec.AT_MOST) );
+
+ assertThat(view1.getHeight(), equalTo(0));
+ assertThat(view1.getWidth(), equalTo(0));
+ assertThat(view1.getMeasuredHeight(), equalTo(300));
+ assertThat(view1.getMeasuredWidth(), equalTo(150));
+ }
+
+ @Test
+ public void test_measuredDimensionCustomView() {
+ // View provides its own onMeasure implementation
+ TestView2 view2 = new TestView2(new Activity());
+
+ assertThat(view2.getHeight(), equalTo(0));
+ assertThat(view2.getWidth(), equalTo(0));
+ assertThat(view2.getMeasuredHeight(), equalTo(0));
+ assertThat(view2.getMeasuredWidth(), equalTo(0));
+
+ view2.measure( MeasureSpec.makeMeasureSpec(1000, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST) );
+
+ assertThat(view2.getHeight(), equalTo(0));
+ assertThat(view2.getWidth(), equalTo(0));
+ assertThat(view2.getMeasuredHeight(), equalTo(400));
+ assertThat(view2.getMeasuredWidth(), equalTo(800));
+ }
private static class TestAnimation extends Animation {
}
@@ -365,4 +401,15 @@
onAnimationEndWasCalled = true;
}
}
+
+ private static class TestView2 extends View {
+ public TestView2(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(800, 400);
+ }
+ }
}