@@ -65,7 +65,7 @@ public void CreateTestSuiteShouldGroupTestSuitesByName()
6565 }
6666
6767 [ TestMethod ]
68- public void TestCaseSystemOutShouldUseCDATA ( )
68+ public void TestCaseSystemOutShouldBeSanitized ( )
6969 {
7070 var serializer = new JunitXmlSerializer ( ) ;
7171 var result = CreateTestResultInfo (
@@ -79,7 +79,7 @@ public void TestCaseSystemOutShouldUseCDATA()
7979 }
8080
8181 [ TestMethod ]
82- public void TestCaseSystemErrShouldUseCDATA ( )
82+ public void TestCaseSystemErrShouldBeSanitized ( )
8383 {
8484 var serializer = new JunitXmlSerializer ( ) ;
8585 var result = CreateTestResultInfo (
@@ -93,7 +93,7 @@ public void TestCaseSystemErrShouldUseCDATA()
9393 }
9494
9595 [ TestMethod ]
96- public void TestSuiteSystemOutShouldUseCDATA ( )
96+ public void TestSuiteSystemOutShouldBeSanitized ( )
9797 {
9898 var serializer = new JunitXmlSerializer ( ) ;
9999 var results = new List < TestResultInfo > { CreateTestResultInfo ( ) } ;
@@ -112,13 +112,12 @@ public void TestSuiteSystemOutShouldUseCDATA()
112112 var systemOutElement = doc . XPathSelectElement ( "//testsuite/system-out" ) ;
113113
114114 Assert . IsNotNull ( systemOutElement ) ;
115- Assert . IsTrue ( systemOutElement . FirstNode is XCData ) ;
116- var cdata = ( XCData ) systemOutElement . FirstNode ;
117- StringAssert . Contains ( cdata . Value , "Framework info with <xml> & characters" ) ;
115+ Assert . IsTrue ( systemOutElement . FirstNode is System . Xml . Linq . XText ) ;
116+ StringAssert . Contains ( systemOutElement . Value , "Framework info with <xml> & characters" ) ;
118117 }
119118
120119 [ TestMethod ]
121- public void TestSuiteSystemErrShouldUseCDATA ( )
120+ public void TestSuiteSystemErrShouldBeSanitized ( )
122121 {
123122 var serializer = new JunitXmlSerializer ( ) ;
124123 var results = new List < TestResultInfo > { CreateTestResultInfo ( ) } ;
@@ -137,9 +136,92 @@ public void TestSuiteSystemErrShouldUseCDATA()
137136 var systemErrElement = doc . XPathSelectElement ( "//testsuite/system-err" ) ;
138137
139138 Assert . IsNotNull ( systemErrElement ) ;
140- Assert . IsTrue ( systemErrElement . FirstNode is XCData ) ;
141- var cdata = ( XCData ) systemErrElement . FirstNode ;
142- StringAssert . Contains ( cdata . Value , "Error - Error message with <xml> & characters" ) ;
139+ Assert . IsTrue ( systemErrElement . FirstNode is System . Xml . Linq . XText ) ;
140+ StringAssert . Contains ( systemErrElement . Value , "Error - Error message with <xml> & characters" ) ;
141+ }
142+
143+ [ TestMethod ]
144+ public void TestSuiteShouldNotIncludeEmptySystemOutElement ( )
145+ {
146+ var serializer = new JunitXmlSerializer ( ) ;
147+ var results = new List < TestResultInfo > { CreateTestResultInfo ( ) } ;
148+ var messages = new List < TestMessageInfo > ( ) ; // No messages
149+
150+ var xml = serializer . Serialize (
151+ CreateTestLoggerConfiguration ( ) ,
152+ CreateTestRunConfiguration ( ) ,
153+ results ,
154+ messages ) ;
155+
156+ var doc = XDocument . Parse ( xml ) ;
157+ var systemOutElement = doc . XPathSelectElement ( "//testsuite/system-out" ) ;
158+
159+ Assert . IsNull ( systemOutElement , "Empty system-out element should not be included in test suite" ) ;
160+ }
161+
162+ [ TestMethod ]
163+ public void TestSuiteShouldNotIncludeEmptySystemErrElement ( )
164+ {
165+ var serializer = new JunitXmlSerializer ( ) ;
166+ var results = new List < TestResultInfo > { CreateTestResultInfo ( ) } ;
167+ var messages = new List < TestMessageInfo > ( ) ; // No messages
168+
169+ var xml = serializer . Serialize (
170+ CreateTestLoggerConfiguration ( ) ,
171+ CreateTestRunConfiguration ( ) ,
172+ results ,
173+ messages ) ;
174+
175+ var doc = XDocument . Parse ( xml ) ;
176+ var systemErrElement = doc . XPathSelectElement ( "//testsuite/system-err" ) ;
177+
178+ Assert . IsNull ( systemErrElement , "Empty system-err element should not be included in test suite" ) ;
179+ }
180+
181+ [ TestMethod ]
182+ public void TestSuiteShouldIncludeSystemOutElementWhenContentExists ( )
183+ {
184+ var serializer = new JunitXmlSerializer ( ) ;
185+ var results = new List < TestResultInfo > { CreateTestResultInfo ( ) } ;
186+ var messages = new List < TestMessageInfo >
187+ {
188+ new TestMessageInfo ( TestMessageLevel . Informational , "Framework info message" )
189+ } ;
190+
191+ var xml = serializer . Serialize (
192+ CreateTestLoggerConfiguration ( ) ,
193+ CreateTestRunConfiguration ( ) ,
194+ results ,
195+ messages ) ;
196+
197+ var doc = XDocument . Parse ( xml ) ;
198+ var systemOutElement = doc . XPathSelectElement ( "//testsuite/system-out" ) ;
199+
200+ Assert . IsNotNull ( systemOutElement , "Non-empty system-out element should be included in test suite" ) ;
201+ Assert . IsTrue ( systemOutElement . Value . Contains ( "Framework info message" ) ) ;
202+ }
203+
204+ [ TestMethod ]
205+ public void TestSuiteShouldIncludeSystemErrElementWhenContentExists ( )
206+ {
207+ var serializer = new JunitXmlSerializer ( ) ;
208+ var results = new List < TestResultInfo > { CreateTestResultInfo ( ) } ;
209+ var messages = new List < TestMessageInfo >
210+ {
211+ new TestMessageInfo ( TestMessageLevel . Error , "Error message" )
212+ } ;
213+
214+ var xml = serializer . Serialize (
215+ CreateTestLoggerConfiguration ( ) ,
216+ CreateTestRunConfiguration ( ) ,
217+ results ,
218+ messages ) ;
219+
220+ var doc = XDocument . Parse ( xml ) ;
221+ var systemErrElement = doc . XPathSelectElement ( "//testsuite/system-err" ) ;
222+
223+ Assert . IsNotNull ( systemErrElement , "Non-empty system-err element should be included in test suite" ) ;
224+ Assert . IsTrue ( systemErrElement . Value . Contains ( "Error - Error message" ) ) ;
143225 }
144226
145227 private static LoggerConfiguration CreateTestLoggerConfiguration ( )
@@ -193,9 +275,9 @@ private static string SerializeAndExtractElementContent(JunitXmlSerializer seria
193275 var targetElement = testCaseElement . Element ( elementName ) ;
194276
195277 Assert . IsNotNull ( targetElement , $ "Element '{ elementName } ' not found in testcase") ;
196- Assert . IsTrue ( targetElement . FirstNode is XCData , $ "Element '{ elementName } ' does not contain CDATA ") ;
278+ Assert . IsTrue ( targetElement . FirstNode is System . Xml . Linq . XText , $ "Element '{ elementName } ' should contain text node ") ;
197279
198- return ( ( XCData ) targetElement . FirstNode ) . Value ;
280+ return targetElement . Value ;
199281 }
200282
201283 private static TestSuite CreateTestSuite ( string name )
0 commit comments