/*
 * Created on Aug 2, 2005
 * 
 * $Log$
 * Revision 1.2  2005/09/21 22:00:46  dsowen
 * Split out the access stuff into accesslib.
 * New Creator interface off-loads object creation to user.
 *
 * Revision 1.1  2005/08/03 00:35:29  dsowen
 * Initial commit.
 *
 */
package ws.fugue88.jpath;

import java.util.Iterator;

import junit.framework.TestCase;

/**
 * @author dsowen
 */
public class PathTest extends TestCase {

	public void testQuote()
	{
		assertEquals("test", PathParser.quote("test"));
		assertEquals("te\\'st", PathParser.quote("te'st"));
	}

	public void testIdentifier() throws Exception
	{
		Path path = new SimplePathParser().parse("/test");
		Iterator i = path.iterator();
		PathPart part = (PathPart)i.next();
		assertTrue(part instanceof Identifier);
		assertEquals("test", ((Identifier)part).getName());
		assertFalse(i.hasNext());
	}

	public void testNumberSelector() throws Exception
	{
		Path path = new SimplePathParser().parse("[0]");
		Iterator i = path.iterator();
		PathPart part = (PathPart)i.next();
		assertTrue(part instanceof NumberSelector);
		assertEquals(0, ((NumberSelector)part).getIndex());
		assertFalse(i.hasNext());
	}

	public void testStringSelectorSimple() throws Exception
	{
		Path path = new SimplePathParser().parse("['test']");
		Iterator i = path.iterator();
		PathPart part = (PathPart)i.next();
		assertTrue(part instanceof StringSelector);
		assertEquals("test", ((StringSelector)part).getKey());
		assertFalse(i.hasNext());
	}

	public void testStringSelectorQuoted() throws Exception
	{
		Path path = new SimplePathParser().parse("['te\\'st']");
		Iterator i = path.iterator();
		PathPart part = (PathPart)i.next();
		assertTrue(part instanceof StringSelector);
		assertEquals("te'st", ((StringSelector)part).getKey());
		assertFalse(i.hasNext());
	}

	public void testCompound1() throws Exception
	{
		Path path = new SimplePathParser().parse("/a/b");
		Iterator i = path.iterator();
		PathPart part = (PathPart)i.next();
		assertTrue(part instanceof Identifier);
		assertEquals("a", ((Identifier)part).getName());
		part = (PathPart)i.next();
		assertTrue(part instanceof Identifier);
		assertEquals("b", ((Identifier)part).getName());
		assertFalse(i.hasNext());
	}
}