Write tests for HintView

pull/145/head
Alinson S. Xavier 9 years ago
parent 588b45d47b
commit 5d61fdd3d0

@ -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'

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@ -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);

@ -0,0 +1,79 @@
/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
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));
}
}

@ -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);

Loading…
Cancel
Save