public void NotifierSupplyAndUnsupplyTest() { var multipleNotices = new MultipleNotices.MultipleNotices(); var env = new TestEnv <Entry <IMultipleNotices>, IMultipleNotices>(new Entry <IMultipleNotices>(multipleNotices)); var n1 = new Regulus.Remote.Tools.Protocol.Sources.TestCommon.Number(1); var n2 = new Regulus.Remote.Tools.Protocol.Sources.TestCommon.Number(2); var n3 = new Regulus.Remote.Tools.Protocol.Sources.TestCommon.Number(3); multipleNotices.Numbers1.Items.Add(n1); multipleNotices.Numbers1.Items.Add(n2); multipleNotices.Numbers1.Items.Add(n2); multipleNotices.Numbers1.Items.Add(n3); multipleNotices.Numbers2.Items.Add(n2); multipleNotices.Numbers2.Items.Add(n3); var supplyn1Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers1.Base.SupplyEvent() select n.Value.Value; var supplyn2Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers2.Base.SupplyEvent() select n.Value.Value; var unsupplyn1Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers1.Base.UnsupplyEvent() select n.Value.Value; var unsupplyn2Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers2.Base.UnsupplyEvent() select n.Value.Value; var num1s = supplyn1Obs.Buffer(4).FirstAsync().Wait(); var num2s = supplyn2Obs.Buffer(2).FirstAsync().Wait(); NUnit.Framework.Assert.AreEqual(1, num1s[0]); NUnit.Framework.Assert.AreEqual(2, num1s[1]); NUnit.Framework.Assert.AreEqual(2, num1s[2]); NUnit.Framework.Assert.AreEqual(3, num1s[3]); NUnit.Framework.Assert.AreEqual(2, num2s[0]); NUnit.Framework.Assert.AreEqual(3, num2s[1]); var removeNum1s = new System.Collections.Generic.List <int>(); unsupplyn1Obs.Subscribe(removeNum1s.Add); unsupplyn2Obs.Subscribe(removeNum1s.Add); multipleNotices.Numbers1.Items.Remove(n2); multipleNotices.Numbers2.Items.Remove(n2); var c1 = multipleNotices.Numbers1.Items.Count; var c2 = multipleNotices.Numbers2.Items.Count; System.Threading.SpinWait.SpinUntil(() => removeNum1s.Count == 2, 5000); NUnit.Framework.Assert.AreEqual(2, removeNum1s[0]); NUnit.Framework.Assert.AreEqual(2, removeNum1s[1]); env.Dispose(); }
public void NotifierSupplyTest() { var multipleNotices = new MultipleNotices.MultipleNotices(); var env = new TestEnv <Entry <IMultipleNotices>, IMultipleNotices>(new Entry <IMultipleNotices>(multipleNotices)); var n1 = new Regulus.Remote.Tools.Protocol.Sources.TestCommon.Number(1); multipleNotices.Numbers1.Items.Add(n1); multipleNotices.Numbers1.Items.Add(n1); multipleNotices.Numbers2.Items.Add(n1); var supplyn1Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers1.Base.SupplyEvent() select n.Value.Value; var supplyn2Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers2.Base.SupplyEvent() select n.Value.Value; var unsupplyn1Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers1.Base.UnsupplyEvent() select n.Value.Value; var unsupplyn2Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from n in mn.Numbers2.Base.UnsupplyEvent() select n.Value.Value; var num1s = supplyn1Obs.Buffer(2).FirstAsync().Wait(); var num2s = supplyn2Obs.Buffer(1).FirstAsync().Wait(); NUnit.Framework.Assert.AreEqual(1, num1s[0]); NUnit.Framework.Assert.AreEqual(1, num1s[1]); NUnit.Framework.Assert.AreEqual(1, num2s[0]); var removeNums = new System.Collections.Generic.List <int>(); unsupplyn1Obs.Subscribe(removeNums.Add); unsupplyn2Obs.Subscribe(removeNums.Add); var count1Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from count in mn.GetNumber1Count().RemoteValue() select count; var count2Obs = from mn in env.Queryable.QueryNotifier <IMultipleNotices>().SupplyEvent() from count in mn.GetNumber2Count().RemoteValue() select count; multipleNotices.Numbers2.Items.Remove(n1); multipleNotices.Numbers1.Items.Remove(n1); multipleNotices.Numbers1.Items.Remove(n1); var count1 = count1Obs.FirstAsync().Wait(); var count2 = count2Obs.FirstAsync().Wait(); NUnit.Framework.Assert.AreEqual(0, count1); NUnit.Framework.Assert.AreEqual(0, count2); System.Console.WriteLine("wait NotifierSupplyTest removeNums.Count ..."); System.Threading.SpinWait.SpinUntil(() => removeNums.Count == 3, 5000); NUnit.Framework.Assert.AreEqual(1, removeNums[0]); NUnit.Framework.Assert.AreEqual(1, removeNums[1]); NUnit.Framework.Assert.AreEqual(1, removeNums[2]); env.Dispose(); }