public void TestTCXDeserialization() { XmlDocument testDocument = new XmlDocument(); XmlNode readNode; XmlNode database; Workout placeholderWorkout = new Workout("Test", PluginMain.GetApplication().Logbook.ActivityCategories[0]); RepeatStep placeholderStep = new RepeatStep(placeholderWorkout); // Setup document testDocument.AppendChild(testDocument.CreateXmlDeclaration("1.0", "UTF-8", "no")); database = testDocument.CreateNode(XmlNodeType.Element, "TrainingCenterDatabase", null); testDocument.AppendChild(database); XmlAttribute attribute = testDocument.CreateAttribute("xmlns", "xsi", GarminFitnessPlugin.Constants.xmlns); attribute.Value = "http://www.w3.org/2001/XMLSchema-instance"; database.Attributes.Append(attribute); readNode = testDocument.CreateElement("TestNode"); database.AppendChild(readNode); // Repeat count readNode.InnerXml = repeatCountDurationResult1; RepeatCountDuration countDuration = new RepeatCountDuration(placeholderStep); countDuration.Deserialize(readNode.FirstChild); Assert.AreEqual(4, countDuration.RepetitionCount, "Invalid number of repetitions deserialized"); readNode.InnerXml = repeatCountDurationResult2; countDuration = new RepeatCountDuration(placeholderStep); countDuration.Deserialize(readNode.FirstChild); Assert.AreEqual(10, countDuration.RepetitionCount, "Invalid number of repetitions deserialized"); // All other repeat durtions should not deserialize from TCX try { RepeatUntilCaloriesDuration caloriesDuration = new RepeatUntilCaloriesDuration(placeholderStep); caloriesDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until calories should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilDistanceDuration distanceDuration = new RepeatUntilDistanceDuration(placeholderStep); distanceDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until distance should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilHeartRateAboveDuration hrAboveDuration = new RepeatUntilHeartRateAboveDuration(placeholderStep); hrAboveDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until HRAbove should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilHeartRateBelowDuration hrBelowDuration = new RepeatUntilHeartRateBelowDuration(placeholderStep); hrBelowDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until HRBelow should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilPowerAboveDuration powerAboveDuration = new RepeatUntilPowerAboveDuration(placeholderStep); powerAboveDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until PowerAbove should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilPowerBelowDuration powerBelowDuration = new RepeatUntilPowerBelowDuration(placeholderStep); powerBelowDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until PowerBelow should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilTimeDuration timeDuration = new RepeatUntilTimeDuration(placeholderStep); timeDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until time should not deserialize"); } catch (NotSupportedException) { } try { RepeatUntilCaloriesDuration caloriesDuration = new RepeatUntilCaloriesDuration(placeholderStep); caloriesDuration.Deserialize(readNode.FirstChild); Assert.Fail("Repeat until calories should not deserialize"); } catch (NotSupportedException) { } }