/*
 * 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.vocabulary.test;

import junit.framework.*;
import org.apache.jena.rdf.model.test.ModelTestBase ;
import org.apache.jena.vocabulary.* ;

public class TestVocabRDF extends ModelTestBase
    {
    public TestVocabRDF(String name)
        { super(name); }

     public static TestSuite suite()
        { return new TestSuite( TestVocabRDF.class ); }

    /**
        The correct namespace for RDF. It is *important* that this be a literal
        string, not a reference to RDF.getURI(), because we're testing that the
        RDF vocabulary is correct, so this here string is the gold standard.
    */
    static final String RDFns = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";

    /**
        Tests that the RDF vocabulary identifiers are what they're supposed to be.
        TODO arrange that we detect if there are any other identifiers in the class.
    */
    public void testRDFVocabulary()
        {
        String ns = RDFns;
        assertEquals( ns, RDF.getURI() );
        assertEquals( ns + "Alt", RDF.Alt.getURI() );
        assertEquals( ns + "Bag", RDF.Bag.getURI() );
        assertEquals( ns + "Property", RDF.Property.getURI() );
        assertEquals( ns + "Seq", RDF. Seq.getURI() );
        assertEquals( ns + "Statement", RDF. Statement.getURI() );
        assertEquals( ns + "List", RDF. List.getURI() );
        assertEquals( ns + "nil", RDF. nil.getURI() );
        assertEquals( ns + "type", RDF. type.getURI() );
        assertEquals( ns + "rest", RDF. rest.getURI() );
        assertEquals( ns + "first", RDF. first.getURI() );
        assertEquals( ns + "subject", RDF. subject.getURI() );
        assertEquals( ns + "predicate", RDF. predicate.getURI() );
        assertEquals( ns + "object", RDF. object.getURI() );
        assertEquals( ns + "value", RDF. value.getURI() );
        }

    /**
        Test that the RDF.li() method generates the correct strings for a few
        plausible test cases.
    */
    public void testLI()
        {
        String ns = RDFns;
        assertEquals( ns + "_1", RDF.li(1).getURI() );
        assertEquals( ns + "_1", RDF.li(1).getURI() );
        assertEquals( ns + "_10", RDF.li(10).getURI() );
        assertEquals( ns + "_11", RDF.li(11).getURI() );
        assertEquals( ns + "_100", RDF.li(100).getURI() );
        assertEquals( ns + "_123", RDF.li(123).getURI() );
        assertEquals( ns + "_32768", RDF.li(32768).getURI() );
        }

    public void testNodes()
        {
        assertEquals( RDF.Alt.asNode(), RDF.Nodes.Alt );
        assertEquals( RDF.Bag.asNode(), RDF.Nodes.Bag );
        assertEquals( RDF.Property.asNode(), RDF.Nodes.Property );
        assertEquals( RDF.Seq.asNode(), RDF.Nodes. Seq );
        assertEquals( RDF.Statement.asNode(), RDF.Nodes. Statement );
        assertEquals( RDF.List.asNode(), RDF.Nodes. List );
        assertEquals( RDF.nil.asNode(), RDF.Nodes. nil );
        assertEquals( RDF.type.asNode(), RDF.Nodes. type );
        assertEquals( RDF.rest.asNode(), RDF.Nodes. rest );
        assertEquals( RDF.first.asNode(), RDF.Nodes. first );
        assertEquals( RDF.subject.asNode(), RDF.Nodes. subject );
        assertEquals( RDF.predicate.asNode(), RDF.Nodes. predicate );
        assertEquals( RDF.object.asNode(), RDF.Nodes. object );
        assertEquals( RDF.value.asNode(), RDF.Nodes. value );
        }
    }
