/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

/* $Rev$ $Date$ */

#include <stdio.h>

#pragma warning(disable:4786)

#include <iostream>
using namespace std;

#include "sdotest.h"

extern "C"{

#define TEST(testname) \
    ++totaltests; \
    try { \
      value = testname; \
      cout << "Test " << totaltests << ": " << #testname << " ..... "; \
      if (value) { \
        cout << "OK" << endl; \
        ++testspassed; \
      } \
      else { \
        cout << "FAILED" << endl; \
      } \
    } \
    catch(const SDORuntimeException&) { \
        cout << "Test " << totaltests << ": " << #testname << " ..... "; \
        cout << "FAILED (unexpected SDO exception)" << endl; \
    } \
    catch(...) { \
        cout << "Test " << totaltests << ": " << #testname << " ..... "; \
        cout << "FAILED (unexpected unknown exception)" << endl; \
    }

int main (int argc, char** argv)
{
    //Logger::setLogging(20);

    int testspassed=0;
    int totaltests=0;
    int value = 0;
    try {
    //TEST (  sdotest::eBayTest() );
    // TEST ( sdotest::xhtml1() );
    TEST ( sdotest::scopetest() );
    TEST ( sdotest::xsdtosdo() );
    TEST (  sdotest::jira980() );

    /* groups now supported*/
    TEST ( sdotest::testany("list1.xsd",0,"list1.xml", 0) );
    TEST ( sdotest::testany("b48636.xsd",0,"b48636.xml", 0) );
    TEST ( sdotest::testany("groupwithprefix.xsd", 0, 0, 0) );
    TEST ( sdotest::testany("groupwrongname.xsd","Use of undefined group NameGroup", 0, 0) );

    // late definition of group now supported
    TEST ( sdotest::testany("grouptoolate.xsd",0 , 0, 0) );

    // group definition within group now ignored

    TEST ( sdotest::testany("groupingroup.xsd","Use of undefined group NameGroup2",0, 0) );
    TEST ( sdotest::testany("grouprefingroup.xsd",0,0, 0) );
    TEST ( sdotest::testany("bothgroups.xsd",0,0, 0) );
    TEST ( sdotest::testany("bothgroupssamename.xsd",0,0, 0) );

    /* general tests */
    TEST (  sdotest::pete() );
    TEST (  sdotest::stocktest() );
    TEST (  sdotest::definetest() );
    TEST (  sdotest::emptycs() );
    TEST (  sdotest::openseq() );
    TEST (  sdotest::testanytwo("b48633b.xsd","b48633.xsd","b48633.xml") );
    TEST (  sdotest::testany("b48686.xsd",0, "b48686.xml", 0) );
    TEST (  sdotest::testany("b48636.xsd","Use of undefined group NameGroup","b48636.xml", 0) );
    TEST (  sdotest::b48602() );
    TEST (  sdotest::compatiblefactory() );
    TEST (  sdotest::simple() );
    TEST (  sdotest::testOrder("employee.xsd","extension.xsd","order1.dat","order1.txt") );
    TEST (  sdotest::testOrder("extension.xsd","employee.xsd","order2.dat","order2.txt") );
    TEST (  sdotest::testOpen() );
    TEST (  sdotest::testinc2("calculator2.wsdl","inc1.dat","inc1.txt") );
    TEST (  sdotest::testinc2("calculator2a.wsdl","inc2.dat","inc2.txt") );
    TEST (  sdotest::teststyles() );
    TEST (  sdotest::badelement() );
    TEST (  sdotest::oddchars() );
    TEST (  sdotest::notns() );
    TEST (  sdotest::unsetlist() );
    TEST (  sdotest::travel() );
    /*TEST (  sdotest::testwsdl() );*/
    TEST (  sdotest::bunique() );
    TEST (  sdotest::buniqueread() );
    TEST (  sdotest::propdefaulttest() );
    TEST (  sdotest::graham5() );
    TEST (  sdotest::graham4() );
    TEST (  sdotest::detachtest() );
    TEST (  sdotest::includetest() );
    TEST (  sdotest::testLoad() );
    TEST (  sdotest::leak() );
    TEST (  sdotest::twolists() );
    TEST (  sdotest::testUtil() );
    TEST (  sdotest::clonetest() );
    TEST (  sdotest::notfound() );
    TEST (  sdotest::testErrors() );
    TEST (  sdotest::loadManyOpen() );
    TEST (  sdotest::doctest() );
    TEST (  sdotest::graham3() );
    TEST (  sdotest::graham1() );
    TEST (  sdotest::graham2() );
    TEST (  sdotest::merle1() );
    TEST (  sdotest::loadOpenNS() );
    TEST (  sdotest::saveOpen() );
    TEST (  sdotest::loadOpen() );
    TEST (  sdotest::testui() );
    TEST (  sdotest::testSCA() );
    TEST (  sdotest::testabstract() );
    TEST (  sdotest::testsubsload() );
    TEST (  sdotest::testsubs() );
    TEST (  sdotest::setnull() );
    TEST (  sdotest::bug2() );
    TEST (  sdotest::cssave2() );
    TEST (  sdotest::csload2() );
    TEST (  sdotest::cssave() );
    TEST (  sdotest::csload() );
    TEST (  sdotest::bug1() );
    TEST (  sdotest::eqhelpertest() );
    TEST (  sdotest::cohelpertest() );
    TEST (  sdotest::datetest() );
    TEST (  sdotest::carotest3() );
    TEST (  sdotest::matttest1() );
    TEST (  sdotest::adddeletetest() );
    TEST (  sdotest::carotest2() );
    TEST (  sdotest::carotest() );
    TEST (  sdotest::setmany() );
    TEST (  sdotest::noncontest() );
    TEST (  sdotest::versiontest() );
    TEST (  sdotest::defaulttest() );
    TEST (  sdotest::defaulttest_strobj() );
    TEST (  sdotest::nulltest() );
    TEST (  sdotest::usertest() );
    TEST (  sdotest::querytest() );
    TEST (  sdotest::getproptest() );
    TEST (  sdotest::rcptest() );
    TEST (  sdotest::seqtest() );
    TEST (  sdotest::changesummarytest() );
    TEST (  sdotest::conversiontest() );
    TEST (  sdotest::boolbug() );
    TEST (  sdotest::scope1() );
    TEST (  sdotest::scope2() );
    TEST (  sdotest::scope3() );
    TEST (  sdotest::maintest() );

    /* regression tests */
    TEST (  sdotest::b48736() );
    /*TEST (  sdotest::b48601() );*/
    TEST (  sdotest::b47293() );
    TEST (  sdotest::b48300() );
    TEST (  sdotest::b47663() );
    TEST (  sdotest::b47802() );
    TEST (  sdotest::b47137() );
    TEST (  sdotest::b47137b() );
    TEST (  sdotest::b46633() );
    TEST (  sdotest::b46693() );
    TEST (  sdotest::b46734() ); 
    TEST (  sdotest::b46634() );
    TEST (  sdotest::b46617b() );
    TEST (  sdotest::b46617() );
    TEST (  sdotest::b46613() );
    TEST (  sdotest::b45933() );
    TEST (  sdotest::jira490() );
    TEST (  sdotest::jira705() );
    TEST (  sdotest::jira546() );
    TEST (  sdotest::jira945() );
    TEST (  sdotest::testXPath() );

    TEST (  sdotest::cdatatest() );
	TEST (  sdotest::cloneopentest() );
	TEST (  sdotest::tuscany963() );
	TEST (  sdotest::tuscany562() );
	TEST (  sdotest::typedefinitionstest() );
    
    TEST (  sdotest::jira1174() );
    TEST (  sdotest::jira1238() );
    TEST ( sdotest::loadWithoutSchema() );
    //TEST (  sdotest::jira445() );
    TEST (  sdotest::jira1112() );
    TEST (  sdotest::elementFormDefaultQualified() );
    TEST (  sdotest::elementFormDefaultQualifiedSequence() );
    TEST (  sdotest::xsiTypeAbstract() );
    TEST (  sdotest::refCount() );
    TEST (  sdotest::jira1548() );
	TEST (  sdotest::jira1837() );

    } catch(...)
    {
        cout << "unexpected exception caught" << endl; 
    }

    cout << "Total tests:" << totaltests << " Tests passed:" << testspassed << endl;
    return testspassed - totaltests;
}
}
