fix BOM preservation bugs. add new tests
diff --git a/xmltest.cpp b/xmltest.cpp
index 231328e..c8e1b0b 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -25,7 +25,7 @@
 int gFail = 0;

 

 

-bool XMLTest (const char* testString, const char* expected, const char* found, bool echo=true )

+bool XMLTest (const char* testString, const char* expected, const char* found, bool echo=true, bool extraNL=false )

 {

 	bool pass = !strcmp( expected, found );

 	if ( pass )

@@ -33,10 +33,19 @@
 	else

 		printf ("[fail]");

 

-	if ( !echo )

+	if ( !echo ) {

 		printf (" %s\n", testString);

-	else

-		printf (" %s [%s][%s]\n", testString, expected, found);

+	}

+	else {

+		if ( extraNL ) {

+			printf( " %s\n", testString );

+			printf( "%s\n", expected );

+			printf( "%s\n", found );

+		}

+		else {

+			printf (" %s [%s][%s]\n", testString, expected, found);

+		}

+	}

 

 	if ( pass )

 		++gPass;

@@ -1164,6 +1173,28 @@
 		XMLTest( "Loading an empty file", XML_ERROR_EMPTY_DOCUMENT, error );

 	}

 

+	{

+        // BOM preservation

+        static const char* xml_bom_preservation  = "\xef\xbb\xbf<element/>\n";

+        {

+			XMLDocument doc;

+			XMLTest( "BOM preservation (parse)", XML_NO_ERROR, doc.Parse( xml_bom_preservation ), false );

+            XMLPrinter printer;

+            doc.Print( &printer );

+

+            XMLTest( "BOM preservation (compare)", xml_bom_preservation, printer.CStr(), false, true );

+			doc.SaveFile( "resources/bomtest.xml" );

+        }

+		{

+			XMLDocument doc;

+			doc.LoadFile( "resources/bomtest.xml" );

+			XMLTest( "BOM preservation (load)", true, doc.HasBOM(), false );

+

+            XMLPrinter printer;

+            doc.Print( &printer );

+            XMLTest( "BOM preservation (compare)", xml_bom_preservation, printer.CStr(), false, true );

+		}

+	}

 

 	// ----------- Performance tracking --------------

 	{