// Copyright Keysight Technologies 2012-2019 // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at http://mozilla.org/MPL/2.0/. using System; using System.Collections.Generic; using System.Xml.Linq; namespace OpenTap.Plugins { /// Serializer implementation for TestPlans. internal class TestPlanSerializer : ObjectSerializer { /// The order of this serializer. public override double Order { get { return 1; } } readonly HashSet currentNode = new HashSet(); internal TestPlan Plan { get; private set; } readonly ITypeData testPlanType = TypeData.FromType(typeof(TestPlan)); /// /// Deserializes a test plan from XML. /// /// /// /// /// public override bool Deserialize(XElement element, ITypeData _t, Action setter) { if (_t.DirectInheritsFrom(testPlanType) == false) return false; var prevPlan = Plan; Plan = (TestPlan)_t.CreateInstance(); Plan.Path = Serializer.ReadPath; try { return TryDeserializeObject(element, _t, setter, Plan); } finally { Plan = prevPlan; } } /// /// Serializes an object to XML. /// /// /// /// /// public override bool Serialize(XElement element, object obj, ITypeData expectedType) { if (obj is TestPlan == false || currentNode.Contains(element)) return false; var prevPlan = Plan; Plan = (TestPlan)obj; currentNode.Add(element); try { return Serializer.Serialize(element, obj); } finally { Plan = prevPlan; currentNode.Remove(element); } } } }