
import junit.framework.TestCase;

/**
 * A JUnit test case class.
 * Every method starting with the word "test" will be called when running
 * the test with JUnit.
 */

public class PassportTester extends TestCase {

  public void testConstructorGetNameAndSerialNumber() {
    Passport p1 = new Passport("Bob", 9876);
    
    assertEquals("Bob", p1.getName());
    assertEquals(9876, p1.getSerialNumber());
    assertEquals("", p1.getCountriesVisited());
  }
/*
  public void testGetName() {
    Passport p1 = new Passport("Bob", 9876);
    
    assertEquals("Bob", p1.getName());
  }

  public void testGetSerial() {
    Passport p1 = new Passport("Bob", 9876);
    
    assertEquals(9876, p1.getSerialNumber());
  }
*/    
  public void testAddVisited1() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    assertEquals("Canada, 10", p1.getCountriesVisited());    
  }    

  public void testAddVisited2() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    assertEquals("Canada, 10; UK, 20", p1.getCountriesVisited());
  }    
  
  public void testAddVisited3() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("UK", 30);
    assertEquals("Canada, 10; UK, 50", p1.getCountriesVisited());
  }    

  public void testClear() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    assertEquals("Canada, 10", p1.getCountriesVisited());
    p1.clear();
    assertEquals("", p1.getCountriesVisited());
  }
  
  public void testFirstCountryVisited1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals("", p1.firstCountryVisited());
  }
  
  public void testFirstCountryVisited2() {
    Passport p1 = new Passport("Bob", 9876);   

    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals("Canada", p1.firstCountryVisited());
  }
  
  public void testLastCountryVisited1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals("", p1.lastCountryVisited());
  } 
  
  public void testLastCountryVisited2() {
    Passport p1 = new Passport("Bob", 9876);   

    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals("Germany", p1.lastCountryVisited());
  }
  
  public void testLongestVisitedCountry1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals("", p1.longestVisitedCountry());
  } 
  
  public void testLongestVisitedCountry2() {
    Passport p1 = new Passport("Bob", 9876);   

    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals("Germany", p1.longestVisitedCountry());
  }

  public void testLongestVisitedCountry3() {
    Passport p1 = new Passport("Bob", 9876);   

    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 20);
    assertEquals("Germany", p1.longestVisitedCountry());
  }
  
  public void testNumEntries1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals(0, p1.numEntries());
  } 
  
  public void testNumEntries2() {
    Passport p1 = new Passport("Bob", 9876);   

    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals(3, p1.numEntries());
  }
  
  public void testNumVisits1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals(0, p1.numVisits("Canada"));
  }
  
  public void testNumVisits2() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals(0, p1.numVisits("USA"));
  }

  public void testNumVisits3() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    p1.addVisited("UK", 40);
    assertEquals(2, p1.numVisits("UK"));
  }

  public void testToString1() {
    Passport p1 = new Passport("Bob", 9876);
   
   String str1 = "Name: " + "Bob" + '\n' + "Serial Number: " + 9876 + '\n' + "Countries Visited: " + "none";
   assertEquals(str1, p1.toString());
  }

  public void testToString2() {
   Passport p1 = new Passport("Bob", 9876);
   
   p1.addVisited("Canada", 10);
   p1.addVisited("UK", 20);
   String str1 = "Name: " + "Bob" + '\n' + "Serial Number: " + 9876 + '\n' + "Countries Visited: " + "Canada, 10; UK, 20";
   assertEquals(str1, p1.toString());
  }

  public void testTotalDuration1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals(0, p1.totalDuration("Canada"));
  }
  
  public void testTotalDuration2() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals(0, p1.totalDuration("USA"));
  }

  public void testTotalDuration3() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    p1.addVisited("UK", 40);
    assertEquals(60, p1.totalDuration("UK"));
  }

  public void testWhichCountryVisited1() {
    Passport p1 = new Passport("Bob", 9876);
   
    assertEquals("Invalid index!", p1.whichCountryVisited(0));
  }
  
  public void testWhichCountryVisited2() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    assertEquals("Invalid index!", p1.whichCountryVisited(4));
  }

  public void testWhichCountryVisited3() {
    Passport p1 = new Passport("Bob", 9876);
   
    p1.addVisited("Canada", 10);
    p1.addVisited("UK", 20);
    p1.addVisited("Germany", 30);
    p1.addVisited("USA", 30);
    assertEquals("Germany", p1.whichCountryVisited(3));
  }

  
}
