blob: 0c6760ff18649f69257c38373944f13c2928257b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.ttl;
import junit.framework.TestCase;
import junit.framework.TestSuite;
@SuppressWarnings("deprecation")
// Tests the old N3IRIResolver which is now only used for tests.
public class TestN3IRIResolver extends TestCase
{
public static TestSuite suite()
{
TestSuite ts = new TestSuite(TestN3IRIResolver.class) ;
ts.setName("TestURI") ;
return ts ;
}
public void testBase1()
{
N3IRIResolver resolver = new N3IRIResolver() ;
assertNotNull(resolver.getBaseIRI()) ;
String base = resolver.getBaseIRI() ;
assertTrue(base.indexOf(':') > 0 ) ;
}
public void testBase2()
{
N3IRIResolver resolver = new N3IRIResolver("x") ;
assertNotNull(resolver.getBaseIRI()) ;
// Active when IRI library integrated - currently the resolver takes a raw base string.
// String base = resolver.getBaseIRI() ;
// assertTrue(base.indexOf(':') > 0 ) ;
}
public void testBase3()
{
String b = N3IRIResolver.resolveGlobal("x") ;
N3IRIResolver resolver = new N3IRIResolver(b) ;
assertNotNull(resolver.getBaseIRI()) ;
String base = resolver.getBaseIRI() ;
assertTrue(base.indexOf(':') > 0 ) ;
}
public void testBadBase1() {
execException("%G",JenaURIException.class);
}
public void testBadBase2() {
execException("/%G",JenaURIException.class);
}
public void testBadBase3() {
execException("file:/%/",JenaURIException.class);
}
public void testBadBase4() {
execException("http://example.org/%",JenaURIException.class);
}
public void testBadChoice1() {
chooseException("%G",JenaURIException.class);
}
public void testBadChoice2() {
chooseException("/%G",JenaURIException.class);
}
public void testBadChoice3() {
chooseException("file:/%/",JenaURIException.class);
}
public void testChoice1() {
choose("file:a");
}
public void testChoice2() {
choose("file:a");
}
// ---- Basic
public void testURI_1() { execTest("", "http://example.org/", "http://example.org/"); }
public void testURI_2() { execTest("", "http://example.org/xyz_2007", "http://example.org/xyz_2007"); }
// RDF URI References - space in URI. Not IRIs.
//public void testURI_3() { execTest("", "http://example.org/xyz 2007", "http://example.org/xyz 2007"); }
public void testURI_4() { execTest("", "http://example.org/xyz__2007", "http://example.org/xyz__2007"); }
public void testURI_5() { execTest("", "http://example.org/xyz__abc", "http://example.org/xyz__abc"); }
// ---- Relative URIs
public void testURI_relX_1() { execTest("x", "http://example.org/ns", "http://example.org/x"); }
public void testURI_relX_2() { execTest("x", "http://example.org/", "http://example.org/x"); }
public void testURI2_relHashX_1() { execTest("#x", "http://example.org/ns", "http://example.org/ns#x"); }
public void testURI2_relHashX_2() { execTest("#x", "http://example.org/ns/", "http://example.org/ns/#x"); }
public void testURI_blank_1() { execTest("", "http://example.org/ns", "http://example.org/ns") ; }
public void testURI_blank_2() { execTest("", "http://example.org/ns/", "http://example.org/ns/") ; }
public void testURI_hash_1() { execTest("#", "http://example.org/ns", "http://example.org/ns#") ; }
public void testURI_hash_2() { execTest("#", "http://example.org/ns/", "http://example.org/ns/#") ; }
public void testBaseHash_1() { execTest("x", "http://example.org/ns#", "http://example.org/x") ; }
public void testBaseHash_2() { execTest("x", "http://example.org#", "http://example.org/x") ; }
public void testBaseHash_3() { execTest("#", "base:x", "base:x#") ; }
// // Java5: exception
// // Java6 & GNUclasspath: correctly get "base:#"
// public void testBaseHash_4() { execTest("#", "base:", "base:#") ; }
public void testScheme_1() { execTest("x", "base:", "base:x") ; }
public void testScheme_2() { execTest("/x", "base:", "base:/x") ; }
public void testScheme_3() { execTestMatch("x", "file:", "^file:///.*/x$") ; }
public void testScheme_4() { execTestMatch("file:x", null, "^file:///.*/x$") ; }
// public void testURI_file_1() { execTestMatch("file:x", "http://example.org/ns", "^file:///.*/x$") ; }
public void testURI_file_2() { execTest("x", "file:///A/B/C", "file:///A/B/x") ; }
public void testURI_file_3() { execTest("x", "file:///A/B/", "file:///A/B/x") ; }
// ---- Absolute URIs are left alone
public void testURI_abs_1() { execTest("http://host/x", "http://example.org/ns", "http://host/x") ; }
public void testURI_abs_2() { execTest("file:///x", "http://example.org/ns", "file:///x") ; }
public void testURI_abs_3() { execTest("tag:foo", "http://example.org/ns", "tag:foo") ; }
public void testURI_abs_4() { execTest("tag:/foo", "http://example.org/ns", "tag:/foo") ; }
public void testURI_abs_5() { execTest("tag:/foo/", "http://example.org/ns", "tag:/foo/") ; }
public void testURI_abs_6() { execTest("scheme99:/foo/", "http://example.org/ns", "scheme99:/foo/") ; }
// Null base
public void testURI_nullBase_1() { execTest("scheme99:/foo/", null, "scheme99:/foo/") ; }
// resolved against current directory
public void testURI_nullBase_2() { execTestMatch("foo", null, ".*/foo") ; }
// ---- Hierarchical URIs
public void testHierURI_1() { execTest("../foo", "file:///dir/file", "file:///foo") ; }
public void testHierURI_2() { execTest("../foo", "http://host/dir/file.html", "http://host/foo") ; }
public void testHierURI_3() { execTest("../foo", "http://host/dir/", "http://host/foo") ; }
public void testHierURI_4() { execTest("../foo", "http://host/", "http://host/foo") ; }
public void testHierURI_5() { execTest("../foo", "http://host/xyz", "http://host/foo") ; }
public void testHierURI_6() { execTest(".", "http://host/xyz", "http://host/") ; }
public void testHierURI_7() { execTest(".", "http://host/xyz/", "http://host/xyz/") ; }
public void testHierURI_8() { execTest(".", "http://host/", "http://host/") ; }
public void testHierURI_9() { execTest(".", "file:///dir/file", "file:///dir/") ; }
// ---- File URIs
public void testFileURI_1() { execFileTest("file:///foo", "file:///foo") ; }
public void testFileURI_2() { execFileTest("file://foo", "file://foo") ; }
public void testFileURI_3() { execFileTest("file:/foo", "file:///foo") ; }
// Bad.
public void testBad_1() { execException("%G", "http://example.org/", JenaURIException.class); }
public void testBad_2() { execException("foo", "http://example.org/%HH", JenaURIException.class); }
public void testBad_3() { execException("bar", "http://example.org/%3", JenaURIException.class); }
public void testBaseEmpty() { execTestMatch("x", "", "^file:///.*/x$") ; }
// Resolved against current directory.
public void testBaseNull() { execTestMatch("x", null, ".*/x" ) ; }
public void testRelBase_1() {execTestMatch("x", "ns", ".*/x" ); }
public void testRelBase_2() { execTestMatch("x", "/ns", ".*/x" ); }
// ---- Opaque
public void testURI_opaque_1() { execTest("#x", "tag:A", "tag:A#x") ; }
public void testURI_opaque_2() { execTest("#x", "urn:x-jena:A", "urn:x-jena:A#x") ; }
// public void testURI_opaque_3() { execException("#x", "urn:x-jena:A", RelativeURIException.class) ; }
// ---- Opaque file URLs
// Should these be errors? Yes.
//public void testURI_file_4() { execTest("x", "file:A", "file:Ax") ; }
public void testURI_file_4() { execTestMatch("x", "file:A","^file:///.*/x") ;}
public void testURI_file_5() { execTestMatch("#x", "file:A","^file:///.*/A#x") ; }
//public void testURI_file_5() { execException("#x", "file:A", RelativeURIException.class) ; }
//public void testURI_file_6() { execTest("foo", "file:///xyz abc/", "file:///xyz abc/foo" ) ; }
public void testURI_file_7() { execTestMatch("file:foo", "file:xyz", "^file:///.*foo$") ; }
// RDF URI References - space in URI. Not IRIs.
//public void testURI_file_8() { execTestMatch("file:foo", "file:a b", "^file:///.*foo$") ; }
// File URLs - test aren't exact as the depend where they are run.
public void testFileURI_rel_1() { execTestFileRelURI("file:foo") ; }
public void testFileURI_rel_2() { execTestFileRelURI("file:foo/bar") ; }
public void testFileURI_rel_3() { execTestFileRelURI("file:foo/") ; }
public void testFileURI_rel_4() { execTestFileRelURI("file:foo/bar/") ; }
private void execTest(String u, String base, String result)
{
N3IRIResolver resolver = new N3IRIResolver(base) ;
String res = resolver.resolve(u) ;
if (result == null )
{
assertNull("("+u+","+base+") => <null> :: Got: "+res, res) ;
return ;
}
assertNotNull("("+u+","+base+") => "+result+" :: Got: <null>", res) ;
assertTrue("("+u+","+base+") => "+result+" :: Got: "+res, res.equals(result)) ;
}
// A test for resolved names that depend on where the tests are run.
private void execTestMatch(String u, String base, String resultPattern)
{
N3IRIResolver resolver = new N3IRIResolver(base) ;
String res = resolver.resolve(u) ;
if (resultPattern == null )
{
assertNull("("+u+","+base+") => <null> :: Got: "+res, res) ;
return ;
}
boolean r = res.matches(resultPattern) ;
assertTrue("Does not match: "+res+" -- "+resultPattern, r) ;
}
private void execFileTest(String fn1, String fn2)
{
String s = N3IRIResolver.resolveFileURL(fn1) ;
assertEquals(s,fn2) ;
}
private void execTestFileRelURI(String fn)
{
String relName = fn.substring("file:".length()) ;
String s = N3IRIResolver.resolveFileURL(fn) ;
assertTrue("Lost relative name: ("+fn+"=>"+s+")", s.endsWith(relName) ) ;
assertTrue("Not absolute: ("+fn+"=>"+s+")", s.startsWith("file:///") ) ;
}
private void execException(String u, String base, Class<?> ex)
{
String s = ex.getSimpleName() ;
try {
N3IRIResolver resolver = new N3IRIResolver(base) ;
String res = resolver.resolve(u) ;
if ( res == null )
fail("("+u+","+base+") => <null> :: Expected exception: " +s) ;
else
fail("("+u+","+base+") => "+res+" :: Expected exception: " +s) ;
} catch (Exception ex2)
{
// Should test whether ex2 is a subclass of ex
assertEquals(ex, ex2.getClass()) ;
}
}
private void execException(String base, Class<?> ex)
{
String s = ex.getSimpleName() ;
try {
new N3IRIResolver(base) ;
fail("("+base+") => OK :: Expected exception: " +s) ;
} catch (Exception ex2)
{
// Shoudl test whether ex2 is a subclass of ex
assertEquals(ex, ex2.getClass()) ;
}
}
private void choose(String base)
{
N3IRIResolver.chooseBaseURI(base) ;
}
private void chooseException(String base, Class<?> ex)
{
String s = ex.getSimpleName() ;
try {
N3IRIResolver.chooseBaseURI(base) ;
fail("("+base+") => OK :: Expected exception: " +s) ;
} catch (Exception ex2)
{
// Shoudl test whether ex2 is a subclass of ex
assertEquals(ex, ex2.getClass()) ;
}
}
// private void execTestGlobal(String u, String result)
// {
// String res = IRIResolver.resolveGlobal(u) ;
// if (result == null )
// {
// assertNull("("+u+") => <null> :: Got: "+res, res) ;
// return ;
// }
//
// assertNotNull("("+u+") => "+result+" :: Got: <null>", res) ;
// assertTrue("("+u+") => "+result+" :: Got: "+res, res.equals(result)) ;
// }
}