/**
 *  '$RCSfile: XMLPropertiesTest.java,v $'
 *  Copyright: 2002 Regents of the University of California 
 *    Authors: @authors@
 *    Release: @release@
 *
 *   '$Author: brooke $'
 *     '$Date: 2004-03-18 22:17:03 $'
 * '$Revision: 1.2 $'
 *
 * Permission is hereby granted, without written agreement and without
 * license or royalty fees, to use, copy, modify, and distribute this
 * software and its documentation for any purpose, provided that the above
 * copyright notice and the following two paragraphs appear in all copies
 * of this software.
 *
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
 * ENHANCEMENTS, OR MODIFICATIONS.
 */
package edu.ucsb.nceas.utilities;
import edu.ucsb.nceas.utilities.IOUtil;
import edu.ucsb.nceas.utilities.StringUtil;
import edu.ucsb.nceas.utilities.XMLProperties;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import javax.xml.transform.TransformerException;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
import org.apache.log4j.Logger;
/**
 *
 * @author brooke
 */
public class XMLPropertiesTest extends TestCase {
  private static String xmlInputFileName = "/edu/ucsb/nceas/utilities/test_xmlproperties.xml";
  private static XMLProperties xmlPropsObject = new XMLProperties();
  private static InputStream xmlInputStream;
  private final String[][] testprops =
  {
      { "/properties/does_not_exist",                        null },
      { "/properties/nodetype_definitions_filename",
                                    "/edu/ucsb/nceas/jalama/nodetype_defs.xml" },
      { "/properties/jalama_gui/show_renderer_menu",         "false" },
      { "/properties/jalama_gui/xmldisplay_bg_color/red",    "244" },
      { "/properties/jalama_gui/xmldisplay_bg_color/green",  "244" },
      { "/properties/jalama_gui/xmldisplay_bg_color/blue",   "244" },
      { "/properties/jalama_gui/initial_xml",                null },
      { "/properties/new_wizard_document_xml",
             "        \n"
            +"           \n"
            +"       " }
  };
  static {
    xmlInputStream = XMLPropertiesTest.class.getResourceAsStream(xmlInputFileName);
    assertNotNull(xmlInputStream);
    assertNotNull(xmlPropsObject);
    try {
      xmlPropsObject.load(xmlInputStream);
    } catch (Exception e) {
      fail("unexpected exception doing xmlPropsObject.load() with xmlInputStream="
                                                               +xmlInputStream);
    }
  }
  public XMLPropertiesTest(java.lang.String testName) {
    super(testName);
  }
  public static Test suite() {
    TestSuite suite = new TestSuite(XMLPropertiesTest.class);
    return suite;
  }
  /** Test of load method, of class edu.ucsb.nceas.utilities.XMLProperties. */
  public void testLoad() {
    System.out.println("testLoad");
    xmlInputStream = XMLPropertiesTest.class.getResourceAsStream(xmlInputFileName);
    assertNotNull(xmlPropsObject);
    assertNotNull(xmlInputStream);
    try {
      xmlPropsObject.load(xmlInputStream);
    } catch (Exception e) {
      e.printStackTrace();
      fail("unexpected exception doing xmlPropsObject.load() with xmlInputStream="
                                                               +xmlInputStream);
    }
  }
  /** Test of getProperty method, of class edu.ucsb.nceas.utilities.XMLProperties. */
  public void testGetProperty() {
    System.out.println("testGetProperty");
    assertNotNull(xmlPropsObject);
    assertNotNull(testprops);
    assertTrue(testprops.length > 0);
    for (int i=0; i 0);
    String[] resultArray = new String[resultList.size()];
    resultList.toArray(resultArray);
    assertNotNull(resultArray);
    assertTrue(resultArray.length > 0);
    for (int idx=0; idx < resultArray.length; idx++) {
      System.out.println("RESULT["+idx+"] = "+resultArray[idx]);
    }
    assertEquals(allTestXPathsArray.length, resultArray.length);
    for (int idx=0; idx < allTestXPathsArray.length; idx++) {
      assertEquals(allTestXPathsArray[idx], resultArray[idx]);
    }
  }
  public static void main(String args[]) {
    TestRunner.run(XMLPropertiesTest.class);
    System.exit(0);
  }
  private String[] allTestXPathsArray =
  {   "/properties/nodetype_definitions_filename[1]",
      "/properties/generic_doctype[1]",
      "/properties/generic_xpath[1]",
      "/properties/jvm_registry_lib_name[1]",
      "/properties/jalama_gui[1]/show_renderer_menu[1]",
      "/properties/jalama_gui[1]/default_width[1]",
      "/properties/jalama_gui[1]/default_height[1]",
      "/properties/jalama_gui[1]/xmldisplay_bg_color[1]/red[1]",
      "/properties/jalama_gui[1]/xmldisplay_bg_color[1]/green[1]",
      "/properties/jalama_gui[1]/xmldisplay_bg_color[1]/blue[1]",
      "/properties/jalama_gui[1]/xmldisplay_fg_color[1]/red[1]",
      "/properties/jalama_gui[1]/xmldisplay_fg_color[1]/green[1]",
      "/properties/jalama_gui[1]/xmldisplay_fg_color[1]/blue[1]",
      "/properties/jalama_gui[1]/renderer_status_fg_color[1]/red[1]",
      "/properties/jalama_gui[1]/renderer_status_fg_color[1]/green[1]",
      "/properties/jalama_gui[1]/renderer_status_fg_color[1]/blue[1]",
      "/properties/jalama_gui[1]/wizard[1]/doctype[1]",
      "/properties/jalama_gui[1]/wizard[1]/xpath[1]",
      "/properties/default_renderer[1]",
      "/properties/editor_wizard[1]/width[1]",
      "/properties/editor_wizard[1]/height[1]",
      "/properties/editor_default[1]/width[1]",
      "/properties/editor_default[1]/height[1]",
      "/properties/new_wizard_document_xml[1]"
  };
}