public void isFunctionActiveTodayTest3() { IZoneServer zoneServer = null; // (1) Empty day list List <DayOfWeek> _dayOfWeeks1 = new List <DayOfWeek>(); AlarmFunction function1 = new AlarmFunction( SimpleId.NewGuid(), new Address(100, 1), new Address(100, 1), 50, new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0), _dayOfWeeks1); Dictionary <int, IAudioDriver> audioDrivers = null; ConcreteAlarmFunction target1 = new ConcreteAlarmFunction(function1, zoneServer, audioDrivers); // (2) Full day list List <DayOfWeek> _dayOfWeeks2 = new List <DayOfWeek>(); _dayOfWeeks2.Add(DayOfWeek.Monday); _dayOfWeeks2.Add(DayOfWeek.Tuesday); _dayOfWeeks2.Add(DayOfWeek.Wednesday); _dayOfWeeks2.Add(DayOfWeek.Thursday); _dayOfWeeks2.Add(DayOfWeek.Friday); _dayOfWeeks2.Add(DayOfWeek.Saturday); _dayOfWeeks2.Add(DayOfWeek.Sunday); AlarmFunction function2 = new AlarmFunction( SimpleId.NewGuid(), new Address(100, 1), new Address(100, 1), 50, new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0), _dayOfWeeks2); ConcreteAlarmFunction target2 = new ConcreteAlarmFunction(function2, zoneServer, audioDrivers); // Monday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 7, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 7, 12, 0, 0))); // Tuesday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 8, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 8, 12, 0, 0))); // Wednesday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 9, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 9, 12, 0, 0))); // Thursday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 10, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 10, 12, 0, 0))); // Friday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 11, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 11, 12, 0, 0))); // Saturday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 12, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 12, 12, 0, 0))); // Sunday Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 13, 12, 0, 0))); Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 13, 12, 0, 0))); }
/// <summary> /// Constructor to instantiate a concrete alarm function. /// </summary> /// <param name="function">Configuration data for this alarm function.</param> /// <param name="zoneServer">Zone server, to get notification about zone changes.</param> /// <param name="audioDrivers">Audio Drivers, in case a sound needs to be played.</param> public ConcreteAlarmFunction(AlarmFunction function, IZoneServer zoneServer, Dictionary <int, IAudioDriver> audioDrivers) : base(zoneServer, function, audioDrivers) { if (function == null) { onFunctionError(); throw new FunctionServerException("Function configuration is null. This is not allowed"); } _function = function; subscribeZone(_function.ZoneId); }
public void ConcreteAlarmFunctionConstructorTest2() { List <DayOfWeek> _dayOfWeeks = new List <DayOfWeek>(); AlarmFunction function = new AlarmFunction( SimpleId.NewGuid(), new Address(100, 1), new Address(100, 1), 50, new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0), _dayOfWeeks); IZoneServer zoneServer = null; Dictionary <int, IAudioDriver> audioDrivers = null; ConcreteAlarmFunction target = new ConcreteAlarmFunction(function, zoneServer, audioDrivers); }
public void ConcreteAlarmFunctionConstructorTest1() { try { AlarmFunction function = null; IZoneServer zoneServer = null; Dictionary <int, IAudioDriver> audioDrivers = null; ConcreteAlarmFunction target = new ConcreteAlarmFunction(function, zoneServer, audioDrivers); } catch (FunctionServerException) { return; } Assert.Fail("'FunctionServerException' Exception expected!"); }
public void isFunctionActiveTodayTest1() { List <DayOfWeek> _dayOfWeeks = new List <DayOfWeek>(); AlarmFunction function = new AlarmFunction( SimpleId.NewGuid(), new Address(100, 1), new Address(100, 1), 50, new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0), _dayOfWeeks); IZoneServer zoneServer = null; Dictionary <int, IAudioDriver> audioDrivers = null; ConcreteAlarmFunction target = new ConcreteAlarmFunction(function, zoneServer, audioDrivers); DateTime aktTime = DateTime.Now; bool actual = target.isFunctionActiveToday(aktTime); Assert.AreEqual(false, actual); }
public void calculateFunctionTest4() { // (1) Day list: Monday, Wednesday, Friday, Sunday // (1) Function: AlarmTime=10:00, AlarmDuration=01:45 #region Function1 List <DayOfWeek> _dayOfWeeks1 = new List <DayOfWeek>(); _dayOfWeeks1.Add(DayOfWeek.Monday); _dayOfWeeks1.Add(DayOfWeek.Wednesday); _dayOfWeeks1.Add(DayOfWeek.Friday); _dayOfWeeks1.Add(DayOfWeek.Sunday); AlarmFunction function1 = new AlarmFunction( SimpleId.NewGuid(), new Address(100, 1), new Address(100, 3), 50, new TimeSpan(10, 0, 0), new TimeSpan(1, 45, 0), _dayOfWeeks1); ZoneServerMock zoneServer1 = new ZoneServerMock(); Dictionary <int, IAudioDriver> audioDrivers = null; ConcreteAlarmFunction target1 = new ConcreteAlarmFunction(function1, zoneServer1, audioDrivers); #endregion // (2) Day list: Tuesday, Thursday, Saturday, Sunday // (2) Function: AlarmTime=10:00, AlarmDuration=01:45 #region Function2 List <DayOfWeek> _dayOfWeeks2 = new List <DayOfWeek>(); _dayOfWeeks2.Add(DayOfWeek.Tuesday); _dayOfWeeks2.Add(DayOfWeek.Thursday); _dayOfWeeks2.Add(DayOfWeek.Saturday); _dayOfWeeks2.Add(DayOfWeek.Sunday); AlarmFunction function2 = new AlarmFunction( SimpleId.NewGuid(), new Address(100, 1), new Address(100, 6), 50, new TimeSpan(10, 0, 0), new TimeSpan(1, 45, 0), _dayOfWeeks2); ZoneServerMock zoneServer2 = new ZoneServerMock(); ConcreteAlarmFunction target2 = new ConcreteAlarmFunction(function2, zoneServer2, audioDrivers); #endregion ZoneState zoneStateOff1 = new ZoneState(new Address(100, 2), false, 20, ZoneQuality.Online); zoneStateOff1.LastUpdate = new DateTime(2009, 9, 12, 23, 0, 0); ZoneState zoneStateOn = new ZoneState(new Address(100, 2), true, 20, ZoneQuality.Online); zoneStateOn.LastUpdate = new DateTime(2009, 9, 12, 23, 5, 0); ZoneState zoneStateOff2 = new ZoneState(new Address(100, 2), false, 20, ZoneQuality.Online); zoneStateOff2.LastUpdate = new DateTime(2009, 9, 12, 23, 10, 0); // Sunday (13.9.2009 11:00) zoneServer1.distributeZoneState(zoneStateOff1); zoneServer1.distributeZoneState(zoneStateOn); // sets the member LastChangeToON zoneServer1.distributeZoneState(zoneStateOff2); target1.calculateFunction(new DateTime(2009, 9, 13, 11, 0, 0)); zoneServer2.distributeZoneState(zoneStateOff1); zoneServer2.distributeZoneState(zoneStateOn); // sets the member LastChangeToON zoneServer2.distributeZoneState(zoneStateOff2); target2.calculateFunction(new DateTime(2009, 9, 13, 11, 44, 59)); // last change before functions ends Assert.AreEqual(1, zoneServer1._monitoredZones.Count); Assert.AreEqual(1, zoneServer2._monitoredZones.Count); Assert.AreEqual(1, zoneServer1.ZoneStates.Count); // 1 command has been sent Assert.AreEqual(true, zoneServer1.ZoneStates[new Address(100, 1)].PowerStatus); Assert.AreEqual(new Address(100, 3), zoneServer1.ZoneStates[new Address(100, 1)].Source); Assert.AreEqual(1, zoneServer2.ZoneStates.Count); // 1 command has been sent Assert.AreEqual(true, zoneServer2.ZoneStates[new Address(100, 1)].PowerStatus); Assert.AreEqual(new Address(100, 6), zoneServer2.ZoneStates[new Address(100, 1)].Source); zoneServer1.ClearZoneStateList(); zoneServer2.ClearZoneStateList(); }
/// <summary> /// Asks the AlarmClockManager to call the given function at the given time with the given parameter. /// </summary> /// <param name="when">The time when the call must be performed.</param> /// <param name="funcToCall">The function that must be called.</param> /// <param name="param">The parameter of the function to call with.</param> /// <returns>A reference to the allocated alarm clock.</returns> public AlarmClock SetAlarmClock(int when, AlarmFunction funcToCall, object param) { if (this.dssThread != RCThread.CurrentThread) { throw new DssException("AlarmClockManager.SetAlarmClock must be called from the DSS-thread!"); } if (funcToCall == null) { throw new ArgumentNullException("funcToCall"); } if (when < 0) { throw new ArgumentOutOfRangeException("when"); } int currentTime = DssRoot.Time; if (when > currentTime) { /// Delayed invoke lock (this.lockObj) { if (this.timers.Length == 0) { /// No free timer found --> create a new one AlarmClockThread newTimer = new AlarmClockThread(); this.currentCapacity++; this.timers = new Fifo <AlarmClockThread>(currentCapacity); this.timers.Push(newTimer); TraceManager.WriteAllTrace(string.Format("Delayed: New timer: {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); TraceManager.WriteAllTrace(string.Format("Push timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); } else { TraceManager.WriteAllTrace("Delayed: clock reuse", DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); } AlarmClockThread timerToUse = this.timers.Get(); TraceManager.WriteAllTrace(string.Format("Get timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); AlarmClock retClock = new AlarmClock(when, this); this.targetFunctions.Add(timerToUse, funcToCall); this.parameters.Add(timerToUse, param); this.alarmClocks.Add(timerToUse, retClock); this.clockTimerMap.Add(retClock, timerToUse); timerToUse.Start(when - currentTime, this.AlarmClockThreadFinishedHdl, this.AlarmClockThreadFinishedHdl); TraceManager.WriteAllTrace(string.Format("AlarmClock-{0} started", retClock.testID), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); return(retClock); } } else { /// Immediate invoke lock (this.lockObj) { if (this.timers.Length == 0) { /// No free timer found --> create a new one AlarmClockThread newTimer = new AlarmClockThread(); this.currentCapacity++; this.timers = new Fifo <AlarmClockThread>(currentCapacity); this.timers.Push(newTimer); TraceManager.WriteAllTrace(string.Format("Immediate: New timer: {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); TraceManager.WriteAllTrace(string.Format("Push timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); } else { TraceManager.WriteAllTrace("Immediate: clock reuse", DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); } AlarmClockThread timerToUse = this.timers.Get(); TraceManager.WriteAllTrace(string.Format("Get timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); AlarmClock retClock = new AlarmClock(when, this); this.targetFunctions.Add(timerToUse, funcToCall); this.parameters.Add(timerToUse, param); this.alarmClocks.Add(timerToUse, retClock); this.clockTimerMap.Add(retClock, timerToUse); TraceManager.WriteAllTrace(string.Format("AlarmClock-{0} started immediately", retClock.testID), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO); this.alarmClkFinishedIface.AlarmClockFinished(retClock); return(retClock); } } }
/// <summary> /// Asks the AlarmClockManager to call the given function at the given time. /// </summary> /// <param name="when">The time when the call must be performed.</param> /// <param name="funcToCall">The function that must be called.</param> /// <returns>A reference to the allocated alarm clock.</returns> public AlarmClock SetAlarmClock(int when, AlarmFunction funcToCall) { return(SetAlarmClock(when, funcToCall, null)); }
public void GetConfigurationTest() { // If the system configuration version changes, you need to adapt/review this test case Assert.AreEqual("3.0", SystemConfiguration.VERSION); string file = @"NuvoControlKonfigurationUnitTest2.xml"; ConfigurationLoader target = new ConfigurationLoader(file); SystemConfiguration systemConfiguration = target.GetConfiguration(); Assert.AreEqual("3.0", systemConfiguration.ConfigurationVersion); TestContext.WriteLine("Testing device communication parameters..."); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Id, 100); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.BaudRate, 9600); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.DataBits, 8); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.ParityBit, 1); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.ParityMode, "None"); TestContext.WriteLine("Testing device protocol driver parameters..."); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].ProtocolDriver.Name, "Nuvo Essentia Protokoll Driver"); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].ProtocolDriver.AssemblyName, "NuvoControl.Server.ProtocolDriver"); Assert.AreEqual(systemConfiguration.Hardware.Devices[0].ProtocolDriver.ClassName, "NuvoControl.Server.ProtocolDriver.NuvoEssentiaProtocolDriver"); TestContext.WriteLine("Testing audio driver parameters..."); Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].AudioDevices.Count); Assert.AreEqual(new Address(100, 1), systemConfiguration.Hardware.Devices[0].AudioDevices[0].Id); Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].AudioDevices[0].Id.ObjectId); Assert.AreEqual(new Address(100, 2), systemConfiguration.Hardware.Devices[0].AudioDevices[1].Id); Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].AudioDevices[1].Id.ObjectId); Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].AudioDevices[2].Id.ObjectId); Assert.AreEqual("hw:0,0", systemConfiguration.Hardware.Devices[0].AudioDevices[0].Device); TestContext.WriteLine("Testing osc driver parameters..."); Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].OscDevices.Count); // OSC Client 1 Assert.AreEqual(eOSCDeviceType.OSCClient, systemConfiguration.Hardware.Devices[0].OscDevices[0].DeviceType); Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].OscDevices[0].Id.ObjectId); Assert.AreEqual(9000, systemConfiguration.Hardware.Devices[0].OscDevices[0].SendPort); Assert.AreEqual(-1, systemConfiguration.Hardware.Devices[0].OscDevices[0].ListenPort); // OSC Server Assert.AreEqual(eOSCDeviceType.OSCServer, systemConfiguration.Hardware.Devices[0].OscDevices[2].DeviceType); Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].OscDevices[2].Id.ObjectId); Assert.AreEqual(9000, systemConfiguration.Hardware.Devices[0].OscDevices[2].SendPort); Assert.AreEqual(8000, systemConfiguration.Hardware.Devices[0].OscDevices[2].ListenPort); // OSC Client 2 Assert.AreEqual(eOSCDeviceType.OSCClient, systemConfiguration.Hardware.Devices[0].OscDevices[1].DeviceType); Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].OscDevices[1].Id.ObjectId); Assert.AreEqual(9002, systemConfiguration.Hardware.Devices[0].OscDevices[1].SendPort); Assert.AreEqual(-1, systemConfiguration.Hardware.Devices[0].OscDevices[1].ListenPort); Assert.AreEqual(18, systemConfiguration.Hardware.Devices[0].OscDevices[1].OscDeviceLayouts.Count); TestContext.WriteLine("Testing device zone parameters..."); Assert.AreEqual(12, systemConfiguration.Hardware.Devices[0].ZoneList.Count); Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].ZoneList[0].Id.ObjectId); Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].ZoneList[1].Id.ObjectId); Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].ZoneList[2].Id.ObjectId); Assert.AreEqual(4, systemConfiguration.Hardware.Devices[0].ZoneList[3].Id.ObjectId); Assert.AreEqual(5, systemConfiguration.Hardware.Devices[0].ZoneList[4].Id.ObjectId); Assert.AreEqual(6, systemConfiguration.Hardware.Devices[0].ZoneList[5].Id.ObjectId); Assert.AreEqual(7, systemConfiguration.Hardware.Devices[0].ZoneList[6].Id.ObjectId); Assert.AreEqual(8, systemConfiguration.Hardware.Devices[0].ZoneList[7].Id.ObjectId); Assert.AreEqual(9, systemConfiguration.Hardware.Devices[0].ZoneList[8].Id.ObjectId); Assert.AreEqual(10, systemConfiguration.Hardware.Devices[0].ZoneList[9].Id.ObjectId); Assert.AreEqual(11, systemConfiguration.Hardware.Devices[0].ZoneList[10].Id.ObjectId); Assert.AreEqual(12, systemConfiguration.Hardware.Devices[0].ZoneList[11].Id.ObjectId); TestContext.WriteLine("Testing device source parameters..."); Assert.AreEqual(6, systemConfiguration.Hardware.Devices[0].Sources.Count); Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].Sources[0].Id.ObjectId); Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].Sources[1].Id.ObjectId); Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].Sources[2].Id.ObjectId); Assert.AreEqual(4, systemConfiguration.Hardware.Devices[0].Sources[3].Id.ObjectId); Assert.AreEqual(5, systemConfiguration.Hardware.Devices[0].Sources[4].Id.ObjectId); Assert.AreEqual(6, systemConfiguration.Hardware.Devices[0].Sources[5].Id.ObjectId); TestContext.WriteLine("Testing some graphic parameters..."); Assert.AreEqual(2, systemConfiguration.Graphic.Building.Floors.Count); Assert.AreEqual("Wohnbereich", systemConfiguration.Graphic.Building.Floors[0].Name); Assert.AreEqual(@".\Images\Wohnbereich.bmp", systemConfiguration.Graphic.Building.Floors[0].FloorPlanPath); Assert.AreEqual("bmp", systemConfiguration.Graphic.Building.Floors[0].FloorPlanType); Assert.AreEqual(9, systemConfiguration.Graphic.Building.Floors[0].Zones.Count); Assert.AreEqual(new Address(100, 1), systemConfiguration.Graphic.Building.Floors[0].Zones[0].Id); Assert.AreEqual("Esszimmer", systemConfiguration.Graphic.Building.Floors[0].Zones[0].Name); Assert.AreEqual(@".\Images\Esszimmer.jpg", systemConfiguration.Graphic.Building.Floors[0].Zones[0].PicturePath); Assert.AreEqual("jpg", systemConfiguration.Graphic.Building.Floors[0].Zones[0].PictureType); Assert.AreEqual(4, systemConfiguration.Graphic.Building.Floors[0].Zones[0].FloorPlanCoordinates.Count); Assert.AreEqual(485, systemConfiguration.Graphic.Building.Floors[0].Zones[0].FloorPlanCoordinates[1].X); Assert.AreEqual(210, systemConfiguration.Graphic.Building.Floors[0].Zones[0].FloorPlanCoordinates[1].Y); Assert.AreEqual(6, systemConfiguration.Graphic.Sources.Count); Assert.AreEqual(new Address(100, 1), systemConfiguration.Graphic.Sources[0].Id); Assert.AreEqual("DAB Hama DIR3100", systemConfiguration.Graphic.Sources[0].Name); Assert.AreEqual(systemConfiguration.Graphic.Sources[0].PicturePath, @".\Images\Tuner.jpg"); Assert.AreEqual(systemConfiguration.Graphic.Sources[0].PictureType, "jpg"); TestContext.WriteLine("Testing some function parameters..."); Assert.AreEqual(12, systemConfiguration.Functions.Count); SleepFunction sleepFct = systemConfiguration.Functions[0] as SleepFunction; Assert.AreEqual(new SimpleId("2445f69e-a5a7-465e-95be-9179913d3780"), sleepFct.Id); Assert.AreEqual(new Address(100, 3), sleepFct.ZoneId); Assert.AreEqual(new TimeSpan(0, 60, 0), sleepFct.SleepDuration); Assert.AreEqual(new TimeSpan(20, 00, 0), sleepFct.ValidFrom); Assert.AreEqual(new TimeSpan(2, 0, 0), sleepFct.ValidTo); Assert.AreEqual(1, sleepFct.Commands.Count); AlarmFunction alarmFct = systemConfiguration.Functions[3] as AlarmFunction; Assert.AreEqual(new SimpleId("11111111-0001-1111-1111-111111111111"), alarmFct.Id); Assert.AreEqual(new Address(100, 2), alarmFct.ZoneId); Assert.AreEqual(new TimeSpan(6, 45, 0), alarmFct.AlarmTime); Assert.AreEqual(new TimeSpan(2, 0, 0), alarmFct.AlarmDuration); Assert.AreEqual(new Address(100, 1), alarmFct.SourceId); Assert.AreEqual(1, alarmFct.ValidOnDays.Count); Assert.AreEqual(DayOfWeek.Monday, alarmFct.ValidOnDays[0]); Assert.AreEqual(1, alarmFct.Commands.Count); ZoneChangeFunction zonechangeFct = systemConfiguration.Functions[6] as ZoneChangeFunction; Assert.AreEqual(new SimpleId("1234"), zonechangeFct.Id); Assert.AreEqual(1, zonechangeFct.ValidOnDays.Count); Assert.AreEqual(DayOfWeek.Tuesday, zonechangeFct.ValidOnDays[0]); Assert.AreEqual(0, zonechangeFct.Commands.Count); OscEventFunction oscFunc = systemConfiguration.Functions[7] as OscEventFunction; Assert.AreEqual(new SimpleId("504"), oscFunc.Id); Assert.AreEqual(1, oscFunc.ValidOnDays.Count); Assert.AreEqual(DayOfWeek.Friday, oscFunc.ValidOnDays[0]); Assert.AreEqual(2, oscFunc.Commands.Count); OscEventFunction oscFunc2 = systemConfiguration.Functions[8] as OscEventFunction; Assert.AreEqual(new SimpleId("505"), oscFunc2.Id); Assert.AreEqual("/4/toggle3", oscFunc2.OscLabel); Assert.AreEqual(null, oscFunc2.ValidOnDays); Assert.AreEqual(1, oscFunc2.Commands.Count); OscEventFunction oscFunc3 = systemConfiguration.Functions[9] as OscEventFunction; Assert.AreEqual(new SimpleId("506"), oscFunc3.Id); Assert.AreEqual("/4/toggle5", oscFunc3.OscLabel); Assert.AreEqual("100.1", oscFunc3.OscDevice.ToString()); Assert.AreEqual("SwitchOff", oscFunc3.OscEvent); Assert.AreEqual(null, oscFunc3.ValidOnDays); Assert.AreEqual(1, oscFunc3.Commands.Count); }