001 package ps6.test; 002 003 import java.io.ByteArrayInputStream; 004 import ps6.*; 005 import junit.framework.*; 006 007 /** 008 * Public (Specification) TextUI Test Suite 009 * @author tws 010 */ 011 public class PublicTextUITest extends TestSuite{ 012 013 public static final String INPUT_PROMPTS = 014 "starting number? starting street? starting zipcode? " + 015 "destination number? destination street? destination zipcode? walking or driving [w/d]? "; 016 017 public static final String END_PROMPT = "starting number? "; 018 019 public PublicTextUITest(){ 020 this("Problem Set 6 TextUI Tests"); 021 } 022 023 public static String EOL = System.getProperty("line.separator"); 024 025 public PublicTextUITest(String name){ 026 super(name); 027 addTests(); 028 } 029 030 /** 031 * Constructs and adds the tests for the textui. 032 */ 033 private void addTests() { 034 // You could test groups of queries separately 035 // e.g. loop over ValidateQueries.badQueries 036 037 for (TestRecord record : ValidateQueries.allQueries) { 038 addTest(makeUiTest(record)); 039 } 040 } 041 042 public PS6TextUiTestCase makeUiTest(TestRecord record){ 043 return new PS6TextUiTestCase(record.getTestName(), 044 new String[] {record.getDb().dbPath()}, 045 TextUI.class, 046 new ByteArrayInputStream((genTextUiStdIn(record) + "-1" + EOL).getBytes()), 047 INPUT_PROMPTS + genTextUiStdOut(record)); 048 } 049 050 public static Test suite(){ 051 return new PublicTextUITest(); 052 } 053 054 /** 055 * Generate the expected TextUI output for a test record 056 * @param record a PS6 test 057 * @return the expected TestUI output for a test 058 */ 059 public static String genTextUiStdOut(TestRecord record){ 060 StringBuilder b = new StringBuilder(); 061 062 switch (record.getType()){ 063 case INVALID_DIR_TYPE: 064 case INVALID_ADDRESS: 065 case NO_PATH: 066 b.append(record.getErrorMessage()); 067 b.append(EOL); 068 break; 069 case WALKING: 070 case DRIVING: 071 b.append("Start at " 072 + record.getStart().getNum() + " " 073 + record.getStart().getName() 074 + " " + record.getStart().getZipcode()); 075 076 b.append(EOL); 077 for (String line : record.getDirections()){ 078 b.append(line); 079 b.append(EOL); 080 } 081 b.append(record.getTripLength()); 082 b.append(EOL); 083 b.append(END_PROMPT); 084 break; 085 } 086 087 return b.toString(); 088 } 089 090 /** 091 * Generate the TextUI input for a test record 092 * @param record a PS6 test 093 * @return the TextUI input for the test 094 */ 095 public static String genTextUiStdIn(TestRecord record){ 096 StringBuilder b = new StringBuilder(); 097 b.append(record.getStart().getNum()); 098 b.append(EOL); 099 b.append(record.getStart().getName()); 100 b.append(EOL); 101 b.append(record.getStart().getZipcode()); 102 b.append(EOL); 103 b.append(record.getEnd().getNum()); 104 b.append(EOL); 105 b.append(record.getEnd().getName()); 106 b.append(EOL); 107 b.append(record.getEnd().getZipcode()); 108 b.append(EOL); 109 b.append(record.getDirectionType()); 110 b.append(EOL); 111 return b.toString(); 112 } 113 }