private void PacketReceive_EventCanceled <TPacket, TEvent>(TPacket packet, IPlayer sender)
            where TPacket : IPacket
            where TEvent : Event
        {
            Action <PacketReceiveEvent <TPacket> >?registeredHandler = null;

            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            Mock.Get(events)
            .Setup(em => em.RegisterHandler(It.IsAny <Action <PacketReceiveEvent <TPacket> > >(), log))
            .Callback <Action <PacketReceiveEvent <TPacket> >, ILogger>(
                (handler, log) => registeredHandler = handler);

            using var chestService = new OrionChestService(events, log);

            var evt = new PacketReceiveEvent <TPacket>(packet, sender);

            Mock.Get(events)
            .Setup(em => em.Raise(It.IsAny <TEvent>(), log))
            .Callback <TEvent, ILogger>((evt, log) => evt.Cancel());

            Assert.NotNull(registeredHandler);
            registeredHandler !(evt);

            Assert.True(evt.IsCanceled);

            Mock.Get(events).VerifyAll();
        }
        public void Count_Get()
        {
            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            using var chestService = new OrionChestService(events, log);

            Assert.Equal(Terraria.Main.maxChests, chestService.Count);
        }
        public void Item_GetInvalidIndex_ThrowsIndexOutOfRangeException(int index)
        {
            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            using var chestService = new OrionChestService(events, log);

            Assert.Throws <IndexOutOfRangeException>(() => chestService[index]);
        }
        public void Item_GetMultipleTimes_ReturnsSameInstance()
        {
            Terraria.Main.chest[0] = new Terraria.Chest();

            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            using var chestService = new OrionChestService(events, log);

            var chest  = chestService[0];
            var chest2 = chestService[0];

            Assert.Same(chest, chest2);
        }
        public void Item_Get()
        {
            Terraria.Main.chest[1] = new Terraria.Chest();

            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            using var chestService = new OrionChestService(events, log);

            var chest = chestService[1];

            Assert.Equal(1, chest.Index);
            Assert.Same(Terraria.Main.chest[1], ((OrionChest)chest).Wrapped);
        }
        public void GetEnumerator()
        {
            for (var i = 0; i < Terraria.Main.maxChests; ++i)
            {
                Terraria.Main.chest[i] = new Terraria.Chest();
            }

            var events = Mock.Of <IEventManager>();
            var log    = Mock.Of <ILogger>();

            using var chestService = new OrionChestService(events, log);

            var chests = chestService.ToList();

            for (var i = 0; i < chests.Count; ++i)
            {
                Assert.Same(Terraria.Main.chest[i], ((OrionChest)chests[i]).Wrapped);
            }
        }