Index: android_webview/javatests/src/org/chromium/android_webview/test/AwLayoutSizerTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwLayoutSizerTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwLayoutSizerTest.java |
index 687e93c799090c9c59bda93a5f1e65ad7282692c..88fd73387b1789e0c36cc0f832a6f40ee927dce2 100644 |
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwLayoutSizerTest.java |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwLayoutSizerTest.java |
@@ -31,18 +31,29 @@ public class AwLayoutSizerTest extends InstrumentationTestCase { |
} |
} |
- private static final int firstContentWidth = 101; |
- private static final int firstContentHeight = 389; |
- private static final int secondContentWidth = 103; |
- private static final int secondContentHeight = 397; |
+ private static final int FIRST_CONTENT_WIDTH = 101; |
+ private static final int FIRST_CONTENT_HEIGHT = 389; |
+ private static final int SECOND_CONTENT_WIDTH = 103; |
+ private static final int SECOND_CONTENT_HEIGHT = 397; |
+ |
+ private static final int SMALLER_CONTENT_SIZE = 25; |
+ private static final int AT_MOST_MEASURE_SIZE = 50; |
+ private static final int TOO_LARGE_CONTENT_SIZE = 100; |
+ |
+ private static final double INITIAL_PAGE_SCALE = 1.0; |
+ private static final double DIP_SCALE = 1.0; |
public void testCanQueryContentSize() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
- AwLayoutSizer layoutSizer = new AwLayoutSizer(delegate); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
final int contentWidth = 101; |
final int contentHeight = 389; |
layoutSizer.onContentSizeChanged(contentWidth, contentHeight); |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), |
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); |
@@ -52,47 +63,167 @@ public class AwLayoutSizerTest extends InstrumentationTestCase { |
} |
public void testContentSizeChangeRequestsLayout() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
- AwLayoutSizer layoutSizer = new AwLayoutSizer(delegate); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
- layoutSizer.onContentSizeChanged(firstContentWidth, firstContentHeight); |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
- layoutSizer.onContentSizeChanged(secondContentWidth, secondContentWidth); |
+ layoutSizer.onContentSizeChanged(SECOND_CONTENT_WIDTH, SECOND_CONTENT_WIDTH); |
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount); |
} |
public void testContentSizeChangeDoesNotRequestLayoutIfMeasuredExcatly() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
- AwLayoutSizer layoutSizer = new AwLayoutSizer(delegate); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
- layoutSizer.onContentSizeChanged(firstContentWidth, firstContentHeight); |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(50, MeasureSpec.EXACTLY), |
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); |
final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
- layoutSizer.onContentSizeChanged(secondContentWidth, firstContentHeight); |
+ layoutSizer.onContentSizeChanged(SECOND_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ |
+ assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount); |
+ } |
+ |
+ public void testDuplicateContentSizeChangeDoesNotRequestLayout() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
+ layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(50, MeasureSpec.EXACTLY), |
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); |
+ final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount); |
} |
public void testContentHeightGrowsTillAtMostSize() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
+ layoutSizer.onContentSizeChanged(SMALLER_CONTENT_SIZE, SMALLER_CONTENT_SIZE); |
+ layoutSizer.onMeasure( |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST), |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST)); |
+ assertEquals(AT_MOST_MEASURE_SIZE, delegate.measuredWidth); |
+ assertEquals(SMALLER_CONTENT_SIZE, delegate.measuredHeight); |
+ |
+ layoutSizer.onContentSizeChanged(TOO_LARGE_CONTENT_SIZE, TOO_LARGE_CONTENT_SIZE); |
+ layoutSizer.onMeasure( |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST), |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST)); |
+ assertEquals(AT_MOST_MEASURE_SIZE, delegate.measuredWidth & View.MEASURED_SIZE_MASK); |
+ assertEquals(AT_MOST_MEASURE_SIZE, delegate.measuredHeight & View.MEASURED_SIZE_MASK); |
+ } |
+ |
+ public void testScaleChangeRequestsLayout() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
- AwLayoutSizer layoutSizer = new AwLayoutSizer(delegate); |
- |
- final int smallerContentSize = 25; |
- final int atMostMeasureSize = 50; |
- final int tooLargeContentSize = 100; |
- |
- layoutSizer.onContentSizeChanged(smallerContentSize, smallerContentSize); |
- layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(atMostMeasureSize, MeasureSpec.AT_MOST), |
- MeasureSpec.makeMeasureSpec(atMostMeasureSize, MeasureSpec.AT_MOST)); |
- assertEquals(atMostMeasureSize, delegate.measuredWidth); |
- assertEquals(smallerContentSize, delegate.measuredHeight); |
- |
- layoutSizer.onContentSizeChanged(tooLargeContentSize, tooLargeContentSize); |
- layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(atMostMeasureSize, MeasureSpec.AT_MOST), |
- MeasureSpec.makeMeasureSpec(atMostMeasureSize, MeasureSpec.AT_MOST)); |
- assertEquals(atMostMeasureSize, delegate.measuredWidth & View.MEASURED_SIZE_MASK); |
- assertEquals(atMostMeasureSize, delegate.measuredHeight & View.MEASURED_SIZE_MASK); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ layoutSizer.onMeasure( |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.EXACTLY), |
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); |
+ final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE + 0.5); |
+ |
+ assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount); |
+ } |
+ |
+ public void testDuplicateScaleChangeDoesNotRequestLayout() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(50, MeasureSpec.EXACTLY), |
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); |
+ final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
+ layoutSizer.onPageScaleChanged(DIP_SCALE); |
+ |
+ assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount); |
+ } |
+ |
+ public void testScaleChangeGrowsTillAtMostSize() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ final double tooLargePageScale = 3.00; |
+ |
+ layoutSizer.onContentSizeChanged(SMALLER_CONTENT_SIZE, SMALLER_CONTENT_SIZE); |
+ layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE); |
+ layoutSizer.onMeasure( |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST), |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST)); |
+ assertEquals(AT_MOST_MEASURE_SIZE, delegate.measuredWidth); |
+ assertEquals(SMALLER_CONTENT_SIZE, delegate.measuredHeight); |
+ |
+ layoutSizer.onPageScaleChanged(tooLargePageScale); |
+ layoutSizer.onMeasure( |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST), |
+ MeasureSpec.makeMeasureSpec(AT_MOST_MEASURE_SIZE, MeasureSpec.AT_MOST)); |
+ assertEquals(AT_MOST_MEASURE_SIZE, delegate.measuredWidth & View.MEASURED_SIZE_MASK); |
+ assertEquals(AT_MOST_MEASURE_SIZE, delegate.measuredHeight & View.MEASURED_SIZE_MASK); |
+ } |
+ |
+ public void testFreezeAndUnfreezeDoesntCauseLayout() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
+ layoutSizer.freezeLayoutRequests(); |
+ layoutSizer.unfreezeLayoutRequests(); |
+ assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount); |
+ } |
+ |
+ public void testFreezeInhibitsLayoutRequest() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ layoutSizer.freezeLayoutRequests(); |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
+ layoutSizer.onContentSizeChanged(SECOND_CONTENT_WIDTH, SECOND_CONTENT_WIDTH); |
+ assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount); |
+ } |
+ |
+ public void testUnfreezeIssuesLayoutRequest() { |
+ AwLayoutSizer layoutSizer = new AwLayoutSizer(); |
+ LayoutSizerDelegate delegate = new LayoutSizerDelegate(); |
+ layoutSizer.setDelegate(delegate); |
+ layoutSizer.setDIPScale(DIP_SCALE); |
+ |
+ layoutSizer.freezeLayoutRequests(); |
+ layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT); |
+ final int requestLayoutCallCount = delegate.requestLayoutCallCount; |
+ layoutSizer.onContentSizeChanged(SECOND_CONTENT_WIDTH, SECOND_CONTENT_WIDTH); |
+ assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount); |
+ layoutSizer.unfreezeLayoutRequests(); |
+ assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount); |
} |
} |