public void TestTCXSerialization() { XmlDocument testDocument = new XmlDocument(); XmlNode database; XmlAttribute attribute; 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); attribute = testDocument.CreateAttribute("xmlns", "xsi", GarminFitnessPlugin.Constants.xmlns); attribute.Value = "http://www.w3.org/2001/XMLSchema-instance"; database.Attributes.Append(attribute); // Repeat count RepeatCountDuration countDuration = new RepeatCountDuration(placeholderStep); placeholderStep.Duration = countDuration; countDuration.RepetitionCount = 4; countDuration.Serialize(database, "RepeatCountDuration1", testDocument); int durationPosition1 = testDocument.InnerXml.IndexOf(repeatCountDurationResult1); Assert.GreaterOrEqual(durationPosition1, 0, "Invalid repeat count duration serialization"); countDuration.RepetitionCount = 10; countDuration.Serialize(database, "RepeatCountDuration2", testDocument); int durationPosition2 = testDocument.InnerXml.IndexOf(repeatCountDurationResult2); Assert.GreaterOrEqual(durationPosition2, 0, "Invalid repeat count duration serialization"); Assert.Greater(durationPosition2, durationPosition1, "Repeat count durations serialization don't differ"); // All other repeat durtions should not serialize in TCX try { RepeatUntilCaloriesDuration caloriesDuration = new RepeatUntilCaloriesDuration(placeholderStep); caloriesDuration.Serialize(database, "RepeatUntilCaloriesDuration", testDocument); Assert.Fail("Repeat until calories should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilDistanceDuration distanceDuration = new RepeatUntilDistanceDuration(placeholderStep); distanceDuration.Serialize(database, "RepeatUntilDistanceDuration", testDocument); Assert.Fail("Repeat until distance should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilHeartRateAboveDuration hrAboveDuration = new RepeatUntilHeartRateAboveDuration(placeholderStep); hrAboveDuration.Serialize(database, "RepeatUntilHRAboveDuration", testDocument); Assert.Fail("Repeat until HRAbove should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilHeartRateBelowDuration hrBelowDuration = new RepeatUntilHeartRateBelowDuration(placeholderStep); hrBelowDuration.Serialize(database, "RepeatUntilHRBelowDuration", testDocument); Assert.Fail("Repeat until HRBelow should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilPowerAboveDuration powerAboveDuration = new RepeatUntilPowerAboveDuration(placeholderStep); powerAboveDuration.Serialize(database, "RepeatUntilPowerAboveDuration", testDocument); Assert.Fail("Repeat until PowerAbove should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilPowerBelowDuration powerBelowDuration = new RepeatUntilPowerBelowDuration(placeholderStep); powerBelowDuration.Serialize(database, "RepeatUntilPowerBelowDuration", testDocument); Assert.Fail("Repeat until PowerBelow should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilTimeDuration timeDuration = new RepeatUntilTimeDuration(placeholderStep); timeDuration.Serialize(database, "RepeatUntilTimeDuration", testDocument); Assert.Fail("Repeat until time should not serialize"); } catch (NotSupportedException) { } try { RepeatUntilCaloriesDuration caloriesDuration = new RepeatUntilCaloriesDuration(placeholderStep); caloriesDuration.Serialize(database, "RepeatUntilCaloriesDuration", testDocument); Assert.Fail("Repeat until calories should not serialize"); } catch (NotSupportedException) { } }