package org.apache.avalon.framework.configuration.test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import junit.framework.TestCase;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.avalon.excalibur.io.FileUtil;


/**
 * Test the basic public methods of DefaultConfigurationBuilder,
 * @author <a href="mailto:rantene@hotmail.com">Ran Tene</a>
 */

public final class DefaultConfigurationBuilderTestCase
	 extends TestCase
{
 
    private     DefaultConfigurationBuilder mBuilder; 
    private 	File mFile;
    private 	File mTestDirectory;
    private final	String mFileName = "configTest.xml";
    private final	String mPath = "test/framework/io/";
	
	
    public DefaultConfigurationBuilderTestCase()
    {	
        this("DefaultConfigurationBuilder Test Case");
    }


    public DefaultConfigurationBuilderTestCase( String name )
     {
        super( name );
		mTestDirectory = (new File( mPath)).getAbsoluteFile();
	    if( !mTestDirectory.exists() )
	    {
	        mTestDirectory.mkdirs();
	    }
     }
	 
	 
	 
    protected void setUp() 
		throws Exception
    {
		mBuilder = new DefaultConfigurationBuilder();
		String xmlString = 	"<?xml version=\"1.0\" ?>\n";
		xmlString +="<config>";
		xmlString +="<elements-a>";
		xmlString +="<element name=\"a\"/>";
		xmlString +="</elements-a>";
		xmlString +="<elements-b>";
		xmlString +="<element name=\"b\"/> ";
		xmlString +="</elements-b>";
		xmlString +="<elements-b type=\"type-b\"/>";
		xmlString +="</config>";
		mFile = new File(mTestDirectory, mFileName);
		FileWriter writer = new FileWriter( mFile);
		writer.write(xmlString);
		writer.flush();
         
    }
	
	
	protected  void tearDown()
		throws Exception
	
	{	

		FileWriter writer = new FileWriter( mFile);
		writer.write("");
		writer.flush();
		mBuilder =null;
	}
	
	public void testBuildFromFileName()
	        throws Exception
	{ 
    	Configuration conf =  mBuilder.buildFromFile(mPath+mFileName );
		assertEquals( "config", conf.getName() );
		assertEquals( "elements-a",conf.getChild("elements-a",false).getName() );
		
	}
	
	public void testBuildFromFile()
	        throws Exception
	{ 

		Configuration conf =  mBuilder.buildFromFile( mFile);
		assertEquals( "config", conf.getName() );
		assertEquals( "elements-a",conf.getChild("elements-a",false).getName() );
		
	}
	public void testBuild()
	        throws Exception
	{ 
		Configuration conf =  mBuilder.build( mFile.toURL().toString() );
		assertEquals( "config", conf.getName() );
		assertEquals( "elements-b",conf.getChild("elements-b",false).getName() );
		Configuration[] children = conf.getChildren( "elements-b" );		
		assertEquals( "type-b",children[1].getAttribute("type") );

	}

}






