ProteoWizard
Classes | Functions | Variables
XMLWriterTest.cpp File Reference
#include "XMLWriter.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include "pwiz/utility/misc/Std.hpp"

Go to the source code of this file.

Classes

struct  TestOutputObserver

Functions

void test ()
void testNormalization ()
int main (int argc, const char *argv[])

Variables

ostream * os_ = 0
const char * targetXML = "</root>\n"

Function Documentation

void test ( )

Definition at line 73 of file XMLWriterTest.cpp.

References TestOutputObserver::cache, pwiz::minimxml::XMLWriter::characters(), pwiz::minimxml::encode_xml_id(), pwiz::minimxml::encode_xml_id_copy(), pwiz::minimxml::XMLWriter::endElement(), pwiz::minimxml::XMLWriter::Config::indentationStep, os_, pwiz::minimxml::XMLWriter::Config::outputObserver, pwiz::minimxml::XMLWriter::popStyle(), pwiz::minimxml::XMLWriter::position(), pwiz::minimxml::XMLWriter::positionNext(), pwiz::minimxml::XMLWriter::processingInstruction(), pwiz::minimxml::XMLWriter::pushStyle(), pwiz::minimxml::XMLWriter::startElement(), StyleFlag_Inline, StyleFlag_InlineInner, targetXML, and unit_assert.

{
ostringstream oss;
TestOutputObserver outputObserver;
config.indentationStep = 4;
config.outputObserver = &outputObserver;
XMLWriter writer(oss, config);
if (os_) *os_ << "target:\n" << targetXML << endl;
unit_assert(writer.position() < 1); // 0 or -1 depending on platform
const char* piData = "version=\"1.0\" encoding=\"UTF-8\"";
writer.processingInstruction("xml", piData);
unit_assert(writer.position() == 39);
attributes.push_back(make_pair("name1", "value1"));
attributes.push_back(make_pair("name2", "420"));
attributes.push_back(make_pair("name3", "0.666"));
writer.startElement("root", attributes);
unit_assert(writer.position() == 87);
unit_assert(writer.positionNext() == 91);
attributes.clear();
attributes.push_back(make_pair("name", "nixon"));
attributes.push_back(make_pair("color", "red"));
attributes.push_back(make_pair("number", "37"));
writer.pushStyle(XMLWriter::StyleFlag_AttributesOnMultipleLines);
writer.startElement("record", attributes);
writer.startElement("quote");
writer.characters("I'm not a crook.");
writer.endElement();
writer.startElement("resigned", XMLWriter::Attributes(), XMLWriter::EmptyElement);
writer.popStyle();
writer.endElement();
writer.popStyle();
attributes.clear();
attributes.push_back(make_pair("name", "\"Penn & Teller\""));
writer.startElement("record", attributes);
writer.startElement("quote");
writer.characters("'Bull<shit!'");
writer.endElement();
writer.popStyle();
writer.endElement();
attributes.clear();
attributes.push_back(make_pair("name", "clinton"));
attributes.push_back(make_pair("color", "blue"));
attributes.push_back(make_pair("number", "42"));
writer.pushStyle(XMLWriter::StyleFlag_AttributesOnMultipleLines);
writer.startElement("record", attributes);
writer.startElement("quote");
writer.characters("I did ");
writer.pushStyle(XMLWriter::StyleFlag_Inline);
unit_assert(writer.position() == writer.positionNext()); // no indentation
writer.startElement("em");
writer.characters("not");
writer.endElement();
writer.popStyle();
writer.characters(" have sexual relations with that woman.");
writer.endElement();
writer.popStyle();
writer.startElement("impeached", XMLWriter::Attributes(), XMLWriter::EmptyElement);
writer.endElement();
writer.popStyle();
attributes.clear();
attributes.push_back(make_pair("name", "bush"));
attributes.push_back(make_pair("color", "red"));
attributes.push_back(make_pair("number", "43"));
writer.pushStyle(XMLWriter::StyleFlag_AttributesOnMultipleLines);
writer.startElement("record", attributes);
writer.startElement("quote");
writer.characters("Mission accomplished.");
writer.endElement();
writer.popStyle();
writer.endElement();
writer.popStyle();
writer.endElement();
if (os_) *os_ << "test: (" << oss.str().size() << ")\n" << oss.str() << endl;
unit_assert(targetXML == oss.str());
unit_assert(writer.position() == (int)oss.str().size());
unit_assert(writer.position() == 671);
if (os_) *os_ << "outputObserver cache:\n" << outputObserver.cache << endl;
unit_assert(targetXML == outputObserver.cache);
// test id encoding
string id1("1invalid ID");
unit_assert(encode_xml_id_copy(id1) == "_x0031_invalid_x0020_ID");
unit_assert(&encode_xml_id(id1) == &id1);
unit_assert(id1 == "_x0031_invalid_x0020_ID");
string id2("_invalid-ID_#2_<3>");
unit_assert(encode_xml_id_copy(id2) == "_invalid-ID__x0023_2__x003c_3_x003e_");
unit_assert(encode_xml_id(id2) == "_invalid-ID__x0023_2__x003c_3_x003e_");
string crazyId("!!!");
unit_assert(encode_xml_id(crazyId) == "_x0021__x0021__x0021_");
}
void testNormalization ( )

Definition at line 189 of file XMLWriterTest.cpp.

References pwiz::minimxml::XMLWriter::Attributes::add(), e(), and unit_assert_operator_equal.

{
#ifndef __APPLE__ // TODO: how to test that this works with Darwin's compiler?
// test that subnormal values are clamped and provide 12 decimal places
attributes.add("1", 2.2250738585072014e-309);
attributes.add("2", -2.2250738585072014e-309);
unit_assert_operator_equal(2.225073858507e-308, lexical_cast<double>(attributes[0].second));
unit_assert_operator_equal(-2.225073858507e-308, lexical_cast<double>(attributes[1].second));
#endif
}
int main ( int  argc,
const char *  argv[] 
)

Definition at line 202 of file XMLWriterTest.cpp.

References e(), os_, test(), TEST_EPILOG, TEST_FAILED, TEST_PROLOG, and testNormalization().

{
TEST_PROLOG(argc, argv)
try
{
if (argc>1 && !strcmp(argv[1],"-v")) os_ = &cout;
test();
}
catch (exception& e)
{
TEST_FAILED(e.what())
}
catch (...)
{
TEST_FAILED("Caught unknown exception.")
}
}

Variable Documentation

ostream* os_ = 0

Definition at line 33 of file XMLWriterTest.cpp.

const char* targetXML = "</root>\n"

Definition at line 36 of file XMLWriterTest.cpp.

Referenced by test().