Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/hp/hpl/jena/rdf/arp/test/MoreTests.java


1   /*
2    *  (c)     Copyright 2000, 2001, 2002, 2002, 2003, 2004, 2005 Hewlett-Packard Development Company, LP
3    *   All rights reserved.
4    * [See end of file]
5    *  $Id: MoreTests.java,v 1.29 2005/04/18 14:11:09 jeremy_carroll Exp $
6    */
7   
8   package com.hp.hpl.jena.rdf.arp.test;
9   
10  import org.apache.commons.logging.Log;
11  import org.apache.commons.logging.LogFactory;
12  import junit.framework.*;
13  
14  import com.hp.hpl.jena.ontology.OntDocumentManager;
15  import com.hp.hpl.jena.rdf.arp.*;
16  import com.hp.hpl.jena.rdf.model.*;
17  import com.hp.hpl.jena.vocabulary.RDF;
18  import java.nio.charset.Charset;
19  
20  import org.xml.sax.*;
21  
22  import java.io.*;
23  
24  /**
25   * @author jjc
26   *  
27   */
28  public class MoreTests extends TestCase implements RDFErrorHandler,
29      ARPErrorNumbers {
30    static private Log logger = LogFactory.getLog(MoreTests.class);
31  
32    static public Test suite() {
33      TestSuite suite = new TestSuite("ARP Plus");
34  
35      
36      suite.addTest(TestErrorMsg.suite());
37      suite.addTest(TestScope.suite());
38      suite.addTest(ExceptionTests.suite());
39    
40      suite.addTest(new MoreTests("testIcu"));
41      suite.addTest(new MoreTests("testLatin1"));
42      suite.addTest(new MoreTests("testIcu2"));
43      suite.addTest(new MoreTests("testEncodingMismatch1"));
44      suite.addTest(new MoreTests("testEncodingMismatch2"));
45      suite.addTest(new MoreTests("testNullBaseParamOK"));
46      suite.addTest(new MoreTests("testNullBaseParamError"));
47      suite.addTest(new MoreTests("testEmptyBaseParamOK"));
48      suite.addTest(new MoreTests("testEmptyBaseParamError"));
49      suite.addTest(new MoreTests("testWineDefaultNS"));
50      suite.addTest(new MoreTests("testInterrupt"));
51      suite.addTest(new MoreTests("testToString"));
52      
53  //for (int i=0; i< 20; i++ ) {
54      //suite.addTest(new MoreTests("testTokenGarbage1"));
55      //suite.addTest(new MoreTests("testTokenGarbage2"));
56  //    suite.addTest(new MoreTests("testTokenGarbage1"));
57  //    suite.addTest(new MoreTests("testTokenGarbage2"));
58  //    suite.addTest(new MoreTests("testTokenGarbage1"));
59  //    suite.addTest(new MoreTests("testTokenGarbage2"));
60  //}
61      return suite;
62    }
63  
64    public MoreTests(String s) {
65      super(s);
66    }
67  
68    protected Model createMemModel() {
69      return ModelFactory.createDefaultModel();
70    }
71  
72    public void setUp() {
73      // ensure the ont doc manager is in a consistent state
74      OntDocumentManager.getInstance().reset(true);
75    }
76  
77    public void testWineDefaultNS() throws IOException {
78      testWineNS(createMemModel());
79      testWineNS(ModelFactory.createOntologyModel());
80    }
81  
82    private void testWineNS(Model m) throws FileNotFoundException, IOException {
83      InputStream in = new FileInputStream("testing/arp/xmlns/wine.rdf");
84      m.read(in, "");
85      in.close();
86      assertEquals("http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine#", m
87          .getNsPrefixURI(""));
88    }
89  
90    public void testLatin1() throws IOException {
91      Model m = createMemModel();
92      RDFReader rdr = m.getReader();
93      InputStream r = new FileInputStream(
94          "testing/arp/i18n/latin1.rdf");
95      
96      rdr.setErrorHandler(this);
97      expected = new int[] { WARN_NONCANONICAL_IANA_NAME };
98      rdr.read(m, r, "http://example.org/");
99      checkExpected();
100   }
101   public void testARPMacRoman() throws IOException {
102     Model m = createMemModel();
103     RDFReader rdr = m.getReader();
104     InputStream r = new FileInputStream(
105         "testing/arp/i18n/macroman.rdf");
106     
107     rdr.setErrorHandler(this);
108     expected = new int[] { WARN_UNSUPPORTED_ENCODING, WARN_NON_IANA_ENCODING };
109     expected[Charset.isSupported("MacRoman")?0:1]=0;
110 //     Only one of the warnings is expected, which depends on Java version
111     
112     rdr.read(m, r, "http://example.org/");
113     checkExpected();
114   }
115   public void testARPMacArabic() throws IOException {
116     Model m = createMemModel();
117     RDFReader rdr = m.getReader();
118     InputStream r = new FileInputStream(
119         "testing/arp/i18n/arabic-macarabic.rdf");
120     
121     rdr.setErrorHandler(this);
122     expected = new int[] { WARN_UNSUPPORTED_ENCODING, WARN_NON_IANA_ENCODING };
123     expected[Charset.isSupported("MacArabic")?0:1]=0;
124 //     Only one of the warnings is expected, which depends on Java version
125     rdr.read(m, r, "http://example.org/");
126     checkExpected();
127   }
128   
129 
130   public void testEncodingMismatch1() throws IOException {
131     Model m = createMemModel();
132     RDFReader rdr = m.getReader();
133     FileReader r = new FileReader(
134         "testing/wg/rdfms-syntax-incomplete/test001.rdf");
135     if (r.getEncoding().startsWith("UTF")) {
136       System.err
137           .println("WARNING: Encoding mismatch tests not executed on platform with default UTF encoding.");
138       return;
139     }
140     rdr.setErrorHandler(this);
141     expected = new int[] { WARN_ENCODING_MISMATCH };
142     rdr.read(m, r, "http://example.org/");
143     //System.err.println(m.size() + " triples read.");
144     checkExpected();
145 
146   }
147 
148   public void testIcu() throws IOException {
149 //    "\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe"
150 //      Normalizer.  isNormalized(
151 //              "\u0bcd\u0ba4\u0bbf\u0baf\u0bbe"
152 //              ,Normalizer.NFC,0);
153       
154     Model m = createMemModel();
155     RDFReader rdr = m.getReader();
156     FileInputStream r = new FileInputStream(
157         "testing/arp/i18n/icubug.rdf");
158       rdr.setErrorHandler(this);
159     expected = new int[] { WARN_STRING_COMPOSING_CHAR  };
160     rdr.read(m, r, "http://example.org/");
161     r.close();
162     checkExpected();
163   
164   }
165   public void testIcu2() throws IOException {
166 //      "\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe"
167 //        Normalizer.  isNormalized(
168 //                "\u0bcd\u0ba4\u0bbf\u0baf\u0bbe"
169 //                ,Normalizer.NFC,0);
170         
171       Model m = createMemModel();
172       RDFReader rdr = m.getReader();
173       FileInputStream r = new FileInputStream(
174           "testing/arp/i18n/icubugtwo.rdf");
175       rdr.setErrorHandler(this);
176       expected = new int[] { WARN_STRING_NOT_NORMAL_FORM_C };
177       rdr.read(m, r, "http://example.org/");
178       r.close();
179       checkExpected();
180     
181     }
182   static class ToStringStatementHandler implements StatementHandler {
183     String obj;
184 
185     String subj;
186 
187     public void statement(AResource sub, AResource pred, ALiteral lit) {
188       // System.out.println("(" + sub + ", " + pred + ", " + lit + ")");
189       subj = sub.toString();
190     }
191 
192     public void statement(AResource sub, AResource pred, AResource ob) {
193       //  System.out.println("(" + sub + ", " + pred + ", " + ob + ")");
194       obj = ob.toString();
195     }
196 
197   };
198 
199   public void testToString() throws IOException, SAXException {
200 
201     String testcase = "<rdf:RDF xmlns:music=\"http://www.kanzaki.com/ns/music#\" "
202         + "  xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> "
203         + "<rdf:Description> "
204         + "  <music:performs rdf:nodeID=\"p1\"/> "
205         + "</rdf:Description> "
206         + "<rdf:Description rdf:nodeID=\"p1\"> "
207         + "  <music:opus>op.26</music:opus> "
208         + "</rdf:Description> "
209         + "</rdf:RDF>";
210 
211     ARP parser = new ARP();
212     ToStringStatementHandler tssh = new ToStringStatementHandler();
213     parser.getHandlers().setStatementHandler(tssh);
214     parser.load(new StringReader(testcase), "http://www.example.com");
215     assertEquals(tssh.subj, tssh.obj);
216   }
217 
218   public void testEncodingMismatch2() throws IOException {
219     Model m = createMemModel();
220     RDFReader rdr = m.getReader();
221     FileReader r = new FileReader(
222         "testing/wg/rdf-charmod-literals/test001.rdf");
223     if (r.getEncoding().startsWith("UTF")) {
224       // see above for warning message.
225       return;
226     }
227     rdr.setErrorHandler(this);
228     expected = new int[] { WARN_ENCODING_MISMATCH, ERR_ENCODING_MISMATCH };
229     rdr.read(m, r, "http://example.org/");
230 
231     checkExpected();
232   }
233 
234   public void testNullBaseParamOK() throws IOException {
235     Model m = createMemModel();
236     Model m1 = createMemModel();
237     RDFReader rdr = m.getReader();
238     FileInputStream fin = new FileInputStream(
239         "testing/wg/rdfms-identity-anon-resources/test001.rdf");
240 
241     rdr.setErrorHandler(this);
242     expected = new int[] {};
243     rdr.read(m, fin, "http://example.org/");
244     fin.close();
245     fin = new FileInputStream(
246         "testing/wg/rdfms-identity-anon-resources/test001.rdf");
247     rdr.read(m1, fin, null);
248     fin.close();
249     assertTrue("Base URI should have no effect.", m.isIsomorphicWith(m1));
250     checkExpected();
251   }
252 
253   public void testNullBaseParamError() throws IOException {
254     Model m = createMemModel();
255     RDFReader rdr = m.getReader();
256     FileInputStream fin = new FileInputStream(
257         "testing/wg/rdfms-difference-between-ID-and-about/test1.rdf");
258     rdr.setErrorHandler(this);
259     expected = new int[] { ERR_RESOLVING_URI_AGAINST_NULL_BASE };
260     rdr.read(m, fin, null);
261     fin.close();
262     checkExpected();
263   }
264 
265   public void testEmptyBaseParamOK() throws IOException {
266     Model m = createMemModel();
267     Model m1 = createMemModel();
268     RDFReader rdr = m.getReader();
269     FileInputStream fin = new FileInputStream(
270         "testing/wg/rdfms-identity-anon-resources/test001.rdf");
271 
272     rdr.setErrorHandler(this);
273     expected = new int[] {};
274     rdr.read(m, fin, "http://example.org/");
275     fin.close();
276     fin = new FileInputStream(
277         "testing/wg/rdfms-identity-anon-resources/test001.rdf");
278     rdr.read(m1, fin, "");
279     fin.close();
280     assertTrue("Empty base URI should have no effect.[" + m1.toString()
281         + "]", m.isIsomorphicWith(m1));
282     checkExpected();
283   }
284 
285   public void testEmptyBaseParamError() throws IOException {
286     Model m = createMemModel();
287     RDFReader rdr = m.getReader();
288     FileInputStream fin = new FileInputStream(
289         "testing/wg/rdfms-difference-between-ID-and-about/test1.rdf");
290     rdr.setErrorHandler(this);
291     expected = new int[] { WARN_RESOLVING_URI_AGAINST_EMPTY_BASE };
292     rdr.read(m, fin, "");
293     fin.close();
294     Model m1 = createMemModel();
295     m1.createResource("#foo").addProperty(RDF.value, "abc");
296     assertTrue("Empty base URI should produce relative URI.["
297         + m.toString() + "]", m.isIsomorphicWith(m1));
298     checkExpected();
299   }
300 
301   public void testInterrupt() throws SAXException, IOException {
302     ARP a = new ARP();
303     InputStream in;
304     long start = System.currentTimeMillis();
305     in = new FileInputStream("testing/wg/miscellaneous/consistent001.rdf");
306     a.getHandlers().setStatementHandler(new StatementHandler() {
307       int countDown = 10;
308 
309       public void statement(AResource subj, AResource pred, AResource obj) {
310         if (countDown-- == 0)
311           Thread.currentThread().interrupt();
312 
313       }
314 
315       public void statement(AResource subj, AResource pred, ALiteral lit) {
316 
317       }
318     });
319     try {
320       a.load(in);
321       fail("Thread was not interrupted.");
322     } catch (InterruptedIOException e) {
323     } catch (SAXParseException e) {
324     } finally {
325       in.close();
326     }
327     // System.err.println("Finished "+Thread.interrupted());
328 
329   }
330 
331   private void checkExpected() {
332     for (int i = 0; i < expected.length; i++)
333       if (expected[i] != 0) {
334         fail("Expected error: " + JenaReader.errorCodeName(expected[i])
335             + " but it did not occur.");
336       }
337   }
338 
339   public void warning(Exception e) {
340     error(0, e);
341   }
342 
343   public void error(Exception e) {
344     error(1, e);
345   }
346 
347   public void fatalError(Exception e) {
348     error(2, e);
349   }
350 
351   private void error(int level, Exception e) {
352     //System.err.println(e.getMessage());
353     if (e instanceof ParseException) {
354       int eCode = ((ParseException) e).getErrorNumber();
355       onError(level, eCode);
356     } else {
357       fail("Not expecting an Exception: " + e.getMessage());
358     }
359   }
360 
361   private int expected[];
362 
363   private void println(String m) {
364     logger.error(m);
365   }
366 
367   void onError(int level, int num) {
368     for (int i = 0; i < expected.length; i++)
369       if (expected[i] == num) {
370         expected[i] = 0;
371         return;
372       }
373     String msg = "Parser reports unexpected "
374         + WGTestSuite.errorLevelName[level] + ": "
375         + JenaReader.errorCodeName(num);
376     println(msg);
377     fail(msg);
378   }
379 
380   private void tokenGarbage(String file) {
381     try {
382       Token.COUNT = true;
383       Token.COUNTTEST = true;
384       Token.reinitHighTide();
385       NTriple.main(new String[] { "-t", file });
386       //System.err.println("["+Token.highTide+"]");
387       assertTrue("Too many tokens used: "+ Token.highTide,
388           Token.highTide<2000);
389     } finally {
390       Token.COUNT = false;
391       Token.COUNTTEST = false;
392     }
393   }
394 
395   public void testTokenGarbage1() {
396     tokenGarbage("testing/ontology/owl/Wine/wine.owl");
397   }
398 
399   public void testTokenGarbage2() {
400 
401     tokenGarbage("testing/arp/gc/someWordNet.rdf");
402   }
403 }
404 
405 /*
406  * (c) Copyright 2000, 2001, 2002, 2002, 2003, 2004, 2005 Hewlett-Packard Development Company, LP
407  * All rights reserved.
408  * 
409  * Redistribution and use in source and binary forms, with or without
410  * modification, are permitted provided that the following conditions are met:
411  * 
412  * 1. Redistributions of source code must retain the above copyright notice,
413  * this list of conditions and the following disclaimer.
414  * 
415  * 2. Redistributions in binary form must reproduce the above copyright notice,
416  * this list of conditions and the following disclaimer in the documentation
417  * and/or other materials provided with the distribution.
418  * 
419  * 3. The name of the author may not be used to endorse or promote products
420  * derived from this software without specific prior written permission.
421  * 
422  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
423  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
424  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
425  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
426  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
427  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
428  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
429  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
430  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
431  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
432  */