Reactivate HistoryChart tests; fix IndexOutOfBoundsException

This commit is contained in:
2020-08-22 19:42:46 -05:00
parent ebab6f08ee
commit 2af1dbf3a6
3 changed files with 73 additions and 54 deletions

View File

@@ -20,13 +20,11 @@
package org.isoron.uhabits; package org.isoron.uhabits;
import android.graphics.*; import android.graphics.*;
import androidx.annotation.NonNull;
import androidx.test.*;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
import androidx.test.platform.app.InstrumentationRegistry; import androidx.annotation.*;
import androidx.test.platform.app.*;
import org.isoron.androidbase.*; import org.isoron.androidbase.*;
import org.isoron.androidbase.utils.*; import org.isoron.androidbase.utils.*;
@@ -35,10 +33,9 @@ import org.isoron.uhabits.widgets.*;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import static android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION.*;
import static android.os.Build.VERSION_CODES.KITKAT; import static android.os.Build.VERSION_CODES.*;
import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.view.View.MeasureSpec.*;
import static android.view.View.MeasureSpec.makeMeasureSpec;
public class BaseViewTest extends BaseAndroidTest public class BaseViewTest extends BaseAndroidTest
{ {

View File

@@ -19,17 +19,18 @@
package org.isoron.uhabits.activities.common.views; package org.isoron.uhabits.activities.common.views;
import androidx.test.ext.junit.runners.*;
import androidx.test.filters.*; import androidx.test.filters.*;
import androidx.test.runner.*;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.utils.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;
import org.junit.*; import org.junit.*;
import org.junit.runner.*; import org.junit.runner.*;
import static org.mockito.Mockito.*;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
@MediumTest @MediumTest
public class HistoryChartTest extends BaseViewTest public class HistoryChartTest extends BaseViewTest
@@ -38,6 +39,12 @@ public class HistoryChartTest extends BaseViewTest
private HistoryChart chart; private HistoryChart chart;
private Habit habit;
Timestamp today;
private HistoryChart.Controller controller;
@Override @Override
@Before @Before
public void setUp() public void setUp()
@@ -45,50 +52,59 @@ public class HistoryChartTest extends BaseViewTest
super.setUp(); super.setUp();
fixtures.purgeHabits(habitList); fixtures.purgeHabits(habitList);
Habit habit = fixtures.createLongHabit(); habit = fixtures.createLongHabit();
today = new Timestamp(DateUtils.getStartOfToday());
chart = new HistoryChart(targetContext); chart = new HistoryChart(targetContext);
chart.setCheckmarks(habit.getCheckmarks().getAllValues()); chart.setCheckmarks(habit.getCheckmarks().getAllValues());
chart.setColor(PaletteUtils.getAndroidTestColor(habit.getColor())); chart.setColor(PaletteUtils.getAndroidTestColor(habit.getColor()));
measureView(chart, dpToPixels(400), dpToPixels(200)); measureView(chart, dpToPixels(400), dpToPixels(200));
controller = mock(HistoryChart.Controller.class);
chart.setController(controller);
} }
// @Test @Test
// public void tapDate_atInvalidLocations() throws Throwable public void tapDate_atInvalidLocations() throws Throwable
// { {
// int expectedCheckmarkValues[] = habit.getCheckmarks().getAllValues(); chart.setIsEditable(true);
// chart.tap(dpToPixels(118), dpToPixels(13)); // header
// chart.setIsEditable(true); chart.tap(dpToPixels(336), dpToPixels(60)); // tomorrow's square
// tap(chart, 118, 13); // header chart.tap(dpToPixels(370), dpToPixels(60)); // right axis
// tap(chart, 336, 60); // tomorrow's square verifyNoMoreInteractions(controller);
// tap(chart, 370, 60); // right axis }
// waitForAsyncTasks();
// @Test
// int actualCheckmarkValues[] = habit.getCheckmarks().getAllValues(); public void tapDate_withEditableView() throws Throwable
// assertThat(actualCheckmarkValues, equalTo(expectedCheckmarkValues)); {
// } chart.setIsEditable(true);
//
// @Test chart.tap(dpToPixels(340), dpToPixels(40));
// public void tapDate_withEditableView() throws Throwable verify(controller).onToggleCheckmark(today, Checkmark.SKIPPED);
// { chart.tap(dpToPixels(340), dpToPixels(40));
// chart.setIsEditable(true); verify(controller).onToggleCheckmark(today, Checkmark.UNCHECKED);
// tap(chart, 340, 40); // today's square chart.tap(dpToPixels(340), dpToPixels(40));
// waitForAsyncTasks(); verify(controller).onToggleCheckmark(today, Checkmark.CHECKED_EXPLICITLY);
// verifyNoMoreInteractions(controller);
// long today = DateUtils.getStartOfToday(); }
// assertFalse(habit.getRepetitions().containsTimestamp(today));
// } @Test
// public void tapDate_withEmptyHabit()
// @Test {
// public void tapDate_withReadOnlyView() throws Throwable chart.setIsEditable(true);
// { chart.setCheckmarks(new int[]{});
// chart.setIsEditable(false); chart.tap(dpToPixels(340), dpToPixels(40));
// tap(chart, 340, 40); // today's square verify(controller).onToggleCheckmark(today, Checkmark.CHECKED_EXPLICITLY);
// waitForAsyncTasks(); verifyNoMoreInteractions(controller);
// }
// long today = DateUtils.getStartOfToday();
// assertTrue(habit.getRepetitions().containsTimestamp(today)); @Test
// } public void tapDate_withReadOnlyView() throws Throwable
{
chart.setIsEditable(false);
chart.tap(dpToPixels(340), dpToPixels(40));
verifyNoMoreInteractions(controller);
}
@Test @Test
public void testRender() throws Throwable public void testRender() throws Throwable

View File

@@ -121,11 +121,7 @@ public class HistoryChart extends ScrollableChart
@Override @Override
public boolean onSingleTapUp(MotionEvent e) public boolean onSingleTapUp(MotionEvent e)
{ {
if (!isEditable) return false;
performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
float x, y; float x, y;
try try
{ {
int pointerId = e.getPointerId(0); int pointerId = e.getPointerId(0);
@@ -139,20 +135,30 @@ public class HistoryChart extends ScrollableChart
// e.getPointerId. // e.getPointerId.
return false; return false;
} }
return tap(x, y);
}
public boolean tap(float x, float y)
{
if (!isEditable) return false;
performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
final Timestamp timestamp = positionToTimestamp(x, y); final Timestamp timestamp = positionToTimestamp(x, y);
if (timestamp == null) return false; if (timestamp == null) return false;
Timestamp today = DateUtils.getToday(); Timestamp today = DateUtils.getToday();
int newValue = CHECKED_EXPLICITLY;
int offset = timestamp.daysUntil(today); int offset = timestamp.daysUntil(today);
if (offset < checkmarks.length) if (offset < checkmarks.length)
{ {
checkmarks[offset] = Repetition.nextToggleValue(checkmarks[offset]); newValue = Repetition.nextToggleValue(checkmarks[offset]);
checkmarks[offset] = newValue;
} }
controller.onToggleCheckmark(timestamp, checkmarks[offset]); controller.onToggleCheckmark(timestamp, newValue);
postInvalidate(); postInvalidate();
return true; return true;
} }
public void populateWithRandomData() public void populateWithRandomData()