4860e4ee48
Test: make setup-wizard-lib Bug: 76692459 Change-Id: I40171e973d442b1a1815e9e7d7c2cc984cb38bac
222 lines
8.5 KiB
Java
222 lines
8.5 KiB
Java
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.setupwizardlib.test;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertSame;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Color;
|
|
import android.graphics.Paint;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.PorterDuffXfermode;
|
|
import android.graphics.drawable.ColorDrawable;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.support.test.InstrumentationRegistry;
|
|
import android.support.test.filters.SmallTest;
|
|
import android.support.test.runner.AndroidJUnit4;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import com.android.setupwizardlib.DividerItemDecoration;
|
|
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
|
|
@RunWith(AndroidJUnit4.class)
|
|
@SmallTest
|
|
public class DividerItemDecorationTest {
|
|
|
|
@Test
|
|
public void testDivider() {
|
|
final DividerItemDecoration decoration = new DividerItemDecoration();
|
|
Drawable divider = new ColorDrawable();
|
|
decoration.setDivider(divider);
|
|
assertSame("Divider should be same as set", divider, decoration.getDivider());
|
|
}
|
|
|
|
@Test
|
|
public void testDividerHeight() {
|
|
final DividerItemDecoration decoration = new DividerItemDecoration();
|
|
decoration.setDividerHeight(123);
|
|
assertEquals("Divider height should be 123", 123, decoration.getDividerHeight());
|
|
}
|
|
|
|
@Test
|
|
public void testShouldDrawDividerBelowWithEitherCondition() {
|
|
// Set up the item decoration, with 1px red divider line
|
|
final DividerItemDecoration decoration = new DividerItemDecoration();
|
|
Drawable divider = new ColorDrawable(Color.RED);
|
|
decoration.setDivider(divider);
|
|
decoration.setDividerHeight(1);
|
|
|
|
Bitmap bitmap = drawDecoration(decoration, true, true);
|
|
|
|
// Draw the expected result on a bitmap
|
|
Bitmap expectedBitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_4444);
|
|
Canvas expectedCanvas = new Canvas(expectedBitmap);
|
|
Paint paint = new Paint();
|
|
paint.setColor(Color.RED);
|
|
expectedCanvas.drawRect(0, 5, 20, 6, paint);
|
|
expectedCanvas.drawRect(0, 10, 20, 11, paint);
|
|
expectedCanvas.drawRect(0, 15, 20, 16, paint);
|
|
// Compare the two bitmaps
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
bitmap.recycle();
|
|
bitmap = drawDecoration(decoration, false, true);
|
|
// should still be the same.
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
bitmap.recycle();
|
|
bitmap = drawDecoration(decoration, true, false);
|
|
// last item should not have a divider below it now
|
|
paint.setColor(Color.TRANSPARENT);
|
|
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
|
|
expectedCanvas.drawRect(0, 15, 20, 16, paint);
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
bitmap.recycle();
|
|
bitmap = drawDecoration(decoration, false, false);
|
|
// everything should be transparent now
|
|
expectedCanvas.drawRect(0, 5, 20, 6, paint);
|
|
expectedCanvas.drawRect(0, 10, 20, 11, paint);
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testShouldDrawDividerBelowWithBothCondition() {
|
|
// Set up the item decoration, with 1px green divider line
|
|
final DividerItemDecoration decoration = new DividerItemDecoration();
|
|
Drawable divider = new ColorDrawable(Color.GREEN);
|
|
decoration.setDivider(divider);
|
|
decoration.setDividerHeight(1);
|
|
decoration.setDividerCondition(DividerItemDecoration.DIVIDER_CONDITION_BOTH);
|
|
|
|
Bitmap bitmap = drawDecoration(decoration, true, true);
|
|
Paint paint = new Paint();
|
|
paint.setColor(Color.GREEN);
|
|
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD));
|
|
Bitmap expectedBitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_4444);
|
|
Canvas expectedCanvas = new Canvas(expectedBitmap);
|
|
expectedCanvas.drawRect(0, 5, 20, 6, paint);
|
|
expectedCanvas.drawRect(0, 10, 20, 11, paint);
|
|
expectedCanvas.drawRect(0, 15, 20, 16, paint);
|
|
// Should have all the dividers
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
bitmap.recycle();
|
|
bitmap = drawDecoration(decoration, false, true);
|
|
paint.setColor(Color.TRANSPARENT);
|
|
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
|
|
expectedCanvas.drawRect(0, 5, 20, 6, paint);
|
|
expectedCanvas.drawRect(0, 10, 20, 11, paint);
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
bitmap.recycle();
|
|
bitmap = drawDecoration(decoration, true, false);
|
|
// nothing should be drawn now.
|
|
expectedCanvas.drawRect(0, 15, 20, 16, paint);
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
|
|
bitmap.recycle();
|
|
bitmap = drawDecoration(decoration, false, false);
|
|
assertBitmapEquals(expectedBitmap, bitmap);
|
|
}
|
|
|
|
private Bitmap drawDecoration(DividerItemDecoration decoration, final boolean allowDividerAbove,
|
|
final boolean allowDividerBelow) {
|
|
// Set up the canvas to be drawn
|
|
Bitmap bitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_4444);
|
|
Canvas canvas = new Canvas(bitmap);
|
|
|
|
final Context context = InstrumentationRegistry.getContext();
|
|
// Set up recycler view with vertical linear layout manager
|
|
RecyclerView testRecyclerView = new RecyclerView(context);
|
|
testRecyclerView.setLayoutManager(new LinearLayoutManager(context));
|
|
|
|
// Set up adapter with 3 items, each 5px tall
|
|
testRecyclerView.setAdapter(new RecyclerView.Adapter() {
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
|
|
final View itemView = new View(context);
|
|
itemView.setMinimumWidth(20);
|
|
itemView.setMinimumHeight(5);
|
|
return ViewHolder.createInstance(itemView, allowDividerAbove, allowDividerBelow);
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
return 3;
|
|
}
|
|
});
|
|
|
|
testRecyclerView.layout(0, 0, 20, 20);
|
|
decoration.onDraw(canvas, testRecyclerView, null);
|
|
return bitmap;
|
|
}
|
|
|
|
private void assertBitmapEquals(Bitmap expected, Bitmap actual) {
|
|
assertEquals("Width should be the same", expected.getWidth(), actual.getWidth());
|
|
assertEquals("Height should be the same", expected.getHeight(), actual.getHeight());
|
|
for (int x = 0; x < expected.getWidth(); x++) {
|
|
for (int y = 0; y < expected.getHeight(); y++) {
|
|
assertEquals("Pixel at (" + x + ", " + y + ") should be the same",
|
|
expected.getPixel(x, y), actual.getPixel(x, y));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static class ViewHolder extends RecyclerView.ViewHolder
|
|
implements DividerItemDecoration.DividedViewHolder {
|
|
|
|
private boolean mAllowDividerAbove;
|
|
private boolean mAllowDividerBelow;
|
|
|
|
public static ViewHolder createInstance(View itemView, boolean allowDividerAbove,
|
|
boolean allowDividerBelow) {
|
|
return new ViewHolder(itemView, allowDividerAbove, allowDividerBelow);
|
|
}
|
|
|
|
private ViewHolder(View itemView, boolean allowDividerAbove, boolean allowDividerBelow) {
|
|
super(itemView);
|
|
mAllowDividerAbove = allowDividerAbove;
|
|
mAllowDividerBelow = allowDividerBelow;
|
|
}
|
|
|
|
@Override
|
|
public boolean isDividerAllowedAbove() {
|
|
return mAllowDividerAbove;
|
|
}
|
|
|
|
@Override
|
|
public boolean isDividerAllowedBelow() {
|
|
return mAllowDividerBelow;
|
|
}
|
|
}
|
|
}
|