blob: 343228fcc31c7dc018124373e0bc78d18e269494 [file] [log] [blame]
package android.uirendering.cts.testclasses;
import android.graphics.Color;
import android.graphics.Outline;
import android.graphics.Rect;
import android.uirendering.cts.bitmapverifiers.BitmapVerifier;
import android.uirendering.cts.bitmapverifiers.RectVerifier;
import android.uirendering.cts.testclasses.view.UnclippedBlueView;
import android.uirendering.cts.testinfrastructure.ActivityTestBase;
import android.uirendering.cts.testinfrastructure.ViewInitializer;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import com.android.cts.uirendering.R;
/**
* This tests view clipping by modifying properties of blue_padded_layout, and validating
* the resulting rect of content.
*
* Since the layout is blue on a white background, this is always done with a RectVerifier.
*/
public class ViewClippingTests extends ActivityTestBase {
final Rect FULL_RECT = new Rect(0, 0, 90, 90);
final Rect BOUNDS_RECT = new Rect(0, 0, 80, 80);
final Rect PADDED_RECT = new Rect(15, 16, 63, 62);
final Rect OUTLINE_RECT = new Rect(1, 2, 78, 79);
final Rect CLIP_BOUNDS_RECT = new Rect(10, 20, 50, 60);
final ViewInitializer BOUNDS_CLIP_INIT = new ViewInitializer() {
@Override
public void intializeView(View rootView) {
((ViewGroup)rootView).setClipChildren(true);
}
};
final ViewInitializer PADDING_CLIP_INIT = new ViewInitializer() {
@Override
public void intializeView(View rootView) {
ViewGroup child = (ViewGroup) rootView.findViewById(R.id.child);
child.setClipToPadding(true);
child.setWillNotDraw(true);
child.addView(new UnclippedBlueView(rootView.getContext()));
}
};
final ViewInitializer OUTLINE_CLIP_INIT = new ViewInitializer() {
@Override
public void intializeView(View rootView) {
View child = rootView.findViewById(R.id.child);
child.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRect(OUTLINE_RECT);
}
});
child.setClipToOutline(true);
}
};
final ViewInitializer CLIP_BOUNDS_CLIP_INIT = new ViewInitializer() {
@Override
public void intializeView(View view) {
view.setClipBounds(CLIP_BOUNDS_RECT);
}
};
static BitmapVerifier makeClipVerifier(Rect blueBoundsRect) {
// very high error tolerance, since all these tests care about is clip alignment
return new RectVerifier(Color.WHITE, Color.BLUE, blueBoundsRect, 75);
}
public void testSimpleUnclipped() {
createTest()
.addLayout(R.layout.blue_padded_layout, null)
.runWithVerifier(makeClipVerifier(FULL_RECT));
}
public void testSimpleBoundsClip() {
createTest()
.addLayout(R.layout.blue_padded_layout, BOUNDS_CLIP_INIT)
.runWithVerifier(makeClipVerifier(BOUNDS_RECT));
}
public void testSimpleClipBoundsClip() {
createTest()
.addLayout(R.layout.blue_padded_layout, CLIP_BOUNDS_CLIP_INIT)
.runWithVerifier(makeClipVerifier(CLIP_BOUNDS_RECT));
}
public void testSimplePaddingClip() {
createTest()
.addLayout(R.layout.blue_padded_layout, PADDING_CLIP_INIT)
.runWithVerifier(makeClipVerifier(PADDED_RECT));
}
public void testSimpleOutlineClip() {
// NOTE: Only HW is supported
createTest()
.addLayout(R.layout.blue_padded_layout, OUTLINE_CLIP_INIT, true)
.runWithVerifier(makeClipVerifier(OUTLINE_RECT));
// SW ignores the outline clip
createTest()
.addLayout(R.layout.blue_padded_layout, OUTLINE_CLIP_INIT, false)
.runWithVerifier(makeClipVerifier(FULL_RECT));
}
// TODO: add tests with clip + scroll, and with interesting combinations of the above
}