public void TestRepeatStepFITSerialization() { Workout placeholderWorkout = new Workout("Test", PluginMain.GetApplication().Logbook.ActivityCategories[0]); RepeatStep repeatStep = new RepeatStep(placeholderWorkout); FITMessage serializedMessage = new FITMessage(FITGlobalMessageIds.WorkoutStep); FITMessageField messageField; placeholderWorkout.Steps.AddStepToRoot(repeatStep); placeholderWorkout.Steps.RemoveStep(placeholderWorkout.Steps[0]); // Single child // - Root // - Repeat step (id = 1) // - Regular step (id = 0) repeatStep.FillFITStepMessage(serializedMessage); messageField = serializedMessage.GetField((Byte)FITWorkoutStepFieldIds.DurationValue); Assert.IsNotNull(messageField, "Duration value field not serialized for repeat step"); Assert.AreEqual(0, messageField.GetUInt32(), "Invalid duration value FIT serialization for repeat step with single child"); serializedMessage.Clear(); // Multiple children // - Root // - Repeat step (id = 2) // - Regular step (id = 0) // - Regular step (id = 1) repeatStep.StepsToRepeat.Add(new RegularStep(placeholderWorkout)); repeatStep.FillFITStepMessage(serializedMessage); messageField = serializedMessage.GetField((Byte)FITWorkoutStepFieldIds.DurationValue); Assert.IsNotNull(messageField, "Duration value field not serialized for repeat step"); Assert.AreEqual(0, messageField.GetUInt32(), "Invalid duration value FIT serialization for repeat step with single child"); serializedMessage.Clear(); // Nested repeat steps // - Repeat step (id = 4) // - Regular step (id = 0) // - Regular step (id = 1) // - Repeat step (id = 3) // - Regular step (id = 2) repeatStep.StepsToRepeat.Add(new RepeatStep(placeholderWorkout)); repeatStep.StepsToRepeat[2].FillFITStepMessage(serializedMessage); messageField = serializedMessage.GetField((Byte)FITWorkoutStepFieldIds.DurationValue); Assert.IsNotNull(messageField, "Duration value field not serialized for repeat step"); Assert.AreEqual(2, messageField.GetUInt32(), "Invalid duration value FIT serialization for repeat step with single child"); serializedMessage.Clear(); // Nested repeats with 2nd repeat as first nested step // - Root // - Repeat step (id = 4) // - Regular step (id = 0) // - Regular step (id = 1) // - Repeat step (id = 3) // - Regular step (id = 2) // - Repeat step (id = 8) // - Repeat step (id = 6) // - Regular step (id = 5) // - Regular step (id = 7) repeatStep = new RepeatStep(placeholderWorkout); placeholderWorkout.Steps.AddStepToRoot(repeatStep); repeatStep.StepsToRepeat.Insert(0, new RepeatStep(placeholderWorkout)); repeatStep.FillFITStepMessage(serializedMessage); messageField = serializedMessage.GetField((Byte)FITWorkoutStepFieldIds.DurationValue); Assert.IsNotNull(messageField, "Duration value field not serialized for repeat step"); Assert.AreEqual(5, messageField.GetUInt32(), "Invalid duration value FIT serialization for repeat step with single child"); serializedMessage.Clear(); }