From 5d61fdd3d0c37a89e0a77734a7d4694db6cd2b3f Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 29 Jun 2016 10:03:56 -0400 Subject: [PATCH] Write tests for HintView --- app/build.gradle | 3 + .../views/habits/list/HintView/render.png | Bin 0 -> 13819 bytes .../java/org/isoron/uhabits/BaseViewTest.java | 47 ++++++----- .../ui/habits/list/views/HintViewTest.java | 79 ++++++++++++++++++ .../ui/habits/list/views/HintView.java | 10 +-- 5 files changed, 113 insertions(+), 26 deletions(-) create mode 100644 app/src/androidTest/assets/views/habits/list/HintView/render.png create mode 100644 app/src/androidTest/java/org/isoron/uhabits/ui/habits/list/views/HintViewTest.java diff --git a/app/build.gradle b/app/build.gradle index 2b2a8d82b..c446e6d11 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,6 +78,9 @@ dependencies { androidTestCompile 'com.android.support:support-annotations:23.3.0' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' + androidTestCompile 'org.mockito:mockito-core:1.10.19' + androidTestCompile "com.google.dexmaker:dexmaker:1.2" + androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.1') { exclude group: 'com.android.support' diff --git a/app/src/androidTest/assets/views/habits/list/HintView/render.png b/app/src/androidTest/assets/views/habits/list/HintView/render.png new file mode 100644 index 0000000000000000000000000000000000000000..dae19beb815e234de0be7cd1923575cd91cbf7f0 GIT binary patch literal 13819 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 Iis}daH!z2UNB{r; literal 0 HcmV?d00001 diff --git a/app/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java index b7d2d1af5..9894843d0 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java @@ -30,6 +30,7 @@ import org.isoron.uhabits.utils.*; import java.io.*; +import static android.view.View.MeasureSpec.*; import static junit.framework.Assert.*; public class BaseViewTest extends BaseAndroidTest @@ -53,6 +54,9 @@ public class BaseViewTest extends BaseAndroidTest StringBuilder errorMessage = new StringBuilder(); expectedImagePath = getVersionedViewAssetPath(expectedImagePath); + if (view.isLayoutRequested()) measureView(view, view.getMeasuredWidth(), + view.getMeasuredHeight()); + view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap actual = view.getDrawingCache(); @@ -80,7 +84,7 @@ public class BaseViewTest extends BaseAndroidTest saveBitmap(expectedImagePath, ".expected", scaledExpected); String path = saveBitmap(expectedImagePath, "", actual); errorMessage.append( - String.format("Actual rendered image " + "saved to %s", path)); + String.format("Actual rendered image saved to %s", path)); fail(errorMessage.toString()); } @@ -88,6 +92,20 @@ public class BaseViewTest extends BaseAndroidTest scaledExpected.recycle(); } + @NonNull + protected FrameLayout convertToView(BaseWidget widget, + int width, + int height) + { + widget.setDimensions( + new WidgetDimensions(width, height, width, height)); + FrameLayout view = new FrameLayout(targetContext); + RemoteViews remoteViews = widget.getPortraitRemoteViews(); + view.addView(remoteViews.apply(targetContext, view)); + measureView(view, width, height); + return view; + } + protected int dpToPixels(int dp) { return (int) InterfaceUtils.dpToPixels(targetContext, dp); @@ -95,10 +113,8 @@ public class BaseViewTest extends BaseAndroidTest protected void measureView(View view, int width, int height) { - int specWidth = - View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY); - int specHeight = - View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY); + int specWidth = makeMeasureSpec(width, View.MeasureSpec.EXACTLY); + int specHeight = makeMeasureSpec(height, View.MeasureSpec.EXACTLY); view.measure(specWidth, specHeight); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); @@ -109,6 +125,13 @@ public class BaseViewTest extends BaseAndroidTest this.similarityCutoff = similarityCutoff; } + protected void skipAnimation(View view) + { + ViewPropertyAnimator animator = view.animate(); + animator.setDuration(0); + animator.start(); + } + protected void tap(GestureDetector.OnGestureListener view, int x, int y) throws InterruptedException { @@ -142,20 +165,6 @@ public class BaseViewTest extends BaseAndroidTest return (double) diff / total / 2; } - @NonNull - protected FrameLayout convertToView(BaseWidget widget, - int width, - int height) - { - widget.setDimensions( - new WidgetDimensions(width, height, width, height)); - FrameLayout view = new FrameLayout(targetContext); - RemoteViews remoteViews = widget.getPortraitRemoteViews(); - view.addView(remoteViews.apply(targetContext, view)); - measureView(view, width, height); - return view; - } - private Bitmap getBitmapFromAssets(String path) throws IOException { InputStream stream = testContext.getAssets().open(path); diff --git a/app/src/androidTest/java/org/isoron/uhabits/ui/habits/list/views/HintViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/ui/habits/list/views/HintViewTest.java new file mode 100644 index 000000000..8e73673e2 --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/ui/habits/list/views/HintViewTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.ui.habits.list.views; + +import android.support.test.runner.*; +import android.test.suitebuilder.annotation.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.ui.habits.list.model.*; +import org.junit.*; +import org.junit.runner.*; + +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; +import static org.mockito.Mockito.*; + +@RunWith(AndroidJUnit4.class) +@MediumTest +public class HintViewTest extends BaseViewTest +{ + public static final String PATH = "habits/list/HintView/"; + + private HintView view; + + private HintList list; + + @Before + @Override + public void setUp() + { + super.setUp(); + + view = new HintView(targetContext); + list = mock(HintList.class); + view.setHints(list); + measureView(view, 400, 200); + + String text = + "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; + + when(list.shouldShow()).thenReturn(true); + when(list.pop()).thenReturn(text); + + view.showNext(); + skipAnimation(view); + } + + @Test + public void testRender() throws Exception + { + assertRenders(view, PATH + "render.png"); + } + + @Test + public void testClick() throws Exception + { + assertThat(view.getAlpha(), equalTo(1f)); + view.performClick(); + skipAnimation(view); + assertThat(view.getAlpha(), equalTo(0f)); + } +} diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/views/HintView.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/views/HintView.java index 5fa6ba7f6..fc3f7a570 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/views/HintView.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/views/HintView.java @@ -56,12 +56,6 @@ public class HintView extends FrameLayout init(); } - public HintView(Context context, AttributeSet attrs, int defStyleAttr) - { - super(context, attrs, defStyleAttr); - init(); - } - @Override public void onAttachedToWindow() { @@ -113,7 +107,7 @@ public class HintView extends FrameLayout setAlpha(1.0f); } - private void showNext() + protected void showNext() { if (hintList == null) return; if (!hintList.shouldShow()) return; @@ -122,6 +116,8 @@ public class HintView extends FrameLayout if (hint == null) return; hintContent.setText(hint); + requestLayout(); + setAlpha(0.0f); setVisibility(View.VISIBLE); animate().alpha(1f).setDuration(500);