/*
* Copyright (C) 2007 Snorre Gylterud, Stein Magnus Jodal, Johannes Knutsen,
* Erik Bagge Ottesen, Ralf Bjarne Taraldset, and Iterate AS
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*/
package no.ntnu.mmfplanner.model;
import java.awt.Color;
import no.ntnu.mmfplanner.ProjectTestFixture;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Test suite for {@link Project}
*/
public class ProjectTest extends ProjectTestFixture {
@Before
public void setUp() throws Exception {
project.addPropertyChangeListener(propChg);
}
@Test
public void setName() {
String name = "MMF Planner";
project.setName(name);
assertEquals(name, project.getName());
assertEquals(1, propCount);
assertEquals(name, propEvt.getNewValue());
}
@Test
public void setPeriods() throws MmfException {
int periods = 6;
project.setPeriods(periods);
assertEquals(periods, project.getPeriods());
assertEquals(1, propCount);
assertEquals(periods, propEvt.getNewValue());
}
@Test
public void setMaxMMFsPerPeriod() throws MmfException {
int maxMMFs = 6;
project.setMaxMmfsPerPeriod(maxMMFs);
assertEquals(maxMMFs, project.getMaxMmfsPerPeriod());
assertEquals(1, propCount);
assertEquals(maxMMFs, propEvt.getNewValue());
}
@Test (expected=MmfException.class)
public void setMaxMMFsPerPeriodFault() throws MmfException {
int maxMMFs = -1;
project.setMaxMmfsPerPeriod(maxMMFs);
assertEquals(maxMMFs, project.getMaxMmfsPerPeriod());
}
@Test
public void setInterestRate() {
double interestRate = 0.025;
project.setInterestRate(interestRate);
assertEquals(interestRate, project.getInterestRate(), 0.0001);
assertEquals(1, propCount);
assertEquals(interestRate, propEvt.getNewValue());
}
@Test
public void addCategory() {
assertEquals(2, project.getCategorySize());
Category category = new Category("Category 1", Color.RED, null);
project.addCategory(category);
assertEquals(category, project
.getCategory(project.getCategorySize() - 1));
assertEquals(3, project.getCategorySize());
assertEquals(1, propCount);
assertEquals(category, propEvt.getNewValue());
}
@Test
public void removeCategory() {
assertEquals(2, project.getCategorySize());
Category category = project.getCategory(project.getCategorySize() - 1);
project.removeCategory(category);
assertEquals(1, project.getCategorySize());
assertEquals(1, propCount);
assertEquals(null, propEvt.getNewValue());
}
@Test
public void add() {
assertEquals(2, project.size());
Mmf mmfC = new Mmf("C", "MMF C");
project.add(mmfC);
assertEquals(mmfC, project.get("C"));
assertEquals(3, project.size());
try {
project.add(mmfC);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
}
assertEquals(3, project.size());
assertEquals(1, propCount);
assertEquals(mmfC, propEvt.getNewValue());
}
@Test
public void getNextId() {
// we add D three times, first should be D, second C, third E
testNewMmf("D", "D");
testNewMmf("D", "C");
testNewMmf("D", "E");
// rest should use F-X
for (char id = 'F'; id < 'Y'; id++) {
testNewMmf(null, "" + id);
}
// remove B and U, then the next should use Y, B, U
project.remove(project.get("B"));
project.remove(project.get("U"));
testNewMmf(null, "Y");
testNewMmf("Y", "B");
testNewMmf("B", "U");
// remove L, next should use L
project.remove(project.get("L"));
testNewMmf(null, "L");
// ZA-ZZY
for (int i = 25; i < 25 * 3; i++) {
String id = "ZZZ".substring(0, i / 25) + (char) ('A' + i % 25);
testNewMmf(null, id);
}
// remove I and ZL, next should use I, ZL, ZZZA
project.remove(project.get("ZL"));
project.remove(project.get("I"));
testNewMmf(null, "I");
testNewMmf(null, "ZL");
testNewMmf(null, "ZZZA");
}
private void testNewMmf(String id, String expected) {
Mmf mmf = new Mmf(id, "Test " + id + "=>" + expected);
project.add(mmf);
assertEquals(expected, mmf.getId());
mmf = project.get(expected);
assertEquals(expected, mmf.getId());
}
@Test
public void remove() {
// Test get-by-id
assertEquals(2, project.size());
Mmf mmf1 = project.get("A");
project.remove(mmf1);
assertEquals(1, project.size());
assertEquals(2, propCount); // both mmf and one precursor
assertEquals(null, propEvt.getNewValue());
project.add(mmf1);
assertEquals(3, propCount);
assertEquals(mmf1, propEvt.getNewValue());
// Test get-by-index
assertEquals(2, project.size());
Mmf mmf2 = project.get(0);
project.remove(mmf2);
Mmf mmf3 = project.get(0);
project.remove(mmf3);
assertEquals(0, project.size());
project.remove(mmf3);
assertEquals(0, project.size());
assertEquals(6, propCount);
assertEquals(null, propEvt.getNewValue());
}
@Test
public void testChangeListeners() {
assertEquals(0, propCount);
Category c = project.getCategory(0);
c.setName("New name");
assertEquals(1, propCount);
project.removeCategory(c);
assertEquals(4, propCount); // remove + 2*remove category
c.setName("Newer name");
assertEquals(4, propCount);
project.addCategory(c);
assertEquals(5, propCount);
c.setName("Newest name");
assertEquals(6, propCount);
propCount = 0;
Mmf mmf = project.get(0);
mmf.setName("New name");
assertEquals(1, propCount);
project.remove(mmf);
assertEquals(3, propCount); // remove + remove precursor
mmf.setName("Newer name");
assertEquals(3, propCount);
project.add(mmf);
assertEquals(4, propCount);
mmf.setName("Newest name");
assertEquals(5, propCount);
propCount = 0;
project.setName("new name");
assertEquals(1, propCount);
project.removePropertyChangeListener(propChg);
project.setName("Newer name");
assertEquals(1, propCount);
project.addPropertyChangeListener(propChg);
project.setName("Newest name");
assertEquals(2, propCount);
}
@Test
public void getSaNpvTable() {
int[][] table = project.getSaNpvTable();
assertEquals(2, table.length);
assertEquals(12, table[0].length);
}
}