/*
 *    GeoTools - OpenSource mapping toolkit
 *    http://geotools.org
 *    (C) 2002-2006, GeoTools Project Managment Committee (PMC)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */
package org.geotools.xml.impl.jxpath;

import java.util.Iterator;

import junit.framework.TestCase;

import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.JXPathContextFactory;
import org.apache.commons.jxpath.JXPathIntrospector;
import org.geotools.xml.impl.ElementHandlerImpl;
import org.geotools.xml.impl.ElementImpl;
import org.geotools.xml.impl.NodeImpl;


public class JXPathTest extends TestCase {
    NodeImpl root;
    NodeImpl child1;
    NodeImpl child2;
    JXPathContext context;

    protected void setUp() throws Exception {
        ElementImpl e = new ElementImpl(null);
        e.setName("root");
        root = new NodeImpl( e );
        
        e = new ElementImpl(null);
        e.setName("child");
        child1 = new NodeImpl( e );
        //root.addChild( child1 );

        e = new ElementImpl(null);
        e.setName("child");
        child2 = new NodeImpl(e );
        //root.addChild( child2 );

        JXPathIntrospector.registerDynamicClass(NodeImpl.class,
            NodePropertyHandler.class);
        
        context = JXPathContextFactory.newInstance().newContext(null, root);
    }

    public void testIterate() {
//        root.getChildHandlers().add(child1);
//        root.getChildHandlers().add(child2);
    	root.addChild( child1 );
    	root.addChild( child2 );
    	
        Iterator itr = context.iterate("child");
        assertTrue(itr.hasNext());
        assertEquals(child1, itr.next());
        assertTrue(itr.hasNext());
        assertEquals(child2, itr.next());

        itr = context.iterate("child[position() = 2]");
        assertTrue(itr.hasNext());
        assertEquals(child2, itr.next());

        assertFalse(itr.hasNext());

        //		
        //		assertTrue(itr.hasNext());
        //		assertEquals(itr.next(), child2);
    }

    //	
    //	public void testSimple() {
    //		root.getChildHandlers().add(child1);
    //		root.getChildHandlers().add(child2);
    //		
    //		Object obj = context.getValue("child1");
    //		assertNotNull(obj);
    //		assertEquals(obj, child1);
    //		
    //		obj = context.getValue("child2");
    //		assertNotNull(obj);
    //		assertEquals(obj, child2);
    //	}
    //	
    //	public void testDynamic() {
    //		root.getChildHandlers().add(child1);
    //		
    //		Object obj = context.getValue("child1");
    //		assertNotNull(obj);
    //		assertEquals(obj, child1);
    //		
    //		root.getChildHandlers().add(child2);
    //		obj = context.getValue("child2");
    //		assertNotNull(obj);
    //		assertEquals(obj, child2);
    //	}
}
