// HouseTest4.java
//
// Tests equals method,
// assuming a valid constructor and toString method.
// Data file must contain three lines.

import java.util.StringTokenizer;

public class HouseTest4
{
   public static void main(String[] args)
   {
      if ( args.length == 0 )
      {
         System.out.println("Filename of data file needed"
                            + " as command-line argument");
         System.exit(0);
      }  // if

      TextFileInput in = new TextFileInput(args[0]);

      House x = makeHouse(in.readLine());
      House y = makeHouse(in.readLine());
      House z = makeHouse(in.readLine());

      testHouses(x, y, z);
   }  // method main

   private static House makeHouse(String line)
   {
      if ( line == null )
      {
         System.out.println("Not enough lines in file.");
         System.exit(1);
      }  // if

      StringTokenizer st = new StringTokenizer(line, "|");
      String zipCode = st.nextToken();
      int price = Integer.parseInt(st.nextToken());
      int numberOfRooms = Integer.parseInt(st.nextToken());
      House house = new House(zipCode, price, numberOfRooms);
      return house;
   }  // method makeHouse

   private static void testHouses(House houseX,
                                  House houseY,
                                  House houseZ)
   {
      EqualsTesting.testThreeCompletely(houseX, "X",
                                        houseY, "Y",
                                        houseZ, "Z");
      ConsoleInput.pause();
      testSubclassSymmetry(houseX, "X");
      testSubclassSymmetry(houseY, "Y");
      testSubclassSymmetry(houseZ, "Z");
   }  // method testHouses

   private static void testSubclassSymmetry(House houseX,
                                            String nameX)
   {
      HouseWithDifferentEquals subclassCopyX
                 = new HouseWithDifferentEquals(
                                        houseX.getZipCode(),
                                        houseX.getPrice(),
                                        houseX.getNumberOfRooms());

      EqualsTesting.testSymmetric(houseX, nameX,
                                  subclassCopyX,
                                 (nameX + "SubclassCopy"));
   }  // method testSubclassSymmetry
}  // class HouseTest4