public void Test_SelectDeviceNavigateLeftThroughSubItems() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockSerialClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockSerialClient; controller.MqttClient = mockMqttClient; CreateExampleDevice(devicesDirectory, "irrigator1", "Irrigator1", "irrigator", "host"); CreateExampleDevice(devicesDirectory, "illuminator1", "Illuminator1", "illuminator", "host"); CreateExampleDevice(devicesDirectory, "ventilator1", "Ventilator1", "ventilator", "host"); // Initialize the controller controller.Initialize(); // Run a loop to detect all the devices controller.RunLoop(); Assert.AreEqual(3, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(0, controller.MenuIndex, "The menu index doesn't match."); // Clear all alerts so they're skipped controller.Alerts.Clear(); controller.MenuRight(); Assert.AreEqual(1, controller.MenuIndex, "The menu index doesn't match."); controller.PressMenuSelect(); Assert.IsTrue(controller.DeviceIsSelected, "The device wasn't selected."); Assert.AreEqual(0, controller.SubMenuIndex, "The sub menu index doesn't match."); // Clear all alerts so they're skipped controller.Alerts.Clear(); var totalSubItems = controller.MenuStructure [controller.CurrentDevice.DeviceGroup].Items.Count; for (int i = totalSubItems - 1; i >= 0; i--) { controller.PressMenuLeft(); Assert.AreEqual(i, controller.SubMenuIndex, "The sub menu index doesn't match."); } controller.PressMenuLeft(); Assert.AreEqual(totalSubItems - 1, controller.SubMenuIndex, "The sub menu index didn't go back to 0 as it should have."); }
public void Test_RemoveMissingDevice() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockClient; controller.MqttClient = mockMqttClient; var deviceInfo = new DeviceInfo(); deviceInfo.DeviceName = "device1"; deviceInfo.DeviceGroup = "DeviceGroup"; deviceInfo.DeviceLabel = "DeviceLabel"; controller.DeviceList.Add("device1", deviceInfo); //CreateExampleDevice (devicesDirectory, "device1", "Device1", "Group"); controller.RunLoop(); Assert.AreEqual(0, controller.DeviceList.Count, "The device wasn't removed from the list."); Assert.AreEqual(1, mockMqttClient.Unsubscriptions.Count, "The device MQTT subscriptions weren't removed."); }
public void Test_FixMenuIndexAfterDevicedRemoved_Decrement() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockClient; controller.MqttClient = mockMqttClient; var deviceInfo = new DeviceInfo(); deviceInfo.DeviceName = "device1"; deviceInfo.DeviceGroup = "DeviceGroup"; deviceInfo.DeviceLabel = "DeviceLabel"; var deviceInfo2 = new DeviceInfo(); deviceInfo2.DeviceName = "device2"; deviceInfo2.DeviceGroup = "DeviceGroup"; deviceInfo2.DeviceLabel = "DeviceLabel"; var deviceInfo3 = new DeviceInfo(); deviceInfo3.DeviceName = "device2"; deviceInfo3.DeviceGroup = "DeviceGroup"; deviceInfo3.DeviceLabel = "DeviceLabel"; controller.DeviceList.Add("device1", deviceInfo); controller.DeviceList.Add("device2", deviceInfo2); controller.DeviceList.Add("device3", deviceInfo3); controller.MenuIndex = 2; controller.RemoveDevice(deviceInfo3); Assert.AreEqual(1, controller.MenuIndex, "Didn't correct the menu index."); }
public void Test_NavigateLeftThroughDevices() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockClient; controller.MqttClient = mockMqttClient; CreateExampleDevice(devicesDirectory, "irrigator1", "Irrigator1", "irrigator", "host"); CreateExampleDevice(devicesDirectory, "illuminator1", "Illuminator1", "illuminator", "host"); CreateExampleDevice(devicesDirectory, "ventilator1", "Ventilator1", "ventilator", "host"); // Run a loop to detect all the devices controller.RunLoop(); Assert.AreEqual(3, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(0, controller.MenuIndex, "The menu index doesn't match."); // Clear all alerts so they're skipped controller.Alerts.Clear(); // Move left to go to the end of the list controller.PressMenuLeft(); // Loop backwards through the list for (int i = 2; i >= 0; i--) { Assert.AreEqual(i, controller.MenuIndex, "The menu index doesn't match."); // Move left again controller.PressMenuLeft(); } Assert.AreEqual(2, controller.MenuIndex, "The menu index didn't go back to 2 as it should have."); }
public void Test_NavigateSelectDevice() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockSerialClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockSerialClient; controller.MqttClient = mockMqttClient; CreateExampleDevice(devicesDirectory, "irrigator1", "Irrigator1", "irrigator", "host"); CreateExampleDevice(devicesDirectory, "illuminator1", "Illuminator1", "illuminator", "host"); CreateExampleDevice(devicesDirectory, "ventilator1", "Ventilator1", "ventilator", "host"); // Initialize the controller controller.Initialize(); // Run a loop to detect all the devices controller.RunLoop(); Assert.AreEqual(3, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(0, controller.MenuIndex, "The menu index doesn't match."); // Clear all alerts so they're skipped controller.Alerts.Clear(); controller.MenuRight(); Assert.AreEqual(1, controller.MenuIndex, "The menu index doesn't match."); controller.PressMenuSelect(); Assert.IsTrue(controller.DeviceIsSelected, "The device wasn't selected."); }
public void Test_DetectNewDevice() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockClient; controller.MqttClient = mockMqttClient; CreateExampleDevice(devicesDirectory, "device1", "Device1", "Group", "host"); controller.RunLoop(); Assert.AreEqual(1, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(2, mockMqttClient.Subscriptions.Count, "The device MQTT subscriptions weren't found."); }
public void Test_NavigateToAndEnableShowOnlyLocalDevices() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.Client = mockClient; controller.MqttClient = mockMqttClient; controller.SelfHostName = "host"; Console.WriteLine("Initializing to generate menu structure..."); controller.Initialize(); CreateExampleDevice(devicesDirectory, "ui1", "Ui1", "ui", "host"); CreateExampleDevice(devicesDirectory, "irrigator1", "Irrigator1", "irrigator", "host"); CreateExampleDevice(devicesDirectory, "irrigator2", "Irrigator2", "irrigator", "remote"); Console.WriteLine("Running a loop to detect UI device..."); controller.RunLoop(); Assert.AreEqual(3, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(0, controller.MenuIndex, "The menu index doesn't match."); controller.Alerts.Clear(); Console.WriteLine("Device output:"); Console.WriteLine(mockClient.Output); mockClient.ClearOutput(); Console.WriteLine("Setting menu index to the UI device..."); controller.MenuIndex = 2; Console.WriteLine("Pressing down button to select the UI device..."); controller.PressMenuDown(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockClient.Output); mockClient.ClearOutput(); Console.WriteLine("Pressing right button to move to next option..."); controller.MenuRight(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Assert.IsTrue(mockClient.Output.Contains("Devices all"), "Output is invalid."); Console.WriteLine("Device output:"); Console.WriteLine(mockClient.Output); mockClient.ClearOutput(); Console.WriteLine("Pressing up button to change to local devices only..."); controller.PressMenuUp(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Assert.IsTrue(mockClient.Output.Contains("Devices local"), "Output is invalid."); Console.WriteLine("Device output:"); Console.WriteLine(mockClient.Output); mockClient.ClearOutput(); Console.WriteLine("Pressing select button to submit the change..."); controller.PressMenuSelect(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockClient.Output); mockClient.ClearOutput(); Assert.IsTrue(controller.ShowLocalDevicesOnly, "The ShowLocalDevicesOnly property wasn't updated."); Assert.AreEqual(2, controller.DeviceList.Count, "The device list count is incorrect. The remote device shouldn't have been loaded."); Assert.AreEqual(0, controller.MenuIndex, "The menu index should have been reset."); Assert.IsFalse(controller.DeviceIsSelected, "The device should have been deselected after reload."); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockClient.Output); mockClient.ClearOutput(); }
public void Test_UploadSketch() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockSerialClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var mockProcessStarter = new MockProcessStarter(); mockProcessStarter.EnableBaseFunctionality = true; var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.TargetDirectory = Environment.CurrentDirectory; controller.Client = mockSerialClient; controller.MqttClient = mockMqttClient; controller.Starter = mockProcessStarter; controller.SelfHostName = "host"; Console.WriteLine("Initializing to generate menu structure..."); controller.Initialize(); CreateExampleDevice(devicesDirectory, "ui1", "Ui1", "ui", "host"); Console.WriteLine("Running a loop to detect UI device..."); controller.RunLoop(); Assert.AreEqual(1, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(0, controller.MenuIndex, "The menu index doesn't match."); controller.Alerts.Clear(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); Console.WriteLine("Setting menu index to the UI device..."); controller.MenuIndex = 0; controller.SubMenuIndex = 2; controller.DeviceIsSelected = true; Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); Assert.IsTrue(mockSerialClient.Output.Contains("Ui1"), "Didn't select the correct device."); Assert.IsTrue(mockSerialClient.Output.Contains("Upload sketch"), "Didn't select the correct sub menu option."); mockSerialClient.ClearOutput(); Console.WriteLine("Selecting the upload sketch option..."); controller.PressMenuSelect(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); var menuItemInfo = (UploadSketchMenuItemInfo)controller.GetCurrentMenuItemInfo(); Assert.AreEqual(menuItemInfo.StepIndex, 1, "Incorrect step index."); Assert.IsTrue(mockSerialClient.Output.Contains("Ui1"), "Displaying the wrong device."); Assert.IsTrue(mockSerialClient.Output.Contains("SM Monitor"), "Displaying the wrong sketch device."); mockSerialClient.ClearOutput(); Console.WriteLine("Pressing up to change to the next sketch type..."); controller.PressMenuUp(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); Assert.AreEqual(menuItemInfo.StepIndex, 1, "Incorrect step index."); Assert.AreEqual(menuItemInfo.SelectedSketchIndex, 1, "Incorrect sketch index."); Assert.IsTrue(mockSerialClient.Output.Contains("Ui1"), "Displaying the wrong device."); Assert.IsTrue(mockSerialClient.Output.Contains("Irrigator"), "Displaying the wrong sketch device."); mockSerialClient.ClearOutput(); Console.WriteLine("Pressing select to choose this sketch type..."); controller.PressMenuSelect(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); Assert.AreEqual(menuItemInfo.StepIndex, 2, "Incorrect step index."); Assert.AreEqual(menuItemInfo.SelectedSketchIndex, 1, "Incorrect sketch index."); Assert.IsTrue(mockSerialClient.Output.Contains("Ui1"), "Displaying the wrong device."); Assert.IsTrue(mockSerialClient.Output.Contains("nano"), "Displaying the wrong board."); mockSerialClient.ClearOutput(); Console.WriteLine("Pressing up to change to the next board type..."); controller.PressMenuUp(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); Assert.AreEqual(menuItemInfo.StepIndex, 2, "Incorrect step index."); Assert.AreEqual(menuItemInfo.SelectedSketchIndex, 1, "Incorrect sketch index."); Assert.AreEqual(menuItemInfo.SelectedBoardIndex, 1, "Incorrect board index."); Assert.IsTrue(mockSerialClient.Output.Contains("Ui1"), "Displaying the wrong device."); Assert.IsTrue(mockSerialClient.Output.Contains("uno"), "Displaying the wrong board."); mockSerialClient.ClearOutput(); Console.WriteLine("Pressing select to choose this board type..."); controller.PressMenuSelect(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); /*Assert.AreEqual (menuItemInfo.StepIndex, 2, "Incorrect step index."); * Assert.AreEqual (menuItemInfo.SelectedSketchIndex, 1, "Incorrect sketch index."); * Assert.AreEqual (menuItemInfo.SelectedBoardIndex, 1, "Incorrect board index."); * Assert.IsTrue (mockSerialClient.Output.Contains ("Ui1"), "Displaying the wrong device."); * Assert.IsTrue (mockSerialClient.Output.Contains ("nano"), "Displaying the wrong board.");*/ mockSerialClient.ClearOutput(); /* * Console.WriteLine ("Pressing down button to change to yes..."); * controller.MenuDown (); * * Console.WriteLine ("Running a loop to update display..."); * controller.RunLoop (); * * Assert.IsTrue (mockSerialClient.Output.Contains ("Remove yes"), "Didn't change to yes as expected."); * * Console.WriteLine ("Device output:"); * Console.WriteLine (mockSerialClient.Output); * mockSerialClient.ClearOutput (); * * Console.WriteLine ("Creating remove script..."); * var removeScriptName = "remove-garden-device.sh"; * var removeScriptContent = "rm -vr " + controller.DevicesDirectory + "/$1"; * * File.WriteAllText (Path.Combine (controller.TargetDirectory, removeScriptName), removeScriptContent); * * Console.WriteLine ("Pressing select button to execute the removal..."); * controller.MenuSelect (); * * Console.WriteLine ("Device output:"); * Console.WriteLine (mockSerialClient.Output); * mockSerialClient.ClearOutput (); * * Console.WriteLine ("Running a loop to update display..."); * controller.RunLoop (); * * Console.WriteLine ("Device output:"); * Console.WriteLine (mockSerialClient.Output); * mockSerialClient.ClearOutput (); * * var expectedCommand = "cd " + controller.TargetDirectory + " && sh " + removeScriptName + " irrigator2"; * * Assert.AreEqual (expectedCommand, mockProcessStarter.LastCommandRun, "Invalid command."); * * Assert.IsFalse (controller.DeviceList.ContainsKey ("irrigator2"), "The device wasn't removed."); * * Assert.AreEqual (0, controller.MenuIndex, "Invalid menu index."); * Assert.AreEqual (0, controller.SubMenuIndex, "Invalid sub menu index."); * * Console.WriteLine ("Running a loop to detect changes..."); * controller.RunLoop (); * * Console.WriteLine ("Device output:"); * Console.WriteLine (mockSerialClient.Output); * mockSerialClient.ClearOutput ();*/ }
public void Test_RemoveDevice() { Console.WriteLine(Environment.CurrentDirectory); var devicesDirectory = Path.GetFullPath("devices"); Directory.CreateDirectory(devicesDirectory); var mockSerialClient = new MockSerialClientWrapper(); var mockMqttClient = new MockMqttClientWrapper(); var mockProcessStarter = new MockProcessStarter(); mockProcessStarter.EnableBaseFunctionality = true; var controller = new SystemMenuController(); controller.DevicesDirectory = devicesDirectory; controller.TargetDirectory = Environment.CurrentDirectory; controller.Client = mockSerialClient; controller.MqttClient = mockMqttClient; controller.Starter = mockProcessStarter; controller.SelfHostName = "host"; Console.WriteLine("Initializing to generate menu structure..."); controller.Initialize(); CreateExampleDevice(devicesDirectory, "ui1", "Ui1", "ui", "host"); CreateExampleDevice(devicesDirectory, "irrigator1", "Irrigator1", "irrigator", "host"); CreateExampleDevice(devicesDirectory, "irrigator2", "Irrigator2", "irrigator", "remote"); Console.WriteLine("Running a loop to detect UI device..."); controller.RunLoop(); Assert.AreEqual(3, controller.DeviceList.Count, "The device wasn't added to the list."); Assert.AreEqual(0, controller.MenuIndex, "The menu index doesn't match."); controller.Alerts.Clear(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); Console.WriteLine("Setting menu index to the UI device..."); controller.MenuIndex = 1; controller.SubMenuIndex = 7; controller.DeviceIsSelected = true; Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Assert.IsTrue(mockSerialClient.Output.Contains("Irrigator2*"), "Didn't select the correct device."); Assert.IsTrue(mockSerialClient.Output.Contains("Remove no"), "Didn't select the correct sub menu option."); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); Console.WriteLine("Pressing down button to change to yes..."); controller.PressMenuDown(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Assert.IsTrue(mockSerialClient.Output.Contains("Remove yes"), "Didn't change to yes as expected."); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); Console.WriteLine("Creating remove script..."); var removeScriptName = "remove-garden-device.sh"; var removeScriptContent = "rm -vr " + controller.DevicesDirectory + "/$1"; File.WriteAllText(Path.Combine(controller.TargetDirectory, removeScriptName), removeScriptContent); Console.WriteLine("Pressing select button to execute the removal..."); controller.PressMenuSelect(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); Console.WriteLine("Running a loop to update display..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); var expectedCommand = "cd " + controller.TargetDirectory + " && sh " + removeScriptName + " irrigator2"; Assert.AreEqual(expectedCommand, mockProcessStarter.LastCommandRun, "Invalid command."); Assert.IsFalse(controller.DeviceList.ContainsKey("irrigator2"), "The device wasn't removed."); Assert.AreEqual(0, controller.MenuIndex, "Invalid menu index."); Assert.AreEqual(0, controller.SubMenuIndex, "Invalid sub menu index."); Console.WriteLine("Running a loop to detect changes..."); controller.RunLoop(); Console.WriteLine("Device output:"); Console.WriteLine(mockSerialClient.Output); mockSerialClient.ClearOutput(); }