From 1812983af7fe0348b88a59db9cdd8291f812427f Mon Sep 17 00:00:00 2001 From: Ynse Hoornenborg Date: Fri, 19 Jul 2024 22:05:27 +0200 Subject: [PATCH] Improvements to pretty print routines for OBU headers --- .../Formats/Heif/Av1/ObuFrameHeaderTests.cs | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs index a56daacc6e..a965857d14 100644 --- a/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors. // Licensed under the Six Labors Split License. +using System.Collections; using System.Reflection; using System.Text; using SixLabors.ImageSharp.Formats.Heif.Av1; @@ -101,24 +102,62 @@ public class ObuFrameHeaderTests Assert.Equal(PrettyPrintProperties(obuReader1.FrameHeader.TilesInfo), PrettyPrintProperties(obuReader2.FrameHeader.TilesInfo)); } - private static string PrettyPrintProperties(object obj) + private static readonly char[] spaces = " ".ToCharArray(); + + private static string PrettyPrintProperties(object obj, int indent = 0) { StringBuilder builder = new(); builder.Append(obj.GetType().Name); builder.AppendLine("{"); + indent += 2; MemberInfo[] properties = obj.GetType().FindMembers(MemberTypes.Property, BindingFlags.Instance | BindingFlags.Public, null, null); foreach (MemberInfo member in properties) { + builder.Append(spaces, 0, indent); if (member is PropertyInfo property) { builder.Append(property.Name); builder.Append(" = "); object value = property.GetValue(obj) ?? "NULL"; - builder.AppendLine(value.ToString()); + PrettyPrintValue(builder, value, indent); } } + indent -= 2; + builder.Append(spaces, 0, indent); builder.AppendLine("}"); return builder.ToString(); } + + private static void PrettyPrintValue(StringBuilder builder, object value, int indent) + { + if (value.GetType() == typeof(string)) + { + builder.AppendLine(value.ToString()); + } + else if (value.GetType().IsArray) + { + builder.AppendLine("["); + indent += 2; + builder.Append(spaces, 0, indent); + Type elementType = value.GetType().GetElementType(); + IList list = value as IList; + foreach (object item in list) + { + PrettyPrintValue(builder, item, indent); + } + + indent -= 2; + builder.Append(spaces, 0, indent); + builder.AppendLine("]"); + } + else if (value.GetType().IsClass) + { + builder.AppendLine(PrettyPrintProperties(value, indent)); + } + else + { + builder.AppendLine(value.ToString()); + } + } }