// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using Newtonsoft.Json; using NUnit.Framework; using osu.Framework.Configuration; namespace osu.Framework.Tests.Bindables { [TestFixture] public class BindableSerializationTest { [Test] public void TestInt() { var toSerialize = new Bindable { Value = 1337 }; var deserialized = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(toSerialize.Value, deserialized.Value); } [Test] public void TestIntFromDerivedType() { var toSerialize = new BindableInt { Value = 1337 }; var deserialized = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(toSerialize.Value, deserialized.Value); } [Test] public void TestDouble() { var toSerialize = new BindableDouble { Value = 1337.0 }; var deserialized = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(toSerialize.Value, deserialized.Value); } [Test] public void TestString() { var toSerialize = new Bindable { Value = "1337" }; var deserialized = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(toSerialize.Value, deserialized.Value); } [Test] public void TestIntWithBounds() { var toSerialize = new CustomObj2 { Bindable = { MaxValue = int.MaxValue, Value = 1337, } }; var deserialized = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(deserialized.Bindable.MaxValue, deserialized.Bindable.Value); } [Test] public void TestMultipleBindables() { var toSerialize = new CustomObj { Bindable1 = { Value = 1337 }, Bindable2 = { Value = 1338 }, }; var deserialized = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(toSerialize.Bindable1.Value, deserialized.Bindable1.Value); Assert.AreEqual(toSerialize.Bindable2.Value, deserialized.Bindable2.Value); } [Test] public void TestComplexGeneric() { var toSerialize = new Bindable { Value = new CustomObj { Bindable1 = { Value = 1337 }, Bindable2 = { Value = 1338 }, } }; var deserialized = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(toSerialize)); Assert.AreEqual(toSerialize.Value.Bindable1.Value, deserialized.Value.Bindable1.Value); Assert.AreEqual(toSerialize.Value.Bindable2.Value, deserialized.Value.Bindable2.Value); } [Test] public void TestPopulateBindable() { var obj = new CustomObj2 { Bindable = { MaxValue = 500, Value = 500 } }; var serialized = JsonConvert.SerializeObject(obj); obj.Bindable.Value = 100; bool valueChanged = false; obj.Bindable.BindValueChanged(_ => valueChanged = true); JsonConvert.PopulateObject(serialized, obj); Assert.IsTrue(valueChanged); } private class CustomObj { public Bindable Bindable1 = new Bindable(); public Bindable Bindable2 = new Bindable(); } private class CustomObj2 { public BindableInt Bindable = new BindableInt { MaxValue = 100 }; } } }