diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java new file mode 100755 index 00000000000..0a7f5594fce --- /dev/null +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java @@ -0,0 +1,83 @@ +package com.sap.sailing.domain.test; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.Test; + +import com.sap.sailing.domain.base.Course; +import com.sap.sailing.domain.base.Waypoint; +import com.sap.sailing.domain.base.impl.BuoyImpl; +import com.sap.sailing.domain.base.impl.CourseImpl; +import com.sap.sailing.domain.base.impl.WaypointImpl; +import com.sap.sailing.util.Util; + +public class CourseTest { + @Test + public void testEmptyCourse() { + Iterable waypoints = Collections.emptyList(); + Course course = new CourseImpl("Test Course", waypoints); + assertEquals(0, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + } + + @Test + public void testCourseWithOneWaypoint() { + List waypoints = new ArrayList(); + waypoints.add(new WaypointImpl(new BuoyImpl("Test Buoy"))); + Course course = new CourseImpl("Test Course", waypoints); + assertEquals(1, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + } + + @Test + public void testAddWaypointToCourseWithOneWaypoint() { + List waypoints = new ArrayList(); + waypoints.add(new WaypointImpl(new BuoyImpl("Test Buoy"))); + Course course = new CourseImpl("Test Course", waypoints); + assertEquals(1, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + course.addWaypoint(1, new WaypointImpl(new BuoyImpl("Second Buoy"))); + assertEquals(2, Util.size(course.getWaypoints())); + assertEquals(1, Util.size(course.getLegs())); + } + + @Test + public void testAddWaypointToEmptyCourse() { + Iterable waypoints = Collections.emptyList(); + Course course = new CourseImpl("Test Course", waypoints); + assertEquals(0, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + course.addWaypoint(0, new WaypointImpl(new BuoyImpl("First Buoy"))); + assertEquals(1, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + } + + @Test + public void testRemoveWaypointToCourseWithOneWaypoint() { + List waypoints = new ArrayList(); + waypoints.add(new WaypointImpl(new BuoyImpl("Test Buoy"))); + waypoints.add(new WaypointImpl(new BuoyImpl("Second Buoy"))); + Course course = new CourseImpl("Test Course", waypoints); + assertEquals(2, Util.size(course.getWaypoints())); + assertEquals(1, Util.size(course.getLegs())); + course.removeWaypoint(1); + assertEquals(1, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + } + + @Test + public void testRemoveWaypointToEmptyCourse() { + Iterable waypoints = Collections.emptyList(); + Course course = new CourseImpl("Test Course", waypoints); + course.addWaypoint(0, new WaypointImpl(new BuoyImpl("First Buoy"))); + assertEquals(1, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + course.removeWaypoint(0); + assertEquals(0, Util.size(course.getWaypoints())); + assertEquals(0, Util.size(course.getLegs())); + } +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/CourseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/CourseImpl.java index 7e63eb41cd4..8d261ff00de 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/CourseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/CourseImpl.java @@ -16,7 +16,6 @@ import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.CourseListener; import com.sap.sailing.domain.base.Leg; import com.sap.sailing.domain.base.Waypoint; -import com.sap.sailing.util.Util; public class CourseImpl extends NamedImpl implements Course { private static final Logger logger = Logger.getLogger(CourseImpl.class.getName()); @@ -28,9 +27,6 @@ public class CourseImpl extends NamedImpl implements Course { public CourseImpl(String name, Iterable waypoints) { super(name); - if (Util.size(waypoints) == 1) { - throw new IllegalArgumentException("Can't create a course with a single waypoint "+waypoints+"; this makes no leg"); - } listeners = new HashSet(); this.waypoints = new ArrayList(); waypointIndexes = new HashMap(); @@ -71,7 +67,9 @@ public class CourseImpl extends NamedImpl implements Course { } else { legStartWaypointIndex = zeroBasedPosition; } - legs.add(new LegImpl(this, legStartWaypointIndex)); + if (waypoints.size() > 1) { + legs.add(new LegImpl(this, legStartWaypointIndex)); + } notifyListenersWaypointAdded(zeroBasedPosition, waypointToAdd); } @@ -81,7 +79,7 @@ public class CourseImpl extends NamedImpl implements Course { boolean isLast = zeroBasedPosition == waypoints.size()-1; Waypoint removedWaypoint = waypoints.remove(zeroBasedPosition); if (isLast) { - if (waypoints.size() > 1) { + if (waypoints.size() > 0) { // if we had only one waypoint, we didn't have any legs // last waypoint was removed; remove last leg legs.remove(legs.size() - 1); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 62d729189bd..0c709339017 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -534,12 +534,14 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener { } i++; } - if (toRemove == null) { + if (toRemove == null && !trackedLegs.isEmpty()) { // last waypoint removed toRemove = last; } - trackedLegs.remove(toRemove); - updated(/* time point*/ null); + if (toRemove != null) { + trackedLegs.remove(toRemove); + updated(/* time point*/ null); + } } @Override