Fix view size

pull/22/head
Mattia Iavarone 8 years ago
parent eedd659374
commit d2275c5ddf
  1. 13
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java
  2. 40
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java
  3. 3
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java
  4. 8
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java
  5. 13
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/TestActivity.java

@ -4,15 +4,24 @@ package com.otaliastudios.cameraview;
import android.annotation.TargetApi;
import android.content.Context;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.Root;
import android.support.test.espresso.ViewAssertion;
import android.support.test.espresso.ViewInteraction;
import android.support.test.espresso.assertion.ViewAssertions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.test.rule.ActivityTestRule;
import android.view.MotionEvent;
import android.view.View;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Rule;
import static android.support.test.espresso.Espresso.onView;
import static org.hamcrest.Matchers.any;
@TargetApi(17)
public abstract class GestureLayoutTest<T extends GestureLayout> extends BaseTest {
@ -47,7 +56,7 @@ public abstract class GestureLayoutTest<T extends GestureLayout> extends BaseTes
});
}
protected ViewInteraction onLayout() {
return Espresso.onView(Matchers.<View>is(layout));
protected final ViewInteraction onLayout() {
return onView(Matchers.<View>is(layout)).inRoot(any(Root.class));
}
}

@ -98,29 +98,41 @@ public abstract class PreviewTest extends BaseTest {
public void testCropCenter() throws Exception {
surfaceAvailability.await();
// Not cropping.
preview.mCropTask.listen();
preview.setDesiredSize(100, 100); // Wait...
preview.mCropTask.await();
assertEquals(100f / 100f, getScaledAspectRatio(), 0.01f);
// This is given by the activity, it's the fixed size.
float view = getViewAspectRatio();
// If we apply a desired size with same aspect ratio, there should be no crop.
setDesiredAspectRatio(view);
assertFalse(preview.isCropping());
// Cropping.
preview.mCropTask.listen();
preview.setDesiredSize(160, 50); // Wait...
preview.mCropTask.await();
assertEquals(160f / 50f, getScaledAspectRatio(), 0.01f);
// If we apply a different aspect ratio, there should be cropping.
float desired = view * 1.2f;
setDesiredAspectRatio(desired);
assertTrue(preview.isCropping());
// Not cropping.
// Since desired is 'desired', let's fake a new view size that is consistent with it.
// Ensure crop is not happening anymore.
preview.mCropTask.listen();
preview.onSurfaceSizeChanged(1600, 500); // Wait...
preview.onSurfaceSizeChanged((int) (50f * desired), 50); // Wait...
preview.mCropTask.await();
assertEquals(160f / 50f, getScaledAspectRatio(), 0.01f);
assertEquals(desired, getViewAspectRatioWithScale(), 0.01f);
assertFalse(preview.isCropping());
}
private float getScaledAspectRatio() {
private void setDesiredAspectRatio(float desiredAspectRatio) {
preview.mCropTask.listen();
preview.setDesiredSize((int) (10f * desiredAspectRatio), 10); // Wait...
preview.mCropTask.await();
assertEquals(desiredAspectRatio, getViewAspectRatioWithScale(), 0.01f);
}
private float getViewAspectRatio() {
Size size = preview.getSurfaceSize();
return AspectRatio.of(size.getWidth(), size.getHeight()).toFloat();
}
private float getViewAspectRatioWithScale() {
Size size = preview.getSurfaceSize();
int newWidth = (int) (((float) size.getWidth()) * preview.getView().getScaleX());
int newHeight = (int) (((float) size.getHeight()) * preview.getView().getScaleY());

@ -3,9 +3,11 @@ package com.otaliastudios.cameraview;
import android.content.Context;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.assertion.ViewAssertions;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -18,6 +20,7 @@ import static android.support.test.espresso.action.ViewActions.swipeLeft;
import static android.support.test.espresso.action.ViewActions.swipeRight;
import static android.support.test.espresso.action.ViewActions.swipeUp;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

@ -42,8 +42,8 @@ public class TapGestureLayoutTest extends GestureLayoutTest<TapGestureLayout> {
public void testTap() {
touch.listen();
touch.start();
GeneralClickAction a = new GeneralClickAction(Tap.SINGLE,
GeneralLocation.CENTER, Press.FINGER,
GeneralClickAction a = new GeneralClickAction(
Tap.SINGLE, GeneralLocation.CENTER, Press.FINGER,
InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY);
onLayout().perform(a);
Gesture found = touch.await(500, TimeUnit.MILLISECONDS);
@ -68,8 +68,8 @@ public class TapGestureLayoutTest extends GestureLayoutTest<TapGestureLayout> {
public void testLongTap() {
touch.listen();
touch.start();
GeneralClickAction a = new GeneralClickAction(Tap.LONG,
GeneralLocation.CENTER, Press.FINGER,
GeneralClickAction a = new GeneralClickAction(
Tap.LONG, GeneralLocation.CENTER, Press.FINGER,
InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY);
onLayout().perform(a);
Gesture found = touch.await(500, TimeUnit.MILLISECONDS);

@ -4,9 +4,11 @@ package com.otaliastudios.cameraview;
import android.app.Activity;
import android.app.KeyguardManager;
import android.content.Context;
import android.graphics.Point;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
@ -30,9 +32,16 @@ public class TestActivity extends Activity {
root.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
// Inner content view with fixed size.
// We want it to be fully visible or expresso will crash.
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
int width = Math.min(size.x, size.y);
int height = Math.min(size.x, size.y);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
width, height, Gravity.CENTER);
content = new FrameLayout(this);
content.setLayoutParams(new ViewGroup.LayoutParams(
contentSize.getWidth(), contentSize.getHeight()));
content.setLayoutParams(params);
contentSize = new Size(width, height);
// Add.
root.addView(content);

Loading…
Cancel
Save