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 */