/* * 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.rdf.model.test; import org.apache.jena.datatypes.TypeMapper ; import org.apache.jena.graph.impl.AdhocDatatype ; import org.apache.jena.rdf.model.Literal ; import org.apache.jena.rdf.model.LiteralRequiredException ; import org.apache.jena.rdf.model.Model ; import org.apache.jena.rdf.model.test.helpers.ModelHelper ; import org.apache.jena.rdf.model.test.helpers.TestingModelFactory ; import org.apache.jena.test.JenaTestBase ; import org.junit.Assert; /** * TestLiteralImpl - minimal, this is the first time an extra test has * been needed above * the regression testing. */ public class TestLiteralImpl extends AbstractModelTestBase { static class UniqueValueClass1 { String value; UniqueValueClass1( final String value ) { this.value = value; } @Override public String toString() { return value; } } static class UniqueValueClass2 { String value; UniqueValueClass2( final String value ) { this.value = value; } @Override public String toString() { return value; } } public TestLiteralImpl( final TestingModelFactory modelFactory, final String name ) { super(modelFactory, name); } /** * Test that a literal node can be as'ed into a literal. */ public void testAsLiteral() { ModelHelper.literal(model, "17").as(Literal.class); } /** * Test that a non-literal node cannot be as'ed into a literal */ public void testCannotAsNonLiteral() { try { ModelHelper.resource(model, "plumPie").as(Literal.class); Assert.fail("non-literal cannot be converted to literal"); } catch (final LiteralRequiredException l) { JenaTestBase.pass(); } } public void testInModel() { final Model m1 = createModel(); final Model m2 = createModel(); final Literal l1 = m1.createLiteral("17"); final Literal l2 = l1.inModel(m2); Assert.assertEquals(l1, l2); Assert.assertSame(m2, l2.getModel()); } public void testLiteralHasModel() { testLiteralHasModel(model, model.createLiteral("hello, world")); testLiteralHasModel(model, model.createLiteral("hello, world", "en-UK")); testLiteralHasModel(model, model.createLiteral("hello, world", true)); testLiteralHasModel(model, model.createTypedLiteral("hello, world")); testLiteralHasModel(model, model.createTypedLiteral(false)); testLiteralHasModel(model, model.createTypedLiteral(17)); testLiteralHasModel(model, model.createTypedLiteral('x')); } private void testLiteralHasModel( final Model m, final Literal lit ) { Assert.assertSame(m, lit.getModel()); } public void testSameAdhocClassUS() { try { final UniqueValueClass1 ra = new UniqueValueClass1("rhubarb"); final UniqueValueClass1 rb = new UniqueValueClass1("cottage"); Assert.assertNull("not expecting registered RDF Datatype", TypeMapper.getInstance().getTypeByValue(ra)); final Literal la = model.createTypedLiteral(ra); // Sets the type // mapper // - contaminates it // with // UniqueValueClass1 final Literal lb = model.createTypedLiteral(rb); JenaTestBase .assertInstanceOf(AdhocDatatype.class, la.getDatatype()); Assert.assertSame(la.getDatatype(), lb.getDatatype()); Assert.assertNotNull(TypeMapper.getInstance().getTypeByValue(ra)); } finally { TypeMapper.reset(); } } // Tests are not necessarily run in order so use UniqueValueClass2 public void testTypedLiteralTypesAndValues() { // Resource r = model.createResource( "eh:/rhubarb" ); final UniqueValueClass2 r = new UniqueValueClass2("rhubarb"); Assert.assertNull("not expecting registered RDF Datatype", TypeMapper .getInstance().getTypeByValue(r)); final Literal typed = model.createTypedLiteral(r); // Sets the type // mapper - // contaminates it // with // UniqueValueClass2 final Literal string = model.createLiteral(r.value); Assert.assertEquals(string.getLexicalForm(), typed.getLexicalForm()); Assert.assertEquals(string.getLanguage(), typed.getLanguage()); JenaTestBase.assertDiffer(string.getDatatypeURI(), typed.getDatatypeURI()); Assert.assertNotNull( "a datatype should have been invented for Resource[Impl]", typed.getDatatype()); JenaTestBase.assertDiffer(typed, string); JenaTestBase.assertDiffer(typed.getValue(), string.getValue()); Assert.assertEquals(r, typed.getValue()); JenaTestBase.assertDiffer(typed.hashCode(), string.hashCode()); } }