// Testing the drive method by mocking the location class three times, stubbing the getCon1 and
  // getCon2 methods of the first location to return the second and third locations.
  // Calling drive() with the first location and 0 as arguments should return the second location
  // and with the first location and 1 as arguments drive should return the third location.
  @Test
  public void testDrive() {

    City myCity = new City();

    Location mockLoc1 = Mockito.mock(Location.class);
    Location mockLoc2 = Mockito.mock(Location.class);
    Location mockLoc3 = Mockito.mock(Location.class);

    Mockito.when(mockLoc1.getCon1()).thenReturn(mockLoc2);
    Mockito.when(mockLoc1.getCon2()).thenReturn(mockLoc3);

    assertEquals(mockLoc2, myCity.drive(mockLoc1, 0));
    assertEquals(mockLoc3, myCity.drive(mockLoc1, 1));
  }
 /** Test of retrieveCenterPoint method, of class BaseBoundary. */
 @Test
 public void testRetrieveCenterPoint() {
   City testCity = createDefaultTestCityInstance(idGenerator);
   BaseBoundary instance =
       new BaseBoundary(
           idGenerator.getNextId(),
           testCity.getBoundary().getReferencePoint(),
           testCity.getBoundary().getBoundary());
   Coordinate expResult =
       GeoToolsBootstrapping.getGeometryFactory()
           .createMultiPoint(testCity.getBoundary().getBoundary().getCoordinates())
           .getCentroid()
           .getCoordinate();
   Coordinate result = instance.retrieveCenterPoint();
   assertEquals(expResult.x, result.x, 0.5);
   assertEquals(expResult.y, result.y, 0.5);
 }
  // Testing the start method by creating an ArrayList of mocked location objects and
  // stubbing the getName method of the locations to return the names of the first third and
  // last locations in the Locations ArrayList. Then call the start method three times with
  // arguments 0, 2, and 4  and make sure they match the getName of the mocked locations
  @Test
  public void testStart() {

    City myCity = new City();

    Location mockLoc1 = Mockito.mock(Location.class);
    Mockito.when(mockLoc1.getName()).thenReturn("Mall");
    Location mockLoc2 = Mockito.mock(Location.class);
    Mockito.when(mockLoc2.getName()).thenReturn("University");
    Location mockLoc3 = Mockito.mock(Location.class);
    Mockito.when(mockLoc3.getName()).thenReturn("Outside City");
    ArrayList<Location> list = new ArrayList<Location>();
    list.add(mockLoc1);
    list.add(mockLoc2);
    list.add(mockLoc3);

    assertEquals(mockLoc1.getName(), myCity.start(0).getName());
    assertEquals(mockLoc2.getName(), myCity.start(2).getName());
    assertEquals(mockLoc3.getName(), myCity.start(4).getName());
  }
  // Testing the getDriveString method by mocking a location instance and stubbing the
  // getName, getCon1, getCon2, getSt1, and getSt2 methods to be able to test with
  // seed arguments 0 and 1 and make sure they return the correct string.
  @Test
  public void testGetDriveString() {

    City myCity = new City();

    int d = 3;

    Location mockLoc = Mockito.mock(Location.class);
    Mockito.when(mockLoc.getName()).thenReturn("University");
    Mockito.when(mockLoc.getCon1Name()).thenReturn("Con1");
    Mockito.when(mockLoc.getCon2Name()).thenReturn("Con2");
    Mockito.when(mockLoc.getSt1()).thenReturn("St1");
    Mockito.when(mockLoc.getSt2()).thenReturn("St2");

    int seed = 0;
    assertEquals(
        "Driver 3 heading from University to Con1 via St1",
        myCity.getDriveString(d, mockLoc, seed));

    seed = 1;
    assertEquals(
        "Driver 3 heading from University to Con2 via St2",
        myCity.getDriveString(d, mockLoc, seed));
  }