/** Sons of Liberty influences teaching. */ public void testSonsOfLiberty() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit lumberjack = units.next(); lumberjack.setType(expertLumberJackType); lumberjack.setLocation(university); assertEquals(4, lumberjack.getNeededTurnsOfTraining()); colony.addGoods(bellsType, 100000); assertEquals(2, lumberjack.getNeededTurnsOfTraining()); trainForTurns(colony, 2); assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(2, getUnitList(colony, expertLumberJackType).size()); FreeColTestUtils.setStudentSelection(selection); }
/** * The time to teach somebody does not depend on the one who is being taught, but on the teacher. */ public void testTeachPettyCriminalsByMaster() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit criminal = units.next(); criminal.setType(pettyCriminalType); criminal.setLocation(colony.getBuilding(townHallType)); Unit teacher = units.next(); teacher.setType(masterBlacksmithType); teacher.setLocation(university); assertEquals(teacher.getNeededTurnsOfTraining(), 4); assertEquals(criminal, teacher.getStudent()); trainForTurns(colony, teacher.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, pettyCriminalType).size()); assertEquals(indenturedServantType, criminal.getType()); FreeColTestUtils.setStudentSelection(selection); }
/** Test that an indentured servant becomes a free colonist */ public void testTeachIndenturedServants() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit indenturedServant = units.next(); indenturedServant.setType(indenturedServantType); Unit teacher = units.next(); teacher.setType(masterBlacksmithType); teacher.setLocation(university); assertEquals(teacher.getNeededTurnsOfTraining(), 4); assertEquals(indenturedServant, teacher.getStudent()); // Train to become free colonist trainForTurns(colony, teacher.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, indenturedServantType).size()); assertEquals(freeColonistType, indenturedServant.getType()); FreeColTestUtils.setStudentSelection(selection); }
public void testProductionBonus() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(6, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit carpenter = units.next(); carpenter.setType(masterCarpenterType); Unit blacksmith = units.next(); blacksmith.setType(masterBlacksmithType); Unit statesman = units.next(); statesman.setType(elderStatesmanType); units.next().setType(freeColonistType); units.next().setType(freeColonistType); units.next().setType(freeColonistType); carpenter.setLocation(university); blacksmith.setLocation(university); statesman.setLocation(university); for (int bonus = -2; bonus < 3; bonus++) { setProductionBonus(colony, bonus); assertEquals(4 - bonus, carpenter.getNeededTurnsOfTraining()); assertEquals(6 - bonus, blacksmith.getNeededTurnsOfTraining()); assertEquals(8 - bonus, statesman.getNeededTurnsOfTraining()); } FreeColTestUtils.setStudentSelection(selection); }
/** Test that an petty criminal becomes an indentured servant */ public void testTeachPettyCriminals() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit criminal = units.next(); criminal.setType(pettyCriminalType); criminal.setLocation(colony.getBuilding(townHallType)); Unit teacher = units.next(); teacher.setType(expertOreMinerType); teacher.setLocation(university); assertEquals(teacher.getNeededTurnsOfTraining(), 4); assertTrue(criminal.canBeStudent(teacher)); assertEquals(criminal, teacher.getStudent()); // PETTY_CRIMINALS become INDENTURED_SERVANTS trainForTurns(colony, teacher.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, pettyCriminalType).size()); assertEquals(indenturedServantType, criminal.getType()); FreeColTestUtils.setStudentSelection(selection); }
/** * Test that an indentured servant cannot be promoted to free colonist and learn a skill at the * same time. */ public void testTeachingDoublePromotion() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); // prevent starvation colony.addGoods(foodType, 100); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit indenturedServant = units.next(); indenturedServant.setType(indenturedServantType); indenturedServant.setLocation(colony.getBuilding(townHallType)); Unit criminal = units.next(); criminal.setType(pettyCriminalType); criminal.setLocation(colony.getBuilding(townHallType)); Unit teacher1 = units.next(); teacher1.setType(expertOreMinerType); Unit teacher2 = units.next(); teacher2.setType(expertLumberJackType); // set location only AFTER all types have been set! teacher1.setLocation(university); teacher2.setLocation(university); assertEquals(criminal, teacher1.getStudent()); assertEquals(indenturedServant, teacher2.getStudent()); // Training time trainForTurns(colony, teacher1.getNeededTurnsOfTraining()); // indentured servant should have been promoted to free colonist // petty criminal should have been promoted to indentured servant assertEquals(freeColonistType, indenturedServant.getType()); assertEquals(indenturedServantType, criminal.getType()); assertEquals(1, getUnitList(colony, expertOreMinerType).size()); assertEquals(1, getUnitList(colony, expertLumberJackType).size()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, indenturedServantType).size()); assertEquals(0, getUnitList(colony, pettyCriminalType).size()); criminal.setLocation(getGame().getMap().getTile(10, 8)); assertNull(teacher1.getStudent()); assertEquals(teacher2, indenturedServant.getTeacher()); // Train again trainForTurns(colony, teacher2.getNeededTurnsOfTraining()); assertEquals(expertLumberJackType, indenturedServant.getType()); assertEquals(1, getUnitList(colony, expertOreMinerType).size()); assertEquals(2, getUnitList(colony, expertLumberJackType).size()); assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(0, getUnitList(colony, indenturedServantType).size()); assertEquals(0, getUnitList(colony, pettyCriminalType).size()); FreeColTestUtils.setStudentSelection(selection); }
public void testTwoTeachersSimple() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(5, SchoolLevel.UNIVERSITY); // prevent starvation colony.addGoods(foodType, 100); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist1 = units.next(); colonist1.setType(freeColonistType); colonist1.setLocation(colony.getBuilding(townHallType)); Unit colonist2 = units.next(); colonist2.setType(freeColonistType); colonist2.setLocation(colony.getBuilding(townHallType)); Unit colonist3 = units.next(); colonist3.setType(freeColonistType); colonist3.setLocation(colony.getBuilding(townHallType)); Unit black = units.next(); black.setType(masterBlacksmithType); Unit ore = units.next(); ore.setType(expertOreMinerType); black.setLocation(university); ore.setLocation(university); assertEquals(3, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, masterBlacksmithType).size()); assertEquals(1, getUnitList(colony, expertOreMinerType).size()); trainForTurns(colony, ore.getNeededTurnsOfTraining()); assertEquals(2, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, masterBlacksmithType).size()); assertEquals(2, getUnitList(colony, expertOreMinerType).size()); assertNotNull(ore.getStudent()); assertNotNull(black.getStudent()); trainForTurns(colony, black.getNeededTurnsOfTraining() - black.getTurnsOfTraining()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(2, getUnitList(colony, masterBlacksmithType).size()); assertEquals(2, getUnitList(colony, expertOreMinerType).size()); FreeColTestUtils.setStudentSelection(selection); }
/** * Progress in teaching is bound to the teacher and not the learner. * * <p>Moving students around does not slow education. This behavior is there to simplify gameplay. */ public void testTeacherStoresProgress() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit outsider = new ServerUnit(game, colony.getTile(), colony.getOwner(), freeColonistType); Building townHall = colony.getBuilding(townHallType); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(townHall); Unit teacher = units.next(); teacher.setType(expertOreMinerType); teacher.setLocation(university); assertEquals(teacher.getStudent(), colonist); assertEquals(colonist.getTeacher(), teacher); // Train to become free colonist then swap the colonist with // another one. trainForTurns(colony, teacher.getNeededTurnsOfTraining() - 1); colonist.setLocation(colony.getTile()); outsider.setLocation(townHall); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(teacher.getStudent(), outsider); ServerTestHelper.newTurn(); assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(expertOreMinerType, outsider.getType()); FreeColTestUtils.setStudentSelection(selection); }
/** * If there are two teachers of the same kind, but just one colonist to be taught, this should not * mean any speed up. */ public void testTwoTeachersOfSameKind() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit lumberjack1 = units.next(); lumberjack1.setType(expertLumberJackType); Unit lumberjack2 = units.next(); lumberjack2.setType(expertLumberJackType); lumberjack1.setLocation(university); lumberjack2.setLocation(university); assertEquals(colonist, lumberjack1.getStudent()); assertNull(lumberjack2.getStudent()); for (int i = lumberjack1.getNeededTurnsOfTraining(); i > 0; i--) { assertEquals(1, getUnitList(colony, freeColonistType).size()); trainForTurns(colony, 1); } assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(3, getUnitList(colony, expertLumberJackType).size()); FreeColTestUtils.setStudentSelection(selection); }
public void testUniversity() { Game game = ServerTestHelper.startServerGame(getTestMap(true)); // otherwise this test will crash and burn boolean selection = FreeColTestUtils.setStudentSelection(false); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); assertEquals(4, colony.getUnitCount()); Building university = colony.getBuilding(universityType); assertNotNull(university); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit elder = units.next(); assertEquals(elder.getType(), elderStatesmanType); elder.setLocation(university); assertEquals(elder.getStudent(), colonist); trainForTurns(colony, elder.getNeededTurnsOfTraining()); assertEquals(elderStatesmanType, colonist.getType()); FreeColTestUtils.setStudentSelection(selection); }
public void testCollege() { Game game = ServerTestHelper.startServerGame(getTestMap(true)); // otherwise this test will crash and burn boolean selection = FreeColTestUtils.setStudentSelection(false); Colony colony = getSchoolColony(4, SchoolLevel.COLLEGE); Building college = colony.getBuilding(collegeType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit blackSmith = units.next(); blackSmith.setType(masterBlacksmithType); blackSmith.setLocation(college); assertEquals(blackSmith.getStudent(), colonist); trainForTurns(colony, blackSmith.getNeededTurnsOfTraining()); assertEquals(masterBlacksmithType, colonist.getType()); FreeColTestUtils.setStudentSelection(selection); }
/** Check that a free colonist can be taught something. */ public void testExpertTeaching() { Game game = ServerTestHelper.startServerGame(getTestMap(true)); // otherwise this test will crash and burn boolean selection = FreeColTestUtils.setStudentSelection(false); Colony colony = getSchoolColony(4, SchoolLevel.SCHOOLHOUSE); Building school = colony.getBuilding(schoolType); assertTrue(school.canTeach()); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit lumber = units.next(); lumber.setType(expertLumberJackType); Unit black = units.next(); black.setType(masterBlacksmithType); Unit ore = units.next(); ore.setType(expertOreMinerType); assertTrue(colony.canTrain(ore)); ore.setLocation(school); assertEquals(ore.getStudent(), colonist); trainForTurns(colony, ore.getNeededTurnsOfTraining()); assertEquals(expertOreMinerType, colonist.getType()); FreeColTestUtils.setStudentSelection(selection); }
/** * Trains partly one colonist then put another teacher. * * <p>Should not save progress but start all over. */ public void testPartTraining() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit lumberjack = units.next(); lumberjack.setType(expertLumberJackType); Unit miner = units.next(); miner.setType(expertOreMinerType); // Put Lumberjack in School lumberjack.setLocation(university); assertEquals(lumberjack.getStudent(), colonist); assertEquals(colonist.getTeacher(), lumberjack); ServerTestHelper.newTurn(); ServerTestHelper.newTurn(); // After 2 turns replace by miner. Progress starts from scratch. lumberjack.setLocation(colony.getWorkLocationFor(lumberjack, grainType)); assertNull(lumberjack.getStudent()); assertNull(colonist.getTeacher()); miner.setLocation(university); assertEquals(miner.getStudent(), colonist); assertEquals(colonist.getTeacher(), miner); trainForTurns(colony, miner.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(2, getUnitList(colony, expertOreMinerType).size()); FreeColTestUtils.setStudentSelection(selection); }
/** If there are two teachers, but just one colonist to be taught. */ public void testSingleGuyTwoTeachers() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit lumberJack = units.next(); lumberJack.setType(expertLumberJackType); Unit blackSmith = units.next(); blackSmith.setType(masterBlacksmithType); // It should take 4 turns to train an expert lumber jack and 6 // to train a blacksmith, so the lumber jack chould be // finished teaching first. The school works for now as // first come first serve. blackSmith.setLocation(university); lumberJack.setLocation(university); assertTrue(colonist.getTeacher() == blackSmith); assertNull(lumberJack.getStudent()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, expertLumberJackType).size()); assertEquals(1, getUnitList(colony, masterBlacksmithType).size()); trainForTurns(colony, blackSmith.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, expertLumberJackType).size()); assertEquals(2, getUnitList(colony, masterBlacksmithType).size()); FreeColTestUtils.setStudentSelection(selection); }
/** * Test that free colonists are trained before indentured servants, which are preferred to petty * criminals. */ public void testTeachingOrder() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); // prevent starvation colony.addGoods(foodType, 100); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit indenturedServant = units.next(); indenturedServant.setType(indenturedServantType); indenturedServant.setLocation(colony.getBuilding(townHallType)); Unit criminal = units.next(); criminal.setType(pettyCriminalType); criminal.setLocation(colony.getBuilding(townHallType)); Unit teacher = units.next(); teacher.setType(expertOreMinerType); teacher.setLocation(university); assertTrue(colonist.canBeStudent(teacher)); assertTrue(indenturedServant.canBeStudent(teacher)); assertTrue(criminal.canBeStudent(teacher)); // Criminal training assertEquals(teacher, criminal.getTeacher()); assertEquals(criminal, teacher.getStudent()); trainForTurns(colony, teacher.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, pettyCriminalType).size()); assertEquals(indenturedServantType, criminal.getType()); criminal.setLocation(getGame().getMap().getTile(10, 8)); // Servant training assertNull(teacher.getStudent()); ServerTestHelper.newTurn(); assertEquals(teacher, indenturedServant.getTeacher()); assertEquals(indenturedServant, teacher.getStudent()); trainForTurns(colony, teacher.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, indenturedServantType).size()); assertEquals(2, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, expertOreMinerType).size()); assertEquals(freeColonistType, indenturedServant.getType()); // Colonist(former servant) training continues assertEquals(teacher, indenturedServant.getTeacher()); assertEquals(indenturedServant, teacher.getStudent()); assertEquals(colonist.getTeacher(), null); trainForTurns(colony, teacher.getNeededTurnsOfTraining()); assertEquals(0, getUnitList(colony, indenturedServantType).size()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(2, getUnitList(colony, expertOreMinerType).size()); assertEquals(expertOreMinerType, indenturedServant.getType()); assertEquals(indenturedServant.getTeacher(), null); FreeColTestUtils.setStudentSelection(selection); }
/** * Progress in teaching is bound to the teacher and not the learner. * * <p>Moving a teacher inside the colony should not reset its training. */ public void testMoveTeacherInside() { boolean selection = FreeColTestUtils.setStudentSelection(false); Game game = ServerTestHelper.startServerGame(getTestMap(true)); Colony colony = getSchoolColony(4, SchoolLevel.UNIVERSITY); // prevent starvation colony.addGoods(foodType, 100); Building university = colony.getBuilding(universityType); Iterator<Unit> units = colony.getUnitIterator(); Unit colonist = units.next(); colonist.setType(freeColonistType); colonist.setLocation(colony.getBuilding(townHallType)); Unit criminal = units.next(); criminal.setType(pettyCriminalType); criminal.setLocation(colony.getBuilding(townHallType)); Unit teacher1 = units.next(); teacher1.setType(expertOreMinerType); Unit teacher2 = units.next(); teacher2.setType(masterCarpenterType); // The carpenter is set in the school before the miner. // In this case, the colonist will become a miner (and the criminal // will become a servant). teacher2.setLocation(university); teacher1.setLocation(university); assertEquals(4, teacher1.getNeededTurnsOfTraining()); assertEquals(4, teacher2.getNeededTurnsOfTraining()); // wait a little ServerTestHelper.newTurn(); ServerTestHelper.newTurn(); assertEquals(2, teacher1.getTurnsOfTraining()); assertEquals(2, teacher2.getTurnsOfTraining()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, pettyCriminalType).size()); assertEquals(1, getUnitList(colony, expertOreMinerType).size()); assertEquals(1, getUnitList(colony, masterCarpenterType).size()); // Now we want the colonist to be a carpenter. We just want to // shuffle the teachers. Move them out of the school. teacher2.setLocation(colony.getWorkLocationFor(teacher2, grainType)); teacher1.setLocation(colony.getTile()); assertNull(teacher1.getStudent()); assertNull(teacher2.getStudent()); // Moving outside school resets training ServerTestHelper.newTurn(); assertEquals(0, teacher1.getTurnsOfTraining()); assertEquals(0, teacher2.getTurnsOfTraining()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, pettyCriminalType).size()); // Move teachers back to school, miner first to pick up the criminal teacher1.setLocation(university); teacher2.setLocation(university); ServerTestHelper.newTurn(); assertEquals(1, teacher1.getTurnsOfTraining()); assertEquals(1, teacher2.getTurnsOfTraining()); assertEquals(1, getUnitList(colony, freeColonistType).size()); assertEquals(1, getUnitList(colony, pettyCriminalType).size()); ServerTestHelper.newTurn(); ServerTestHelper.newTurn(); ServerTestHelper.newTurn(); assertEquals(0, teacher1.getTurnsOfTraining()); assertEquals(0, teacher2.getTurnsOfTraining()); // Teacher1's student (criminal) should be a servant now // Teacher2's student (colonist) should be a carpenter now assertEquals(0, getUnitList(colony, freeColonistType).size()); assertEquals(0, getUnitList(colony, pettyCriminalType).size()); assertEquals(1, getUnitList(colony, indenturedServantType).size()); assertEquals(1, getUnitList(colony, expertOreMinerType).size()); assertEquals(2, getUnitList(colony, masterCarpenterType).size()); FreeColTestUtils.setStudentSelection(selection); }