blob: d9155fa44a310ae143b21bea2ce388b854fc7655 [file] [log] [blame]
/*
* 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.
*/
#include <xalanc/Include/PlatformDefinitions.hpp>
#define TEST_XALAN_CPP
// This is here for memory leak testing.
#if defined(_DEBUG)
#include <crtdbg.h>
#endif
#include <xercesc/util/PlatformUtils.hpp>
#if defined(TEST_XALAN_CPP)
#include <xalanc/XalanTransformer/XalanTransformer.hpp>
#include <iostream>
#include <strstream>
using std::cerr;
using std::cout;
using std::endl;
using std::ostrstream;
#else
#include <xalanc/XalanTransformer/XalanCAPI.h>
#include <cstdio>
#endif
static CallbackSizeType xalan_output_handler(const char *data, CallbackSizeType length, void *handle)
{
FILE *fp = (FILE*)handle;
return fwrite( data, sizeof( char ), length, fp );
}
static void xalan_flush_handler(void *handle)
{
FILE *fp = (FILE*)handle;
fflush(fp);
}
int
runTests()
{
const char* const theXMLFileName = "d:\\xslt\\xsl-test\\perf\\basic\\basic-all_well.xml";
const char* const theXSLFileName = "d:\\xslt\\xsl-test\\perf\\basic\\basic-all_well.xsl";
const char* const theOutFileName = "d:\\Transformer-Results\\basic-all_well.out";
const char* const theXMLFileName2 = "d:\\xslt\\xsl-test\\perf\\basic\\miscfam.xml";
const char* const theXSLFileName2 = "d:\\xslt\\xsl-test\\perf\\basic\\miscfam.xsl";
const char* const theXMLFileName3 = "d:\\xslt\\xsl-test\\conf\\embed\\embed01.xml";
const char* const theOutFileName3 = "d:\\Transformer-Results\\embed01.out";
const char* const theXMLFileName4 = "d:\\xml-xalan\\c\\samples\\UseStylesheetParam\\foo.xml";
const char* const theXSLFileName4 = "d:\\xml-xalan\\c\\samples\\UseStylesheetParam\\foo.xsl";
#if defined(TEST_XALAN_CPP)
using xalanc::XalanTransformer;
using xalanc::XalanCompiledStylesheet;
XalanTransformer xalan;
const XalanCompiledStylesheet* css = 0;
if (xalan.compileStylesheet(theXSLFileName, css) != 0)
{
cout << xalan.getLastError();
return 0;
}
for(int i=0; i<1; ++i)
{
if(xalan.transform(theXMLFileName, css, "d:\\transformer-results\\css.out"))
{
cout << xalan.getLastError();
return 0;
}
if(xalan.transform(theXMLFileName3, theOutFileName3))
{
cout << xalan.getLastError();
return 0;
}
if(xalan.transform(theXMLFileName, theXSLFileName, theOutFileName))
{
cout << xalan.getLastError();
return 0;
}
ostrstream theOutput;
if(xalan.transform(theXMLFileName2, theXSLFileName2, &theOutput))
{
cout << xalan.getLastError();
return 0;
}
theOutput << '\0';
cout << theOutput.str();
theOutput.freeze(false);
ostrstream theOutput3;
if(xalan.transform(theXMLFileName3, theOutput3))
{
cout << xalan.getLastError();
return 0;
}
/*
if(xalan.transform(theXMLFileName, css, cout))
{
cout << xalan.getLastError();
return 0;
}
*/
xalan.setStylesheetParam("param1",
"'What is Up'");
if(xalan.transform(theXMLFileName4, theXSLFileName4, &cout))
{
cout << xalan.getLastError();
return 0;
}
if(xalan.transform(theXMLFileName4, theXSLFileName4, &cout))
{
cout << xalan.getLastError();
return 0;
}
}
#else
// $$$ ToDo: This C code is broken, because it returns without
// shutting things down!!!!
XalanInitialize();
XalanHandle xalan = CreateXalanTransformer();
XalanCSSHandle theXalanCSS2;
XalanCSSHandle theXalanCSS4;
XalanPSHandle theXalanPS2;
if (XalanCompileStylesheet(theXSLFileName2, xalan, &theXalanCSS2) != 0)
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
if (XalanCompileStylesheet(theXSLFileName4, xalan, &theXalanCSS4) != 0)
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
if (XalanParseSource(theXMLFileName2, xalan, &theXalanPS2) != 0)
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
for(int i = 0; i < 2; ++i)
{
if(XalanTransformToFile(theXMLFileName, theXSLFileName, theOutFileName, xalan))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
char* theOutput;
if(XalanTransformToData(theXMLFileName2, theXSLFileName2, &theOutput, xalan))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
puts(theOutput);
XalanFreeData(theOutput);
if(XalanTransformToFile(theXMLFileName3, NULL, theOutFileName3, xalan))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
if(XalanTransformToData(theXMLFileName3, NULL, &theOutput, xalan))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
puts(theOutput);
XalanFreeData(theOutput);
if(XalanTransformToDataPrebuilt(theXalanPS2, theXalanCSS2, &theOutput, xalan))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
puts(theOutput);
XalanFreeData(theOutput);
FILE* fp =0;
fp = fopen("c:\\temp\\test.out", "w");
if(XalanTransformToHandler(theXMLFileName2, theXSLFileName2, xalan, fp, xalan_output_handler, xalan_flush_handler))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
fclose(fp);
XalanSetStylesheetParam("param1", "'hi'", xalan);
//if(xalan.transform(theXMLFileName4, theXSLFileName4, &cout))
if(XalanTransformToDataPrebuilt(theXMLFileName4, theXalanCSS4, &theOutput, xalan))
{
puts("Error");
puts(XalanGetLastError(xalan));
return 0;
}
puts(theOutput);
XalanFreeData(theOutput);
}
DeleteXalanTransformer(xalan);
// Terminate Xerces and Xalan, and clean up the ICU...
XalanTerminate(1);
#endif
return 0;
}
int
main(
int /* argc */,
char* /* argv */ [])
{
#if !defined(NDEBUG) && defined(_MSC_VER)
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
#endif
int theResult = 0;
#if defined(TEST_XALAN_CPP)
try
{
using xercesc::XMLPlatformUtils;
using xalanc::XalanTransformer;
// Call the static initializers for xerces and xalan, and create a transformer
//
XMLPlatformUtils::Initialize();
XalanTransformer::initialize();
theResult = runTests();
// Terminate everything...
XalanTransformer::terminate();
XMLPlatformUtils::Terminate();
XalanTransformer::ICUCleanUp();
}
catch(...)
{
cerr << "Initialization failed!" << endl << endl;
theResult = -1;
}
#endif
return theResult;
}