示例#1
0
        public void OnPowerOffPerformsAction()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("in");
            fs.When(f => f.Watch(Arg.Any <string>(), Arg.Any <Func <bool> >(), Arg.Any <Action>())).Do(c =>
            {
                if (c.Arg <Func <bool> >().Invoke())
                {
                    c.Arg <Action>().Invoke();
                }
            });
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Power = PowerValue.Off
            };
            var called = false;

            //act
            pinInterface.OnPowerOff(() => called = true);

            //assert
            Assert.True(called);
        }
示例#2
0
        public void EnabledUsesCachedValueOnSubsequentRequests()
        {
            //arrange
            var fs           = Substitute.For <IFileSystem>();
            var pinInterface = new LinuxPinInterface(123, fs);
            var enabled      = pinInterface.Enabled;

            //act
            enabled = pinInterface.Enabled;

            //assert
            fs.Received(1).Exists(Arg.Any <string>());
        }
示例#3
0
        public void SettingIOModeEnablesPinIfNotEnabled()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            //act
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                IOMode = IOMode.Write
            };

            //assert
            fs.Received().Write("/sys/class/gpio/export", "123");
        }
示例#4
0
        public void OnPowerChangeEnablesIfNotEnabled()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("in");
            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            pinInterface.OnPowerChange(null);

            //assert
            fs.Received().Write("/sys/class/gpio/export", "123");
        }
示例#5
0
        public void DisablesOnDispose()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("out");
            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            pinInterface.Dispose();

            //assert
            fs.Received().Write("/sys/class/gpio/unexport", "123");
        }
示例#6
0
        public void NotEnabledIfDirectoryDoesNotExist()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Exists("/sys/class/gpio/gpio123").Returns(false);
            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            var enabled = pinInterface.Enabled;

            //assert
            Assert.False(enabled);
        }
示例#7
0
        public void GettingIOModeEnablesPinIfNotEnabled()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("in");
            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            var io = pinInterface.IOMode;

            //assert
            fs.Received().Write("/sys/class/gpio/export", "123");
        }
示例#8
0
        public void DisableSetsEnabledFalse()
        {
            //arrange
            var fs           = Substitute.For <IFileSystem>();
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Enabled = true
            };

            //act
            pinInterface.Disable();

            //assert
            Assert.False(pinInterface.Enabled);
        }
示例#9
0
        public void CanSetIOMode(IOMode io, string expected)
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            //act
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Enabled = true,
                IOMode  = io
            };

            //assert
            fs.Received().Write("/sys/class/gpio/gpio123/direction", expected);
        }
示例#10
0
        public void CanToggleForSetIterations()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("out");
            fs.Read("/sys/class/gpio/gpio123/value").Returns("0");
            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            pinInterface.Toggle(TimeSpan.TicksPerMillisecond, 10);

            //assert
            fs.Received(20).Write("/sys/class/gpio/gpio123/value", Arg.Any <string>());
        }
示例#11
0
        public void CanGetIOMode(string value, IOMode expected)
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns(value);

            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            var io = pinInterface.IOMode;

            //assert
            Assert.Equal(expected, io);
        }
示例#12
0
        public void EnabledUsesCachedValueAfterWrite()
        {
            //arrange
            var fs           = Substitute.For <IFileSystem>();
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Enabled = true
            };

            //act
            var enabled = pinInterface.Enabled;

            //assert
            fs.Received(0).Exists(Arg.Any <string>());
        }
示例#13
0
        public void SettingPowerSetsIOModeIfNotWrite()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("in");

            //act
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Power = PowerValue.On
            };

            //assert
            fs.Received().Write("/sys/class/gpio/gpio123/direction", "out");
        }
示例#14
0
        public void GettingPowerEnablesPinIfNotEnabled()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/value").Returns("1");
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Direction = Direction.In
            };

            //act
            var power = pinInterface.Power;

            //assert
            fs.Received().Write("/sys/class/gpio/export", "123");
        }
示例#15
0
        public void ToggleTurnsOffIfOn()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("out");
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Power = PowerValue.On
            };

            //act
            pinInterface.Toggle();

            //assert
            Assert.Equal(PowerValue.Off, pinInterface.Power);
        }
示例#16
0
        public void CanSetPower(Type powerModeType, PowerValue power, string expected)
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("out");

            //act
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Enabled   = true,
                PowerMode = (IPowerMode)Activator.CreateInstance(powerModeType),
                Power     = power
            };

            //assert
            fs.Received().Write("/sys/class/gpio/gpio123/value", expected);
        }
示例#17
0
        public void GettingPowerGetsCachedValueWhenOutput()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/value").Returns("0");
            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Direction = Direction.Out
            };
            var power = pinInterface.Power;

            //act
            power = pinInterface.Power;

            //assert
            fs.Received(1).Read("/sys/class/gpio/gpio123/value");
        }
示例#18
0
        public void CanGetPower(Type powerModeType, string value, PowerValue expected)
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/value").Returns(value);

            var pinInterface = new LinuxPinInterface(123, fs)
            {
                Direction = Direction.Out,
                PowerMode = (IPowerMode)Activator.CreateInstance(powerModeType)
            };

            //act
            var power = pinInterface.Power;

            //assert
            Assert.Equal(expected, power);
        }
示例#19
0
        public void TurnOffForTurnsOnAfter()
        {
            //arrange
            var fs = Substitute.For <IFileSystem>();

            fs.Read("/sys/class/gpio/gpio123/direction").Returns("out");
            var pinInterface = new LinuxPinInterface(123, fs);

            //act
            pinInterface.TurnOffFor(TimeSpan.Zero);

            //assert
            var calls = fs.ReceivedCalls()
                        .Where(c => c.GetMethodInfo().Name == "Write" &&
                               c.GetArguments()[0].ToString().EndsWith("value"))
                        .ToArray();

            Assert.Equal("0", calls[0].GetArguments()[1]);
            Assert.Equal("1", calls[1].GetArguments()[1]);
        }