Skip to content

Commit b260f6c

Browse files
authored
Namespace Member XML Support (#933)
1 parent 305404e commit b260f6c

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

src/generators/Silk.NET.SilkTouch.Scraper/XmlVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private IEnumerable<Symbol> VisitNamespace(XmlElement @namespace)
5555
(
5656
new IdentifierSymbol(@namespace.Attributes?["name"]?.Value ?? throw new InvalidOperationException()),
5757
@namespace.ChildNodes.Cast<XmlNode>()
58-
.Select(Visit)
58+
.SelectMany(Visit)
5959
.Select
6060
(
6161
x =>

tests/Silk.NET.SilkTouch.Scraper.Tests/NamespaceScrapingTests.cs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Silk.NET.SilkTouch.Scraper.Tests;
1010
public class NamespaceScrapingTests
1111
{
1212
[Fact]
13-
public void NamespaceXMLGeneratesNamespaceSymbol()
13+
public void NamespaceSymbol()
1414
{
1515
var doc = new XmlDocument();
1616
doc.LoadXml(@"<bindings>
@@ -25,4 +25,49 @@ public void NamespaceXMLGeneratesNamespaceSymbol()
2525
var @namespace = Assert.IsType<NamespaceSymbol>(symbol);
2626
Assert.Equal(ClangScraper.LibraryNamespacePlaceholder, @namespace.Identifier.Value);
2727
}
28+
29+
[Fact]
30+
public void NamespaceMember()
31+
{
32+
var doc = new XmlDocument();
33+
doc.LoadXml(@"<bindings>
34+
<namespace name=""" + ClangScraper.LibraryNamespacePlaceholder + @""">
35+
<struct name=""Test"">
36+
</struct>
37+
</namespace>
38+
</bindings>
39+
");
40+
41+
var symbols = new ClangScraper().ScrapeXML(doc);
42+
43+
var symbol = Assert.Single(symbols);
44+
var @namespace = Assert.IsType<NamespaceSymbol>(symbol);
45+
var structSymbol = Assert.Single(@namespace.Types);
46+
var @struct = Assert.IsType<StructSymbol>(structSymbol);
47+
Assert.Equal("Test", @struct.Identifier.Value);
48+
}
49+
50+
51+
[Fact]
52+
public void MultipleNamespaceMembers()
53+
{
54+
var doc = new XmlDocument();
55+
doc.LoadXml(@"<bindings>
56+
<namespace name=""" + ClangScraper.LibraryNamespacePlaceholder + @""">
57+
<struct name=""Test1"">
58+
</struct>
59+
<struct name=""Test2"">
60+
</struct>
61+
</namespace>
62+
</bindings>
63+
");
64+
65+
var symbols = new ClangScraper().ScrapeXML(doc);
66+
67+
var symbol = Assert.Single(symbols);
68+
var @namespace = Assert.IsType<NamespaceSymbol>(symbol);
69+
Assert.Collection(@namespace.Types,
70+
(s) => Assert.Equal("Test1", Assert.IsType<StructSymbol>(s).Identifier.Value),
71+
(s) => Assert.Equal("Test2", Assert.IsType<StructSymbol>(s).Identifier.Value));
72+
}
2873
}

0 commit comments

Comments
 (0)