public void Change()
        {
            var cmdrData = NewCmdrData();
            var bots     = new Instance[5];
            var sessions = new HashSet <int>();
            var fired    = 0;
            var lastId   = -1;

            cmdrData.Avatars.Change += (i, a) =>
            {
                if (a.Name != Names.Punch.AsBotName())
                {
                    return;
                }

                if (lastId == -1)
                {
                    lastId = a.Id;
                }

                Assert.IsTrue(a.IsBot);
                Assert.AreEqual(lastId, a.Id);
                Assert.AreEqual(Samples.AvPosition, a.Position);
                Assert.AreEqual(0, a.Type);
                Assert.IsTrue(sessions.Add(a.Session));

                fired++;
            };

            for (var i = 0; i < 5; i++)
            {
                bots[i] = new Instance()
                          .TestLogin(Names.Punch)
                          .EnterTestWorld();

                TestPump.AllOnce(cmdrData);
                bots[i].GoTo(Samples.AvPosition);
                TestPump.AllOnce(cmdrData, bots[i], cmdrData);
            }

            TestPump.AllUntil(() => fired >= 5, cmdrData);

            foreach (var bot in bots)
            {
                bot.Dispose();
            }

            Assert.IsTrue(fired == 5, "Avatar change event not fired exactly five times");
        }
Пример #2
0
        public void Pump_Async()
        {
            var punch = NewPunch();
            var judy  = NewJudy();

            Action pump = () =>
            {
                for (var i = 0; i < 10; i++)
                {
                    TestPump.AllOnce(punch, judy);
                }
            };

            Task.WaitAll(
                Task.Factory.StartNew(() => pump),
                Task.Factory.StartNew(() => pump)
                );
        }
        public void Leave()
        {
            var cmdrData = NewCmdrData();
            var bots     = new Instance[5];
            var sessions = new HashSet <int>();
            var fired    = 0;

            cmdrData.Avatars.Leave += (i, n, s) =>
            {
                if (n != Names.Punch.AsBotName())
                {
                    return;
                }

                Assert.IsTrue(sessions.Add(s));

                fired++;
            };

            for (var i = 0; i < 5; i++)
            {
                bots[i] = new Instance()
                          .TestLogin(Names.Punch)
                          .EnterTestWorld();

                TestPump.AllOnce(cmdrData);
                bots[i].Leave();
                TestPump.AllOnce(cmdrData, bots[i], cmdrData);
            }

            TestPump.AllUntil(() => fired >= 5, cmdrData);

            foreach (var bot in bots)
            {
                bot.Dispose();
            }

            Assert.IsTrue(fired == 5, "Avatar leave event not fired exactly five times");
        }