blob: 14ecd5b0de625a9b6067c4dac9a7a6075924b74c [file] [log] [blame]
package android.graphics;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import android.graphics.Matrix.ScaleToFit;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.internal.DoNotInstrument;
/** Compatibility test for {@link Matrix} */
@DoNotInstrument
@RunWith(AndroidJUnit4.class)
public final class MatrixTest {
@Test
public void mapRadius() throws Exception {
Matrix matrix = new Matrix();
assertThat(matrix.mapRadius(100f)).isEqualTo(100f);
assertThat(matrix.mapRadius(Float.MAX_VALUE)).isEqualTo(Float.POSITIVE_INFINITY);
assertThat(matrix.mapRadius(Float.MIN_VALUE)).isEqualTo(0f);
matrix.postScale(2.0f, 2.0f);
assertThat(matrix.mapRadius(1.0f)).isWithin(0.01f).of(2.0f);
}
@Test
public void mapPoints() {
float[] value = new float[9];
value[0] = 100f;
new Matrix().mapPoints(value);
assertThat(value[0]).isEqualTo(100f);
}
@Test
public void mapPointsNull() {
assertThrows(Exception.class, () -> new Matrix().mapPoints(null));
}
@Test
public void mapPoints2() {
float[] dst = new float[9];
dst[0] = 100f;
float[] src = new float[9];
src[0] = 200f;
new Matrix().mapPoints(dst, src);
assertThat(dst[0]).isEqualTo(200f);
}
@Test
public void mapPointsArraysMismatch() {
assertThrows(Exception.class, () -> new Matrix().mapPoints(new float[8], new float[9]));
}
@Test
public void mapPointsWithIndices() {
float[] dst = new float[9];
dst[0] = 100f;
float[] src = new float[9];
src[0] = 200f;
new Matrix().mapPoints(dst, 0, src, 0, 9 >> 1);
assertThat(dst[0]).isEqualTo(200f);
}
@Test
public void mapPointsWithIndicesNull() {
assertThrows(Exception.class, () -> new Matrix().mapPoints(null, 0, new float[9], 0, 1));
}
@Test
public void setRectToRect() {
RectF r1 = new RectF();
r1.set(1f, 2f, 3f, 3f);
RectF r2 = new RectF();
r1.set(10f, 20f, 30f, 30f);
Matrix matrix = new Matrix();
float[] result = new float[9];
assertThat(matrix.setRectToRect(r1, r2, ScaleToFit.CENTER)).isTrue();
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f});
matrix.setRectToRect(r1, r2, ScaleToFit.END);
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f});
matrix.setRectToRect(r1, r2, ScaleToFit.FILL);
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f});
matrix.setRectToRect(r1, r2, ScaleToFit.START);
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f});
assertThat(matrix.setRectToRect(r2, r1, ScaleToFit.CENTER)).isFalse();
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f});
assertThat(matrix.setRectToRect(r2, r1, ScaleToFit.FILL)).isFalse();
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f});
assertThat(matrix.setRectToRect(r2, r1, ScaleToFit.START)).isFalse();
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f});
assertThat(matrix.setRectToRect(r2, r1, ScaleToFit.END)).isFalse();
matrix.getValues(result);
assertThat(result)
.isEqualTo(new float[] {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f});
}
@Test
public void testSetRectToRectNull() {
assertThrows(Exception.class, () -> new Matrix().setRectToRect(null, null, ScaleToFit.CENTER));
}
}