using System.IO; using System.Xml.Serialization; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using Xunit; namespace Jellyfin.Model.Tests.Configuration; public class EncodingOptionsTests { [Theory] [InlineData("")] [InlineData("")] [InlineData(" ")] [InlineData("notapreset")] [InlineData("42")] [InlineData("-1")] public void Deserialize_UnreadableEncoderPreset_FallsBackToDefault(string encoderPresetElement) { var options = Deserialize($"{encoderPresetElement}21"); Assert.Equal(EncoderPreset.auto, options.EncoderPreset); // The rest of the file has to survive: a throwing preset used to discard every other encoding setting. Assert.Equal(21, options.H264Crf); } [Fact] public void Deserialize_KnownEncoderPreset_IsKept() { var options = Deserialize("veryfast"); Assert.Equal(EncoderPreset.veryfast, options.EncoderPreset); } [Fact] public void Serialize_WritesTheEncoderPresetElement() { var serializer = new XmlSerializer(typeof(EncodingOptions)); using var writer = new StringWriter(); serializer.Serialize(writer, new EncodingOptions { EncoderPreset = EncoderPreset.slow }); Assert.Contains("slow", writer.ToString(), System.StringComparison.Ordinal); } private static EncodingOptions Deserialize(string xml) { var serializer = new XmlSerializer(typeof(EncodingOptions)); using var reader = new StringReader(xml); return (EncodingOptions)serializer.Deserialize(reader)!; } }