public void MumbleLinkStateChanged()
        {
            MumbleLinkManager manager = new MumbleLinkManager();

            manager.TimeoutRate = 0.1;
            MumbleLinkState?actualState  = null;
            string          actualName   = null;
            string          expectedName = "Super Adventure Wars FTW";

            manager.MumbleLinkStateChanged += (s, e) =>
            {
                actualState = e.State;
                actualName  = e.Name;
            };

            IMumbleLinkConnector connector = Substitute.For <IMumbleLinkConnector>();
            LinkedMem            linkedMem = new LinkedMem()
            {
                uiTick = 1
            };

            unsafe { PointerUtils.CopyArrayToPointer(expectedName.ToCharArray(), linkedMem.name); }
            connector.ReadMemoryMappedFile().Returns(linkedMem);
            manager.UseMumbleLinkConnector(connector);

            manager.Check();
            Assert.IsTrue(manager.IsActive, "Active");
            Assert.AreEqual(expectedName, actualName, "Name");
            actualState = null;
            actualName  = null;
            Thread.Sleep((int)(manager.TimeoutRate * 1000));
            manager.Check();
            Assert.IsFalse(manager.IsActive, "Not active after");
        }
        public void UseMumbleLinkConnector()
        {
            MumbleLinkManager manager = new MumbleLinkManager();

            manager.UseMumbleLinkConnector <MumbleLinkConnector>();
            Assert.IsInstanceOf <MumbleLinkConnector>(manager.MumbleLinkConnector);

            manager = new MumbleLinkManager();
            manager.UseMumbleLinkConnector(new MumbleLinkConnector());
            Assert.IsInstanceOf <MumbleLinkConnector>(manager.MumbleLinkConnector);
        }
        public void UseMumbleLinkFile()
        {
            MumbleLinkManager manager = new MumbleLinkManager();

            manager.UseMumbleLinkFile <MumbleLinkFile>();
            Assert.IsInstanceOf <MumbleLinkFile>(manager.MumbleLinkFile);

            manager = new MumbleLinkManager();
            manager.UseMumbleLinkFile(new MumbleLinkFile());
            Assert.IsInstanceOf <MumbleLinkFile>(manager.MumbleLinkFile);
        }
        public void IsListening()
        {
            MumbleLinkManager manager = new MumbleLinkManager();

            Assert.IsFalse(manager.IsListening, "Not listening before");

            manager.StartListener();
            Assert.IsTrue(manager.IsListening, "Listening");

            manager.StopListener();
            // It may take a while before it has stopped
            Assert.That(() => manager.IsListening, Is.False.After(2000, 10), "Not listening after");
        }
        public void IsActive()
        {
            MumbleLinkManager manager = new MumbleLinkManager();

            IMumbleLinkConnector connector = Substitute.For <IMumbleLinkConnector>();
            LinkedMem            linkedMem = new LinkedMem()
            {
                uiTick = 1
            };

            connector.ReadMemoryMappedFile().Returns(linkedMem);
            manager.UseMumbleLinkConnector(connector);

            Assert.IsFalse(manager.IsActive, "Not active before");
            manager.Check();
            Assert.IsTrue(manager.IsActive, "Active after");
        }
        public void UpdateMumbleLinkFile()
        {
            MumbleLinkManager    manager   = new MumbleLinkManager();
            IMumbleLinkConnector connector = Substitute.For <IMumbleLinkConnector>();
            IMumbleLinkFile      file      = Substitute.For <IMumbleLinkFile>();

            LinkedMem linkedMem = new LinkedMem()
            {
                uiTick = 1
            };

            connector.ReadMemoryMappedFile().Returns(linkedMem);
            manager.UseMumbleLinkConnector(connector);
            manager.UseMumbleLinkFile(file);

            manager.Check();
            file.Received(1).SetDataFromLinkedMem(linkedMem);
        }