package jmri.jmrit.operations.locations;
import java.util.List;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import jmri.InstanceManager;
import jmri.jmrit.operations.OperationsTestCase;
import jmri.jmrit.operations.OpsPropertyChangeListener;
import jmri.jmrit.operations.rollingstock.cars.Car;
/**
* Tests for the Operations Pool class Last manually cross-checked on ?????
*
* Still to do: ?????????????? Nees to be updated for Pool class ScheduleItem:
* XML read/write Schedule: Register, List, XML read/write Track:
* AcceptsDropTrain, AcceptsDropRoute Track: AcceptsPickupTrain,
* AcceptsPickupRoute Track: CheckScheduleValid Track: XML read/write Location:
* Track support <-- I am here Location: XML read/write
*
* @author Gregory Madsen Copyright (C) 2012, based on OperationsLocationTest
* class
*/
public class OperationsPoolTest extends OperationsTestCase {
Pool p = null;
Track t1 = null;
Track t2 = null;
// test Pool Class (part one)
// test Pool creation in different ways
// public void testCreateDefault()
// {
// // There is currently no default constructor...
// }
@Test
public void testCreateNormal() {
p = new Pool("Id1", "Name1");
Assert.assertEquals("Pool Id", "Id1", p.getId());
Assert.assertEquals("Pool Name", "Name1", p.getName());
Assert.assertEquals("Pool Size", 0, p.getSize());
}
// test property set
@Test
public void testProperties() {
p = new Pool("Id2", "Name2");
p.setName("NewName");
Assert.assertEquals("setName", "NewName", p.getName());
}
// test PropertyChanged event
@Test
public void testPropertyChangedEvent() {
p = new Pool("Id3", "Name3");
// Boolean fired = false;
OpsPropertyChangeListener opcl = new OpsPropertyChangeListener();
p.addPropertyChangeListener(opcl);
// Set with different name, should fire
p.setName("NewName");
Assert.assertTrue("Name changed event fired", opcl.isFired());
Assert.assertEquals("Name changed name", "Name", opcl.getEvent().getPropertyName());
opcl.reset();
// Set with same name, should NOT fire.
p.setName("NewName");
Assert.assertFalse("Name changed event not fired", opcl.isFired());
Assert.assertNull("No event", opcl.getEvent());
}
// test methods
@Test
public void testToString() {
p = new Pool("Id4", "Name4");
Assert.assertEquals("ToString()", "Name4", p.toString());
}
@Test
public void testAddTrack() {
t1 = new Track("Id1", "Track1", "Type1", null);
p = new Pool("P1", "Pool1");
OpsPropertyChangeListener opcl = new OpsPropertyChangeListener();
p.addPropertyChangeListener(opcl);
p.add(t1);
Assert.assertEquals("Added one track", 1, p.getSize());
Assert.assertTrue("Was fired", opcl.isFired());
Assert.assertEquals("List changed", "poolListChange", opcl.getEvent().getPropertyName());
// Try to add it again
opcl.reset();
p.add(t1);
Assert.assertEquals("Added same track", 1, p.getSize());
Assert.assertFalse("Was not fired", opcl.isFired());
Assert.assertNull("No event", opcl.getEvent());
}
@Test
public void testRemoveTrack() {
t1 = new Track("Id1", "Track1", "Type1", null);
p = new Pool("P1", "Pool1");
OpsPropertyChangeListener opcl = new OpsPropertyChangeListener();
p.addPropertyChangeListener(opcl);
p.add(t1);
opcl.reset();
p.remove(t1);
Assert.assertEquals("Removed one track", 0, p.getSize());
Assert.assertTrue("Was fired", opcl.isFired());
Assert.assertEquals("List changed", "poolListChange", opcl.getEvent().getPropertyName());
// Try to remove it when it is not there.
opcl.reset();
p.remove(t1);
Assert.assertEquals("Removed same track", 0, p.getSize());
Assert.assertFalse("Was not fired", opcl.isFired());
Assert.assertNull("No event", opcl.getEvent());
}
private Pool Create2TrackPool() {
// Helper method to avoid duplicate code.
// This could be generalized if need be.
t1 = new Track("Id1", "Track1", "Type1", null);
t1.setLength(100);
t1.setPoolMinimumLength(50);
t2 = new Track("Id2", "Track2", "Type2", null);
t2.setLength(120);
t2.setPoolMinimumLength(40);
p = new Pool("P1", "Pool1");
p.add(t1);
p.add(t2);
return p;
}
@Test
public void testGetTracks() {
Create2TrackPool();
Assert.assertEquals("Added two tracks", 2, p.getTracks().size());
Assert.assertEquals("First track", t1, p.getTracks().get(0));
Assert.assertEquals("Second track", t2, p.getTracks().get(1));
}
@Test
public void testTrackListIsCopy() {
// Make sure the collection is not the internal one.
Create2TrackPool();
List