public void ChangesShouldPropagateThroughMultilevelCollections()
        {
            (new TestScheduler()).With(sched => {
                var input = new ModelTestFixture() {TestString = "Foo"};
                var coll = new SerializedCollection<ISerializableItem>(new[] {input});
                var fixture =  new SerializedCollection<ISerializableList<ISerializableItem>>(new[] {(ISerializableList<ISerializableItem>)coll});

                bool inputChanging = false; bool inputChanged = false;
                bool collChanging = false; bool collChanged = false;
                bool fixtureChanging = false; bool fixtureChanged = false;
                input.Changing.Subscribe(_ => inputChanging = true);
                input.Changed.Subscribe(_ => inputChanged = true);
                coll.ItemChanging.Subscribe(_ => collChanging = true);
                coll.ItemChanging.Subscribe(_ => collChanged = true);
                fixture.ItemChanging.Subscribe(_ => fixtureChanging = true);
                fixture.ItemChanged.Subscribe(_ => fixtureChanged = true);

                input.TestString = "Bar";
                sched.RunToMilliseconds(1000);

                Assert.True(inputChanging);
                Assert.True(inputChanged);
                Assert.True(collChanging);
                Assert.True(collChanged);
                Assert.True(fixtureChanging);
                Assert.True(fixtureChanged);
            });
        }
Ejemplo n.º 2
0
        public void ItemsChangedShouldFire(string[] setters)
        {
            PexAssume.IsNotNull(setters);
            PexAssume.AreElementsNotNull(setters);

            this.Log().InfoFormat("Setting TestString to [{0}]", String.Join(",", setters));

            (new TestScheduler()).With(sched => {
                var output_changed = new List<object>();
                var output_changing = new List<object>();
                var fixture =  new ModelTestFixture();

                fixture.Changing.Subscribe(output_changing.Add);
                fixture.Changed.Subscribe(output_changed.Add);

                foreach (var v in setters) {
                    fixture.TestString = v;
                }

                sched.Start();

                PexAssert.AreEqual(setters.Uniq().Count(), output_changed.Count);
                PexAssert.AreEqual(setters.Uniq().Count(), output_changing.Count);
            });
        }
Ejemplo n.º 3
0
        public void ModelBaseShouldBeObservableAfterDeserialization()
        {
            var dse = new DictionaryStorageEngine();

            (new TestScheduler()).With(sched => {
                var input = new ModelTestFixture()
                {
                    TestString = "Foo"
                };

                dse.Save(input);
                var fixture = dse.Load <ModelTestFixture>(input.ContentHash);

                string latest = null;
                var changed   = fixture.Changed;
                this.Log().InfoFormat("Subscribing to Changed: 0x{0:X}", changed.GetHashCode());
                changed.Subscribe(Console.WriteLine);
                changed.Subscribe(x => latest = x.PropertyName);
                fixture.TestString            = "Bar";

                sched.RunToMilliseconds(1000);

                Assert.Equal("TestString", latest);
            });
        }
Ejemplo n.º 4
0
        public void ItemsChangedShouldFire(string[] setters)
        {
            PexAssume.IsNotNull(setters);
            PexAssume.AreElementsNotNull(setters);

            this.Log().InfoFormat("Setting TestString to [{0}]", String.Join(",", setters));

            (new TestScheduler()).With(sched => {
                var output_changed  = new List <object>();
                var output_changing = new List <object>();
                var fixture         = new ModelTestFixture();

                fixture.Changing.Subscribe(output_changing.Add);
                fixture.Changed.Subscribe(output_changed.Add);

                foreach (var v in setters)
                {
                    fixture.TestString = v;
                }

                sched.Start();

                PexAssert.AreEqual(setters.Uniq().Count(), output_changed.Count);
                PexAssert.AreEqual(setters.Uniq().Count(), output_changing.Count);
            });
        }
Ejemplo n.º 5
0
        public void ChangesShouldPropagateThroughMultilevelCollections()
        {
            (new TestScheduler()).With(sched => {
                var input = new ModelTestFixture()
                {
                    TestString = "Foo"
                };
                var coll    = new SerializedCollection <ISerializableItem>(new[] { input });
                var fixture = new SerializedCollection <ISerializableList <ISerializableItem> >(new[] { (ISerializableList <ISerializableItem>)coll });

                bool inputChanging   = false; bool inputChanged = false;
                bool collChanging    = false; bool collChanged = false;
                bool fixtureChanging = false; bool fixtureChanged = false;
                input.Changing.Subscribe(_ => inputChanging         = true);
                input.Changed.Subscribe(_ => inputChanged           = true);
                coll.ItemChanging.Subscribe(_ => collChanging       = true);
                coll.ItemChanging.Subscribe(_ => collChanged        = true);
                fixture.ItemChanging.Subscribe(_ => fixtureChanging = true);
                fixture.ItemChanged.Subscribe(_ => fixtureChanged   = true);

                input.TestString = "Bar";
                sched.RunToMilliseconds(1000);

                Assert.True(inputChanging);
                Assert.True(inputChanged);
                Assert.True(collChanging);
                Assert.True(collChanged);
                Assert.True(fixtureChanging);
                Assert.True(fixtureChanged);
            });
        }
Ejemplo n.º 6
0
        public void GuidsShouldBeUniqueForContent(string[] setters)
        {
            PexAssume.IsNotNull(setters);
            PexAssume.AreElementsNotNull(setters);

            (new TestScheduler()).With(sched => {
                var fixture = new ModelTestFixture();
                var output = new Dictionary<string, Guid>();

                setters.ToObservable(sched).Subscribe(x => {
                    fixture.TestString = x;
                    output[x] = fixture.ContentHash;
                });

                sched.Start();

                PexAssert.AreDistinctValues(output.Values.ToArray());
            });
        }
Ejemplo n.º 7
0
        public void GuidsShouldBeUniqueForContent(string[] setters)
        {
            PexAssume.IsNotNull(setters);
            PexAssume.AreElementsNotNull(setters);

            (new TestScheduler()).With(sched => {
                var fixture = new ModelTestFixture();
                var output  = new Dictionary <string, Guid>();

                setters.ToObservable(sched).Subscribe(x => {
                    fixture.TestString = x;
                    output[x]          = fixture.ContentHash;
                });

                sched.Start();

                PexAssert.AreDistinctValues(output.Values.ToArray());
            });
        }
Ejemplo n.º 8
0
        public void ModelBaseShouldBeObservableAfterDeserialization()
        {
            var dse = new DictionaryStorageEngine();

            (new TestScheduler()).With(sched => {
                var input = new ModelTestFixture() {TestString = "Foo"};

                dse.Save(input);
                var fixture = dse.Load<ModelTestFixture>(input.ContentHash);

                string latest = null;
                var changed = fixture.Changed;
                changed.Subscribe(Console.WriteLine);
                changed.Subscribe(x => latest = x.PropertyName);
                fixture.TestString = "Bar";

                sched.RunToMilliseconds(1000);

                Assert.Equal("TestString", latest);
            });
        }