diff options
| -rw-r--r-- | test/dgunit.h | 35 | 
1 files changed, 31 insertions, 4 deletions
| diff --git a/test/dgunit.h b/test/dgunit.h index 358c70d..6717310 100644 --- a/test/dgunit.h +++ b/test/dgunit.h @@ -120,13 +120,13 @@ public:  		for(auto test : failed_tests)  		{  			out << "		<FailedTest id=\"" << test.id << "\">\n"; -			out << "			<Name>" << test.func << "</Name>\n"; +			out << "			<Name>" << sanitize(test.func) << "</Name>\n";  			out << "			<FailureType>Assertion</FailureType>\n";  			out << "			<Location>\n"; -			out << "				<File>" << test.file << "</File>\n"; +			out << "				<File>" << sanitize(test.file) << "</File>\n";  			out << "				<Line>" << test.line << "</Line>\n";  			out << "			</Location>\n"; -			out << "			<Message>" << test.msg << "</Message>\n"; +			out << "			<Message>" << sanitize(test.msg) << "</Message>\n";  			out << "		</FailedTest>\n";  		}  		out << "	</FailedTests>\n"; @@ -134,7 +134,7 @@ public:  		for(auto test : successful_tests)  		{  			out << "		<Test id=\"" << test.id << "\">\n"; -			out << "			<Name>" << test.func << "</Name>\n"; +			out << "			<Name>" << sanitize(test.func) << "</Name>\n";  			out << "		</Test>\n";  		} @@ -204,6 +204,33 @@ protected:  		assert_equal(expected, value, __FILE__, __LINE__)  private: +	static std::string sanitize(const std::string& input) +	{ +		std::string output; +		for(auto c : input) +		{ +			switch(c) +			{ +			case '"': +				output += """; +				break; +			case '&': +				output += "&"; +				break; +			case '<': +				output += "<"; +				break; +			case '>': +				output += ">"; +				break; +			default: +				output += c; +				break; +			} +		} +		return output; +	} +  	static DGUnit* suite_list;  	DGUnit* next_unit{nullptr};  	std::vector<std::pair<std::function<void()>, const char*>> tests; | 
