Skip to content
Snippets Groups Projects
Commit 06b9ecef authored by Jakub Konvička's avatar Jakub Konvička
Browse files

feat: Add tests

parent aa41d003
1 merge request!15merge: develop into main
Pipeline #884 passed with stages
in 4 minutes and 41 seconds
......@@ -2,9 +2,44 @@
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">/usr/local/share/dotnet/sdk/7.0.404/MSBuild.dll</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">1114112</s:Int64>
<s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">/Users/jakubkonvicka/Library/Caches/JetBrains/Rider2023.3/resharper-host/temp/Rider/vAny/CoverageData/_CodeToXMI.401400098/Snapshot/snapshot.utdcvr</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=ea6b864b_002D2fca_002D4192_002D9701_002D8b0ec6a1f0b5/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="ClassDiagramTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=1172169d_002D8cd5_002D4c97_002D94b5_002D78b35c14dd26/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=33cb20c1_002D7095_002D4c53_002Daff8_002Dbc67f6869c16/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=447f0ad2_002D3982_002D4c13_002D8562_002D18748dcc27d7/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #4" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=89ec26b2_002Dc3eb_002D4d79_002D97c5_002D0b5722ace381/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #3" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=9cd5065d_002Da7a4_002D4689_002Db1fe_002Df606c9e9e91d/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisions" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisions&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=d5334459_002D70ab_002D4733_002D874a_002D3629f29a0297/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="BuildActivityDiagramWithDecisionsAndActions #5" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ClassDiagramTests&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=ea6b864b_002D2fca_002D4192_002D9701_002D8b0ec6a1f0b5/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="ClassDiagramTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ClassDiagramTests&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildEmptyActivityDiagram&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithNActivity&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
......
......@@ -14,13 +14,14 @@ namespace DiagramBuilder.Activity.Diagram
private List<Dictionary<BranchType, XmiElement>> _lastAddedEdge { get; set; } = new();
private List<Dictionary<BranchType, XmiElement>> _loopElements { get; set; } = new();
private List<Dictionary<BranchType, XmiElement>> _lastAddedNode { get; set; } = new();
IDiagramBuilder _diagramBuilder { get; set; }
private List<BranchType> _lastBranchTypeForDecision { get; set; } = new();
private long _actualDecisionId { get; set; } = 0;
public DecisionBuilder(string? name, XmiActivityDiagramUmlBuilder xmiActivityDiagramUmlBuilder, XmiElement trueBranchEdge, XmiElement lastAddedNode, IDiagramBuilder _diagramBuilder)
public DecisionBuilder(string? name, XmiActivityDiagramUmlBuilder xmiActivityDiagramUmlBuilder,
XmiElement trueBranchEdge, XmiElement lastAddedNode, IDiagramBuilder _diagramBuilder)
{
this._diagramBuilder = _diagramBuilder;
_xmiActivityDiagramUmlBuilder = xmiActivityDiagramUmlBuilder;
......@@ -29,8 +30,8 @@ namespace DiagramBuilder.Activity.Diagram
_lastBranchTypeForDecision.Add(BranchType.True);
_lastAddedEdge[^1].Add(BranchType.True, trueBranchEdge);
_lastAddedEdge[^1].Add(BranchType.True, lastAddedNode);
_lastAddedEdge[^1].Add(BranchType.False, lastAddedNode);
_lastAddedNode[^1].Add(BranchType.True, lastAddedNode);
_lastAddedNode[^1].Add(BranchType.False, lastAddedNode);
}
public string? BuildDiagram()
......@@ -47,35 +48,39 @@ namespace DiagramBuilder.Activity.Diagram
{
node = _xmiActivityDiagramUmlBuilder.AddAction(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode[^1][type]);
_lastAddedEdge[^1].Add(type, _xmiActivityDiagramUmlBuilder.LatestEdge);
}
else
{
node = _xmiActivityDiagramUmlBuilder.AddAction(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, new List<XmiElement> { _lastAddedEdge[^1][type] }, null, _lastAddedNode[^1][type]);
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedEdge[^1][type] }, null, _lastAddedNode[^1][type]);
}
_lastAddedNode[^1][type] = node;
return this;
}
public IDecisionBuilder AddMerge(string? name)
public (IDecisionBuilder, IDiagramBuilder) AddMerge(string? name)
{
var mergeNode = _xmiActivityDiagramUmlBuilder.AddMerge(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
_lastAddedNode[^1][BranchType.True], _lastAddedNode[^1][BranchType.False]);
_lastAddedEdge.Remove(_lastAddedEdge[^1]);
_lastAddedNode.Remove(_lastAddedNode[^1]);
_lastAddedEdge.Remove(_lastAddedEdge.Last());
_lastAddedNode.Remove(_lastAddedNode.Last());
this._diagramBuilder.LastActivity = mergeNode;
if (_lastAddedNode.Count == 0)
return this;
_lastAddedNode[^1][_lastBranchTypeForDecision[^1]] = mergeNode;
_lastBranchTypeForDecision.RemoveAt(_lastBranchTypeForDecision.Count-1);
return this;
{
return (null, this._diagramBuilder);
}
_lastAddedNode.Last()[_lastBranchTypeForDecision.Last()] = mergeNode;
_lastBranchTypeForDecision.RemoveAt(_lastBranchTypeForDecision.Count - 1);
return (this, null);
}
public IDecisionBuilder AddDecision(string name, string trueCondition, string falseCondition, BranchType type)
......@@ -84,17 +89,31 @@ namespace DiagramBuilder.Activity.Diagram
_lastAddedEdge.Add(new Dictionary<BranchType, XmiElement>());
_lastAddedNode.Add(new Dictionary<BranchType, XmiElement>());
XmiElement node;
if (!_lastAddedNode[_lastAddedNode.Count-2].TryGetValue(type, out _))
if (_lastAddedNode.Count < 2)
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode[_lastAddedNode.Count-2][type]);
_lastAddedEdge[^1][type] = _xmiActivityDiagramUmlBuilder.LatestEdge;
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { this._xmiActivityDiagramUmlBuilder.LatestEdge }, null,
this._diagramBuilder.LastActivity);
}
else
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedNode[_lastAddedNode.Count-2][type] }, null, _lastAddedNode[_lastAddedNode.Count-2][type]);
if (!_lastAddedNode[_lastAddedNode.Count - 2].TryGetValue(type, out _))
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null,
_lastAddedNode[_lastAddedNode.Count - 2][type]);
_lastAddedEdge[^1][type] = _xmiActivityDiagramUmlBuilder.LatestEdge;
}
else
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedNode[_lastAddedNode.Count - 2][type] }, null,
_lastAddedNode[_lastAddedNode.Count - 2][type]);
}
}
node.Type = XmiType.UmlDecisionNode;
......@@ -104,8 +123,7 @@ namespace DiagramBuilder.Activity.Diagram
}
public IDecisionBuilder AddLoop(string name, string condition, BranchType type)
{
{
if (!_lastAddedEdge[^1].TryGetValue(type, out var edge))
{
_lastAddedNode[^1][type] = _xmiActivityDiagramUmlBuilder.AddDecision(
......@@ -115,10 +133,11 @@ namespace DiagramBuilder.Activity.Diagram
else
{
_lastAddedNode[^1][type] = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, new List<XmiElement> { _lastAddedEdge[^1][type] }, null, _lastAddedNode[^1][type]);
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedEdge[^1][type] }, null, _lastAddedNode[^1][type]);
}
_loopElements.Add(new Dictionary<BranchType, XmiElement>());
_loopElements[^1].Add(type, _lastAddedNode[^1][type]);
return this;
......@@ -126,7 +145,8 @@ namespace DiagramBuilder.Activity.Diagram
public IDecisionBuilder CloseLoop(string name, BranchType type)
{
_xmiActivityDiagramUmlBuilder.AddDirectedEdge(_xmiActivityDiagramUmlBuilder.ActivityDiagram, _lastAddedNode[^1][type],
_xmiActivityDiagramUmlBuilder.AddDirectedEdge(_xmiActivityDiagramUmlBuilder.ActivityDiagram,
_lastAddedNode[^1][type],
_loopElements[^1][type]);
_lastAddedNode[^1][type] = _loopElements[^1][type];
_loopElements.Remove(_loopElements[^1]);
......@@ -139,4 +159,4 @@ namespace DiagramBuilder.Activity.Diagram
return this._diagramBuilder;
}
}
}
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ namespace DiagramBuilder.Activity.Interface;
public interface IDecisionBuilder
{
public IDecisionBuilder AddAction(string name, BranchType type);
public IDecisionBuilder AddMerge(string? name);
public (IDecisionBuilder, IDiagramBuilder) AddMerge(string? name);
public IDecisionBuilder AddDecision(string name, string trueCondition, string falseCondition, BranchType type);
public IDecisionBuilder AddLoop(string name, string condition, BranchType type);
public IDecisionBuilder CloseLoop(string name, BranchType type);
......
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Schema;
using DiagramBuilder.Activity.Diagram.Enum;
using DiagramBuilder.Activity.Interface;
using DiagramBuilder.ConcreteCreator;
namespace UnitTest;
public class ActivityDiagramTests
{
ActivityDiagramBuilderCreatorFactory ActivityDiagramBuilderCreatorFactory { get; set; }
IDiagramBuilder ActivityDiagramBuilder { get; set; }
private string generatedFileName { get; set; } = string.Empty;
static List<(string, string)> _errors = new List<(string, string)>();
[SetUp]
public void Setup()
{
RemoveGeneratedFile();
ActivityDiagramBuilderCreatorFactory = new ActivityDiagramBuilderCreatorFactory();
ActivityDiagramBuilder = ActivityDiagramBuilderCreatorFactory.FactoryMethod("Test");
generatedFileName = $"ActivityDiagram-{DateTime.UtcNow.ToString("yyyy-M-d_hh-mm-ss")}.xml";
}
private void RemoveGeneratedFile()
{
if (File.Exists(generatedFileName))
{
File.Delete(generatedFileName);
}
}
[Test]
public void BuildEmptyActivityDiagram()
{
string xmi = ActivityDiagramBuilder.BuildDiagram();
AssertCommonAssertions(xmi);
RemoveGeneratedFile();
}
[Test]
[TestCase(0)]
[TestCase(1)]
[TestCase(10)]
[TestCase(100)]
public void BuildActivityDiagramWithNActivity(int numberOfActivities)
{
for (int i = 0; i < numberOfActivities; i++)
{
ActivityDiagramBuilder = ActivityDiagramBuilder.AddAction($"Activity{i}");
}
string xmi = ActivityDiagramBuilder.BuildDiagram();
AssertCommonAssertions(xmi);
//test if number of activitises added to xmi <node name="Activity
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmi);
XmlNodeList nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Activity')]");
Assert.IsTrue(nodes.Count == numberOfActivities,
$"Number of activities added to XMI should be {numberOfActivities}");
RemoveGeneratedFile();
}
[Test]
[TestCase(0)]
[TestCase(1)]
[TestCase(10)]
[TestCase(100)]
public void BuildActivityDiagramWithDecisions(int decisionCount)
{
if (decisionCount > 0)
{
IDecisionBuilder decisionBuilder;
decisionBuilder = ActivityDiagramBuilder.AddDecision($"Decision{0}", "Yes", "No");
for (int i = 1; i < decisionCount; i++)
{
_ = decisionBuilder.AddDecision($"Decision{i}T", "Yes", "No", BranchType.True);
decisionBuilder = decisionBuilder.AddDecision($"Decision{i}F", "Yes", "No", BranchType.False);
}
string xmi = ActivityDiagramBuilder.BuildDiagram();
AssertCommonAssertions(xmi);
//test if number of decisions added to xmi <node name="Decision
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmi);
XmlNodeList nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Decision')]");
Assert.IsTrue(nodes.Count == decisionCount * 2 - 1,
$"Number of decisions added to XMI should be {decisionCount * 2 - 1}");
RemoveGeneratedFile();
}
}
[Test]
[TestCase(2, 1, true)]
[TestCase(10, 10, false)]
[TestCase(10, 10, true)]
[TestCase(0, 0, false)]
[TestCase(0, 0, true)]
[TestCase(0, 1, false)]
[TestCase(0, 1, true)]
[TestCase(1, 1, false)]
[TestCase(10, 10, false)]
[TestCase(10, 10, true)]
[TestCase(10, 0, false)]
[TestCase(10, 0, true)]
[TestCase(0, 10, false)]
[TestCase(0, 10, true)]
[TestCase(100, 100, false)]
[TestCase(100, 100, true)]
[TestCase(100, 0, false)]
[TestCase(100, 0, true)]
[TestCase(0, 100, false)]
[TestCase(0, 100, true)]
public void BuildActivityDiagramWithDecisionsAndActions(int decisionCount, int actionsCount, bool addMerge)
{
if (decisionCount > 0)
{
IDecisionBuilder decisionBuilder;
IDiagramBuilder diagramBuilder = null;
decisionBuilder = ActivityDiagramBuilder.AddDecision($"Decision{0}", "Yes", "No");
for (int i = 0; i < decisionCount; i++)
{
//add actions
for (int j = 0; j < actionsCount; j++)
{
if (decisionBuilder != null)
{
var branchType = j % 2 == 0 ? BranchType.True : BranchType.False;
decisionBuilder = decisionBuilder.AddAction($"Activity{i}T{j}", branchType);
}
else if(diagramBuilder != null)
{
diagramBuilder = diagramBuilder.AddAction($"Activity{i}B{j}");
}
}
if (addMerge && decisionBuilder != null)
{
(decisionBuilder, diagramBuilder) = decisionBuilder.AddMerge($"Merge{i}");
}
if (i != 0)
{
//add decision
if (decisionBuilder != null)
{
var branchType = i % 2 == 0 ? BranchType.True : BranchType.False;
decisionBuilder = decisionBuilder.AddDecision($"Decision{i}T", "Yes", "No", branchType);
}
else if (diagramBuilder != null)
{
decisionBuilder = diagramBuilder.AddDecision($"Decision{i}B", "Yes", "No");
}
}
}
string xmi = ActivityDiagramBuilder.BuildDiagram();
AssertCommonAssertions(xmi);
//test if number of decisions added to xmi <node name="Decision
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmi);
XmlNodeList nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Decision')]");
Assert.IsTrue(nodes.Count == decisionCount, $"Number of decisions added to XMI should be {decisionCount}");
//test if number of activitises added to xmi <node name="Activity
nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Activity')]");
Assert.IsTrue(nodes.Count == decisionCount * actionsCount,
$"Number of activities added to XMI should be {decisionCount * actionsCount}");
if (addMerge)
{
nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Merge')]");
Assert.IsTrue(nodes.Count == decisionCount-1, $"Number of merges added to XMI should be {decisionCount}");
}
RemoveGeneratedFile();
}
}
[Test]
public void BuildLoops()
{
IDecisionBuilder decisionBuilder;
IDiagramBuilder diagramBuilder = null;
decisionBuilder = ActivityDiagramBuilder.AddDecision($"Decision{0}", "Yes", "No");
for (int i = 0; i < 10; i++)
{
//add actions
for (int j = 0; j < 10; j++)
{
if (decisionBuilder != null)
{
var branchType = j % 2 == 0 ? BranchType.True : BranchType.False;
decisionBuilder = decisionBuilder.AddAction($"Activity{i}T{j}", branchType);
}
else if(diagramBuilder != null)
{
diagramBuilder = diagramBuilder.AddAction($"Activity{i}B{j}");
}
}
if (decisionBuilder != null)
{
decisionBuilder = decisionBuilder.AddLoop($"Loop{i}", "Yes", BranchType.True);
}
else if (diagramBuilder != null)
{
diagramBuilder = diagramBuilder.AddLoop($"Loop{i}", "Yes");
}
if (i != 0)
{
//add decision
if (decisionBuilder != null)
{
var branchType = i % 2 == 0 ? BranchType.True : BranchType.False;
decisionBuilder = decisionBuilder.AddDecision($"Decision{i}T", "Yes", "No", branchType);
}
else if (diagramBuilder != null)
{
decisionBuilder = diagramBuilder.AddDecision($"Decision{i}B", "Yes", "No");
}
}
}
string xmi = ActivityDiagramBuilder.BuildDiagram();
AssertCommonAssertions(xmi);
//test if number of decisions added to xmi <node name="Decision
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmi);
XmlNodeList nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Decision')]");
Assert.IsTrue(nodes.Count == 10, $"Number of decisions added to XMI should be 10");
//test if number of activitises added to xmi <node name="Activity
nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Activity')]");
Assert.IsTrue(nodes.Count == 100, $"Number of activities added to XMI should be 100");
nodes = xmlDoc.SelectNodes("//node[contains(@name, 'Loop')]");
Assert.IsTrue(nodes.Count == 10, $"Number of loops added to XMI should be 10");
}
void ValidateSchema()
{
// Path to your XSD file
string xsdFilePath = "../../../Schema/XMI.xsd";
// Create XmlReaderSettings
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
// Load XSD file and set it as the schema
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, xsdFilePath);
settings.Schemas = schemas;
// Set the validation event handler
settings.ValidationEventHandler += ValidationCallback;
// Create XmlReader with the XMI file and settings
using (XmlReader reader = XmlReader.Create(generatedFileName, settings))
{
// Read through the XML document
reader.Read();
}
// Assert that there are no errors
Assert.IsTrue(_errors.Count == 0, "There should be no errors in the XMI file");
foreach ((string severity, string message) in _errors)
{
Console.WriteLine($"{severity}: {message}");
}
}
static void ValidationCallback(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Error || e.Severity == XmlSeverityType.Warning)
{
_errors.Add((e.Severity.ToString(), e.Message));
}
}
private void AssertCommonAssertions(string xmi)
{
Assert.IsFalse(string.IsNullOrEmpty(xmi), "XMI should not be null or empty");
Assert.IsTrue(xmi.Contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"), "XMI should contain the XML header");
// Add more assertions based on the expected structure of your XMI
if (!string.IsNullOrEmpty(generatedFileName))
{
File.WriteAllText(generatedFileName, xmi);
ValidateSchema();
RemoveGeneratedFile();
}
}
}
\ No newline at end of file
......@@ -445,7 +445,7 @@ public class ClassDiagramTests
void ValidateSchema()
void ValidateSchema()
{
// Path to your XSD file
string xsdFilePath = "../../../Schema/XMI.xsd";
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment