using qdr.fnd.core.test.Object.Fake; using Quadarax.Foundation.Core.Object.Dynamic; namespace qdr.fnd.core.test.Object { class DynaTests { private const string PROP_A = "A"; private const string PROP_B = "B"; [Test(TestOf = typeof(Dyna))] public void DynaConstructorsCollectionOk() { var props = CreateProperties(); var dyna = new Dyna(CreateProperties()); Assert.That(dyna.Properties.Length, Is.EqualTo(props.Count())); } [Test(TestOf = typeof(Dyna))] public void DynaConstructorsTypeOk() { var dyna = new Dyna(typeof(IDinaFake)); Assert.That(dyna.Properties.Length, Is.EqualTo(2)); } [Test(TestOf = typeof(Dyna))] public void DynaSetGetPropertyStringOk() { var props = CreateProperties(); var dyna = new Dyna(CreateProperties()); dyna[PROP_A] = PROP_A; Assert.That(dyna.GetValue(PROP_A), Is.EqualTo(PROP_A)); Assert.That(dyna.GetValue(PROP_B), Is.EqualTo(null)); } [Test(TestOf = typeof(Dyna))] public void DynaSetGetPropertyStringFail() { var props = CreateProperties(); var dyna = new Dyna(CreateProperties()); // ReSharper disable once ObjectCreationAsStatement Assert.Throws(() => dyna[PROP_A + PROP_B] = PROP_A); } [Test(TestOf = typeof(Dyna))] public void DynaClearOk() { var props = CreateProperties(); var dyna = new Dyna(CreateProperties()); dyna[PROP_A] = PROP_A; Assert.That(dyna.GetValue(PROP_A), Is.EqualTo(PROP_A)); dyna.Clear(); Assert.That(dyna.GetValue(PROP_A), Is.EqualTo(null)); } [Test(TestOf = typeof(Dyna))] public void DynaTrackingOk() { var props = CreateProperties(); var dyna = new Dyna(CreateProperties()); dyna[PROP_A] = PROP_A; Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(1)); Assert.That(dyna.ChangedProperties.First(), Is.EqualTo(PROP_A)); dyna[PROP_A] = null; Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0)); dyna[PROP_A] = PROP_A; dyna[PROP_A] = PROP_B; Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(1)); Assert.That(dyna.ChangedProperties.First(), Is.EqualTo(PROP_A)); dyna[PROP_A] = PROP_A; dyna.TrackChanges(); Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0)); dyna[PROP_A] = PROP_B; dyna[PROP_A] = PROP_A; Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0)); dyna.Clear(); Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0)); } [Test(TestOf = typeof(Dyna))] public void DynaCloneOk() { var props = CreateProperties(); var dynaSrc = new Dyna(CreateProperties()); dynaSrc[PROP_A] = PROP_A; dynaSrc[PROP_B] = PROP_B; var dynaClone = dynaSrc.Clone() as Dyna; Assert.That(dynaClone.ChangedProperties.Length, Is.EqualTo(0)); Assert.That(dynaClone[PROP_A], Is.EqualTo(PROP_A)); Assert.That(dynaClone[PROP_B], Is.EqualTo(PROP_B)); Assert.That(dynaClone.IsEquals(dynaSrc), Is.True); } [Test(TestOf = typeof(Dyna))] public void DynaCopyToOk() { var props = CreateProperties(); var dynaSrc = new Dyna(CreateProperties()); dynaSrc[PROP_A] = PROP_A; dynaSrc[PROP_B] = PROP_B; var dynaClone = new Dyna(CreateProperties()); dynaClone[PROP_A] = PROP_B; dynaClone[PROP_B] = PROP_A; dynaClone.CopyTo(dynaSrc); Assert.That(dynaClone[PROP_A], Is.EqualTo(PROP_B)); Assert.That(dynaClone[PROP_B], Is.EqualTo(PROP_A)); Assert.That(dynaClone.IsSame(dynaSrc), Is.True); } private IEnumerable CreateProperties() { var proCol = new List(); proCol.Add(new Dyna.DynaProperty(PROP_A, typeof(string), DynaPropertyAccessability.Public, DynaPropertyAccessability.Public)); proCol.Add(new Dyna.DynaProperty(PROP_B, typeof(int), DynaPropertyAccessability.Public, DynaPropertyAccessability.Public)); return proCol; } } }