using System; using System.Xml.Linq; namespace OpenTap.Addin.Reader { public class TestStepListReader : IObjectReader { static XName testStepName = "TestStep"; static XName SequenceName = "SequenceName"; static XName varName = "Variable"; static XName paramName = "Parameters"; static XName DebugIds = "DebugIds"; public override object ReadObject(Type type, XElement element, Action postAction) { if (type != typeof(TestStepList)) return false; var steps = new TestStepList(); var sequenceNameAttr = element.Attribute(SequenceName); steps.SequenceName = sequenceNameAttr?.Value ?? string.Empty; foreach (var subnode in element.Elements()) { if (subnode.Name == varName) { TestVariable v = (TestVariable)DefaultObjectReader.ReadObject(typeof(TestVariable), subnode, postAction); if (v != null) steps.Variables.Add(v); } else if (subnode.Name == paramName) { TestVariable v = (TestVariable)DefaultObjectReader.ReadObject(typeof(TestVariable), subnode, postAction); if (v != null) steps.Parameters.Add(v); } else if (subnode.Name == DebugIds) { Guid id = (Guid)DefaultObjectReader.ReadObject(typeof(Guid), subnode, postAction); if (id != Guid.Empty) steps.DebugIds.Add(id); } else { ITestStep result = (ITestStep)DefaultObjectReader.ReadObject(typeof(ITestStep), subnode, postAction); if (result != null) steps.Add(result); } } if (postAction != null) postAction(steps); return steps; } } }