XmlWriter reverts to XML 1.0.

Character encodings that are not valid in XML 1.0 are instead written using C-style escapes
This commit is contained in:
Phil Nash
2017-02-06 16:00:05 +00:00
parent f65776890c
commit a189387f49
6 changed files with 121 additions and 52 deletions

View File

@@ -830,5 +830,5 @@ with expansion:
===============================================================================
test cases: 157 | 113 passed | 42 failed | 2 failed as expected
assertions: 913 | 817 passed | 78 failed | 18 failed as expected
assertions: 915 | 819 passed | 78 failed | 18 failed as expected

View File

@@ -7982,27 +7982,53 @@ with expansion:
-------------------------------------------------------------------------------
XmlEncode
string with control char (1)
string with control char (1) (XML 1.0)
-------------------------------------------------------------------------------
MiscTests.cpp:<line number>
...............................................................................
MiscTests.cpp:<line number>:
PASSED:
REQUIRE( encode( "[\x01]" ) == "[&#x01;]" )
REQUIRE( encode( "[\x01]" ) == "[\\x01]" )
with expansion:
"[\x01]" == "[\x01]"
-------------------------------------------------------------------------------
XmlEncode
string with control char (1) (XMl 1.1)
-------------------------------------------------------------------------------
MiscTests.cpp:<line number>
...............................................................................
MiscTests.cpp:<line number>:
PASSED:
REQUIRE( encode( "[\x01]", Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::_1_1 ) == "[&#x01;]" )
with expansion:
"[&#x01;]" == "[&#x01;]"
-------------------------------------------------------------------------------
XmlEncode
string with control char (x7F)
string with control char (x7F) (XML 1.0)
-------------------------------------------------------------------------------
MiscTests.cpp:<line number>
...............................................................................
MiscTests.cpp:<line number>:
PASSED:
REQUIRE( encode( "[\x7F]" ) == "[&#x7F;]" )
REQUIRE( encode( "[\x7F]" ) == "[\\x7F]" )
with expansion:
"[\x7F]" == "[\x7F]"
-------------------------------------------------------------------------------
XmlEncode
string with control char (x7F) (XML 1.1)
-------------------------------------------------------------------------------
MiscTests.cpp:<line number>
...............................................................................
MiscTests.cpp:<line number>:
PASSED:
REQUIRE( encode( "[\x7F]", Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::_1_1 ) == "[&#x7F;]" )
with expansion:
"[&#x7F;]" == "[&#x7F;]"
@@ -9026,5 +9052,5 @@ PASSED:
===============================================================================
test cases: 157 | 112 passed | 43 failed | 2 failed as expected
assertions: 915 | 817 passed | 80 failed | 18 failed as expected
assertions: 917 | 819 passed | 80 failed | 18 failed as expected

View File

@@ -1,6 +1,6 @@
<?xml version="1.1" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="<exe-name>" errors="13" failures="68" tests="916" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="13" failures="68" tests="918" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testcase classname="global" name="# A test name that starts with a #" time="{duration}"/>
<testcase classname="global" name="'Not' checks that should fail" time="{duration}">
<failure message="false != false" type="CHECK">
@@ -538,8 +538,10 @@ ExceptionTests.cpp:<line number>
<testcase classname="XmlEncode" name="string with less-than" time="{duration}"/>
<testcase classname="XmlEncode" name="string with greater-than" time="{duration}"/>
<testcase classname="XmlEncode" name="string with quotes" time="{duration}"/>
<testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/>
<testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/>
<testcase classname="XmlEncode" name="string with control char (1) (XML 1.0)" time="{duration}"/>
<testcase classname="XmlEncode" name="string with control char (1) (XMl 1.1)" time="{duration}"/>
<testcase classname="XmlEncode" name="string with control char (x7F) (XML 1.0)" time="{duration}"/>
<testcase classname="XmlEncode" name="string with control char (x7F) (XML 1.1)" time="{duration}"/>
<testcase classname="global" name="atomic if" time="{duration}"/>
<testcase classname="global" name="boolean member" time="{duration}"/>
<testcase classname="global" name="checkedElse" time="{duration}"/>

View File

@@ -1,4 +1,4 @@
<?xml version="1.1" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<Catch name="<exe-name>">
<Group name="<exe-name>">
<TestCase name="# A test name that starts with a #">
@@ -8445,10 +8445,21 @@ there"
</Expression>
<OverallResults successes="2" failures="0" expectedFailures="0"/>
</Section>
<Section name="string with control char (1)">
<Section name="string with control char (1) (XML 1.0)">
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" >
<Original>
encode( "[\x01]" ) == "[&amp;#x01;]"
encode( "[\x01]" ) == "[\\x01]"
</Original>
<Expanded>
"[\x01]" == "[\x01]"
</Expanded>
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<Section name="string with control char (1) (XMl 1.1)">
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" >
<Original>
encode( "[\x01]", Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::_1_1 ) == "[&amp;#x01;]"
</Original>
<Expanded>
"[&amp;#x01;]" == "[&amp;#x01;]"
@@ -8456,10 +8467,21 @@ there"
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<Section name="string with control char (x7F)">
<Section name="string with control char (x7F) (XML 1.0)">
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" >
<Original>
encode( "[\x7F]" ) == "[&amp;#x7F;]"
encode( "[\x7F]" ) == "[\\x7F]"
</Original>
<Expanded>
"[\x7F]" == "[\x7F]"
</Expanded>
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<Section name="string with control char (x7F) (XML 1.1)">
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" >
<Original>
encode( "[\x7F]", Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::_1_1 ) == "[&amp;#x7F;]"
</Original>
<Expanded>
"[&amp;#x7F;]" == "[&amp;#x7F;]"
@@ -9503,7 +9525,7 @@ there"
</Section>
<OverallResult success="true"/>
</TestCase>
<OverallResults successes="817" failures="81" expectedFailures="18"/>
<OverallResults successes="819" failures="81" expectedFailures="18"/>
</Group>
<OverallResults successes="817" failures="80" expectedFailures="18"/>
<OverallResults successes="819" failures="80" expectedFailures="18"/>
</Catch>

View File

@@ -429,9 +429,9 @@ TEST_CASE( "toString on wchar_t returns the string contents", "[toString]" ) {
CHECK( result == "\"wide load\"" );
}
inline std::string encode( std::string const& str, Catch::XmlEncode::ForWhat forWhat = Catch::XmlEncode::ForTextNodes ) {
inline std::string encode( std::string const& str, Catch::XmlEncode::ForWhat forWhat = Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::XmlVersion version = Catch::XmlEncode::_1_0 ) {
std::ostringstream oss;
oss << Catch::XmlEncode( str, forWhat );
oss << Catch::XmlEncode( version, str, forWhat );
return oss.str();
}
@@ -457,11 +457,17 @@ TEST_CASE( "XmlEncode" ) {
REQUIRE( encode( stringWithQuotes ) == stringWithQuotes );
REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &quot;quote&quot; me on that" );
}
SECTION( "string with control char (1)" ) {
REQUIRE( encode( "[\x01]" ) == "[&#x01;]" );
SECTION( "string with control char (1) (XML 1.0)" ) {
REQUIRE( encode( "[\x01]" ) == "[\\x01]" );
}
SECTION( "string with control char (x7F)" ) {
REQUIRE( encode( "[\x7F]" ) == "[&#x7F;]" );
SECTION( "string with control char (1) (XMl 1.1)" ) {
REQUIRE( encode( "[\x01]", Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::_1_1 ) == "[&#x01;]" );
}
SECTION( "string with control char (x7F) (XML 1.0)" ) {
REQUIRE( encode( "[\x7F]" ) == "[\\x7F]" );
}
SECTION( "string with control char (x7F) (XML 1.1)" ) {
REQUIRE( encode( "[\x7F]", Catch::XmlEncode::ForTextNodes, Catch::XmlEncode::_1_1 ) == "[&#x7F;]" );
}
}