@@ -22,18 +22,21 @@ namespace ReqIFSharp.Tests.SpecElementWithAttributesTests
2222{
2323 using System ;
2424 using System . IO ;
25+ using System . Linq ;
2526 using System . Runtime . Serialization ;
2627 using System . Threading ;
2728 using System . Threading . Tasks ;
2829 using System . Xml ;
2930
3031 using Microsoft . Extensions . Logging ;
32+ using Microsoft . Extensions . Logging . Abstractions ;
3133
3234 using NUnit . Framework ;
3335
3436 using ReqIFSharp ;
3537
3638 using Serilog ;
39+ using Serilog . Events ;
3740
3841 /// <summary>
3942 /// Suite of tests for the <see cref="SpecHierarchy"/> class
@@ -45,12 +48,17 @@ public class SpecHierarchyTestFixture
4548
4649 private ILoggerFactory loggerFactory ;
4750
51+ private TestLogEventSink testLogEventSink ;
52+
4853 [ OneTimeSetUp ]
4954 public void OneTimeSetUp ( )
5055 {
56+ this . testLogEventSink = new TestLogEventSink ( ) ;
57+
5158 Log . Logger = new LoggerConfiguration ( )
5259 . MinimumLevel . Verbose ( )
5360 . WriteTo . Console ( outputTemplate : "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}" )
61+ . WriteTo . Sink ( this . testLogEventSink )
5462 . CreateLogger ( ) ;
5563
5664 this . loggerFactory = LoggerFactory . Create ( builder =>
@@ -62,6 +70,7 @@ public void OneTimeSetUp()
6270 [ SetUp ]
6371 public void SetUp ( )
6472 {
73+ this . testLogEventSink . Events . Clear ( ) ;
6574 this . settings = new XmlWriterSettings ( ) ;
6675 }
6776
@@ -274,5 +283,49 @@ public void SpecHierarchy_ReadXml_Verify_that_when_attribute_is_incorrect_type_e
274283
275284 Assert . That ( ( ) => specHierarchy . ReadXml ( reader ) , Throws . InstanceOf < SerializationException > ( ) ) ;
276285 }
286+
287+ [ Test ]
288+ public void ReadXml_UnsupportedElement_EmitsLogWarning ( )
289+ {
290+ var xml = """
291+ <UNSUPPORTED-ELEMENT />
292+ """ ;
293+
294+ var specHierarchy = new SpecHierarchy ( this . loggerFactory ) ;
295+
296+ using var reader = XmlReader . Create ( new StringReader ( xml ) , new XmlReaderSettings { Async = false , IgnoreWhitespace = false } ) ;
297+
298+ reader . MoveToContent ( ) ;
299+
300+ specHierarchy . ReadXml ( reader ) ;
301+
302+ var warningEvent = this . testLogEventSink . Events
303+ . Where ( e => e . Level == LogEventLevel . Warning )
304+ . ToList ( ) . First ( ) ;
305+
306+ Assert . That ( warningEvent . Properties [ "LocalName" ] . ToString ( ) . Trim ( '"' ) ,
307+ Is . EqualTo ( "UNSUPPORTED-ELEMENT" ) ) ;
308+ }
309+
310+ [ Test ]
311+ public async Task ReadXmlAsync_UnsupportedElement_EmitsLogWarning ( )
312+ {
313+ var xml = """
314+ <UNSUPPORTED-ELEMENT />
315+ """ ;
316+
317+ var specHierarchy = new SpecHierarchy ( this . loggerFactory ) ;
318+
319+ using var reader = XmlReader . Create ( new StringReader ( xml ) , new XmlReaderSettings { Async = true , IgnoreWhitespace = false } ) ;
320+
321+ await specHierarchy . ReadXmlAsync ( reader , CancellationToken . None ) ;
322+
323+ var warningEvent = this . testLogEventSink . Events
324+ . Where ( e => e . Level == LogEventLevel . Warning )
325+ . ToList ( ) . First ( ) ;
326+
327+ Assert . That ( warningEvent . Properties [ "LocalName" ] . ToString ( ) . Trim ( '"' ) ,
328+ Is . EqualTo ( "UNSUPPORTED-ELEMENT" ) ) ;
329+ }
277330 }
278331}
0 commit comments