public void TestObjectsTracking()
{
var tracker = new ObjectsChangeTracker();
var a = new A();
tracker.RegisterObject(a);
a.f2 = 3;
var changes = tracker.GetChanges(a);
Assert.IsTrue(changes[0].name == "f2");
tracker.RegisterObject(a);
changes = tracker.GetChanges(a);
Assert.IsTrue(changes.Length == 0);
a.f1 = "new";
a.f2 = 13;
a.f3 = false;
for (int i = 0; i < 10; ++i)
{
tracker.GetChanges(a);
}
changes = tracker.GetChanges(a);
Assert.IsTrue(TestUtils.AreEqualArraysUnordered(new[] { "f1", "f2", "f3" }, changes.Select(c => c.name).ToArray()));
changes = tracker.GetChanges(new A());
Assert.IsNull(changes);
}