Reactivate HistoryChart tests; fix IndexOutOfBoundsException

pull/629/head
Alinson S. Xavier 5 years ago
parent ebab6f08ee
commit 2af1dbf3a6

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

@ -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
public void tapDate_atInvalidLocations() throws Throwable
{
chart.setIsEditable(true);
chart.tap(dpToPixels(118), dpToPixels(13)); // header
chart.tap(dpToPixels(336), dpToPixels(60)); // tomorrow's square
chart.tap(dpToPixels(370), dpToPixels(60)); // right axis
verifyNoMoreInteractions(controller);
}
@Test
public void tapDate_withEditableView() throws Throwable
{
chart.setIsEditable(true);
chart.tap(dpToPixels(340), dpToPixels(40));
verify(controller).onToggleCheckmark(today, Checkmark.SKIPPED);
chart.tap(dpToPixels(340), dpToPixels(40));
verify(controller).onToggleCheckmark(today, Checkmark.UNCHECKED);
chart.tap(dpToPixels(340), dpToPixels(40));
verify(controller).onToggleCheckmark(today, Checkmark.CHECKED_EXPLICITLY);
verifyNoMoreInteractions(controller);
} }
// @Test @Test
// public void tapDate_atInvalidLocations() throws Throwable public void tapDate_withEmptyHabit()
// { {
// int expectedCheckmarkValues[] = habit.getCheckmarks().getAllValues(); chart.setIsEditable(true);
// chart.setCheckmarks(new int[]{});
// chart.setIsEditable(true); chart.tap(dpToPixels(340), dpToPixels(40));
// tap(chart, 118, 13); // header verify(controller).onToggleCheckmark(today, Checkmark.CHECKED_EXPLICITLY);
// 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_withReadOnlyView() throws Throwable
// assertThat(actualCheckmarkValues, equalTo(expectedCheckmarkValues)); {
// } chart.setIsEditable(false);
// chart.tap(dpToPixels(340), dpToPixels(40));
// @Test verifyNoMoreInteractions(controller);
// public void tapDate_withEditableView() throws Throwable }
// {
// chart.setIsEditable(true);
// tap(chart, 340, 40); // today's square
// waitForAsyncTasks();
//
// long today = DateUtils.getStartOfToday();
// assertFalse(habit.getRepetitions().containsTimestamp(today));
// }
//
// @Test
// public void tapDate_withReadOnlyView() throws Throwable
// {
// chart.setIsEditable(false);
// tap(chart, 340, 40); // today's square
// waitForAsyncTasks();
//
// long today = DateUtils.getStartOfToday();
// assertTrue(habit.getRepetitions().containsTimestamp(today));
// }
@Test @Test
public void testRender() throws Throwable public void testRender() throws Throwable

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

Loading…
Cancel
Save