YamParserTests.java
001 /*
002  *  YamParserTests.java
003  *  Copyright (c) 1998-2008, The University of Sheffield.
004  *
005  *  This code is from the GATE project (http://gate.ac.uk/) and is free
006  *  software licenced under the GNU General Public License version 3. It is
007  *  distributed without any warranty. For more details see COPYING.txt in the
008  *  top level directory (or at http://gatewiki.sf.net/COPYING.txt).
009  *  
010  *  Hamish Cunningham, 12th May 2006
011  */
012 
013 package gate.yam.parse;
014 
015 import java.io.*;
016 import java.util.*;
017 import junit.framework.*;
018 import org.apache.log4j.Logger;
019 import gate.util.*;
020 import gate.yam.*;
021 
022 
023 /**
024  * Unit test for YAM parse trees.
025  */
026 public class YamParserTests extends TestCase
027 {
028 
029   /** Create the test case */
030   public YamParserTests(String testName) {
031     super(testName);
032   }
033 
034   /** Logger */
035   static Logger lgr = Logger.getLogger("gate.yam");
036 
037   /** SInS (plain) logger */
038   static Logger slgr = Logger.getLogger("gate.sins");
039 
040   /** Test errors and warnings. */
041   public void testErrorsAndWarnings() throws Exception {
042     String testName = "/gate/yam/resources/yam-errors.yam";
043     lgr.info("testing errors generated when parsing " + testName);
044 
045     // find the source directory
046     String testFilePath =
047       this.getClass().getResource(testName).getPath();
048     File testFileDir = new File(testFilePath).getParentFile();
049 
050     // a reader for the test file
051     InputStream testFileStream = 
052       this.getClass().getResourceAsStream(testName);
053     if(testFileStream == nullfail("couldn't get resource " + testName);
054     InputStreamReader testReader =
055       new InputStreamReader(testFileStream, "UTF-8");
056 
057     // response writer
058     StringWriter responseWriter = new StringWriter();
059 
060     // run the translator and check the errors
061     YamCommand yam = new YamCommand();
062     YamParseTree parseTree = yam.translate(
063       testReader, responseWriter, YamFile.FileType.HTML, testFileDir
064     );
065     List errors = parseTree.getErrors();
066     List warnings = parseTree.getWarnings();
067     
068     int e = errors.size();
069     if(e != 3lgr.info(yam.printErrors(parseTree));
070     //lgr.info(yam.printErrors(parseTree));
071     assertEquals("wrong number of errors"3, e);
072 
073     ParsingProblem p = (ParsingProblemerrors.get(1);
074     //lgr.info(p.getMessage());
075     assertEquals("begin line wrong", p.beginLine, 17);
076     assertEquals("begin column wrong", p.beginColumn, 19);
077     assertEquals("end line wrong", p.endLine, 24);
078     assertEquals("end column wrong", p.endColumn, 2);
079     assertEquals("included flag wrong", p.included, false);
080 
081     p = (ParsingProblemerrors.get(2);
082     //lgr.info(p.getMessage());
083     assertEquals("begin line wrong", p.beginLine, 1);
084     assertEquals("begin column wrong", p.beginColumn, 1);
085     assertEquals("end line wrong", p.endLine, 1);
086     assertEquals("end column wrong", p.endColumn, 9);
087     assertEquals("included flag wrong", p.included, true);
088   }
089   
090   /**
091    * Test error handling utility stuff.
092    */
093   public void testErrorStuff() throws Exception
094   {
095     String eStrings[] {
096       // empty strings
097       "",                       "",                     "",
098 
099       // empty lines
100       "\n",                     "",                     "\n",
101       "\n\n",                   "",                     "\n\n",
102       "\n\n\n",                 "",                     "\n\n\n",
103       "\n\n\n\n",               "\n\n\n",               "\n",
104 
105       // unix lines
106       "123\n0",                 "",                     "123\n0",
107       "123\n456\n7",            "123\n",                "456\n7",
108       "123\n456\n789\n0",       "123\n456\n",           "789\n0",
109       "123\n",                  "",                     "123\n",
110       "123\n456\n",             "123\n",                "456\n",
111       "123\n456\n789\n",        "123\n456\n",           "789\n",
112 
113       // mac lines
114       "123\r0",                 "",                     "123\r0",
115       "123\r456\r7",            "123\r",                "456\r7",
116       "123\r456\r789\r0",       "123\r456\r",           "789\r0",
117       "123\r",                  "",                     "123\r",
118       "123\r456\r",             "123\r",                "456\r",
119       "123\r456\r789\r",        "123\r456\r",           "789\r",
120 
121       // dos lines
122       "123\r\n0",               "",                     "123\r\n0",
123       "123\r\n456\r\n7",        "123\r\n",              "456\r\n7",
124       "123\r\n456\r\n789\r\n0""123\r\n456\r\n",       "789\r\n0",
125       "123\r\n",                "",                     "123\r\n",
126       "123\r\n456\r\n",         "123\r\n",              "456\r\n",
127       "123\r\n456\r\n789\r\n",  "123\r\n456\r\n",       "789\r\n",
128 
129       // messed-up lines
130       "123\n\r456\n\r789\n\r",  "123\n\r456\n\r789\n",  "\r",
131     };
132     StringReader reader = new StringReader("");
133     YamParser parser = new YamParser(reader);
134 
135     for(int i=0; i<eStrings.length; i += 3) {
136       String eString = eStrings[i];
137       String start = eStrings[i+1];
138       String end = eStrings[i+2];
139 
140       // this was superseded by the getNextToken-based error code in
141       // YamParser.parse
142 //      String[] split = parser.splitErrorInput(eString);
143       /*
144       lgr.info("i=" + i + ", start(" + start + "); end(" + end + ")");
145       lgr.info(
146         "i=" + i + ", split[0](" + split[0] + "); split[1](" + split[1] + ")"
147       );
148       lgr.info();
149       */
150 //      assertTrue(
151 //        "i=" + i + ", start(" + start + ") wrong", start.equals(split[0])
152 //      );
153 //      assertTrue(
154 //        "i=" + i + ", end(" + end + ") wrong", end.equals(split[1])
155 //      );
156     }
157   // testErrorStuff()
158 
159   /** Test the getSepSpacing function. */
160   public void testGetSepSpacing() {
161     String[] cases = {
162       "\n"
163       "\n "
164       "\n  "
165       "\n\t"
166       "\n  \t  "
167       "\n  \t\t  \t"
168 
169       "\r"
170       "\r "
171       "\r  "
172       "\r\t"
173       "\r  \t  "
174       "\r  \t\t  \t"
175 
176       "\r\n"
177       "\r\n "
178       "\r\n  "
179       "\r\n\t"
180       "\r\n  \t  "
181       "\r\n  \t\t  \t"
182 
183       "\n\n\r\n"
184       "\n\n\r\n "
185       "\n\n\r\n  "
186       "\n\n\r\n\t"
187       "\n\n\r\n  \t  "
188       "\n\n\r\n  \t\t  \t"
189     };
190     int[] expectedSpacings = {
191       01281024,
192       01281024,
193       01281024,
194       01281024,
195     };
196     StringReader reader = new StringReader("");
197     YamParser p = new YamParser(reader);
198     Token t = new Token();
199 
200     for(int caseNumber = 0; caseNumber < cases.length; caseNumber++) {
201       t.image = cases[caseNumber];
202       int spacing = p.getSepSpacing(t);
203       assertEquals("wrong spacing: ", expectedSpacings[caseNumber], spacing)
204     }
205   // testGetSepSpacing()
206 
207 // YamParserTests