Skip to content

Commit c1c260f

Browse files
committed
Added Support for Ranorex TEstSuites/ModuleGRoups
1 parent 85b0358 commit c1c260f

File tree

4 files changed

+74
-12
lines changed

4 files changed

+74
-12
lines changed
Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Xml;
4+
35
using MiKoSolutions.SemanticParsers.Xml.Yaml;
46

57
namespace MiKoSolutions.SemanticParsers.Xml.Flavors
68
{
79
public sealed class XmlFlavorForRanorexRepository : XmlFlavor
810
{
11+
private const string SpecialElement = "basepath";
12+
13+
private static readonly HashSet<string> TerminalNodeNames = new HashSet<string>
14+
{
15+
SpecialElement,
16+
"codegen",
17+
"icon",
18+
"item",
19+
"var",
20+
};
21+
922
public override bool ParseAttributesEnabled => false;
1023

1124
public override bool Supports(string filePath) => filePath.EndsWith(".rxrep", StringComparison.OrdinalIgnoreCase);
@@ -16,27 +29,24 @@ public override string GetName(XmlReader reader)
1629
{
1730
if (reader.NodeType == XmlNodeType.Element)
1831
{
19-
return reader.GetAttribute("name") ?? reader.LocalName;
32+
return reader.GetAttribute("name") ?? reader.GetAttribute("classname") ?? reader.LocalName;
2033
}
2134

2235
return base.GetName(reader);
2336
}
2437

2538
public override string GetType(XmlReader reader) => reader.NodeType == XmlNodeType.Element ? reader.LocalName : base.GetType(reader);
2639

27-
protected override bool ShallBeTerminalNode(ContainerOrTerminalNode node)
40+
public override ContainerOrTerminalNode FinalAdjustAfterParsingComplete(ContainerOrTerminalNode node)
2841
{
29-
switch (node?.Type)
42+
if (node is Container c && c.Children.Count == 1 && c.Type == SpecialElement)
3043
{
31-
case "item":
32-
case "icon":
33-
case "basepath":
34-
case "var":
35-
return true;
36-
37-
default:
38-
return false;
44+
node.Name = c.Children[0]?.Content?.Trim();
3945
}
46+
47+
return base.FinalAdjustAfterParsingComplete(node);
4048
}
49+
50+
protected override bool ShallBeTerminalNode(ContainerOrTerminalNode node) => TerminalNodeNames.Contains(node?.Type);
4151
}
4252
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Xml;
4+
5+
using MiKoSolutions.SemanticParsers.Xml.Yaml;
6+
7+
namespace MiKoSolutions.SemanticParsers.Xml.Flavors
8+
{
9+
public sealed class XmlFlavorForRanorexTestSuite : XmlFlavor
10+
{
11+
private const string SpecialElement = "reference";
12+
13+
private static readonly HashSet<string> TerminalNodeNames = new HashSet<string>
14+
{
15+
SpecialElement,
16+
"testmodule",
17+
};
18+
19+
public override bool ParseAttributesEnabled => false;
20+
21+
public override bool Supports(string filePath) => filePath.EndsWith(".rxtst", StringComparison.OrdinalIgnoreCase) // test suite
22+
|| filePath.EndsWith(".rxtmg", StringComparison.OrdinalIgnoreCase); // module group
23+
24+
public override bool Supports(DocumentInfo info) => string.Equals(info.RootElement, "testsuitedoc", StringComparison.OrdinalIgnoreCase)
25+
|| string.Equals(info.RootElement, "modulegroupdoc", StringComparison.OrdinalIgnoreCase);
26+
27+
public override string GetName(XmlReader reader)
28+
{
29+
if (reader.NodeType == XmlNodeType.Element)
30+
{
31+
return reader.GetAttribute("name") ?? reader.LocalName;
32+
}
33+
34+
return base.GetName(reader);
35+
}
36+
37+
public override string GetType(XmlReader reader) => reader.NodeType == XmlNodeType.Element ? reader.LocalName : base.GetType(reader);
38+
39+
public override ContainerOrTerminalNode FinalAdjustAfterParsingComplete(ContainerOrTerminalNode node)
40+
{
41+
if (node is Container c && c.Children.Count == 1 && c.Type == SpecialElement)
42+
{
43+
node.Name = c.Children[0]?.Content?.Trim();
44+
}
45+
46+
return base.FinalAdjustAfterParsingComplete(node);
47+
}
48+
49+
protected override bool ShallBeTerminalNode(ContainerOrTerminalNode node) => TerminalNodeNames.Contains(node?.Type);
50+
}
51+
}

Parser/Parser.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
<Compile Include="Flavors\XmlFlavorForNuSpec.cs" />
7676
<Compile Include="Flavors\XmlFlavorForPackagesConfig.cs" />
7777
<Compile Include="Flavors\XmlFlavorForRanorexRepository.cs" />
78+
<Compile Include="Flavors\XmlFlavorForRanorexTestSuite.cs" />
7879
<Compile Include="Flavors\XmlFlavorForRuleSets.cs" />
7980
<Compile Include="Flavors\XmlFlavorForSettings.cs" />
8081
<Compile Include="Flavors\XmlFlavorForVisualBuild.cs" />

Parser/Yaml/ContainerOrTerminalNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace MiKoSolutions.SemanticParsers.Xml.Yaml
66
{
7-
[DebuggerDisplay("Type={Type}, Name={Name}")]
7+
[DebuggerDisplay("{GetType().Name} Type={Type}, Name={Name}")]
88
public abstract class ContainerOrTerminalNode
99
{
1010
[YamlIgnore]

0 commit comments

Comments
 (0)