Skip to content

Commit 1bc01ee

Browse files
committed
add unit test
1 parent 1f344e6 commit 1bc01ee

File tree

4 files changed

+43
-0
lines changed

4 files changed

+43
-0
lines changed

mdoc/mdoc.Test/MDocUpdaterTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,5 +253,41 @@ public void Run_WithOptionsOAndFx_ShouldProcessFrameworks()
253253
Assert.IsTrue(File.Exists(Path.Combine(outputDir, "index.xml")));
254254
Assert.IsTrue(File.Exists(Path.Combine(outputDir, "ns-TestLibrary.xml")));
255255
}
256+
257+
[Test]
258+
public void Test_RunWithRefStructValidation()
259+
{
260+
// Arrange
261+
var baseDir = Path.Combine(Path.GetDirectoryName(this.GetType().Module.Assembly.Location), "SampleClasses/TestUpdate");
262+
var outputDir = Path.Combine(baseDir, "outputDir");
263+
Directory.CreateDirectory(outputDir);
264+
265+
var args = new List<string> { "update", "-o", outputDir, "-fx", Path.Combine(baseDir) };
266+
var updater = new MDocUpdater();
267+
268+
// Act
269+
updater.Run(args);
270+
271+
// Assert
272+
var iRefStructProcessorPath = Path.Combine(outputDir, "RefStructDemo", "IRefStructProcessor`1.xml");
273+
var refStructHandlerPath = Path.Combine(outputDir, "RefStructDemo", "RefStructHandler.xml");
274+
275+
Assert.IsTrue(File.Exists(iRefStructProcessorPath));
276+
Assert.IsTrue(File.Exists(refStructHandlerPath));
277+
278+
var iRefStructProcessorDoc = new XmlDocument();
279+
iRefStructProcessorDoc.Load(iRefStructProcessorPath);
280+
var iRefStructProcessorNode = iRefStructProcessorDoc.SelectSingleNode("//TypeParameters/TypeParameter/Constraints/ParameterAttribute[text()='AllowsRefStruct']");
281+
Assert.IsNotNull(iRefStructProcessorNode, "Missing <ParameterAttribute>AllowsRefStruct</ParameterAttribute> in IRefStructProcessor`1.xml");
282+
var iRefStructProcessorTypeSignatureNode = iRefStructProcessorDoc.SelectSingleNode("//TypeSignature[@Language='C#' and contains(@Value, 'where T : allows ref struct')]");
283+
Assert.IsNotNull(iRefStructProcessorTypeSignatureNode, "Missing TypeSignature with 'where T : allows ref struct' in IRefStructProcessor`1.xml");
284+
285+
var refStructHandlerDoc = new XmlDocument();
286+
refStructHandlerDoc.Load(refStructHandlerPath);
287+
var refStructHandlerNode = refStructHandlerDoc.SelectSingleNode("//Members/Member/TypeParameters/TypeParameter/Constraints/ParameterAttribute[text()='AllowsRefStruct']");
288+
Assert.IsNotNull(refStructHandlerNode, "Missing <ParameterAttribute>AllowsRefStruct</ParameterAttribute> in RefStructHandler.xml");
289+
var refStructHandlerMemberSignatureNode = refStructHandlerDoc.SelectSingleNode("//Members/Member/MemberSignature[@Language='C#' and contains(@Value, 'where T : allows ref struct')]");
290+
Assert.IsNotNull(refStructHandlerMemberSignatureNode, "Missing MemberSignature with 'where T : allows ref struct' in RefStructHandler.xml");
291+
}
256292
}
257293
}

mdoc/mdoc.Test/SampleClasses/TestUpdate/frameworks.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@
33
<Framework Name="net-8.0" Source="net-8.0">
44
<assemblySearchPath>dependencies\net-8.0</assemblySearchPath>
55
</Framework>
6+
<Framework Name="net-9.0" Source="net-9.0">
7+
<assemblySearchPath>dependencies\net-9.0</assemblySearchPath>
8+
</Framework>
69
</Frameworks>
Binary file not shown.

mdoc/mdoc.Test/mdoc.Test.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@
7272
<Link>SampleClasses\TestUpdate\net-8.0\TestLibrary.dll</Link>
7373
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7474
</Content>
75+
<Content Include="SampleClasses\TestUpdate\net-9.0\RefStructDemo.dll">
76+
<Link>SampleClasses\TestUpdate\net-9.0\RefStructDemo.dll</Link>
77+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
78+
</Content>
7579
<Content Include="SampleClasses\TestUpdate\frameworks.xml">
7680
<Link>SampleClasses\TestUpdate\frameworks.xml</Link>
7781
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

0 commit comments

Comments
 (0)