/*   Copyright 2004 The Apache Software Foundation
 *
 *   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.apache.xmlbeans.samples.datetime;

import org.apache.xmlbeans.samples.datetime.DatetimeDocument ;

/**
 * A class with which to test the DateTime sample.
 */
public class DateTimeTest
{
    /**
     * Tests the DateTime sample.
     *
     * @param args An array in which the first item is a path to an XML file
     * based on the schema in datetime.xsd.
     */
    public static void main(String[] args)
    {
        // Create an instance of this sample to work with.
        DateTime sample = new DateTime();

        // Create an schema type instance from the XML indicated by the path.
        DatetimeDocument doc = sample.parseXml(args[0]);

        sample.printInstance(doc);

        // Validate the XML.
        boolean exampleIsValid = sample.validateXml(doc);
        assert exampleIsValid;

        //Creating a new XML document
        sample.createDocument(doc,args[1]);

    }
}
