/*
* jMemorize - Learning made easy (and fun) - A Leitner flashcards tool
* Copyright(C) 2004-2008 Riad Djemili and contributors
*
* This program 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 1, or (at your option)
* any later version.
*
* This program 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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package jmemorize.core.test;
import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import jmemorize.core.learn.LearnHistory;
import jmemorize.core.learn.LearnHistory.SessionSummary;
import junit.framework.TestCase;
public class LearnHistoryTest extends TestCase
{
private static long MINUTE = 1000*60;
private LearnHistory m_history;
private Date m_date0 = createDate(14, 30);
private Date m_date1 = createDate(14, 50);
private Date m_date2 = createDate(14, 55);
private Date m_date3 = createDate(15, 00);
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception
{
m_history = new LearnHistory(null);
}
public void testGetLastSummaryValues()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
SessionSummary summary = m_history.getLastSummary();
assertEquals(2, (int)summary.getPassed());
assertEquals(0, (int)summary.getFailed());
assertEquals(1, (int)summary.getSkipped());
assertEquals(1, (int)summary.getRelearned());
}
public void testGetLastSummaryDates()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
SessionSummary summary = m_history.getLastSummary();
assertEquals(m_date0, summary.getStart());
assertEquals(m_date1, summary.getEnd());
}
public void testAllSummariesDuration()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
SessionSummary sessions = m_history.getSessionsSummary();
assertEquals(25, sessions.getDuration());
}
public void testAllsingleSummaryDuration()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
SessionSummary session = m_history.getLastSummary();
assertEquals(20, session.getDuration());
}
public void testGetSummariesLimit()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
m_history.addSummary(m_date2, m_date3, 1, 3, 0, 1);
List<SessionSummary> summaries = m_history.getSummaries(2);
assertEquals(4, (int)(summaries.get(0)).getPassed());
assertEquals(1, (int)(summaries.get(1)).getPassed());
assertEquals(2, summaries.size());
}
public void testGetSingleDailySummaries()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
m_history.addSummary(m_date2, m_date3, 1, 3, 0, 1);
List<SessionSummary> summaries = m_history.getSummaries(LearnHistory.DATE_COMP);
SessionSummary summary = summaries.get(0);
assertSession(7, 6, 1, 3, summary);
assertEquals(1, summaries.size());
}
public void testGetSingleDailySummariesDates()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
m_history.addSummary(m_date2, m_date3, 1, 3, 0, 1);
List<SessionSummary> summaries = m_history.getSummaries(LearnHistory.DATE_COMP);
SessionSummary summary = summaries.get(0);
assertEquals(m_date0, summary.getStart());
assertEquals(m_date3, summary.getEnd());
assertEquals(1, summaries.size());
}
public void testGetTwoDailySummaries()
{
Date today0 = new Date(System.currentTimeMillis() - MINUTE * 10);
Date today1 = new Date(System.currentTimeMillis() - MINUTE * 5);
m_history.addSummary(today0, today1, 2, 0, 1, 1);
m_history.addSummary(m_date0, m_date1, 4, 3, 0, 1);
m_history.addSummary(m_date1, m_date2, 1, 1, 0, 1);
List<SessionSummary> summaries = m_history.getSummaries(LearnHistory.DATE_COMP);
assertSession(2, 0, 1, 1, summaries.get(0));
assertSession(5, 4, 0, 2, summaries.get(1));
assertEquals(2, summaries.size());
}
public void testGetSummariesInOrder()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
List<SessionSummary> summaries = m_history.getSummaries();
assertEquals(2, (int)(summaries.get(0)).getPassed());
assertEquals(4, (int)(summaries.get(1)).getPassed());
}
public void testGetAverageValues()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
SessionSummary average = m_history.getAverage();
assertEquals(3.0, average.getPassed(), 0.1f);
assertEquals(1.5, average.getFailed(), 0.1f);
assertEquals(0.5, average.getSkipped(), 0.1f);
assertEquals(1.0, average.getRelearned(), 0.1f);
}
public void testGetAverageDates()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
SessionSummary average = m_history.getAverage();
assertEquals(m_date0, average.getStart());
assertEquals(m_date2, average.getEnd());
}
public void testGetSessionsSummaryValues()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
SessionSummary summary = m_history.getSessionsSummary();
assertSession(6, 3, 1, 2, summary);
}
public void testGetSessionsSummaryDates()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
SessionSummary all = m_history.getSessionsSummary();
assertEquals(m_date0, all.getStart());
assertEquals(m_date2, all.getEnd());
}
public void testSaveLoadRoundtrip() throws Exception
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
File file = new File("test_stats.xml");
m_history.save(file);
LearnHistory stats = new LearnHistory(file);
assertEquals(m_history, stats);
}
public void testGetSessionSummaryByDate()
{
m_history.addSummary(m_date0, m_date1, 2, 0, 1, 1);
m_history.addSummary(m_date1, m_date2, 4, 3, 0, 1);
SessionSummary summary = m_history.getSummary(m_date0, LearnHistory.DATE_COMP);
assertSession(6, 3, 1, 2, summary);
}
private void assertSession(int passed, int failed, int skipped,
int relearned, SessionSummary summary)
{
assertEquals(passed, (int)summary.getPassed());
assertEquals(failed, (int)summary.getFailed());
assertEquals(skipped, (int)summary.getSkipped());
assertEquals(relearned, (int)summary.getRelearned());
}
private Date createDate(int hour, int minute)
{
Calendar calendar = Calendar.getInstance();
calendar.set(2007, 1, 1, hour, minute);
return calendar.getTime();
}
}