def setUp(self): GuiTest.setUp(self) self.mockController = Controller() self.main = Device("Main") self.mockController.addDevice(self.main) self.main.sendInputToOutput = MagicMock(return_value=1) self.preview = Device("Preview") self.mockController.addDevice(self.preview) self.preview.sendInputToOutput = MagicMock(return_value=1) self.extras = Device("Extras") self.mockController.addDevice(self.extras) self.extras.sendInputToOutput = MagicMock(return_value=1) fakeMainWindow = object() self.vs = VideoSwitcher(self.mockController, fakeMainWindow)
def __init__(self, controller): super(MainWindow, self).__init__() self.controller = controller self.setWindowTitle("AldatesX") self.resize(1024, 600) self.mainScreen = VideoSwitcher(controller, self) self.stack = QStackedWidget() self.stack.addWidget(self.mainScreen) outer = QWidget() mainLayout = QGridLayout() mainLayout.addWidget(self.stack, 0, 0, 1, 7) self.spc = SystemPowerWidget(controller, self) syspower = ExpandingButton() syspower.setText("Power") syspower.clicked.connect(self.showSystemPower) syspower.setIcon(QIcon("icons/system-shutdown.svg")) syspower.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) mainLayout.addWidget(syspower, 1, 0) self.bc = BlindsControl(controller, self) blinds = ExpandingButton() blinds.setText("Blinds") blinds.clicked.connect(lambda: self.showScreen(self.bc)) blinds.setIcon(QIcon("icons/blinds.svg")) blinds.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) mainLayout.addWidget(blinds, 1, 2) self.sc = ProjectorScreensControl(self.controller, self) screens = ExpandingButton() screens.setText("Screens") screens.clicked.connect(lambda: self.showScreen(self.sc)) screens.setIcon(QIcon("icons/screens.svg")) screens.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) mainLayout.addWidget(screens, 1, 3) self.advMenu = AdvancedMenu(self.controller, self) adv = ExpandingButton() adv.setText("Advanced") adv.setIcon(QIcon("icons/applications-system.svg")) adv.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) adv.clicked.connect(lambda: self.showScreen(self.advMenu)) mainLayout.addWidget(adv, 1, 5) mainLayout.addWidget(Clock(), 1, 6) mainLayout.setRowStretch(0, 8) mainLayout.setRowStretch(1, 0) outer.setLayout(mainLayout) self.setCentralWidget(outer) self.pnd = PowerNotificationDialog(self) self.pnd.accepted.connect(self.hidePowerDialog)
class TestVideoSwitcher(GuiTest): def setUp(self): GuiTest.setUp(self) self.mockController = Controller() self.main = Device("Main") self.mockController.addDevice(self.main) self.main.sendInputToOutput = MagicMock(return_value=1) self.preview = Device("Preview") self.mockController.addDevice(self.preview) self.preview.sendInputToOutput = MagicMock(return_value=1) self.extras = Device("Extras") self.mockController.addDevice(self.extras) self.extras.sendInputToOutput = MagicMock(return_value=1) fakeMainWindow = object() self.vs = VideoSwitcher(self.mockController, fakeMainWindow) def testSendInputsToOutputs(self): outputsGrid = self.vs.findChild(OutputsGrid) self.assertTrue(outputsGrid != None) self.vs.btnCamera1.click() self.preview.sendInputToOutput.assert_called_with(1, 1) # Camera 1 is previewed outputsGrid.btnChurch.click() self.main.sendInputToOutput.assert_called_with(1, 4) # Camera 1 sent to output 4 (church) self.vs.btnCamera3.click() self.preview.sendInputToOutput.assert_called_with(3, 1) # Camera 3 previewed outputsGrid.btnGallery.click() self.main.sendInputToOutput.assert_called_with(3, 6) # Camera 3 sent to output 6 (gallery) outputsGrid.btnPCMix.click() self.preview.sendInputToOutput.assert_called_with(3, 2) # Camera 3 sent to PC Mix self.vs.btnBlank.click() outputsGrid.btnAll.click() self.main.sendInputToOutput.assert_called_with(0, 0) # Everything blanked self.vs.btnExtras.click() self.preview.sendInputToOutput.assert_called_with(6, 1) # This is wired up the wrong way around - 5 on main vs 6 on preview self.vs.extrasSwitcher.inputs.buttons()[4].click() # Visuals PC video outputsGrid.btnAll.click() # This one click should trigger two takes, one on each switcher self.extras.sendInputToOutput.assert_called_with(8, 1) self.main.sendInputToOutput.assert_called_with(5, 0) # Extras to everywhere outputsGrid.btnPCMix.click() self.extras.sendInputToOutput.assert_called_with(8, 2) self.preview.sendInputToOutput.assert_called_with(6, 2) # Extras to PC Mix def testCantSendPCMixToItself(self): outputsGrid = self.vs.findChild(OutputsGrid) self.vs.btnVisualsPC.click() self.preview.sendInputToOutput.assert_called_with(5, 1) self.preview.sendInputToOutput.reset_mock() outputsGrid.btnPCMix.click() self.assertFalse(self.preview.sendInputToOutput.called) self.assertFalse(self.main.sendInputToOutput.called) self.assertFalse(outputsGrid.btnPCMix.isEnabled()) def testCantBlankPCMix(self): outputsGrid = self.vs.findChild(OutputsGrid) self.vs.btnBlank.click() outputsGrid.btnPCMix.click() self.assertFalse(self.preview.sendInputToOutput.called) self.assertFalse(self.main.sendInputToOutput.called) self.assertFalse(outputsGrid.btnPCMix.isEnabled()) def testKeyboardControls(self): QTest.keyClick(self.vs, Qt.Key_0) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(0, 0) QTest.keyClick(self.vs, Qt.Key_1) self.preview.sendInputToOutput.assert_called_with(1, 1) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(1, 0) QTest.keyClick(self.vs, Qt.Key_2) self.preview.sendInputToOutput.assert_called_with(2, 1) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(2, 0) QTest.keyClick(self.vs, Qt.Key_3) self.preview.sendInputToOutput.assert_called_with(3, 1) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(3, 0) QTest.keyClick(self.vs, Qt.Key_4) self.preview.sendInputToOutput.assert_called_with(4, 1) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(4, 0) QTest.keyClick(self.vs, Qt.Key_5) self.preview.sendInputToOutput.assert_called_with(6, 1) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(5, 0) QTest.keyClick(self.vs, Qt.Key_6) self.preview.sendInputToOutput.assert_called_with(5, 1) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(6, 0) self.main.sendInputToOutput.reset_mock() self.preview.sendInputToOutput.reset_mock() QTest.keyClick(self.vs, Qt.Key_7) self.assertFalse(self.preview.sendInputToOutput.called) QTest.keyClick(self.vs, Qt.Key_Space) self.main.sendInputToOutput.assert_called_with(6, 0) # which was the last valid input key pressed
class MainWindow(QMainWindow): def __init__(self, controller): super(MainWindow, self).__init__() self.controller = controller self.setWindowTitle("AldatesX") self.resize(1024, 600) self.mainScreen = VideoSwitcher(controller, self) self.stack = QStackedWidget() self.stack.addWidget(self.mainScreen) outer = QWidget() mainLayout = QGridLayout() mainLayout.addWidget(self.stack, 0, 0, 1, 7) self.spc = SystemPowerWidget(controller, self) syspower = ExpandingButton() syspower.setText("Power") syspower.clicked.connect(self.showSystemPower) syspower.setIcon(QIcon("icons/system-shutdown.svg")) syspower.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) mainLayout.addWidget(syspower, 1, 0) self.bc = BlindsControl(controller, self) blinds = ExpandingButton() blinds.setText("Blinds") blinds.clicked.connect(lambda: self.showScreen(self.bc)) blinds.setIcon(QIcon("icons/blinds.svg")) blinds.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) mainLayout.addWidget(blinds, 1, 2) self.sc = ProjectorScreensControl(self.controller, self) screens = ExpandingButton() screens.setText("Screens") screens.clicked.connect(lambda: self.showScreen(self.sc)) screens.setIcon(QIcon("icons/screens.svg")) screens.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) mainLayout.addWidget(screens, 1, 3) self.advMenu = AdvancedMenu(self.controller, self) adv = ExpandingButton() adv.setText("Advanced") adv.setIcon(QIcon("icons/applications-system.svg")) adv.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) adv.clicked.connect(lambda: self.showScreen(self.advMenu)) mainLayout.addWidget(adv, 1, 5) mainLayout.addWidget(Clock(), 1, 6) mainLayout.setRowStretch(0, 8) mainLayout.setRowStretch(1, 0) outer.setLayout(mainLayout) self.setCentralWidget(outer) self.pnd = PowerNotificationDialog(self) self.pnd.accepted.connect(self.hidePowerDialog) def showScreen(self, screenWidget): if self.stack.currentWidget() == screenWidget: self.stepBack() else: self.stack.insertWidget(0, screenWidget) self.stack.setCurrentWidget(screenWidget) def showSystemPower(self): self.showScreen(self.spc) def stepBack(self): self.stack.removeWidget(self.stack.currentWidget()) def errorBox(self, text): Dialogs.errorBox(text) def showPowerDialog(self, message): self.pnd.message = message self.pnd.exec_() def hidePowerDialog(self): self.pnd.close() if self.stack.currentWidget() == self.spc: self.stepBack() def updateOutputMappings(self, mapping): self.mainScreen.updateOutputMappings(mapping)