@@ -22,14 +22,20 @@ namespace ReqIFSharp.Tests
2222{
2323 using System ;
2424 using System . IO ;
25+ using System . Linq ;
26+ using System . Runtime . Serialization ;
2527 using System . Threading ;
28+ using System . Threading . Tasks ;
2629 using System . Xml ;
2730
2831 using Microsoft . Extensions . Logging ;
2932
3033 using NUnit . Framework ;
3134
35+ using ReqIFSharp ;
36+
3237 using Serilog ;
38+ using Serilog . Events ;
3339
3440 /// <summary>
3541 /// Suite of tests for the <see cref="ReqIFHeader"/> class
@@ -39,12 +45,17 @@ public class ReqIFHeaderTestFixture
3945 {
4046 private ILoggerFactory loggerFactory ;
4147
48+ private TestLogEventSink testLogEventSink ;
49+
4250 [ OneTimeSetUp ]
4351 public void OneTimeSetUp ( )
4452 {
53+ this . testLogEventSink = new TestLogEventSink ( ) ;
54+
4555 Log . Logger = new LoggerConfiguration ( )
4656 . MinimumLevel . Verbose ( )
4757 . WriteTo . Console ( outputTemplate : "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}" )
58+ . WriteTo . Sink ( this . testLogEventSink )
4859 . CreateLogger ( ) ;
4960
5061 this . loggerFactory = LoggerFactory . Create ( builder =>
@@ -53,6 +64,12 @@ public void OneTimeSetUp()
5364 } ) ;
5465 }
5566
67+ [ SetUp ]
68+ public void SetUp ( )
69+ {
70+ this . testLogEventSink . Events . Clear ( ) ;
71+ }
72+
5673 [ Test ]
5774 public void Verify_that_ReadXmlAsync_throws_exception_when_cancelled ( )
5875 {
@@ -85,5 +102,109 @@ public void Verify_That_WriteXmlAsync_throws_exception_when_cancelled()
85102 async ( ) => await reqIfHeader . WriteXmlAsync ( writer , cts . Token ) ,
86103 Throws . Exception . TypeOf < OperationCanceledException > ( ) ) ;
87104 }
105+
106+ [ Test ]
107+ public void Verify_that_when_unsupported_element_ReqIFHeader_ReadXml_logs_warning ( )
108+ {
109+ var xml = """
110+ <THE-HEADER>
111+ <REQ-IF-HEADER IDENTIFIER="_jgCysQfNEeeAO8RifBaE-g">
112+ <COMMENT>Created by: jastram</COMMENT>
113+ <CREATION-TIME>2017-03-13T10:15:09.017+01:00</CREATION-TIME>
114+ <REPOSITORY-ID>repos-id</REPOSITORY-ID>
115+ <REQ-IF-TOOL-ID>fmStudio (http://formalmind.com/studio)</REQ-IF-TOOL-ID>
116+ <REQ-IF-VERSION>1.0</REQ-IF-VERSION>
117+ <SOURCE-TOOL-ID>ProR (http://pror.org)</SOURCE-TOOL-ID>
118+ <TITLE>Specification Title</TITLE>
119+ <UNSUPPORTED-ELEMENT />
120+ </REQ-IF-HEADER>
121+ </THE-HEADER>
122+ """ ;
123+
124+ using var reader = XmlReader . Create ( new StringReader ( xml ) , new XmlReaderSettings { Async = true } ) ;
125+ reader . MoveToContent ( ) ;
126+
127+ var reqIfHeader = new ReqIFHeader ( this . loggerFactory ) ;
128+
129+ Assert . That ( ( ) => reqIfHeader . ReadXml ( reader ) , Throws . Nothing ) ;
130+
131+ var warningEvent = this . testLogEventSink . Events
132+ . Where ( e => e . Level == LogEventLevel . Warning )
133+ . ToList ( ) . First ( ) ;
134+
135+ Assert . That ( warningEvent . Properties [ "LocalName" ] . ToString ( ) . Trim ( '"' ) ,
136+ Is . EqualTo ( "UNSUPPORTED-ELEMENT" ) ) ;
137+ }
138+
139+ [ Test ]
140+ public async Task Verify_that_when_unsupported_element_ReqIFHeader_ReadXmlAsync_logs_warning ( )
141+ {
142+ var xml = """
143+ <THE-HEADER>
144+ <REQ-IF-HEADER IDENTIFIER="_jgCysQfNEeeAO8RifBaE-g">
145+ <COMMENT>Created by: jastram</COMMENT>
146+ <CREATION-TIME>2017-03-13T10:15:09.017+01:00</CREATION-TIME>
147+ <REPOSITORY-ID>repos-id</REPOSITORY-ID>
148+ <REQ-IF-TOOL-ID>fmStudio (http://formalmind.com/studio)</REQ-IF-TOOL-ID>
149+ <REQ-IF-VERSION>1.0</REQ-IF-VERSION>
150+ <SOURCE-TOOL-ID>ProR (http://pror.org)</SOURCE-TOOL-ID>
151+ <TITLE>Specification Title</TITLE>
152+ <UNSUPPORTED-ELEMENT />
153+ </REQ-IF-HEADER>
154+ </THE-HEADER>
155+ """ ;
156+
157+ using var reader = XmlReader . Create ( new StringReader ( xml ) , new XmlReaderSettings { Async = true } ) ;
158+ await reader . MoveToContentAsync ( ) ;
159+
160+ var reqIfHeader = new ReqIFHeader ( this . loggerFactory ) ;
161+
162+ await reqIfHeader . ReadXmlAsync ( reader , CancellationToken . None ) ;
163+
164+ var warningEvent = this . testLogEventSink . Events
165+ . Where ( e => e . Level == LogEventLevel . Warning )
166+ . ToList ( ) . First ( ) ;
167+
168+ Assert . That ( warningEvent . Properties [ "LocalName" ] . ToString ( ) . Trim ( '"' ) ,
169+ Is . EqualTo ( "UNSUPPORTED-ELEMENT" ) ) ;
170+ }
171+
172+ [ Test ]
173+ public void Verify_that_when_invalid_date_ReqIFHeader_ReadXml_throws_exception ( )
174+ {
175+ var xml = """
176+ <THE-HEADER>
177+ <REQ-IF-HEADER IDENTIFIER="_abc">
178+ <CREATION-TIME>invalid-date</CREATION-TIME>
179+ </REQ-IF-HEADER>
180+ </THE-HEADER>
181+ """ ;
182+
183+ using var reader = XmlReader . Create ( new StringReader ( xml ) , new XmlReaderSettings { Async = false } ) ;
184+ reader . MoveToContent ( ) ;
185+
186+ var reqIfHeader = new ReqIFHeader ( this . loggerFactory ) ;
187+
188+ Assert . That ( ( ) => reqIfHeader . ReadXml ( reader ) , Throws . TypeOf < SerializationException > ( ) ) ;
189+ }
190+
191+ [ Test ]
192+ public async Task Verify_that_when_invalid_date_ReqIFHeader_ReadXmlAsync_throws_exception ( )
193+ {
194+ var xml = """
195+ <THE-HEADER>
196+ <REQ-IF-HEADER IDENTIFIER="_abc">
197+ <CREATION-TIME>invalid-date</CREATION-TIME>
198+ </REQ-IF-HEADER>
199+ </THE-HEADER>
200+ """ ;
201+
202+ using var reader = XmlReader . Create ( new StringReader ( xml ) , new XmlReaderSettings { Async = true } ) ;
203+ await reader . MoveToContentAsync ( ) ;
204+
205+ var reqIfHeader = new ReqIFHeader ( this . loggerFactory ) ;
206+
207+ await Assert . ThatAsync ( ( ) => reqIfHeader . ReadXmlAsync ( reader , CancellationToken . None ) , Throws . TypeOf < SerializationException > ( ) ) ;
208+ }
88209 }
89210}
0 commit comments