package org.castor.xml.template.bug;

import java.io.StringWriter;

import junit.framework.TestCase;

import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.XMLContext;
import org.xml.sax.InputSource;

public final class TestTemplate extends TestCase {

  private static final String SAMPLE_FILE = "input.xml";
  private XMLContext context;

  public TestTemplate() {
    super();
  }

  public TestTemplate(final String name) {
    super(name);
  }


  protected void setUp() throws Exception {
    this.context = new XMLContext();
    context.setProperty("org.exolab.castor.indent", "true");
    context.setProperty("org.exolab.castor.xml.strictelements", true);
  }

  /**
   * Test method.
   * 
   * @throws Exception For any exception thrown.
   */
  public void testUnmarshalEntity() throws Exception {

    Unmarshaller unmarshaller = getXMLContext().createUnmarshaller();
    unmarshaller.setClass(Entity.class);

    Entity entity = (Entity) unmarshaller
        .unmarshal(new InputSource(getClass().getResource(SAMPLE_FILE).toExternalForm()));
    assertNotNull(entity);
    assertEquals(1, entity.getId().intValue());
    assertEquals("name", entity.getName());
  }

  /**
   * Test method.
   * 
   * @throws Exception For any exception thrown.
   */
  public void testMarshalEntity() throws Exception {

    StringWriter out = new StringWriter();
    Marshaller marshaller = getXMLContext().createMarshaller();
    marshaller.setWriter(out);

    Entity entity = new Entity();
    entity.setId(Integer.valueOf(100));
    entity.setName("entity 100");
    marshaller.marshal(entity);

    System.out.println(out.toString());
  }

  private XMLContext getXMLContext() {
    return this.context;
  }
}
