From 6ff1976e745da2d3321b73f742eaf6a381f26a3a Mon Sep 17 00:00:00 2001
From: Alberto Massari <amassari@apache.org>
Date: Fri, 2 Mar 2007 09:06:25 +0000
Subject: [PATCH] Initial commit of XInclude tests

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@513668 13f79535-47bb-0310-9956-ffa450edef68
---
 tests/src/xinclude/harness.pl                 | 223 ++++++++++++++++++
 tests/src/xinclude/run.bat                    |  14 ++
 .../tests/xinclude/cppoutput/readme.txt       |  14 ++
 .../tests/xinclude/cppoutput/test01.xml       |  24 ++
 .../tests/xinclude/cppoutput/test02.xml       |   4 +
 .../tests/xinclude/cppoutput/test03.xml       |   4 +
 .../tests/xinclude/cppoutput/test04.xml       |   4 +
 .../tests/xinclude/cppoutput/test05.xml       |   4 +
 .../tests/xinclude/cppoutput/test06.xml       |   4 +
 .../tests/xinclude/cppoutput/test07.txt       |   5 +
 .../tests/xinclude/cppoutput/test08.xml       |   4 +
 .../tests/xinclude/cppoutput/test09.txt       |   6 +
 .../tests/xinclude/cppoutput/test10.xml       |   4 +
 .../tests/xinclude/cppoutput/test11.txt       |   5 +
 .../tests/xinclude/cppoutput/test12.txt       |   6 +
 .../tests/xinclude/cppoutput/test13.txt       |   5 +
 .../tests/xinclude/cppoutput/test14.txt       |   6 +
 .../tests/xinclude/cppoutput/test15.xml       |   6 +
 .../tests/xinclude/cppoutput/test16.xml       |   4 +
 .../tests/xinclude/cppoutput/test17.xml       |   4 +
 .../tests/xinclude/cppoutput/test18.txt       |   5 +
 .../tests/xinclude/cppoutput/test19.xml       |   5 +
 .../tests/xinclude/cppoutput/test20.xml       |   4 +
 .../tests/xinclude/cppoutput/test21.xml       |   5 +
 .../tests/xinclude/cppoutput/test22.txt       |   6 +
 .../tests/xinclude/cppoutput/test23.xml       |  14 ++
 .../tests/xinclude/cppoutput/test24.txt       |   6 +
 .../tests/xinclude/cppoutput/test25.txt       |   6 +
 .../tests/xinclude/cppoutput/test26.txt       |   6 +
 .../tests/xinclude/cppoutput/test27.xml       |   5 +
 .../tests/xinclude/cppoutput/test28.xml       |   5 +
 .../tests/xinclude/cppoutput/test29.txt       |   7 +
 .../tests/xinclude/cppoutput/test30.xml       |   5 +
 .../tests/xinclude/cppoutput/test31.xml       |   5 +
 .../tests/xinclude/cppoutput/test32.txt       |  10 +
 .../tests/xinclude/cppoutput/test33.xml       |   5 +
 .../tests/xinclude/cppoutput/test34.xml       |   4 +
 .../tests/xinclude/cppoutput/test35.xml       |   4 +
 .../tests/xinclude/cppoutput/test36.xml       |   4 +
 .../tests/xinclude/cppoutput/test37.xml       |   4 +
 .../tests/xinclude/cppoutput/test38.xml       |   4 +
 .../tests/xinclude/cppoutput/test39.txt       |   6 +
 .../tests/xinclude/cppoutput/test40.txt       |   6 +
 .../tests/xinclude/cppoutput/test41.xml       |   5 +
 .../xinclude/tests/xinclude/included/base.xml |   4 +
 .../tests/xinclude/included/dir/include09.xml |  18 ++
 .../xinclude/tests/xinclude/included/elem.jpg | Bin 0 -> 80 bytes
 .../xinclude/tests/xinclude/included/elem.xml |   2 +
 .../tests/xinclude/included/elem_base.xml     |   3 +
 .../tests/xinclude/included/include.xml       |   3 +
 .../tests/xinclude/included/include01.xml     |   4 +
 .../tests/xinclude/included/include02.xml     |   3 +
 .../tests/xinclude/included/include03.xml     |   3 +
 .../tests/xinclude/included/include04.xml     |   3 +
 .../tests/xinclude/included/include05.xml     |   3 +
 .../tests/xinclude/included/include06.xml     |   2 +
 .../tests/xinclude/included/include07.xml     |   2 +
 .../tests/xinclude/included/include08.xml     |   2 +
 .../tests/xinclude/included/include10.txt     |   1 +
 .../xinclude/included/not-well-formed.xml     |   1 +
 .../xinclude/tests/xinclude/included/not.xml  |   4 +
 .../xinclude/tests/xinclude/included/not2.xml |  12 +
 .../xinclude/tests/xinclude/included/text.txt |   1 +
 .../xinclude/tests/xinclude/included/ue.xml   |   4 +
 .../xinclude/tests/xinclude/included/ue2.xml  |  12 +
 .../tests/xinclude/included/unparsed.xml      |   7 +
 .../xinclude/tests/xinclude/tests/test01.xml  |  41 ++++
 .../xinclude/tests/xinclude/tests/test02.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test03.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test04.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test05.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test06.xml  |   8 +
 .../xinclude/tests/xinclude/tests/test07.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test08.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test09.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test10.xml  |  13 +
 .../xinclude/tests/xinclude/tests/test11.xml  |  13 +
 .../xinclude/tests/xinclude/tests/test12.xml  |  13 +
 .../xinclude/tests/xinclude/tests/test13.xml  |  12 +
 .../xinclude/tests/xinclude/tests/test14.xml  |  12 +
 .../xinclude/tests/xinclude/tests/test15.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test16.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test17.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test18.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test19.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test20.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test21.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test22.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test23.xml  |   9 +
 .../xinclude/tests/xinclude/tests/test24.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test25.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test26.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test27.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test28.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test29.xml  |  12 +
 .../xinclude/tests/xinclude/tests/test30.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test31.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test32.xml  |  15 ++
 .../xinclude/tests/xinclude/tests/test33.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test34.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test35.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test36.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test37.xml  |  10 +
 .../xinclude/tests/xinclude/tests/test38.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test39.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test40.xml  |  11 +
 .../xinclude/tests/xinclude/tests/test41.xml  |  10 +
 .../xinclude/tests/xinclude/tests/tests.dtd   |   5 +
 .../xinclude/tests/xinclude/tests/tests.xsd   |  68 ++++++
 .../xinclude/tests/xinclude/tests/xmlbase.xsd |  12 +
 110 files changed, 1125 insertions(+)
 create mode 100644 tests/src/xinclude/harness.pl
 create mode 100644 tests/src/xinclude/run.bat
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/readme.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test01.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test02.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test03.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test04.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test05.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test06.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test07.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test08.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test09.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test10.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test11.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test12.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test13.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test14.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test15.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test16.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test17.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test18.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test19.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test20.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test21.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test22.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test23.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test24.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test25.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test26.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test27.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test28.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test29.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test30.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test31.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test32.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test33.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test34.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test35.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test36.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test37.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test38.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test39.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test40.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/cppoutput/test41.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/base.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/dir/include09.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/elem.jpg
 create mode 100644 tests/src/xinclude/tests/xinclude/included/elem.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/elem_base.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include01.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include02.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include03.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include04.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include05.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include06.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include07.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include08.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/include10.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/included/not-well-formed.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/not.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/not2.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/text.txt
 create mode 100644 tests/src/xinclude/tests/xinclude/included/ue.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/ue2.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/included/unparsed.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test01.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test02.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test03.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test04.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test05.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test06.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test07.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test08.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test09.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test10.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test11.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test12.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test13.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test14.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test15.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test16.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test17.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test18.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test19.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test20.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test21.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test22.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test23.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test24.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test25.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test26.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test27.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test28.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test29.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test30.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test31.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test32.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test33.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test34.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test35.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test36.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test37.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test38.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test39.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test40.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/test41.xml
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/tests.dtd
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/tests.xsd
 create mode 100644 tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd

diff --git a/tests/src/xinclude/harness.pl b/tests/src/xinclude/harness.pl
new file mode 100644
index 000000000..47df62596
--- /dev/null
+++ b/tests/src/xinclude/harness.pl
@@ -0,0 +1,223 @@
+#use strict;
+
+# usage perl harness.pl [testNum]
+#   where testNum is an integer from 1 to 41
+#   testNum may also be a list of integers denoting tests to be run
+#   ommitting testNum will lead to all tests being run
+#
+#  this harness outputs the results to the file results.html as well 
+#   as reporting them to stderr.
+#
+#  note that the XInclude sample application must be discoverable on 
+#   the current PATH.
+
+#
+# Find out the platform from 'uname -s'
+#
+open(PLATFORM, "uname -s|");
+$platform = <PLATFORM>;
+chomp($platform);
+close (PLATFORM);
+
+if ($platform =~ m/Windows/i  || $platform =~ m/CYGWIN/i) {
+    $pathsep = "\\";
+}
+else {
+    $pathsep = "/";
+}
+
+@CORRECT_TEST_RESULTS = (
+        -3,
+	1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
+	0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
+	1, 0, 1, 0, 0, 0, 1, 1, 0, 1,
+	1, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+       	1
+);
+
+#    private static boolean[] TEST_RESULTS = new boolean[] {
+#        // one value for each test
+#        true, true, true, true, true, true, false, true, false, true, // 10
+#        false, false, false, false, true, true, true, false, true, true, // 20
+#        true, false, true, false, false, false, true, true, false, true, // 30
+#        true, false, true, true, true, true, true, true, false, false, // 40
+#        true, };
+
+#no need to add one to this value since there is a dummy value in the tables
+$NUM_TESTS = $#CORRECT_TEST_RESULTS;
+
+@ACTUAL_TEST_RESULTS = (
+        -3,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1
+);
+
+print "Running XInclude Tests\n";
+
+$dateAndTime = localtime();
+
+open(outfile, ">results.html");
+print outfile "<html><head><title>XInclude results generated at $dateAndTime </title>";
+print outfile "</head><body bgcolor=\"black\" text=\"white\"><center>";
+
+print outfile "<table border cellspacing=\"0\" cellpadding=\"5\"><caption align=\"bottom\">Results of XI Test Run</caption>";
+print outfile "<tr><th>Test Number</th><th>Test Input File</th><th>Generated Output File</th>";
+print outfile "<th>Reference Result File</th><th>Result</th><th>Expected Result</th><th>Test Status</th></tr>";
+
+$successes = 0;
+$correct = 0;
+$numTestsToRun = $#ARGV + 1;
+while (<@ARGV>){
+   $i = $_;
+   if ($i < 10) {
+      $testNum = "0$i";
+   } else {
+      $testNum = "$i";
+   }
+   $input_file =  "tests".$pathsep."xinclude".$pathsep."tests".$pathsep."test$testNum.xml";
+   if ($CORRECT_TEST_RESULTS[$i] == 1) {
+      $output_file = "tests".$pathsep."xinclude".$pathsep."written".$pathsep."test$testNum.xml";
+      $expected_result_file = "tests".$pathsep."xinclude".$pathsep."cppoutput".$pathsep."test$testNum.xml";
+   } else {
+      $output_file = "tests".$pathsep."xinclude".$pathsep."written".$pathsep."test$testNum.txt";
+      $expected_result_file = "tests".$pathsep."xinclude".$pathsep."cppoutput".$pathsep."test$testNum.txt";
+   }
+
+   # run the tests and apture the output
+   $command = "XInclude $input_file $output_file";
+   print "R[$command]\n";
+   system("$command");
+
+   $ACTUAL_TEST_RESULTS[$i] = &compareFiles($expected_result_file, $output_file);
+
+   print outfile "<tr bgcolor=";
+   if ($ACTUAL_TEST_RESULTS[$i] eq $CORRECT_TEST_RESULTS[$i]) {
+      print outfile "green";
+   } else {
+      print outfile "red";
+   }
+
+   print outfile ">";
+   #test number
+   print outfile "<td>$testNum</td>";
+   print outfile "<td>";
+   $anchor = &createHTMLAnchor("$input_file");
+   print outfile "$anchor";
+   print outfile "</td><td>";
+   $anchor = &createHTMLAnchor("$output_file");
+   print outfile "$anchor";
+   print outfile "</td><td>";
+   $anchor = &createHTMLAnchor("$expected_result_file");
+   print outfile "$anchor";
+   print outfile "</td>";
+   # actual result
+   $result = (($ACTUAL_TEST_RESULTS[$i])?"true":"false");
+   print outfile "<td>$result</td>";
+   if($ACTUAL_TEST_RESULTS[$i]) {
+      $successes++;
+   }
+
+   # correct result
+   $result = (($CORRECT_TEST_RESULTS[$i])?"true":"false");
+   print outfile "<td>$result</td>";
+
+   if ($ACTUAL_TEST_RESULTS[$i] eq $CORRECT_TEST_RESULTS[$i]) {
+      $result = "Passed";
+      print "[test $testNum PASSED]\n";
+      $correct++;
+   } else {
+      $result = "Failed";
+      print "[test $testNum FAILED]\n";      
+   }
+   print outfile "<td>$result</td></tr>";
+}
+
+print outfile "</table>";
+
+print "Tests Passed: $correct\n";
+$percentSucceeding = $correct / $numTestsToRun * 100.0;
+print outfile "<hr/><h2>$percentSucceeding% of tests that were run passed ($correct out of $numTestsToRun).</h2>";
+
+$shPass = 0;
+$shFail = 0;
+for ($i = 1; $i < $NUM_TESTS+1; $i++){
+   if ($CORRECT_TEST_RESULTS[$i]){
+       $shPass++;
+   } else {
+       $shFail++;
+   }
+}
+
+print outfile "<h2>$shPass should pass ($successes) did</h2>";
+$failures = $NUM_TESTS - $successes;
+print outfile "<h2>$shFail should fail ($failures) did</h2>";
+
+$percentSucceeding = $correct / $NUM_TESTS * 100.0; 
+print outfile "<h2>$percentSucceeding% of all available tests passed ($correct out of $NUM_TESTS).</h2>";
+
+$percentSucceeding = $numTestsToRun / $NUM_TESTS * 100.0;
+print outfile "<h2>$percentSucceeding% of all available tests were run ($numTestsToRun out of $NUM_TESTS).</h2>";
+
+print outfile "</center><hr/></body></html>";
+close(outfile);
+
+# quick and dirty but functional
+sub compareFiles 
+{
+   $result = 1;
+   print "C[$_[0]]:[$_[1]]\n";
+
+   if (! -e $_[0]) {
+      print "No such file as $_[0] - cannot compare\n";
+      return 0;
+   }
+
+   if (! -e $_[1]) {
+      print "No such file as $_[1] - cannot compare\n";
+      return 0;
+   }
+
+   open(expected, "<$_[0]");
+   open(actual, "<$_[1]");
+
+   #compare the files
+   @expectedData = <expected>;
+   @actualData = <actual>;
+
+   close(expected);
+   close(actual);
+
+   for ($x = 0, $a = 0; $x < $#expectedData && $a < $#actualData; $x++, $a++){
+      $dataLineEx = $expectedData[$x];
+      $dataLineAc = $actualData[$a];
+      chomp($dataLineEx);
+      chomp($dataLineAc);
+      if ($dataLineEx ne $dataLineAc) {
+         # check if its a warning and can be ignored at this stage
+         if ($dataLineEx =~ /Warning/) {
+            print "probably just a warning line:\n";
+            print "[$dataLineEx]\n";
+            $a--
+         } elsif ( $dataLineEx =~ m/^\s*$/ && $dataLineAc =~ m/^\s*$/ ) {
+            $line_num = $x + 1;
+            print "Line $line_num ws difference: \n[$dataLineEx] != \n[$dataLineAc]\n";
+            print "probably just white space on both lines\n";
+            $a--
+         } else {
+            $line_num = $x + 1;
+            print "Line $line_num difference: \n[$dataLineEx] != \n[$dataLineAc]\n";
+            print "From files: $_[0] $_[1]\n";
+            return 0;
+         }
+      }
+   }
+
+   return 1;
+}
+
+sub createHTMLAnchor {
+   "<a target=\"_blank\" href=\"$_[0]\">$_[0]</a>";
+}
diff --git a/tests/src/xinclude/run.bat b/tests/src/xinclude/run.bat
new file mode 100644
index 000000000..524e02c16
--- /dev/null
+++ b/tests/src/xinclude/run.bat
@@ -0,0 +1,14 @@
+set PATH=../../../samples;%PATH%
+
+rem not running / current failures 
+rem 1 7 9 11 12 13 14 18 19 21 22 23 29 32 34 35 36 37 38 39 40 41
+del /Q tests\xinclude\written\*
+
+if %1. NEQ . goto USEARGS
+
+perl harness.pl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
+
+goto END
+:USEARGS
+perl harness.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
+:END
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/readme.txt b/tests/src/xinclude/tests/xinclude/cppoutput/readme.txt
new file mode 100644
index 000000000..1071a8925
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/readme.txt
@@ -0,0 +1,14 @@
+The following changes are made to the java xinclude test output files;
+
+1) [ standalone="no" ] is added to the XML Declaration in each file.
+
+2) Attributes on the included top level include element are reordered
+alphabetically as this is the xerces c++ behaviour!
+
+3) Removed a space from after the xml declaration and before the first
+document element (thats a single space btw).
+
+4) xerces c++ parser's don't expand quotation entities to &quot. Java does. Investigate!
+
+5) added xmlns:xml="http://www.w3.org/XML/1998/namespace" attribute to appropriate top level elements
+
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test01.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test01.xml
new file mode 100644
index 000000000..ff1e7edf4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test01.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!-- This test doesn't test anything in particular.  But it is an example of a
+     somewhat complicated setup. --><xit:myRoot xmlns:xit="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+	[Warning] test01.xml:8:87
+
+			[Warning] test01.xml:11:47
+
+					<child1 name="kid1" xmlns:test01="http://www.test.org/test02" xmlns:test02="http://www.test.org/TEST02"><desc>Text1</desc></child1>
+				
+		
+	[Warning] test01.xml:22:45
+
+			<child2 name="kid2"><desc>Text2</desc></child2>
+		
+	
+	<!-- this tests a valid include -->
+	<!-- tests that files included from other directories work -->[Warning] include09.xml:3:69
+<child3 xmlns="" name="kid3" xml:base="../included/dir/include09.xml"><desc>Text3</desc></child3>
+	
+	<!-- this tests that idrefs still work when an ID from an included file is used -->
+	<select name="kid3"/>
+	
+	<!-- this tests when an included file has a DTD, but the base file doesn't -->
+	<view sun="image" xml:base="../included/unparsed.xml"/>
+</xit:myRoot>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test02.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test02.xml
new file mode 100644
index 000000000..1a926adc2
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test02.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from other namespaces on xi:include elements are ignored -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test03.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test03.xml
new file mode 100644
index 000000000..06bd4c6aa
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test03.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from the XInclude namespace are ignored -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test04.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test04.xml
new file mode 100644
index 000000000..b3de003c9
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test04.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- thats that parse="xml" works -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test05.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test05.xml
new file mode 100644
index 000000000..034b8c956
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test05.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="text" works -->
+   blah blah blah
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test06.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test06.xml
new file mode 100644
index 000000000..9e08751c9
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test06.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="xml" is the default -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test07.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test07.txt
new file mode 100644
index 000000000..6310cd9a4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test07.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that values for parse other than "xml" or "text" are invalid -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] test07.xml:9:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test08.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test08.xml
new file mode 100644
index 000000000..87100f59b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test08.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is not a failure when the include is successful -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test09.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test09.txt
new file mode 100644
index 000000000..5a0982be4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test09.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test09.xml:9:48
+[Fatal Error] test09.xml:9:48
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test10.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test10.xml
new file mode 100644
index 000000000..411b5482c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test10.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that a fallback is used when the include is unsuccessful -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test11.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test11.txt
new file mode 100644
index 000000000..89c9d410b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test11.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is successful -->
+   <!-- EXPECT FAILURE -->
+   <elem xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../included/elem.xml"/>[Fatal Error] test11.xml:11:22
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test12.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test12.txt
new file mode 100644
index 000000000..34ed37524
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test12.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test12.xml:9:47
+[Fatal Error] test12.xml:11:22
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test13.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test13.txt
new file mode 100644
index 000000000..145d37a59
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test13.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is successful -->
+   <!-- EXPECT FAILURE -->
+   <elem xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../included/elem.xml"/>[Fatal Error] test13.xml:10:19
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test14.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test14.txt
new file mode 100644
index 000000000..f582a37f0
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test14.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is not successful -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test14.xml:9:47
+[Fatal Error] test14.xml:10:19
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test15.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test15.xml
new file mode 100644
index 000000000..374d267c4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test15.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that parser can be reused -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test16.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test16.xml
new file mode 100644
index 000000000..f9946f12a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test16.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- included file includes another file -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test17.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test17.xml
new file mode 100644
index 000000000..07bb59bea
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test17.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that empty fallback is valid -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test18.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test18.txt
new file mode 100644
index 000000000..341262392
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test18.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that fallback must be child of include -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] test18.xml:8:18
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test19.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test19.xml
new file mode 100644
index 000000000..2710e35e8
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test19.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including XML as text -->
+   &lt;?xml version="1.0"?&gt;
+&lt;elem xmlns="http://www.schemaTest.org/xinclude-test"/&gt;
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test20.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test20.xml
new file mode 100644
index 000000000..c133c4555
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test20.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as XML -->
+   <elem xml:base="../included/elem.jpg" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test21.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test21.xml
new file mode 100644
index 000000000..5ef01d161
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test21.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as text -->
+   &lt;?xml version="1.0"?&gt;
+&lt;elem xmlns="http://www.schemaTest.org/xinclude-test"/&gt;
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test22.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test22.txt
new file mode 100644
index 000000000..854e7f9d8
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test22.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- include not well formed XML -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] not-well-formed.xml:1:10
+[Fatal Error] test22.xml:9:56
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test23.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test23.xml
new file mode 100644
index 000000000..6bc629cf2
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test23.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including the same document, but as text -->
+   &lt;?xml version="1.0"?&gt;
+&lt;x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"&gt;
+   &lt;!-- test that including the same document fails --&gt;
+   &lt;!-- EXPECT FAILURE --&gt;
+   &lt;xi:include parse="xml"
+               href="test24.xml"/&gt;
+&lt;/x&gt;
+
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test24.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test24.txt
new file mode 100644
index 000000000..9b6b8ed5d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test24.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that including the same document fails -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] test24.xml:1:1
+[Fatal Error] test24.xml:9:35
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test25.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test25.txt
new file mode 100644
index 000000000..aff93aaa3
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test25.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="xml" -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test25.xml:9:48
+[Fatal Error] test25.xml:9:48
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test26.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test26.txt
new file mode 100644
index 000000000..a4e9a542b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test26.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="text" -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test26.xml:9:48
+[Fatal Error] test26.xml:9:48
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test27.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test27.xml
new file mode 100644
index 000000000..0d33f170b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test27.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="xjpg"/>
+   <!-- test including a document with a non-conflicting notation -->
+   <elem bar="jpg" xml:base="../included/not.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test28.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test28.xml
new file mode 100644
index 000000000..5b93b1300
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test28.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a duplicate notation -->
+   <elem bar="jpg" xml:base="../included/not.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test29.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test29.txt
new file mode 100644
index 000000000..d966f29de
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test29.txt
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a conflicting notation -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] not2.xml:12:56
+[Fatal Error] test29.xml:11:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test30.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test30.xml
new file mode 100644
index 000000000..3cb6b389d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test30.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with non-conflicting unparsed entity -->
+   <elem foo="ximage"/>
+   <elem foo="image" xml:base="../included/ue.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test31.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test31.xml
new file mode 100644
index 000000000..bd28c69c8
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test31.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with duplicate unparsed entity -->
+   <elem foo="image"/>
+   <elem foo="image" xml:base="../included/ue.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test32.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test32.txt
new file mode 100644
index 000000000..315b97d15
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test32.txt
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including document with conflicting unparsed entity -->
+   <!-- Note: this actually fails because of the conflicting notation; I'm not
+        sure how to make a conflicting unparsed entity without having a conflicting
+        notation -->
+   <!-- EXPECT FAILURE -->
+   <elem foo="image"/>
+   [Fatal Error] ue2.xml:12:56
+[Fatal Error] test32.xml:14:44
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test33.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test33.xml
new file mode 100644
index 000000000..99a6a2d80
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test33.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with a DTD, and unparsed entities and notations,
+        when the root document doesn't have one -->
+   <elem foo="image" xml:base="../included/ue.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test34.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test34.xml
new file mode 100644
index 000000000..73081c7fd
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test34.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on parent element to move back a directory -->
+   <elem xml:base="included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test35.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test35.xml
new file mode 100644
index 000000000..af162891b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test35.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move back a directory -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test36.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test36.xml
new file mode 100644
index 000000000..eb03db505
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test36.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../included/" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test ../tests/tests.xsd">
+   <!-- using xml:base on parent element to move to the included directory -->
+   <elem xml:base="elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test37.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test37.xml
new file mode 100644
index 000000000..3be0f2f1c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test37.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to the included directory -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test38.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test38.xml
new file mode 100644
index 000000000..933ab8a92
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test38.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on both parent element and include element -->
+   <elem xml:base="included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test39.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test39.txt
new file mode 100644
index 000000000..8b84bd78b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test39.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd" xml:base="../">
+   <!-- using xml:base on both parent element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test39.xml:10:45
+[Fatal Error] test39.xml:10:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test40.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test40.txt
new file mode 100644
index 000000000..d0d6a9c41
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test40.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test40.xml:10:45
+[Fatal Error] test40.xml:10:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test41.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test41.xml
new file mode 100644
index 000000000..1ba2d4816
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test41.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- final included element specifies an xml:base attribute, which will be
+        overwritten by the new xml:base attribute -->
+   <!-- redundant path structure --><elem xml:base="../included/dir/" xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xml="http://www.w3.org/XML/1998/namespace"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/included/base.xml b/tests/src/xinclude/tests/xinclude/included/base.xml
new file mode 100644
index 000000000..1151769d2
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/base.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!-- redundant path structure -->
+<include xml:base="../included/" xmlns="http://www.w3.org/2001/XInclude"
+         href="../included/elem_base.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/dir/include09.xml b/tests/src/xinclude/tests/xinclude/included/dir/include09.xml
new file mode 100644
index 000000000..4b2f6a08e
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/dir/include09.xml
@@ -0,0 +1,18 @@
+<?xml version='1.0'?>
+<!-- tests that files included from other directories work -->
+<include xmlns="http://www.w3.org/2001/XInclude" href="invalid.xml">
+	<fallback>
+        <child3 xmlns="" name="kid3">
+            <desc>
+                <include xmlns="http://www.w3.org/2001/XInclude" href="../include10.txt" parse="text">
+                    <fallback>
+                        <!-- this fallback won't be used -->
+                        <child4 xmlns="" name="kid4">
+                            <desc>Text4</desc>
+                        </child4>
+                    </fallback>
+                </include>
+            </desc>
+        </child3>
+    </fallback>
+</include>
diff --git a/tests/src/xinclude/tests/xinclude/included/elem.jpg b/tests/src/xinclude/tests/xinclude/included/elem.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f4e0a7269bc6eaa79a5c12f0ec7e5ce06950d06e
GIT binary patch
literal 80
zcmcDqugJ|&C`&CW&dkrVRWj5wP_nn<<+4f5NzGLNO63*XDrJ<E6j<r&mzS686(?t;
f<|c-u7MJMd7p3c0WacI3l%}NWmH<VR^nn@yFP|E>

literal 0
HcmV?d00001

diff --git a/tests/src/xinclude/tests/xinclude/included/elem.xml b/tests/src/xinclude/tests/xinclude/included/elem.xml
new file mode 100644
index 000000000..f4e0a7269
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/elem.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<elem xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/elem_base.xml b/tests/src/xinclude/tests/xinclude/included/elem_base.xml
new file mode 100644
index 000000000..25da39d15
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/elem_base.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<elem xmlns="http://www.schemaTest.org/xinclude-test"
+      xml:base="dir/"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include.xml b/tests/src/xinclude/tests/xinclude/included/include.xml
new file mode 100644
index 000000000..25171d86b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<include xml:base="../included/" xmlns="http://www.w3.org/2001/XInclude"
+         href="elem.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include01.xml b/tests/src/xinclude/tests/xinclude/included/include01.xml
new file mode 100644
index 000000000..9bb5b773b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include01.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xi1:include xmlns:xi1="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf"
+            href="include02.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include02.xml b/tests/src/xinclude/tests/xinclude/included/include02.xml
new file mode 100644
index 000000000..c84b31dbd
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include02.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi2:include xmlns:xi2="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include03.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include03.xml b/tests/src/xinclude/tests/xinclude/included/include03.xml
new file mode 100644
index 000000000..4fb94c246
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include03.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi3:include xmlns:xi3="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include04.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include04.xml b/tests/src/xinclude/tests/xinclude/included/include04.xml
new file mode 100644
index 000000000..079fb4ff0
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include04.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi4:include xmlns:xi4="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include05.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include05.xml b/tests/src/xinclude/tests/xinclude/included/include05.xml
new file mode 100644
index 000000000..f4a7fa7d2
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include05.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi5:include xmlns:xi5="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include06.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include06.xml b/tests/src/xinclude/tests/xinclude/included/include06.xml
new file mode 100644
index 000000000..6af71d46c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include06.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<xi6:include xmlns:xi6="http://www.w3.org/2001/XInclude" href="include07.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include07.xml b/tests/src/xinclude/tests/xinclude/included/include07.xml
new file mode 100644
index 000000000..cb1f43060
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include07.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<xi7:include xmlns:xi7="http://www.w3.org/2001/XInclude" href="include08.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include08.xml b/tests/src/xinclude/tests/xinclude/included/include08.xml
new file mode 100644
index 000000000..6d574e6db
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include08.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<xi8:include xmlns:xi8="http://www.w3.org/2001/XInclude" href="dir/include09.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include10.txt b/tests/src/xinclude/tests/xinclude/included/include10.txt
new file mode 100644
index 000000000..35fa18919
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include10.txt
@@ -0,0 +1 @@
+Text3
diff --git a/tests/src/xinclude/tests/xinclude/included/not-well-formed.xml b/tests/src/xinclude/tests/xinclude/included/not-well-formed.xml
new file mode 100644
index 000000000..956f390cb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/not-well-formed.xml
@@ -0,0 +1 @@
+<this is not XML>
diff --git a/tests/src/xinclude/tests/xinclude/included/not.xml b/tests/src/xinclude/tests/xinclude/included/not.xml
new file mode 100644
index 000000000..64a22db33
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/not.xml
@@ -0,0 +1,4 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem SYSTEM "../tests/tests.dtd">
+<elem bar="jpg"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/not2.xml b/tests/src/xinclude/tests/xinclude/included/not2.xml
new file mode 100644
index 000000000..2ed4a0788
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/not2.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem [
+<!ELEMENT elem EMPTY>
+<!ATTLIST elem
+	xmlns    CDATA          #FIXED "http://www.schemaTest.org/xinclude-test"
+	xml:base CDATA          #IMPLIED
+	foo      ENTITY         #IMPLIED
+	bar      NOTATION (jpg) #IMPLIED>
+<!NOTATION jpg SYSTEM "jpg">
+]>
+<elem bar="jpg"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/text.txt b/tests/src/xinclude/tests/xinclude/included/text.txt
new file mode 100644
index 000000000..c1a7bd5f1
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/text.txt
@@ -0,0 +1 @@
+blah blah blah
diff --git a/tests/src/xinclude/tests/xinclude/included/ue.xml b/tests/src/xinclude/tests/xinclude/included/ue.xml
new file mode 100644
index 000000000..08d5883e2
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/ue.xml
@@ -0,0 +1,4 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem SYSTEM "../tests/tests.dtd">
+<elem foo="image"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/ue2.xml b/tests/src/xinclude/tests/xinclude/included/ue2.xml
new file mode 100644
index 000000000..e90c6d778
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/ue2.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem [
+<!ELEMENT elem EMPTY>
+<!ATTLIST elem
+	xmlns     CDATA          #FIXED "http://www.schemaTest.org/xinclude-test"
+	foo       ENTITY         #IMPLIED
+	bar       NOTATION (jpg) #IMPLIED>
+<!NOTATION jpg SYSTEM "jpg">
+<!ENTITY image SYSTEM "foobar.jpg" NDATA jpg>
+]>
+<elem foo="image"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/unparsed.xml b/tests/src/xinclude/tests/xinclude/included/unparsed.xml
new file mode 100644
index 000000000..cb701436b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/unparsed.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0'?>
+<!DOCTYPE view [
+ <!ELEMENT view EMPTY>
+ <!NOTATION xjpg SYSTEM "jpg">
+ <!ENTITY image SYSTEM "gris.jpg" NDATA xjpg>
+ <!ATTLIST view sun ENTITY #IMPLIED>]>
+<view sun="image"/>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test01.xml b/tests/src/xinclude/tests/xinclude/tests/test01.xml
new file mode 100644
index 000000000..543d2c163
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test01.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- This test doesn't test anything in particular.  But it is an example of a
+     somewhat complicated setup. -->
+<xit:myRoot	xmlns:xit="http://www.schemaTest.org/xinclude-test"
+            xmlns:xi="http://www.w3.org/2001/XInclude"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+	<xi:include xmlns:test01="http://www.test.org/test02" href="../included/invalid.xml">
+		<!-- comment -->
+		<xi:fallback xmlns:test02="http://www.test.org/test02">
+			<xi:include href="../included/invalid.xml">
+				<invalid1 xmlns:test03="http://www.test.org/test03">
+					<invalid2>				
+					</invalid2>
+				</invalid1>
+				<xi:fallback xmlns:test02="http://www.test.org/TEST02">
+					<child1 name="kid1"><desc>Text1</desc></child1>
+				</xi:fallback>
+			</xi:include>
+		</xi:fallback>
+	</xi:include>
+	<xi:include href="../included/invalid.xml">
+		<xi:fallback>
+			<child2 name="kid2"><desc>Text2</desc></child2>
+		</xi:fallback>
+	</xi:include>
+	
+	<!-- this tests a valid include -->
+	<xi:include href="../included/include01.xml" parse="xml">
+		<xi:fallback>
+			<!-- this should be ignored -->
+			<child2>Text2</child2>
+		</xi:fallback>	
+	</xi:include>
+	
+	<!-- this tests that idrefs still work when an ID from an included file is used -->
+	<select name="kid3"/>
+	
+	<!-- this tests when an included file has a DTD, but the base file doesn't -->
+	<xi:include href="../included/unparsed.xml"><xi:fallback/></xi:include>
+</xit:myRoot>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test02.xml b/tests/src/xinclude/tests/xinclude/tests/test02.xml
new file mode 100644
index 000000000..7c5aab384
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test02.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from other namespaces on xi:include elements are ignored -->
+   <xi:include foo="bar"
+               parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test03.xml b/tests/src/xinclude/tests/xinclude/tests/test03.xml
new file mode 100644
index 000000000..9a886db17
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test03.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from the XInclude namespace are ignored -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"
+               xi:foo="bar"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test04.xml b/tests/src/xinclude/tests/xinclude/tests/test04.xml
new file mode 100644
index 000000000..f34792243
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test04.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- thats that parse="xml" works -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test05.xml b/tests/src/xinclude/tests/xinclude/tests/test05.xml
new file mode 100644
index 000000000..f0f2e2e4d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test05.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="text" works -->
+   <xi:include parse="text"
+               href="../included/text.txt"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test06.xml b/tests/src/xinclude/tests/xinclude/tests/test06.xml
new file mode 100644
index 000000000..0261ba40a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test06.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="xml" is the default -->
+   <xi:include href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test07.xml b/tests/src/xinclude/tests/xinclude/tests/test07.xml
new file mode 100644
index 000000000..98db57034
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test07.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that values for parse other than "xml" or "text" are invalid -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xxx"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test08.xml b/tests/src/xinclude/tests/xinclude/tests/test08.xml
new file mode 100644
index 000000000..d41c64191
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test08.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is not a failure when the include is successful -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test09.xml b/tests/src/xinclude/tests/xinclude/tests/test09.xml
new file mode 100644
index 000000000..4e1d464ab
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test09.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test10.xml b/tests/src/xinclude/tests/xinclude/tests/test10.xml
new file mode 100644
index 000000000..a35af0650
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test10.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that a fallback is used when the include is unsuccessful -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:fallback>
+           <elem/>
+       </xi:fallback>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test11.xml b/tests/src/xinclude/tests/xinclude/tests/test11.xml
new file mode 100644
index 000000000..fc0c85579
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test11.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is successful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:fallback/>
+       <xi:fallback/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test12.xml b/tests/src/xinclude/tests/xinclude/tests/test12.xml
new file mode 100644
index 000000000..bbbf8de77
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test12.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml">
+       <xi:fallback/>
+       <xi:fallback/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test13.xml b/tests/src/xinclude/tests/xinclude/tests/test13.xml
new file mode 100644
index 000000000..8bc480dbe
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test13.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is successful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:other/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test14.xml b/tests/src/xinclude/tests/xinclude/tests/test14.xml
new file mode 100644
index 000000000..1bb790c2b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test14.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is not successful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml">
+       <xi:other/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test15.xml b/tests/src/xinclude/tests/xinclude/tests/test15.xml
new file mode 100644
index 000000000..64bdeaeac
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test15.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that parser can be reused -->
+   <xi:include href="../included/elem.xml"/>
+   <xi:include href="../included/elem.xml"/>
+   <xi:include href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test16.xml b/tests/src/xinclude/tests/xinclude/tests/test16.xml
new file mode 100644
index 000000000..6313a2839
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test16.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- included file includes another file -->
+   <xi:include parse="xml"
+               href="../included/include.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test17.xml b/tests/src/xinclude/tests/xinclude/tests/test17.xml
new file mode 100644
index 000000000..cbb727632
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test17.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that empty fallback is valid -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:fallback/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test18.xml b/tests/src/xinclude/tests/xinclude/tests/test18.xml
new file mode 100644
index 000000000..5994be050
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test18.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that fallback must be child of include -->
+   <!-- EXPECT FAILURE -->
+   <xi:fallback/>
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test19.xml b/tests/src/xinclude/tests/xinclude/tests/test19.xml
new file mode 100644
index 000000000..e1e23b46a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test19.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including XML as text -->
+   <xi:include parse="text"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test20.xml b/tests/src/xinclude/tests/xinclude/tests/test20.xml
new file mode 100644
index 000000000..63e05f6ed
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test20.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as XML -->
+   <xi:include parse="xml"
+               href="../included/elem.jpg"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test21.xml b/tests/src/xinclude/tests/xinclude/tests/test21.xml
new file mode 100644
index 000000000..2a3c8b004
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test21.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as text -->
+   <xi:include parse="text"
+               href="../included/elem.jpg"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test22.xml b/tests/src/xinclude/tests/xinclude/tests/test22.xml
new file mode 100644
index 000000000..ec58a326b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test22.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- include not well formed XML -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/not-well-formed.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test23.xml b/tests/src/xinclude/tests/xinclude/tests/test23.xml
new file mode 100644
index 000000000..afe8a04cb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test23.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including the same document, but as text -->
+   <xi:include parse="text"
+               href="test24.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test24.xml b/tests/src/xinclude/tests/xinclude/tests/test24.xml
new file mode 100644
index 000000000..2c6cb8865
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test24.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that including the same document fails -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="test24.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test25.xml b/tests/src/xinclude/tests/xinclude/tests/test25.xml
new file mode 100644
index 000000000..d5c73d7f5
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test25.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="xml" -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test26.xml b/tests/src/xinclude/tests/xinclude/tests/test26.xml
new file mode 100644
index 000000000..2c6407ea5
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test26.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="text" -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="text"
+               href="../included/invalid.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test27.xml b/tests/src/xinclude/tests/xinclude/tests/test27.xml
new file mode 100644
index 000000000..9d68f1058
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test27.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0'?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="xjpg"/>
+   <!-- test including a document with a non-conflicting notation -->
+   <xi:include parse="xml"
+               href="../included/not.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test28.xml b/tests/src/xinclude/tests/xinclude/tests/test28.xml
new file mode 100644
index 000000000..33eead08c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test28.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0'?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a duplicate notation -->
+   <xi:include parse="xml"
+               href="../included/not.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test29.xml b/tests/src/xinclude/tests/xinclude/tests/test29.xml
new file mode 100644
index 000000000..2a6f1939b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test29.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a conflicting notation -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/not2.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test30.xml b/tests/src/xinclude/tests/xinclude/tests/test30.xml
new file mode 100644
index 000000000..11912059e
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test30.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with non-conflicting unparsed entity -->
+   <elem foo="ximage"/>
+   <xi:include parse="xml"
+               href="../included/ue.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test31.xml b/tests/src/xinclude/tests/xinclude/tests/test31.xml
new file mode 100644
index 000000000..39a5fe38d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test31.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with duplicate unparsed entity -->
+   <elem foo="image"/>
+   <xi:include parse="xml"
+               href="../included/ue.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test32.xml b/tests/src/xinclude/tests/xinclude/tests/test32.xml
new file mode 100644
index 000000000..466f069af
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test32.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including document with conflicting unparsed entity -->
+   <!-- Note: this actually fails because of the conflicting notation; I'm not
+        sure how to make a conflicting unparsed entity without having a conflicting
+        notation -->
+   <!-- EXPECT FAILURE -->
+   <elem foo="image"/>
+   <xi:include parse="xml"
+               href="../included/ue2.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test33.xml b/tests/src/xinclude/tests/xinclude/tests/test33.xml
new file mode 100644
index 000000000..1b78fcd53
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test33.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with a DTD, and unparsed entities and notations,
+        when the root document doesn't have one -->
+   <xi:include parse="xml"
+               href="../included/ue.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test34.xml b/tests/src/xinclude/tests/xinclude/tests/test34.xml
new file mode 100644
index 000000000..7584ca2df
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test34.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"
+   xml:base="../">
+   <!-- using xml:base on parent element to move back a directory -->
+   <xi:include parse="xml"
+               href="included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test35.xml b/tests/src/xinclude/tests/xinclude/tests/test35.xml
new file mode 100644
index 000000000..3efd5904a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test35.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move back a directory -->
+   <xi:include xml:base="../"
+               parse="xml"
+               href="included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test36.xml b/tests/src/xinclude/tests/xinclude/tests/test36.xml
new file mode 100644
index 000000000..8cf564cf9
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test36.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test ../tests/tests.xsd"
+   xml:base="../included/">
+   <!-- using xml:base on parent element to move to the included directory -->
+   <xi:include parse="xml"
+               href="elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test37.xml b/tests/src/xinclude/tests/xinclude/tests/test37.xml
new file mode 100644
index 000000000..95fd24010
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test37.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to the included directory -->
+   <xi:include xml:base="../included/"
+               parse="xml"
+               href="elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test38.xml b/tests/src/xinclude/tests/xinclude/tests/test38.xml
new file mode 100644
index 000000000..1c7d462b4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test38.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"
+   xml:base="../">
+   <!-- using xml:base on both parent element and include element -->
+   <xi:include xml:base="included/"
+               parse="xml"
+               href="elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test39.xml b/tests/src/xinclude/tests/xinclude/tests/test39.xml
new file mode 100644
index 000000000..3d194a6fc
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test39.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"
+   xml:base="../">
+   <!-- using xml:base on both parent element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test40.xml b/tests/src/xinclude/tests/xinclude/tests/test40.xml
new file mode 100644
index 000000000..c7c35e8d2
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test40.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   <xi:include xml:base="../"
+               parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test41.xml b/tests/src/xinclude/tests/xinclude/tests/test41.xml
new file mode 100644
index 000000000..7d379c75f
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test41.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- final included element specifies an xml:base attribute, which will be
+        overwritten by the new xml:base attribute -->
+   <xi:include parse="xml"
+               href="../included/base.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/tests.dtd b/tests/src/xinclude/tests/xinclude/tests/tests.dtd
new file mode 100644
index 000000000..aeb39e43e
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/tests.dtd
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!NOTATION jpg SYSTEM "jpg">
+<!NOTATION xjpg SYSTEM "jpg">
+<!ENTITY image SYSTEM "foobar.jpg" NDATA jpg>
+<!ENTITY ximage SYSTEM "foobar.jpg" NDATA xjpg>
diff --git a/tests/src/xinclude/tests/xinclude/tests/tests.xsd b/tests/src/xinclude/tests/xinclude/tests/tests.xsd
new file mode 100644
index 000000000..61dbfe80d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/tests.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+	xmlns:xml="http://www.w3.org/XML/1998/namespace"
+	targetNamespace="http://www.schemaTest.org/xinclude-test"
+	xmlns:xit="http://www.schemaTest.org/xinclude-test">
+
+<import namespace="http://www.w3.org/XML/1998/namespace"
+        schemaLocation="./xmlbase.xsd"/>
+
+<!-- used for test01.xml -->
+<complexType name="childType" mixed="true">
+	<sequence>
+		<element name="desc">
+			<simpleType>
+				<restriction base="string">
+					<pattern value="Text\d"/>
+				</restriction>
+			</simpleType>
+		</element>
+	</sequence>
+	<attribute name="name" type="ID"/>
+	<attribute ref="xml:base"/>
+</complexType>
+
+<!-- used for test01.xml -->
+<complexType name="selectType">
+	<attribute name="name" type="IDREF"/>
+</complexType>
+
+<!-- used for test01.xml -->
+<element name="myRoot">
+	<complexType>
+		<sequence>
+			<element name="child1" type="xit:childType"/>
+			<element name="child2" type="xit:childType"/>		
+			<element name="child3" type="xit:childType"/>
+			<element name="select" type="xit:selectType"/>
+			<element name="view">
+				<complexType>
+					<attribute ref="xml:base"/>
+					<attribute name="sun" type="string"/>
+				</complexType>
+			</element>
+		</sequence>
+	</complexType>
+</element>
+
+<attribute name="foo" type="string"/>
+
+<attribute name="bar" type="string"/>
+
+<element name="elem">
+	<complexType>
+		<attribute name="foo" type="string"/>
+		<attribute name="bar" type="string"/>
+		<attribute ref="xml:base"/>
+	</complexType>
+</element>
+
+<element name="x">
+	<complexType mixed="true">
+		<sequence>
+			<element ref="xit:elem" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+</element>
+
+</schema>
diff --git a/tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd b/tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd
new file mode 100644
index 000000000..1bd0e346c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:xml="http://www.w3.org/XML/1998/namespace"
+            targetNamespace="http://www.w3.org/XML/1998/namespace">
+
+<xsd:attribute name="base" type="xsd:anyURI">
+   <xsd:annotation>
+      <xsd:documentation>A definition for xml:base.</xsd:documentation>
+   </xsd:annotation>
+</xsd:attribute>
+
+</xsd:schema>
-- 
GitLab