/*
 * Copyright 2007 Joachim Grueneis
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package org.castor.xml;

import org.castor.core.util.AbstractProperties;
import org.junit.Assert;

import junit.framework.TestCase;

/**
 * The XMLProperties test has one goal - check if the proper defaults are in place.
 * 
 * @author Joachim Grueneis, jgrueneis_at_gmail_dot_com
 * @version $Id$
 */
public class XMLPropertiesTest extends TestCase {
  private AbstractProperties _properties;

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

  public void setUp() {
    _properties = XMLProperties.newInstance();
    Assert.assertNotNull("Properties must exist after call to newInstance()", _properties);
    Assert.assertNotNull("Application class loader must not be null",
        _properties.getApplicationClassLoader());
    Assert.assertNotNull("Domain class loader must not be null",
        _properties.getDomainClassLoader());
  }

  public void testNewInstanceClassLoaderClassLoader() {
    AbstractProperties properties = XMLProperties.newInstance(null, null);
    Assert.assertNotNull("Properties must exist after call to newInstance()", properties);
    // Assert.assertNotNull(
    // "Application class loader must not be null",
    // properties.getApplicationClassLoader());
    // Assert.assertNotNull(
    // "Domain class loader must not be null",
    // properties.getDomainClassLoader());
  }

  public void testGetBooleanString() {
    Boolean notExistingProperty = _properties.getBoolean("Something which doesn't exist");
    Assert.assertNull("A not existing property needs to return null", notExistingProperty);
  }

  public void testGetBooleanStringBoolean() {
    boolean notExistingPropertyWithDefault =
        _properties.getBoolean("Something which doesn't exist", true);
    Assert.assertTrue("A not existing property with default true", notExistingPropertyWithDefault);
  }

  /**
   * Tests wether the expected defaults are present or not.
   */
  public void testDefaults() {
    Boolean loadPackageMapping = _properties.getBoolean(XMLProperties.LOAD_PACKAGE_MAPPING);
    Assert.assertEquals("load package mapping is expected to be set to: true", Boolean.TRUE,
        loadPackageMapping);

    String serialzierFactory = _properties.getString(XMLProperties.SERIALIZER_FACTORY);
    Assert.assertEquals("check serializer factory default",
        "org.exolab.castor.xml.XercesJDK5XMLSerializerFactory", serialzierFactory);

    Boolean strictElements = _properties.getBoolean(XMLProperties.STRICT_ELEMENTS);
    Assert.assertEquals("strict elements default", Boolean.FALSE, strictElements);

    Boolean marshallingValidation = _properties.getBoolean(XMLProperties.MARSHALLING_VALIDATION);
    Assert.assertEquals("marshallingValidation", Boolean.TRUE, marshallingValidation);

    Boolean useIntrospection = _properties.getBoolean(XMLProperties.USE_INTROSPECTION);
    Assert.assertEquals("useIntrospection", Boolean.TRUE, useIntrospection);
  }
}
