Skip to content

Commit 323a9e2

Browse files
[Improve] code coverage
1 parent b3a373a commit 323a9e2

File tree

4 files changed

+262
-0
lines changed

4 files changed

+262
-0
lines changed

ReqIFSharp.Tests/ReqIFTextFixture.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,51 @@ namespace ReqIFSharp.Tests
2222
{
2323
using System;
2424
using System.IO;
25+
using System.Linq;
2526
using System.Text;
2627
using System.Threading;
2728
using System.Threading.Tasks;
2829
using System.Xml;
2930

31+
using Microsoft.Extensions.Logging;
32+
3033
using NUnit.Framework;
3134

3235
using ReqIFSharp;
3336

37+
using Serilog;
38+
using Serilog.Events;
39+
3440
[TestFixture]
3541
public class ReqIFTextFixture
3642
{
43+
private ILoggerFactory loggerFactory;
44+
45+
private TestLogEventSink testLogEventSink;
46+
47+
[OneTimeSetUp]
48+
public void OneTimeSetUp()
49+
{
50+
this.testLogEventSink = new TestLogEventSink();
51+
52+
Log.Logger = new LoggerConfiguration()
53+
.MinimumLevel.Verbose()
54+
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}")
55+
.WriteTo.Sink(this.testLogEventSink)
56+
.CreateLogger();
57+
58+
this.loggerFactory = LoggerFactory.Create(builder =>
59+
{
60+
builder.AddSerilog();
61+
});
62+
}
63+
64+
[SetUp]
65+
public void SetUp()
66+
{
67+
this.testLogEventSink.Events.Clear();
68+
}
69+
3770
[Test]
3871
public async Task ReqIF_ReadXmlAsync_RestoresHeaderAndToolExtensions()
3972
{
@@ -106,5 +139,47 @@ private static ReqIF CreateReqIfDocument()
106139

107140
return reqIf;
108141
}
142+
143+
[Test]
144+
public void ReadXml_UnsupportedElement_EmitsLogWarning()
145+
{
146+
var xml = """
147+
<UNSUPPORTED-ELEMENT />
148+
""";
149+
150+
var reqif = new ReqIF(this.loggerFactory);
151+
152+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = false, IgnoreWhitespace = false });
153+
154+
reqif.ReadXml(reader);
155+
156+
var warningEvent = this.testLogEventSink.Events
157+
.Where(e => e.Level == LogEventLevel.Warning)
158+
.ToList().First();
159+
160+
Assert.That(warningEvent.Properties["LocalName"].ToString().Trim('"'),
161+
Is.EqualTo("UNSUPPORTED-ELEMENT"));
162+
}
163+
164+
[Test]
165+
public async Task ReadXmlAsync_UnsupportedElement_EmitsLogWarning()
166+
{
167+
var xml = """
168+
<UNSUPPORTED-ELEMENT />
169+
""";
170+
171+
var reqif = new ReqIF(this.loggerFactory);
172+
173+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = true, IgnoreWhitespace = false });
174+
175+
await reqif.ReadXmlAsync(reader, CancellationToken.None);
176+
177+
var warningEvent = this.testLogEventSink.Events
178+
.Where(e => e.Level == LogEventLevel.Warning)
179+
.ToList().First();
180+
181+
Assert.That(warningEvent.Properties["LocalName"].ToString().Trim('"'),
182+
Is.EqualTo("UNSUPPORTED-ELEMENT"));
183+
}
109184
}
110185
}

ReqIFSharp.Tests/SpecElementWithAttributesTests/SpecObjectTestFixture.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ namespace ReqIFSharp.Tests
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;
@@ -34,6 +35,7 @@ namespace ReqIFSharp.Tests
3435
using ReqIFSharp;
3536

3637
using Serilog;
38+
using Serilog.Events;
3739

3840
/// <summary>
3941
/// Suite of tests for the <see cref="SpecObject"/>
@@ -45,12 +47,17 @@ public class SpecObjectTestFixture
4547

4648
private ILoggerFactory loggerFactory;
4749

50+
private TestLogEventSink testLogEventSink;
51+
4852
[OneTimeSetUp]
4953
public void OneTimeSetUp()
5054
{
55+
this.testLogEventSink = new TestLogEventSink();
56+
5157
Log.Logger = new LoggerConfiguration()
5258
.MinimumLevel.Verbose()
5359
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}")
60+
.WriteTo.Sink(this.testLogEventSink)
5461
.CreateLogger();
5562

5663
this.loggerFactory = LoggerFactory.Create(builder =>
@@ -62,6 +69,8 @@ public void OneTimeSetUp()
6269
[SetUp]
6370
public void SetUp()
6471
{
72+
this.testLogEventSink.Events.Clear();
73+
6574
this.settings = new XmlWriterSettings();
6675
}
6776

@@ -230,5 +239,77 @@ public async Task Verify_that_when_ReadXmlAsync_cancel_throws_OperationCanceledE
230239

231240
await Assert.ThatAsync(() => specObject.ReadXmlAsync(reader, cts.Token), Throws.InstanceOf<OperationCanceledException>());
232241
}
242+
243+
[Test]
244+
public void ReadXml_UnsupportedElement_EmitsLogWarning()
245+
{
246+
var xml = """
247+
<UNSUPPORTED-ELEMENT />
248+
""";
249+
250+
var content = new ReqIFContent();
251+
var specObject = new SpecObject(content, this.loggerFactory);
252+
253+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = false, IgnoreWhitespace = false });
254+
255+
reader.MoveToContent();
256+
257+
specObject.ReadXml(reader);
258+
259+
var warningEvent = this.testLogEventSink.Events
260+
.Where(e => e.Level == LogEventLevel.Warning)
261+
.ToList().First();
262+
263+
Assert.That(warningEvent.Properties["LocalName"].ToString().Trim('"'),
264+
Is.EqualTo("UNSUPPORTED-ELEMENT"));
265+
}
266+
267+
[Test]
268+
public async Task ReadXmlAsync_UnsupportedElement_EmitsLogWarning()
269+
{
270+
var xml = """
271+
<UNSUPPORTED-ELEMENT />
272+
""";
273+
274+
var content = new ReqIFContent();
275+
var specObject = new SpecObject(content, this.loggerFactory);
276+
277+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = true, IgnoreWhitespace = false });
278+
279+
await reader.MoveToContentAsync();
280+
281+
await specObject.ReadXmlAsync(reader, CancellationToken.None);
282+
283+
var warningEvent = this.testLogEventSink.Events
284+
.Where(e => e.Level == LogEventLevel.Warning)
285+
.ToList().First();
286+
287+
Assert.That(warningEvent.Properties["LocalName"].ToString().Trim('"'),
288+
Is.EqualTo("UNSUPPORTED-ELEMENT"));
289+
}
290+
291+
[Test]
292+
public void Verify_that_when_invalid_date_Identifiable_ReadXml_throws_exception()
293+
{
294+
var xml = """
295+
<SPEC-OBJECT IDENTIFIER="_jgCyuAfNEeeAO8RifBaE-g" LAST-CHANGE="invalid-date" LONG-NAME="specobjectname">
296+
<ALTERNATIVE-ID>
297+
<ALTERNATIVE-ID IDENTIFIER="_jgCyuAfNEeeAO8RifBaE-g"/>
298+
</ALTERNATIVE-ID>
299+
<VALUES />
300+
<TYPE>
301+
<SPEC-OBJECT-TYPE-REF>_jgCytAfNEeeAO8RifBaE-g</SPEC-OBJECT-TYPE-REF>
302+
</TYPE>
303+
</SPEC-OBJECT>
304+
""";
305+
306+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = true });
307+
reader.MoveToContent();
308+
309+
var content = new ReqIFContent();
310+
var specObject = new SpecObject(content, this.loggerFactory);
311+
312+
Assert.That(() => specObject.ReadXml(reader), Throws.TypeOf<SerializationException>() );
313+
}
233314
}
234315
}

ReqIFSharp.Tests/SpecType/SpecObjectTypeTestFixture.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020

2121
namespace ReqIFSharp.Tests.SpecTypes
2222
{
23+
using System.IO;
24+
using System.Linq;
25+
using System.Threading;
26+
using System.Threading.Tasks;
27+
using System.Xml;
28+
2329
using Microsoft.Extensions.Logging;
2430
using Microsoft.Extensions.Logging.Abstractions;
2531

@@ -28,18 +34,24 @@ namespace ReqIFSharp.Tests.SpecTypes
2834
using ReqIFSharp;
2935

3036
using Serilog;
37+
using Serilog.Events;
3138

3239
[TestFixture]
3340
public class SpecObjectTypeTestFixture
3441
{
3542
private ILoggerFactory loggerFactory;
3643

44+
private TestLogEventSink testLogEventSink;
45+
3746
[OneTimeSetUp]
3847
public void OneTimeSetUp()
3948
{
49+
this.testLogEventSink = new TestLogEventSink();
50+
4051
Log.Logger = new LoggerConfiguration()
4152
.MinimumLevel.Verbose()
4253
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}")
54+
.WriteTo.Sink(this.testLogEventSink)
4355
.CreateLogger();
4456

4557
this.loggerFactory = LoggerFactory.Create(builder =>
@@ -48,6 +60,12 @@ public void OneTimeSetUp()
4860
});
4961
}
5062

63+
[SetUp]
64+
public void SetUp()
65+
{
66+
this.testLogEventSink.Events.Clear();
67+
}
68+
5169
[Test]
5270
public void Verify_that_constructor_does_not_throw_exception()
5371
{
@@ -72,5 +90,49 @@ public void Verify_that_when_constructed_no_exception_is_thrown()
7290

7391
Assert.That(() => new SpecObjectType(NullLoggerFactory.Instance), Throws.Nothing);
7492
}
93+
94+
[Test]
95+
public void ReadXml_UnsupportedElement_EmitsLogWarning()
96+
{
97+
var xml = """
98+
<UNSUPPORTED-ELEMENT />
99+
""";
100+
101+
var content = new ReqIFContent();
102+
var specObjectType = new SpecObjectType(content, this.loggerFactory);
103+
104+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = false, IgnoreWhitespace = false });
105+
106+
specObjectType.ReadXml(reader);
107+
108+
var warningEvent = this.testLogEventSink.Events
109+
.Where(e => e.Level == LogEventLevel.Warning)
110+
.ToList().First();
111+
112+
Assert.That(warningEvent.Properties["LocalName"].ToString().Trim('"'),
113+
Is.EqualTo("UNSUPPORTED-ELEMENT"));
114+
}
115+
116+
[Test]
117+
public async Task ReadXmlAsync_UnsupportedElement_EmitsLogWarning()
118+
{
119+
var xml = """
120+
<UNSUPPORTED-ELEMENT />
121+
""";
122+
123+
var content = new ReqIFContent();
124+
var specObjectType = new SpecObjectType(content, this.loggerFactory);
125+
126+
using var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { Async = true, IgnoreWhitespace = false });
127+
128+
await specObjectType.ReadXmlAsync(reader, CancellationToken.None);
129+
130+
var warningEvent = this.testLogEventSink.Events
131+
.Where(e => e.Level == LogEventLevel.Warning)
132+
.ToList().First();
133+
134+
Assert.That(warningEvent.Properties["LocalName"].ToString().Trim('"'),
135+
Is.EqualTo("UNSUPPORTED-ELEMENT"));
136+
}
75137
}
76138
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// -------------------------------------------------------------------------------------------------
2+
// <copyright file="TestLogEventSink.cs" company="Starion Group S.A.">
3+
//
4+
// Copyright 2017-2025 Starion Group S.A.
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
// </copyright>
19+
// -------------------------------------------------------------------------------------------------
20+
21+
namespace ReqIFSharp.Tests
22+
{
23+
using System.Collections.Generic;
24+
25+
using Serilog.Core;
26+
using Serilog.Events;
27+
28+
/// <summary>
29+
/// An event log sink to test with that acts as a destination for log events.
30+
/// </summary>
31+
public class TestLogEventSink : ILogEventSink
32+
{
33+
public List<LogEvent> Events { get; } = new List<LogEvent>();
34+
35+
/// <summary>
36+
/// Emit the provided log event to the sink.
37+
/// </summary>
38+
/// <param name="logEvent">The log event to write.</param>
39+
public void Emit(LogEvent logEvent)
40+
{
41+
Events.Add(logEvent);
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)