mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 17:18:52 -06:00
Repetition: Replace toggle by setValue
This commit is contained in:
@@ -22,6 +22,8 @@ package org.isoron.uhabits;
|
|||||||
import org.isoron.uhabits.core.models.*;
|
import org.isoron.uhabits.core.models.*;
|
||||||
import org.isoron.uhabits.core.utils.DateUtils;
|
import org.isoron.uhabits.core.utils.DateUtils;
|
||||||
|
|
||||||
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
|
|
||||||
public class HabitFixtures
|
public class HabitFixtures
|
||||||
{
|
{
|
||||||
public boolean LONG_HABIT_CHECKS[] = {
|
public boolean LONG_HABIT_CHECKS[] = {
|
||||||
@@ -73,7 +75,7 @@ public class HabitFixtures
|
|||||||
81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120};
|
81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120};
|
||||||
|
|
||||||
for (int mark : marks)
|
for (int mark : marks)
|
||||||
habit.getRepetitions().toggle(today.minus(mark));
|
habit.getRepetitions().setValue(today.minus(mark), YES_MANUAL);
|
||||||
|
|
||||||
return habit;
|
return habit;
|
||||||
}
|
}
|
||||||
@@ -107,7 +109,7 @@ public class HabitFixtures
|
|||||||
582, 583, 584, 586, 589};
|
582, 583, 584, 586, 589};
|
||||||
|
|
||||||
for (int mark : marks)
|
for (int mark : marks)
|
||||||
habit.getRepetitions().toggle(today.minus(mark));
|
habit.getRepetitions().setValue(today.minus(mark), YES_MANUAL);
|
||||||
|
|
||||||
return habit;
|
return habit;
|
||||||
}
|
}
|
||||||
@@ -145,7 +147,7 @@ public class HabitFixtures
|
|||||||
Timestamp timestamp = DateUtils.getToday();
|
Timestamp timestamp = DateUtils.getToday();
|
||||||
for (boolean c : LONG_HABIT_CHECKS)
|
for (boolean c : LONG_HABIT_CHECKS)
|
||||||
{
|
{
|
||||||
if (c) habit.getRepetitions().toggle(timestamp);
|
if (c) habit.getRepetitions().setValue(timestamp, YES_MANUAL);
|
||||||
timestamp = timestamp.minus(1);
|
timestamp = timestamp.minus(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class WidgetControllerTest extends BaseAndroidJVMTest
|
|||||||
@Test
|
@Test
|
||||||
public void testOnAddRepetition_whenChecked() throws Exception
|
public void testOnAddRepetition_whenChecked() throws Exception
|
||||||
{
|
{
|
||||||
habit.getRepetitions().toggle(today);
|
habit.getRepetitions().setValue(today, YES_MANUAL);
|
||||||
int todayValue = habit.getCheckmarks().getTodayValue();
|
int todayValue = habit.getCheckmarks().getTodayValue();
|
||||||
assertThat(todayValue, equalTo(YES_MANUAL));
|
assertThat(todayValue, equalTo(YES_MANUAL));
|
||||||
controller.onAddRepetition(habit, today);
|
controller.onAddRepetition(habit, today);
|
||||||
@@ -84,7 +84,7 @@ public class WidgetControllerTest extends BaseAndroidJVMTest
|
|||||||
@Test
|
@Test
|
||||||
public void testOnRemoveRepetition_whenChecked() throws Exception
|
public void testOnRemoveRepetition_whenChecked() throws Exception
|
||||||
{
|
{
|
||||||
habit.getRepetitions().toggle(today);
|
habit.getRepetitions().setValue(today, YES_MANUAL);
|
||||||
int todayValue = habit.getCheckmarks().getTodayValue();
|
int todayValue = habit.getCheckmarks().getTodayValue();
|
||||||
assertThat(todayValue, equalTo(YES_MANUAL));
|
assertThat(todayValue, equalTo(YES_MANUAL));
|
||||||
controller.onRemoveRepetition(habit, today);
|
controller.onRemoveRepetition(habit, today);
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ import java.util.*;
|
|||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that imports data from HabitBull CSV files.
|
* Class that imports data from HabitBull CSV files.
|
||||||
@@ -93,8 +95,7 @@ public class HabitBullCSVImporter extends AbstractImporter
|
|||||||
map.put(name, h);
|
map.put(name, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!h.getRepetitions().containsTimestamp(timestamp))
|
h.getRepetitions().setValue(timestamp, YES_MANUAL);
|
||||||
h.getRepetitions().toggle(timestamp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ public class LoopDBImporter extends AbstractImporter
|
|||||||
habitRecord.id.toString());
|
habitRecord.id.toString());
|
||||||
|
|
||||||
for (RepetitionRecord r : reps)
|
for (RepetitionRecord r : reps)
|
||||||
h.getRepetitions().toggle(new Timestamp(r.timestamp), r.value);
|
h.getRepetitions().setValue(new Timestamp(r.timestamp), r.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ import java.util.*;
|
|||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that imports database files exported by Rewire.
|
* Class that imports database files exported by Rewire.
|
||||||
*/
|
*/
|
||||||
@@ -165,7 +167,7 @@ public class RewireDBImporter extends AbstractImporter
|
|||||||
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
|
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
|
||||||
cal.set(year, month - 1, day);
|
cal.set(year, month - 1, day);
|
||||||
|
|
||||||
habit.getRepetitions().toggle(new Timestamp(cal));
|
habit.getRepetitions().setValue(new Timestamp(cal), YES_MANUAL);
|
||||||
} while (c.moveToNext());
|
} while (c.moveToNext());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ import java.util.*;
|
|||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that imports data from database files exported by Tickmate.
|
* Class that imports data from database files exported by Tickmate.
|
||||||
*/
|
*/
|
||||||
@@ -100,7 +102,7 @@ public class TickmateDBImporter extends AbstractImporter
|
|||||||
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
|
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
|
||||||
cal.set(year, month, day);
|
cal.set(year, month, day);
|
||||||
|
|
||||||
habit.getRepetitions().toggle(new Timestamp(cal));
|
habit.getRepetitions().setValue(new Timestamp(cal), YES_MANUAL);
|
||||||
} while (c.moveToNext());
|
} while (c.moveToNext());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@@ -52,19 +52,6 @@ public abstract class RepetitionList
|
|||||||
*/
|
*/
|
||||||
public abstract void add(Repetition repetition);
|
public abstract void add(Repetition repetition);
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the list contains a repetition that has the given
|
|
||||||
* timestamp.
|
|
||||||
*
|
|
||||||
* @param timestamp the timestamp to find.
|
|
||||||
* @return true if list contains repetition with given timestamp, false
|
|
||||||
* otherwise.
|
|
||||||
*/
|
|
||||||
public boolean containsTimestamp(Timestamp timestamp)
|
|
||||||
{
|
|
||||||
return (getByTimestamp(timestamp) != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of repetitions that happened within the given time
|
* Returns the list of repetitions that happened within the given time
|
||||||
* interval.
|
* interval.
|
||||||
@@ -90,6 +77,18 @@ public abstract class RepetitionList
|
|||||||
@Nullable
|
@Nullable
|
||||||
public abstract Repetition getByTimestamp(Timestamp timestamp);
|
public abstract Repetition getByTimestamp(Timestamp timestamp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a repetition with the given timestamp exists, return its value. Otherwise, returns
|
||||||
|
* Checkmark.NO for boolean habits and zero for numerical habits.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public int getValue(Timestamp timestamp)
|
||||||
|
{
|
||||||
|
Repetition rep = getByTimestamp(timestamp);
|
||||||
|
if (rep == null) return Checkmark.NO;
|
||||||
|
return rep.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public ModelObservable getObservable()
|
public ModelObservable getObservable()
|
||||||
{
|
{
|
||||||
@@ -175,39 +174,9 @@ public abstract class RepetitionList
|
|||||||
*/
|
*/
|
||||||
public abstract void remove(@NonNull Repetition repetition);
|
public abstract void remove(@NonNull Repetition repetition);
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds or remove a repetition at a certain timestamp.
|
|
||||||
* <p>
|
|
||||||
* If there exists a repetition on the list with the given timestamp, the
|
|
||||||
* method removes this repetition from the list and returns it. If there are
|
|
||||||
* no repetitions with the given timestamp, creates and adds one to the
|
|
||||||
* list, then returns it.
|
|
||||||
*
|
|
||||||
* @param timestamp the timestamp for the timestamp that should be added or
|
|
||||||
* removed.
|
|
||||||
* @return the repetition that has been added or removed.
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
public synchronized Repetition toggle(Timestamp timestamp)
|
|
||||||
{
|
|
||||||
if (habit.isNumerical())
|
|
||||||
throw new IllegalStateException("habit must NOT be numerical");
|
|
||||||
|
|
||||||
Repetition rep = getByTimestamp(timestamp);
|
|
||||||
if (rep != null) remove(rep);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rep = new Repetition(timestamp, Checkmark.YES_MANUAL);
|
|
||||||
add(rep);
|
|
||||||
}
|
|
||||||
|
|
||||||
habit.invalidateNewerThan(timestamp);
|
|
||||||
return rep;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract long getTotalCount();
|
public abstract long getTotalCount();
|
||||||
|
|
||||||
public void toggle(Timestamp timestamp, int value)
|
public void setValue(Timestamp timestamp, int value)
|
||||||
{
|
{
|
||||||
Repetition rep = getByTimestamp(timestamp);
|
Repetition rep = getByTimestamp(timestamp);
|
||||||
if (rep != null) remove(rep);
|
if (rep != null) remove(rep);
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import org.isoron.uhabits.core.models.*;
|
|||||||
import org.isoron.uhabits.core.models.sqlite.*;
|
import org.isoron.uhabits.core.models.sqlite.*;
|
||||||
import org.isoron.uhabits.core.utils.*;
|
import org.isoron.uhabits.core.utils.*;
|
||||||
|
|
||||||
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
|
|
||||||
public class HabitFixtures
|
public class HabitFixtures
|
||||||
{
|
{
|
||||||
public boolean NON_DAILY_HABIT_CHECKS[] = {
|
public boolean NON_DAILY_HABIT_CHECKS[] = {
|
||||||
@@ -63,7 +65,7 @@ public class HabitFixtures
|
|||||||
81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120};
|
81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120};
|
||||||
|
|
||||||
for (int mark : marks)
|
for (int mark : marks)
|
||||||
habit.getRepetitions().toggle(today.minus(mark));
|
habit.getRepetitions().setValue(today.minus(mark), YES_MANUAL);
|
||||||
|
|
||||||
return habit;
|
return habit;
|
||||||
}
|
}
|
||||||
@@ -140,7 +142,7 @@ public class HabitFixtures
|
|||||||
Timestamp timestamp = DateUtils.getToday();
|
Timestamp timestamp = DateUtils.getToday();
|
||||||
for (boolean c : NON_DAILY_HABIT_CHECKS)
|
for (boolean c : NON_DAILY_HABIT_CHECKS)
|
||||||
{
|
{
|
||||||
if (c) habit.getRepetitions().toggle(timestamp);
|
if (c) habit.getRepetitions().setValue(timestamp, YES_MANUAL);
|
||||||
timestamp = timestamp.minus(1);
|
timestamp = timestamp.minus(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import java.util.*;
|
|||||||
import static junit.framework.TestCase.assertFalse;
|
import static junit.framework.TestCase.assertFalse;
|
||||||
import static org.hamcrest.MatcherAssert.assertThat;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.core.IsEqual.*;
|
import static org.hamcrest.core.IsEqual.*;
|
||||||
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
import static org.isoron.uhabits.core.models.Frequency.*;
|
import static org.isoron.uhabits.core.models.Frequency.*;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
@@ -54,9 +55,9 @@ public class ImportTest extends BaseUnitTest
|
|||||||
assertThat(habit.getName(), equalTo("Breed dragons"));
|
assertThat(habit.getName(), equalTo("Breed dragons"));
|
||||||
assertThat(habit.getDescription(), equalTo("with love and fire"));
|
assertThat(habit.getDescription(), equalTo("with love and fire"));
|
||||||
assertThat(habit.getFrequency(), equalTo(Frequency.DAILY));
|
assertThat(habit.getFrequency(), equalTo(Frequency.DAILY));
|
||||||
assertTrue(containsRepetition(habit, 2016, 3, 18));
|
assertTrue(isChecked(habit, 2016, 3, 18));
|
||||||
assertTrue(containsRepetition(habit, 2016, 3, 19));
|
assertTrue(isChecked(habit, 2016, 3, 19));
|
||||||
assertFalse(containsRepetition(habit, 2016, 3, 20));
|
assertFalse(isChecked(habit, 2016, 3, 20));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -69,9 +70,9 @@ public class ImportTest extends BaseUnitTest
|
|||||||
Habit habit = habitList.getByPosition(0);
|
Habit habit = habitList.getByPosition(0);
|
||||||
assertThat(habit.getName(), equalTo("Wake up early"));
|
assertThat(habit.getName(), equalTo("Wake up early"));
|
||||||
assertThat(habit.getFrequency(), equalTo(THREE_TIMES_PER_WEEK));
|
assertThat(habit.getFrequency(), equalTo(THREE_TIMES_PER_WEEK));
|
||||||
assertTrue(containsRepetition(habit, 2016, 3, 14));
|
assertTrue(isChecked(habit, 2016, 3, 14));
|
||||||
assertTrue(containsRepetition(habit, 2016, 3, 16));
|
assertTrue(isChecked(habit, 2016, 3, 16));
|
||||||
assertFalse(containsRepetition(habit, 2016, 3, 17));
|
assertFalse(isChecked(habit, 2016, 3, 17));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -85,10 +86,10 @@ public class ImportTest extends BaseUnitTest
|
|||||||
assertThat(habit.getName(), equalTo("Wake up early"));
|
assertThat(habit.getName(), equalTo("Wake up early"));
|
||||||
assertThat(habit.getFrequency(), equalTo(THREE_TIMES_PER_WEEK));
|
assertThat(habit.getFrequency(), equalTo(THREE_TIMES_PER_WEEK));
|
||||||
assertFalse(habit.hasReminder());
|
assertFalse(habit.hasReminder());
|
||||||
assertFalse(containsRepetition(habit, 2015, 12, 31));
|
assertFalse(isChecked(habit, 2015, 12, 31));
|
||||||
assertTrue(containsRepetition(habit, 2016, 1, 18));
|
assertTrue(isChecked(habit, 2016, 1, 18));
|
||||||
assertTrue(containsRepetition(habit, 2016, 1, 28));
|
assertTrue(isChecked(habit, 2016, 1, 28));
|
||||||
assertFalse(containsRepetition(habit, 2016, 3, 10));
|
assertFalse(isChecked(habit, 2016, 3, 10));
|
||||||
|
|
||||||
habit = habitList.getByPosition(2);
|
habit = habitList.getByPosition(2);
|
||||||
assertThat(habit.getName(), equalTo("brush teeth"));
|
assertThat(habit.getName(), equalTo("brush teeth"));
|
||||||
@@ -111,17 +112,18 @@ public class ImportTest extends BaseUnitTest
|
|||||||
|
|
||||||
Habit h = habitList.getByPosition(2);
|
Habit h = habitList.getByPosition(2);
|
||||||
assertThat(h.getName(), equalTo("Vegan"));
|
assertThat(h.getName(), equalTo("Vegan"));
|
||||||
assertTrue(containsRepetition(h, 2016, 1, 24));
|
assertTrue(isChecked(h, 2016, 1, 24));
|
||||||
assertTrue(containsRepetition(h, 2016, 2, 5));
|
assertTrue(isChecked(h, 2016, 2, 5));
|
||||||
assertTrue(containsRepetition(h, 2016, 3, 18));
|
assertTrue(isChecked(h, 2016, 3, 18));
|
||||||
assertFalse(containsRepetition(h, 2016, 3, 14));
|
assertFalse(isChecked(h, 2016, 3, 14));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean containsRepetition(Habit h, int year, int month, int day)
|
private boolean isChecked(Habit h, int year, int month, int day)
|
||||||
{
|
{
|
||||||
GregorianCalendar date = DateUtils.getStartOfTodayCalendar();
|
GregorianCalendar date = DateUtils.getStartOfTodayCalendar();
|
||||||
date.set(year, month - 1, day);
|
date.set(year, month - 1, day);
|
||||||
return h.getRepetitions().containsTimestamp(new Timestamp(date));
|
Timestamp timestamp = new Timestamp(date);
|
||||||
|
return h.getRepetitions().getValue(timestamp) == YES_MANUAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void importFromFile(String assetFilename) throws IOException
|
private void importFromFile(String assetFilename) throws IOException
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ public class HabitTest extends BaseUnitTest
|
|||||||
{
|
{
|
||||||
Habit h = modelFactory.buildHabit();
|
Habit h = modelFactory.buildHabit();
|
||||||
assertFalse(h.isCompletedToday());
|
assertFalse(h.isCompletedToday());
|
||||||
h.getRepetitions().toggle(getToday());
|
h.getRepetitions().setValue(getToday(), Checkmark.YES_MANUAL);
|
||||||
assertTrue(h.isCompletedToday());
|
assertTrue(h.isCompletedToday());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,19 +102,19 @@ public class HabitTest extends BaseUnitTest
|
|||||||
h.setTargetValue(100.0);
|
h.setTargetValue(100.0);
|
||||||
assertFalse(h.isCompletedToday());
|
assertFalse(h.isCompletedToday());
|
||||||
|
|
||||||
h.getRepetitions().toggle(getToday(), 200_000);
|
h.getRepetitions().setValue(getToday(), 200_000);
|
||||||
assertTrue(h.isCompletedToday());
|
assertTrue(h.isCompletedToday());
|
||||||
h.getRepetitions().toggle(getToday(), 100_000);
|
h.getRepetitions().setValue(getToday(), 100_000);
|
||||||
assertTrue(h.isCompletedToday());
|
assertTrue(h.isCompletedToday());
|
||||||
h.getRepetitions().toggle(getToday(), 50_000);
|
h.getRepetitions().setValue(getToday(), 50_000);
|
||||||
assertFalse(h.isCompletedToday());
|
assertFalse(h.isCompletedToday());
|
||||||
|
|
||||||
h.setTargetType(Habit.AT_MOST);
|
h.setTargetType(Habit.AT_MOST);
|
||||||
h.getRepetitions().toggle(getToday(), 200_000);
|
h.getRepetitions().setValue(getToday(), 200_000);
|
||||||
assertFalse(h.isCompletedToday());
|
assertFalse(h.isCompletedToday());
|
||||||
h.getRepetitions().toggle(getToday(), 100_000);
|
h.getRepetitions().setValue(getToday(), 100_000);
|
||||||
assertTrue(h.isCompletedToday());
|
assertTrue(h.isCompletedToday());
|
||||||
h.getRepetitions().toggle(getToday(), 50_000);
|
h.getRepetitions().setValue(getToday(), 50_000);
|
||||||
assertTrue(h.isCompletedToday());
|
assertTrue(h.isCompletedToday());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,9 @@ import org.junit.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
import static junit.framework.TestCase.assertFalse;
|
import static org.hamcrest.MatcherAssert.*;
|
||||||
import static org.hamcrest.MatcherAssert.assertThat;
|
|
||||||
import static org.hamcrest.core.IsEqual.*;
|
import static org.hamcrest.core.IsEqual.*;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.isoron.uhabits.core.models.Checkmark.*;
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
import static org.mockito.Mockito.*;
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
public class RepetitionListTest extends BaseUnitTest
|
public class RepetitionListTest extends BaseUnitTest
|
||||||
@@ -60,11 +58,11 @@ public class RepetitionListTest extends BaseUnitTest
|
|||||||
|
|
||||||
today = DateUtils.getToday();
|
today = DateUtils.getToday();
|
||||||
|
|
||||||
reps.toggle(today.minus(3));
|
reps.setValue(today.minus(3), YES_MANUAL);
|
||||||
reps.toggle(today.minus(2));
|
reps.setValue(today.minus(2), YES_MANUAL);
|
||||||
reps.toggle(today);
|
reps.setValue(today, YES_MANUAL);
|
||||||
reps.toggle(today.minus(7));
|
reps.setValue(today.minus(7), YES_MANUAL);
|
||||||
reps.toggle(today.minus(5));
|
reps.setValue(today.minus(5), YES_MANUAL);
|
||||||
|
|
||||||
listener = mock(ModelObservable.Listener.class);
|
listener = mock(ModelObservable.Listener.class);
|
||||||
reps.getObservable().addListener(listener);
|
reps.getObservable().addListener(listener);
|
||||||
@@ -78,17 +76,6 @@ public class RepetitionListTest extends BaseUnitTest
|
|||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test_contains()
|
|
||||||
{
|
|
||||||
assertTrue(reps.containsTimestamp(today));
|
|
||||||
assertTrue(reps.containsTimestamp(today.minus(2)));
|
|
||||||
assertTrue(reps.containsTimestamp(today.minus(3)));
|
|
||||||
|
|
||||||
assertFalse(reps.containsTimestamp(today.minus(1)));
|
|
||||||
assertFalse(reps.containsTimestamp(today.minus(4)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test_getOldest()
|
public void test_getOldest()
|
||||||
{
|
{
|
||||||
@@ -126,7 +113,7 @@ public class RepetitionListTest extends BaseUnitTest
|
|||||||
// Leave the month of March empty, to check that it returns null
|
// Leave the month of March empty, to check that it returns null
|
||||||
if (month == MARCH) continue;
|
if (month == MARCH) continue;
|
||||||
|
|
||||||
reps.toggle(new Timestamp(day));
|
reps.setValue(new Timestamp(day), YES_MANUAL);
|
||||||
|
|
||||||
// Repetitions in December should not be counted
|
// Repetitions in December should not be counted
|
||||||
if (month == DECEMBER) continue;
|
if (month == DECEMBER) continue;
|
||||||
@@ -155,32 +142,22 @@ public class RepetitionListTest extends BaseUnitTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test_toggle()
|
public void test_setValue()
|
||||||
{
|
{
|
||||||
assertTrue(reps.containsTimestamp(today));
|
assertThat(reps.getValue(today), equalTo(YES_MANUAL));
|
||||||
reps.toggle(today);
|
reps.setValue(today, NO);
|
||||||
assertFalse(reps.containsTimestamp(today));
|
assertThat(reps.getValue(today), equalTo(NO));
|
||||||
verify(listener).onModelChange();
|
verify(listener, times(2)).onModelChange();
|
||||||
reset(listener);
|
|
||||||
|
|
||||||
assertFalse(reps.containsTimestamp(today.minus(1)));
|
|
||||||
reps.toggle(today.minus(1));
|
|
||||||
assertTrue(reps.containsTimestamp(today.minus(1)));
|
|
||||||
verify(listener).onModelChange();
|
|
||||||
reset(listener);
|
reset(listener);
|
||||||
|
|
||||||
habit.setType(Habit.NUMBER_HABIT);
|
habit.setType(Habit.NUMBER_HABIT);
|
||||||
reps.toggle(today, 100);
|
reps.setValue(today, 100);
|
||||||
Repetition check = reps.getByTimestamp(today);
|
assertThat(reps.getValue(today), equalTo(100));
|
||||||
assertNotNull(check);
|
verify(listener, times(2)).onModelChange();
|
||||||
assertThat(check.getValue(), equalTo(100));
|
|
||||||
verify(listener).onModelChange();
|
|
||||||
reset(listener);
|
reset(listener);
|
||||||
|
|
||||||
reps.toggle(today, 500);
|
reps.setValue(today, 500);
|
||||||
check = reps.getByTimestamp(today);
|
assertThat(reps.getValue(today), equalTo(500));
|
||||||
assertNotNull(check);
|
|
||||||
assertThat(check.getValue(), equalTo(500));
|
|
||||||
verify(listener, times(2)).onModelChange();
|
verify(listener, times(2)).onModelChange();
|
||||||
reset(listener);
|
reset(listener);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void test_getAll()
|
public void test_getAll()
|
||||||
{
|
{
|
||||||
toggle(0, 20);
|
check(0, 20);
|
||||||
|
|
||||||
double expectedValues[] = {
|
double expectedValues[] = {
|
||||||
0.655747,
|
0.655747,
|
||||||
@@ -82,7 +82,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void test_getTodayValue()
|
public void test_getTodayValue()
|
||||||
{
|
{
|
||||||
toggle(0, 20);
|
check(0, 20);
|
||||||
double actual = habit.getScores().getTodayValue();
|
double actual = habit.getScores().getTodayValue();
|
||||||
assertThat(actual, closeTo(0.655747, E));
|
assertThat(actual, closeTo(0.655747, E));
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void test_getValue()
|
public void test_getValue()
|
||||||
{
|
{
|
||||||
toggle(0, 20);
|
check(0, 20);
|
||||||
|
|
||||||
double expectedValues[] = {
|
double expectedValues[] = {
|
||||||
0.655747,
|
0.655747,
|
||||||
@@ -124,7 +124,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void test_getValueWithSkip()
|
public void test_getValueWithSkip()
|
||||||
{
|
{
|
||||||
toggle(0, 20);
|
check(0, 20);
|
||||||
addSkip(5);
|
addSkip(5);
|
||||||
addSkip(10);
|
addSkip(10);
|
||||||
addSkip(11);
|
addSkip(11);
|
||||||
@@ -161,7 +161,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void test_getValueWithSkip2()
|
public void test_getValueWithSkip2()
|
||||||
{
|
{
|
||||||
toggle(5);
|
check(5);
|
||||||
addSkip(4);
|
addSkip(4);
|
||||||
|
|
||||||
double[] expectedValues = {
|
double[] expectedValues = {
|
||||||
@@ -180,7 +180,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void test_getValues()
|
public void test_getValues()
|
||||||
{
|
{
|
||||||
toggle(0, 20);
|
check(0, 20);
|
||||||
|
|
||||||
Timestamp today = DateUtils.getToday();
|
Timestamp today = DateUtils.getToday();
|
||||||
Timestamp from = today.minus(4);
|
Timestamp from = today.minus(4);
|
||||||
@@ -214,7 +214,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
values.add(NO);
|
values.add(NO);
|
||||||
values.add(NO);
|
values.add(NO);
|
||||||
}
|
}
|
||||||
toggle(values);
|
check(values);
|
||||||
assertThat(habit.getScores().getTodayValue(), closeTo(2/3.0, E));
|
assertThat(habit.getScores().getTodayValue(), closeTo(2/3.0, E));
|
||||||
|
|
||||||
// Missing 2 repetitions out of 4 per week, the score should converge to 50%
|
// Missing 2 repetitions out of 4 per week, the score should converge to 50%
|
||||||
@@ -249,7 +249,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
values.add(NO);
|
values.add(NO);
|
||||||
values.add(YES_MANUAL);
|
values.add(YES_MANUAL);
|
||||||
}
|
}
|
||||||
toggle(values);
|
check(values);
|
||||||
assertThat(habit.getScores().getTodayValue(), closeTo(1.0, 1e-3));
|
assertThat(habit.getScores().getTodayValue(), closeTo(1.0, 1e-3));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,18 +259,18 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
// Daily habits should achieve at least 99% in 3 months
|
// Daily habits should achieve at least 99% in 3 months
|
||||||
habit = fixtures.createEmptyHabit();
|
habit = fixtures.createEmptyHabit();
|
||||||
habit.setFrequency(Frequency.DAILY);
|
habit.setFrequency(Frequency.DAILY);
|
||||||
for (int i = 0; i < 90; i++) toggle(i);
|
for (int i = 0; i < 90; i++) check(i);
|
||||||
assertThat(habit.getScores().getTodayValue(), greaterThan(0.99));
|
assertThat(habit.getScores().getTodayValue(), greaterThan(0.99));
|
||||||
|
|
||||||
// Weekly habits should achieve at least 99% in 9 months
|
// Weekly habits should achieve at least 99% in 9 months
|
||||||
habit = fixtures.createEmptyHabit();
|
habit = fixtures.createEmptyHabit();
|
||||||
habit.setFrequency(Frequency.WEEKLY);
|
habit.setFrequency(Frequency.WEEKLY);
|
||||||
for (int i = 0; i < 39; i++) toggle(7 * i);
|
for (int i = 0; i < 39; i++) check(7 * i);
|
||||||
assertThat(habit.getScores().getTodayValue(), greaterThan(0.99));
|
assertThat(habit.getScores().getTodayValue(), greaterThan(0.99));
|
||||||
|
|
||||||
// Monthly habits should achieve at least 99% in 18 months
|
// Monthly habits should achieve at least 99% in 18 months
|
||||||
habit.setFrequency(new Frequency(1, 30));
|
habit.setFrequency(new Frequency(1, 30));
|
||||||
for (int i = 0; i < 18; i++) toggle(30 * i);
|
for (int i = 0; i < 18; i++) check(30 * i);
|
||||||
assertThat(habit.getScores().getTodayValue(), greaterThan(0.99));
|
assertThat(habit.getScores().getTodayValue(), greaterThan(0.99));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,7 +292,7 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
{
|
{
|
||||||
assertThat(habit.getScores().getTodayValue(), closeTo(0.0, E));
|
assertThat(habit.getScores().getTodayValue(), closeTo(0.0, E));
|
||||||
|
|
||||||
toggle(0, 2);
|
check(0, 2);
|
||||||
assertThat(habit.getScores().getTodayValue(), closeTo(0.101149, E));
|
assertThat(habit.getScores().getTodayValue(), closeTo(0.101149, E));
|
||||||
|
|
||||||
habit.setFrequency(new Frequency(1, 2));
|
habit.setFrequency(new Frequency(1, 2));
|
||||||
@@ -324,36 +324,36 @@ public class ScoreListTest extends BaseUnitTest
|
|||||||
assertThat(writer.toString(), equalTo(expectedCSV));
|
assertThat(writer.toString(), equalTo(expectedCSV));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggle(final int offset)
|
private void check(final int offset)
|
||||||
{
|
{
|
||||||
RepetitionList reps = habit.getRepetitions();
|
RepetitionList reps = habit.getRepetitions();
|
||||||
Timestamp today = DateUtils.getToday();
|
Timestamp today = DateUtils.getToday();
|
||||||
reps.toggle(today.minus(offset));
|
reps.setValue(today.minus(offset), YES_MANUAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggle(final int from, final int to)
|
private void check(final int from, final int to)
|
||||||
{
|
{
|
||||||
RepetitionList reps = habit.getRepetitions();
|
RepetitionList reps = habit.getRepetitions();
|
||||||
Timestamp today = DateUtils.getToday();
|
Timestamp today = DateUtils.getToday();
|
||||||
|
|
||||||
for (int i = from; i < to; i++)
|
for (int i = from; i < to; i++)
|
||||||
reps.toggle(today.minus(i));
|
reps.setValue(today.minus(i), YES_MANUAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggle(ArrayList<Integer> values)
|
private void check(ArrayList<Integer> values)
|
||||||
{
|
{
|
||||||
RepetitionList reps = habit.getRepetitions();
|
RepetitionList reps = habit.getRepetitions();
|
||||||
Timestamp today = DateUtils.getToday();
|
Timestamp today = DateUtils.getToday();
|
||||||
for (int i = 0; i < values.size(); i++)
|
for (int i = 0; i < values.size(); i++)
|
||||||
if (values.get(i) == YES_MANUAL)
|
if (values.get(i) == YES_MANUAL)
|
||||||
reps.toggle(today.minus(i));
|
reps.setValue(today.minus(i), YES_MANUAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSkip(final int day)
|
private void addSkip(final int day)
|
||||||
{
|
{
|
||||||
RepetitionList reps = habit.getRepetitions();
|
RepetitionList reps = habit.getRepetitions();
|
||||||
Timestamp today = DateUtils.getToday();
|
Timestamp today = DateUtils.getToday();
|
||||||
reps.toggle(today.minus(day), Checkmark.SKIP);
|
reps.setValue(today.minus(day), Checkmark.SKIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkScoreValues(double[] expectedValues)
|
private void checkScoreValues(double[] expectedValues)
|
||||||
|
|||||||
Reference in New Issue
Block a user