blob: 4ef786bfbb93e227de15ea778446edf9b9623cf6 [file] [log] [blame]
// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview.test;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
import android.view.View.MeasureSpec;
import org.chromium.android_webview.AwLayoutSizer;
import org.chromium.base.test.util.Feature;
public class AwLayoutSizerTest extends InstrumentationTestCase {
static class LayoutSizerDelegate implements AwLayoutSizer.Delegate {
public int requestLayoutCallCount;
public boolean setMeasuredDimensionCalled;
public int measuredWidth;
public int measuredHeight;
public int fixedLayoutWidth;
public int fixedLayoutHeight;
public boolean heightWrapContent;
@Override
public void requestLayout() {
requestLayoutCallCount++;
}
@Override
public void setMeasuredDimension(int measuredWidth, int measuredHeight) {
setMeasuredDimensionCalled = true;
this.measuredWidth = measuredWidth;
this.measuredHeight = measuredHeight;
}
@Override
public void setFixedLayoutSize(int widthDip, int heightDip) {
fixedLayoutWidth = widthDip;
fixedLayoutHeight = heightDip;
}
@Override
public boolean isLayoutParamsHeightWrapContent() {
return heightWrapContent;
}
}
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 float INITIAL_PAGE_SCALE = 1.0f;
private static final double DIP_SCALE = 1.0;
@SmallTest
@Feature({"AndroidWebView"})
public void testCanQueryContentSize() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
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));
assertTrue(delegate.setMeasuredDimensionCalled);
assertEquals(contentWidth, delegate.measuredWidth & View.MEASURED_SIZE_MASK);
assertEquals(contentHeight, delegate.measuredHeight & View.MEASURED_SIZE_MASK);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testContentSizeChangeRequestsLayout() {
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);
final int requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onContentSizeChanged(SECOND_CONTENT_WIDTH, SECOND_CONTENT_WIDTH);
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testContentSizeChangeDoesNotRequestLayoutIfMeasuredExcatly() {
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(SECOND_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT);
assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount);
}
@SmallTest
@Feature({"AndroidWebView"})
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);
}
@SmallTest
@Feature({"AndroidWebView"})
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);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testContentHeightGrowthRequestsLayoutInAtMostSizeMode() {
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);
int requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onContentSizeChanged(SMALLER_CONTENT_SIZE, AT_MOST_MEASURE_SIZE - 1);
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount);
// Test that crossing the AT_MOST_MEASURE_SIZE threshold results in a requestLayout.
requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onContentSizeChanged(SMALLER_CONTENT_SIZE, AT_MOST_MEASURE_SIZE + 1);
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testContentHeightShrinksAfterAtMostSize() {
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);
int requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onContentSizeChanged(TOO_LARGE_CONTENT_SIZE, TOO_LARGE_CONTENT_SIZE + 1);
layoutSizer.onContentSizeChanged(TOO_LARGE_CONTENT_SIZE, TOO_LARGE_CONTENT_SIZE);
assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount);
requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onContentSizeChanged(SMALLER_CONTENT_SIZE, SMALLER_CONTENT_SIZE);
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount);
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);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testScaleChangeRequestsLayout() {
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(AT_MOST_MEASURE_SIZE, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
final int requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE + 0.5f);
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount);
}
@SmallTest
@Feature({"AndroidWebView"})
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(INITIAL_PAGE_SCALE);
assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testScaleChangeGrowsTillAtMostSize() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
layoutSizer.setDelegate(delegate);
layoutSizer.setDIPScale(DIP_SCALE);
final float tooLargePageScale = 3.00f;
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);
}
@SmallTest
@Feature({"AndroidWebView"})
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);
}
@SmallTest
@Feature({"AndroidWebView"})
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);
}
@SmallTest
@Feature({"AndroidWebView"})
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);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testViewportWithExactMeasureSpec() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
layoutSizer.setDelegate(delegate);
final float dipScale = 2.0f;
final int measuredWidth = 800;
final int measuredHeight = 400;
layoutSizer.setDIPScale(dipScale);
layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, FIRST_CONTENT_HEIGHT);
layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE);
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(measuredHeight, MeasureSpec.EXACTLY));
assertEquals(measuredWidth, delegate.measuredWidth & View.MEASURED_SIZE_MASK);
assertEquals(measuredHeight, delegate.measuredHeight & View.MEASURED_SIZE_MASK);
layoutSizer.onSizeChanged(measuredWidth, measuredHeight, 0, 0);
assertEquals(0, delegate.fixedLayoutWidth);
assertEquals(0, delegate.fixedLayoutHeight);
layoutSizer.onPageScaleChanged(2.0f);
assertEquals(0, delegate.fixedLayoutWidth);
assertEquals(0, delegate.fixedLayoutHeight);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testViewportDipSizeOverrideRounding() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
layoutSizer.setDelegate(delegate);
final float dipScale = 0.666f;
int contentWidth = 9;
int contentHeight = 6;
layoutSizer.setDIPScale(dipScale);
layoutSizer.onContentSizeChanged(contentWidth, contentHeight);
layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE);
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
assertTrue(delegate.setMeasuredDimensionCalled);
int measuredWidth = delegate.measuredWidth & View.MEASURED_SIZE_MASK;
int measuredHeight = delegate.measuredHeight & View.MEASURED_SIZE_MASK;
assertFalse((int) Math.ceil(measuredWidth / dipScale) == contentWidth);
assertFalse((int) Math.ceil(measuredHeight / dipScale) == contentHeight);
layoutSizer.onSizeChanged(measuredWidth, measuredHeight, 0, 0);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testViewportWithUnspecifiedMeasureSpec() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
layoutSizer.setDelegate(delegate);
final float dipScale = 1.5f;
final int pageScale = 2;
final int dipAndPageScale = (int) (dipScale * pageScale);
int contentWidth = 800;
int contentHeight = 400;
int atMostWidth = contentWidth * dipAndPageScale;
int atMostHeight = contentHeight * dipAndPageScale;
layoutSizer.setDIPScale(dipScale);
layoutSizer.onContentSizeChanged(contentWidth, contentHeight);
layoutSizer.onPageScaleChanged(pageScale);
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
assertTrue(delegate.setMeasuredDimensionCalled);
int measuredWidth = delegate.measuredWidth & View.MEASURED_SIZE_MASK;
int measuredHeight = delegate.measuredHeight & View.MEASURED_SIZE_MASK;
int sizeWidth = measuredWidth;
int sizeHeight = measuredHeight;
layoutSizer.onSizeChanged(sizeWidth, sizeHeight, 0, 0);
assertEquals(contentWidth, delegate.fixedLayoutWidth);
assertEquals(AwLayoutSizer.FIXED_LAYOUT_HEIGHT, delegate.fixedLayoutHeight);
sizeWidth = measuredWidth * 2;
sizeHeight = measuredHeight * 2;
layoutSizer.onSizeChanged(sizeWidth, sizeHeight, 0, 0);
assertEquals(sizeWidth / dipAndPageScale, delegate.fixedLayoutWidth);
assertEquals(AwLayoutSizer.FIXED_LAYOUT_HEIGHT, delegate.fixedLayoutHeight);
sizeWidth = measuredWidth / 2;
sizeHeight = measuredHeight / 2;
layoutSizer.onSizeChanged(sizeWidth, sizeHeight, 0, 0);
assertEquals(sizeWidth / dipAndPageScale, delegate.fixedLayoutWidth);
assertEquals(AwLayoutSizer.FIXED_LAYOUT_HEIGHT, delegate.fixedLayoutHeight);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testViewportWithAtMostMeasureSpec() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
delegate.heightWrapContent = true;
layoutSizer.setDelegate(delegate);
final float dipScale = 1.5f;
final int pageScale = 2;
final int dipAndPageScale = (int) (dipScale * pageScale);
int contentWidth = 800;
int contentHeight = 400;
int contentWidthPix = contentWidth * dipAndPageScale;
int contentHeightPix = contentHeight * dipAndPageScale;
layoutSizer.setDIPScale(dipScale);
layoutSizer.onContentSizeChanged(contentWidth, contentHeight);
layoutSizer.onPageScaleChanged(pageScale);
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(contentWidthPix, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(contentHeightPix * 2, MeasureSpec.AT_MOST));
assertTrue(delegate.setMeasuredDimensionCalled);
int measuredWidth = delegate.measuredWidth & View.MEASURED_SIZE_MASK;
int measuredHeight = delegate.measuredHeight & View.MEASURED_SIZE_MASK;
int sizeWidth = measuredWidth;
int sizeHeight = measuredHeight;
layoutSizer.onSizeChanged(sizeWidth, sizeHeight, 0, 0);
assertEquals(contentWidth, delegate.fixedLayoutWidth);
assertEquals(AwLayoutSizer.FIXED_LAYOUT_HEIGHT, delegate.fixedLayoutHeight);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testFixedLayoutViewportGoesBackToZeroWithWrapContentMeasureSpec() {
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(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
layoutSizer.onSizeChanged((int) (FIRST_CONTENT_WIDTH * DIP_SCALE),
(int) (FIRST_CONTENT_HEIGHT * DIP_SCALE), 0, 0);
assertTrue(delegate.fixedLayoutWidth != 0);
assertEquals(AwLayoutSizer.FIXED_LAYOUT_HEIGHT, delegate.fixedLayoutHeight);
layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, AwLayoutSizer.FIXED_LAYOUT_HEIGHT);
layoutSizer.onSizeChanged((int) (FIRST_CONTENT_WIDTH * DIP_SCALE),
(int) (FIRST_CONTENT_HEIGHT * DIP_SCALE), 0, 0);
assertTrue(delegate.fixedLayoutWidth != 0);
assertEquals(0, delegate.fixedLayoutHeight);
layoutSizer.onContentSizeChanged(FIRST_CONTENT_WIDTH, 0);
layoutSizer.onSizeChanged((int) (FIRST_CONTENT_WIDTH * DIP_SCALE),
(int) (FIRST_CONTENT_HEIGHT * DIP_SCALE), 0, 0);
assertTrue(delegate.fixedLayoutWidth != 0);
assertEquals(0, delegate.fixedLayoutHeight);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testFixedLayoutSizeUpdatedOnPageScaleChangeItNoLayoutRequest() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
delegate.heightWrapContent = true;
layoutSizer.setDelegate(delegate);
layoutSizer.setDIPScale(DIP_SCALE);
layoutSizer.onContentSizeChanged(TOO_LARGE_CONTENT_SIZE, TOO_LARGE_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));
layoutSizer.onSizeChanged(AT_MOST_MEASURE_SIZE, AT_MOST_MEASURE_SIZE, 0, 0);
assertTrue(delegate.fixedLayoutWidth != 0);
final int fixedLayoutWidth = delegate.fixedLayoutWidth;
final int requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE * 2f);
assertEquals(requestLayoutCallCount, delegate.requestLayoutCallCount);
assertEquals(fixedLayoutWidth / 2, delegate.fixedLayoutWidth);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testFixedLayoutSizeUpdatedIfNoSizeChangeAfterLayoutRequested() {
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(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
layoutSizer.onSizeChanged((int) (FIRST_CONTENT_WIDTH * DIP_SCALE),
(int) (FIRST_CONTENT_HEIGHT * DIP_SCALE), 0, 0);
assertTrue(delegate.fixedLayoutWidth != 0);
final int fixedLayoutWidth = delegate.fixedLayoutWidth;
final int requestLayoutCallCount = delegate.requestLayoutCallCount;
layoutSizer.onPageScaleChanged(INITIAL_PAGE_SCALE * 0.5f);
assertEquals(requestLayoutCallCount + 1, delegate.requestLayoutCallCount);
assertEquals(fixedLayoutWidth, delegate.fixedLayoutWidth);
// onMeasure and onLayoutChange should always be called as a result of the AwLayoutSizer
// calling Delegate.requestLayout.
layoutSizer.onMeasure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
layoutSizer.onLayoutChange();
assertEquals(fixedLayoutWidth * 2, delegate.fixedLayoutWidth);
}
@SmallTest
@Feature({"AndroidWebView"})
public void testFixedLayoutSizeDoesNotDependOnMeasureSpec() {
AwLayoutSizer layoutSizer = new AwLayoutSizer();
LayoutSizerDelegate delegate = new LayoutSizerDelegate();
delegate.heightWrapContent = false;
layoutSizer.setDelegate(delegate);
layoutSizer.setDIPScale(DIP_SCALE);
layoutSizer.onContentSizeChanged(TOO_LARGE_CONTENT_SIZE, TOO_LARGE_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));
layoutSizer.onSizeChanged(AT_MOST_MEASURE_SIZE, AT_MOST_MEASURE_SIZE, 0, 0);
assertEquals(0, delegate.fixedLayoutWidth);
assertEquals(0, delegate.fixedLayoutHeight);
}
}