in src/TestFramework/Core/ConfigurationReader.cs [496:552]
private void MergeXmlDocument(XmlDocument docBase, XmlDocument doc)
{
XmlNode root = docBase.DocumentElement;
//Create an XmlNamespaceManager for resolving namespaces.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(docBase.NameTable);
nsmgr.AddNamespace("tc", DefaultNamespace);
XmlNode baseNode = root.SelectSingleNode("tc:TestRun", nsmgr);
XmlNode node = doc.DocumentElement.SelectSingleNode("tc:TestRun", nsmgr);
if (node != null)
{
if (baseNode == null)
{
root.InsertBefore(
docBase.ImportNode(node, true).CloneNode(true),
root.SelectSingleNode("tc:Properties", nsmgr));
}
else
{
root.ReplaceChild(docBase.ImportNode(node, true).CloneNode(true), baseNode);
}
}
baseNode = root.SelectSingleNode("tc:Properties", nsmgr);
node = doc.DocumentElement.SelectSingleNode("tc:Properties", nsmgr);
MergePropertyAndGroup(baseNode, docBase.ImportNode(node, true), "name");
node = doc.DocumentElement.SelectSingleNode("tc:Adapters", nsmgr);
if (node != null)
{
baseNode = root.SelectSingleNode("tc:Adapters", nsmgr);
AppendOrOverrideChild(baseNode, docBase.ImportNode(node, true), "name");
}
node = doc.DocumentElement.SelectSingleNode("tc:TestLog", nsmgr);
if (node != null)
{
baseNode = root.SelectSingleNode("tc:TestLog", nsmgr);
baseNode.Attributes["defaultprofile"].Value =
node.Attributes["defaultprofile"].Value;
}
node = doc.DocumentElement.SelectSingleNode("tc:TestLog/tc:Sinks", nsmgr);
if (node != null)
{
baseNode = root.SelectSingleNode("tc:TestLog/tc:Sinks", nsmgr);
AppendOrOverrideChild(baseNode, docBase.ImportNode(node, true), "id");
}
node = doc.DocumentElement.SelectSingleNode("tc:TestLog/tc:Profiles", nsmgr);
if (node != null)
{
baseNode = root.SelectSingleNode("tc:TestLog/tc:Profiles", nsmgr);
AppendOrOverrideChild(baseNode, docBase.ImportNode(node, true), "name");
}
}