Index: .settings/org.eclipse.core.resources.prefs =================================================================== diff -u -r4aea809c4c3eaaeb674f79f550aff589e61d6739 -rf32e3b65bfcf747b049f76b3b5d2384ab37f4c4b --- .settings/org.eclipse.core.resources.prefs (.../org.eclipse.core.resources.prefs) (revision 4aea809c4c3eaaeb674f79f550aff589e61d6739) +++ .settings/org.eclipse.core.resources.prefs (.../org.eclipse.core.resources.prefs) (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -1,7 +1,12 @@ eclipse.preferences.version=1 +encoding//tst_AlarmStatusData/test.py=utf-8 +encoding//tst_AlarmTriggered/test.py=utf-8 +encoding//tst_Alarm_Colors/test.py=utf-8 +encoding//tst_DGLoadCellReadingsData/test.py=utf-8 encoding//tst_DGOperationMode/test.py=utf-8 encoding//tst_DGValvesStatesData/test.py=utf-8 encoding//tst_HDOperationModeData/test.py=utf-8 +encoding//tst_HDOutletFlowData/test.py=utf-8 encoding//tst_HDPressureOcclusionData/test.py=utf-8 encoding//tst_HomeScreen/test.py=utf-8 encoding//tst_Internals/test.py=utf-8 Index: shared/scripts/names.py =================================================================== diff -u -r4aea809c4c3eaaeb674f79f550aff589e61d6739 -rf32e3b65bfcf747b049f76b3b5d2384ab37f4c4b --- shared/scripts/names.py (.../names.py) (revision 4aea809c4c3eaaeb674f79f550aff589e61d6739) +++ shared/scripts/names.py (.../names.py) (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -12,6 +12,7 @@ # author Behrouz NematiPour # + DIALIN_LINK = False AUT_NAME = "denaliSquish" # Squish @@ -94,7 +95,7 @@ o_qquickview_alarm = {"type": "QQuickView", "unnamed": 1, "visible": True} o_alarm_dialog = {"container": o_Overlay, "id": "_backgroundRect", "type": "Rectangle", "unnamed": 1, "visible": True} o_okay_alarm = {"container": o_Overlay, "id": "_okay", "type": "TouchRect", "unnamed": 1, "visible": True} -o_alarm_bar = {"container": o_qquickview_alarm, "objectName": "NotificationBar", "type": "NotificationBar", "visible": True} +o_alarm_bar = {"container": o_qquickview_alarm, "objectName": "NotificationBar", "type": "NotificationBar"} o_treatmentStart_SalineTouchArea_TreatmentFluid = {"container": o_treatmentStart_TreatmentStart, "id": "_SalineTouchArea", "type": "TreatmentFluid", "unnamed": 1, "visible": True} o_treatmentStart_heparinTouchArea_TreatmentFluid = {"container": o_treatmentStart_TreatmentStart, "id": "_heparinTouchArea", "type": "TreatmentFluid", "unnamed": 1, "visible": True} o_dismiss_alarm = {"container": o_Overlay, "id": "_dismiss", "type": "TouchRect", "unnamed": 1, "visible": True} @@ -236,8 +237,85 @@ o_settingsHome_PressureOcclusionData_DialysateInletPumpOcclusion = {"container": o_settingsHome, "objectName": "_PressureOcclusionData3", "type": "Text"} o_settingsHome_PressureOcclusionData_DialysateOutletPumpOcclusion = {"container": o_settingsHome, "objectName": "_PressureOcclusionData4", "type": "Text"} +# OutletFlowData +o_settingsHome_OutletFlowData_RefUFVol = {"container": o_settingsHome, "objectName": "_OutletFlowData0", "type": "Text"} +o_settingsHome_OutletFlowData_MeasUFVol = {"container": o_settingsHome, "objectName": "_OutletFlowData1", "type": "Text"} +o_settingsHome_OutletFlowData_RotorSpeed = {"container": o_settingsHome, "objectName": "_OutletFlowData2", "type": "Text"} +o_settingsHome_OutletFlowData_MotorSpeed = {"container": o_settingsHome, "objectName": "_OutletFlowData3", "type": "Text"} +o_settingsHome_OutletFlowData_MotorCtlSpeed = {"container": o_settingsHome, "objectName": "_OutletFlowData4", "type": "Text"} +o_settingsHome_OutletFlowData_MotorCtlCurrent = {"container": o_settingsHome, "objectName": "_OutletFlowData5", "type": "Text"} +o_settingsHome_OutletFlowData_PWMDtCycle = {"container": o_settingsHome, "objectName": "_OutletFlowData6", "type": "Text"} + # Setting CANBusFaultCountText -o_settingsHome_canbusFaultCount = {"container": o_settingsHome, "id": "_canbusFaultCountText", "type": "Text" } -blood_sitting_too_long_alarm_5_min_Text = {"container": o_Overlay, "text": "Blood sitting too long alarm (>5 min). ", "type": "Text", "unnamed": 1, "visible": True} +o_settingsHome_canbusFaultCount = {"container": o_settingsHome, "id": "_canbusFaultCountText", "type": "Text" } +# Alarm System +o_NotificationDialog_Description_Text = {"container": o_Overlay, "objectName": "_NotificationDialog_Description", "type": "Text"} +o_NotificationDialog_OKAY = {"container": o_Overlay, "text": "OKAY", "type": "Text"} +AlarmPriory = [ 0, 1, 2, 3, 4 ] # 4 is out of range check + +AlarmTextMap = [ + "", + "Software Error.", + "Indication for when no alarms is a possible situation.", + "FPGA POST failure.", + "Watchdog POST failure.", + "UI communication POST failure.", + "Blood pump failed motor controller current check.", + "Blood pump failed motor off check. \nMeasured speed while commanded off.", + "Blood pump failed motor controller direction check.", + "Blood pump failed rotor speed check.", + "Dialysis inlet pump failed motor controller current check.", + "Dialysis inlet pump failed motor off check. \nMeasured speed while commanded off.", + "Dialysis inlet pump failed motor controller direction check.", + "Dialysis inlet pump failed rotor speed check.", + "Dialysis outlet pump failed motor controller current check.", + "Dialysis outlet pump failed motor off check. \nMeasured speed while commanded off.", + "Dialysis outlet pump failed motor controller direction check.", + "Dialysis outlet pump failed rotor speed check.", + "Watchdog expired error.", + "Real-time clock communication error.", + "Real-time clock configuration error.", + "Dialysate generator communication timeout.", + "User interface communication timeout.", + "Too many bad CRCs detected on received system messages.", + "Treatment stopped by user action - pressed stop button.", + "Blood sitting too long warning (>4 min).", + "Blood sitting too long alarm (>5 min).", + "Blood sitting too long alarm (>10 min).", + "System message needing acknowledgment was not acknowledged.", + "Blood pump occlusion detected.", + "Dialysate inlet pump occlusion detected.", + "Dialysate outlet pump occlusion detected.", + "Arterial pressure too low during treatment.", + "Arterial pressure too high during treatment.", + "Venous pressure too low during treatment.", + "Venous pressure too high during treatment.", + "Ultrafiltration rate is too high error during treatment.", + "Ultrafiltration volume accuracy error during treatment.", + "RTC battery low.", + "RTC or MCU timer inaccurate.", + "RTC or RAM operations failure (read or write).", + "EEPRON operations (read, write, erase) failure.", + "Manufacturing record CRC failure.", + "Service record CRC failure.", + "Calibration record CRC failure.", + "HW usage data failure.", + "Last disinfection date CRC error.", + "Pressure at outlet of RO pump is out of range.", + "DG temperature sensors fault.", + "DG temperature sensors values are inconsistent.", + "HD communication timeout.", + "FPGA not accepting commanded valve states.", + "Blood pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed.", + "Dialysate inlet pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed.", + "Dialysate outlet pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed.", + "Blood pump failed motor speed check. Measured vs. commanded.", + "Dialysate inlet pump failed motor speed check. Measured vs. commanded.", + "Dialysate outlet pump failed motor speed check. Measured vs. commanded.", + "Blood pump rotor speed too high.", + "Inlet water conductivity too low.", + "ALARM_ID_UNDEFINED" +] + Index: suite.conf =================================================================== diff -u -r0641bc72e2338b37ace48847abf301374b6620f6 -rf32e3b65bfcf747b049f76b3b5d2384ab37f4c4b --- suite.conf (.../suite.conf) (revision 0641bc72e2338b37ace48847abf301374b6620f6) +++ suite.conf (.../suite.conf) (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -1,10 +1,10 @@ -AUT=denaliSquish -0 -u +AUT=denali -u CWD= ENVVARS=envvars HOOK_SUB_PROCESSES=false IMPLICITAUTSTART=0 LANGUAGE=Python OBJECTMAPSTYLE=script -TEST_CASES=tst_Internals tst_HomeScreen tst_ServiceShutdown tst_TreatmentScreen tst_Treatment_Section_BloodDialysate tst_Treatment_BloodDialysateFlowRate tst_Treatment_Time tst_Treatment_Ultrafiltration tst_Treatment_PressureOcclusion tst_Treatment_ParametersRange tst_Treatment_Adjustment_BloodDialysate tst_Treatment_Adjustment_Duration tst_Treatment_Adjustment_Ultrafiltration tst_TreatmentStatesData tst_DGDrainPumpData tst_DGHeatersData tst_DGLoadCellReadingsData tst_DGPressureData tst_DGTemperaturesData tst_DGROPumpData tst_DGReservoirData tst_case2 tst_DGValvesStatesData tst_DGOperationMode tst_HDOperationModeData tst_HDPressureOcclusionData tst_CANBusFaultCount tst_DebugText tst_Alarm +TEST_CASES=tst_Internals tst_HomeScreen tst_ServiceShutdown tst_TreatmentScreen tst_Treatment_Section_BloodDialysate tst_Treatment_BloodDialysateFlowRate tst_Treatment_Time tst_Treatment_Ultrafiltration tst_Treatment_PressureOcclusion tst_Treatment_ParametersRange tst_Treatment_Adjustment_BloodDialysate tst_Treatment_Adjustment_Duration tst_Treatment_Adjustment_Ultrafiltration tst_TreatmentStatesData tst_DGDrainPumpData tst_DGHeatersData tst_DGLoadCellReadingsData tst_DGPressureData tst_DGTemperaturesData tst_DGROPumpData tst_DGReservoirData tst_case2 tst_DGValvesStatesData tst_DGOperationMode tst_HDOperationModeData tst_HDOutletFlowData tst_HDPressureOcclusionData tst_CANBusFaultCount tst_DebugText tst_Alarm_Colors tst_AlarmStatusData tst_AlarmTriggered tst_AlarmCleared VERSION=3 WRAPPERS=Qt Fisheye: Tag f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b refers to a dead (removed) revision in file `tst_Alarm/test.py'. Fisheye: No comparison available. Pass `N' to diff? Index: tst_AlarmCleared/test.py =================================================================== diff -u --- tst_AlarmCleared/test.py (revision 0) +++ tst_AlarmCleared/test.py (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +## +# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# copyright +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, +# IN PART OR IN WHOLE, +# WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# file tst_AlarmCleared +# date 2020/08/04 +# author Behrouz NematiPour +# + + +import names +if names.DIALIN_LINK: + from dialin.squish import utils, denaliMessages +else: + import utils + import denaliMessages + +# ALARM_ID = (priority, alarmID, escalates in, silent_espires_in, flags) +def test_values(vAlarmID): + test.compare(True, True, "No component has been implemented yet") + +def main(): + utils.tstStart(__file__) + + startApplication(names.AUT_NAME) + utils.waitForGUI(1) + + for i in range(len(names.AlarmTextMap)): + denaliMessages.setAlarmCleared(i) + test_values (i) + + denaliMessages.setAlarmCleared(1) + test_values (1) + + # Coverage + denaliMessages.setAlarmCleared(1) + test_values (1) + + denaliMessages.setAlarmCleared(0) + test_values (0) + + utils.tstDone() + Index: tst_AlarmStatusData/test.py =================================================================== diff -u --- tst_AlarmStatusData/test.py (revision 0) +++ tst_AlarmStatusData/test.py (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- + +## +# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# copyright +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, +# IN PART OR IN WHOLE, +# WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# file tst_AlarmStatus +# date 2020/08/04 +# author Behrouz NematiPour +# + + +import names +if names.DIALIN_LINK: + from dialin.squish import utils, denaliMessages +else: + import utils + import denaliMessages + +def isNotificationBar(): + if object.exists(names.o_alarm_bar): + alarmBar = findObject(names.o_alarm_bar) + return [alarmBar.visible, alarmBar] + return [False, None] + +def isNotificationDialog(): + if object.exists(names.o_NotificationDialog_Description_Text): + alarmTxt = findObject(names.o_NotificationDialog_Description_Text) + return [alarmTxt.visible, alarmTxt] + return [False, None] + +# ALARM_ID = (priority, alarmID, escalates in, silent_espires_in, flags) +def test_values(vPriority, vTopID, vEscalatesIn, vMuteTimeout, vFlags): + barVisible, barObj = isNotificationBar() + dlgVisible, dlgObj = isNotificationDialog() + + if vPriority == 0 and vTopID == 0: + test.compare(barVisible, False, "bar clr I{} P{} ".format(vTopID, vPriority)) + test.compare(dlgVisible, False, "dlg clr I{} P{} ".format(vTopID, vPriority)) +# return + + if barVisible: + if vTopID == len(names.AlarmTextMap) - 1: + test.compare(str(barObj.text), names.AlarmTextMap[vTopID] + " [{}]".format(vTopID), "bar I{} P{} :{}".format(vTopID, vPriority, str(barObj.text))) + else: + test.compare(str(barObj.text), names.AlarmTextMap[vTopID] , "bar I{} P{} :{}".format(vTopID, vPriority, str(barObj.text))) + return + + if dlgVisible: + if vTopID == len(names.AlarmTextMap) - 1: + test.compare(str(dlgObj.text), names.AlarmTextMap[vTopID] + " [{}]".format(vTopID), "bar I{} P{} :{}".format(vTopID, vPriority, str(dlgObj.text))) + else: + test.compare(str(dlgObj.text), names.AlarmTextMap[vTopID] , "dlg I{} P{} :{}".format(vTopID, vPriority, str(dlgObj.text))) + return + + + +def main(): + utils.tstStart(__file__) + + startApplication(names.AUT_NAME) + utils.waitForGUI(1) + + denaliMessages.setAlarmStatus(0, 0, 0, 0, 0) + test_values (0, 0, 0, 0, 0) + + for i in range(len(names.AlarmTextMap)): + # setting priority is to see notification dialog is also showing correct text + for j in names.AlarmPriory: + denaliMessages.setAlarmStatus(j, i, 0, 0, 0) + test_values (j, i, 0, 0, 0) + + denaliMessages.setAlarmStatus(1, 2, 3, 4, 5) + test_values (1, 2, 3, 4, 5) + + # Coverage + denaliMessages.setAlarmStatus(1, 2, 3, 4, 5) + test_values (1, 2, 3, 4, 5) + + denaliMessages.setAlarmStatus(0, 1, 3, 4, 5) + test_values (0, 1, 3, 4, 5) + + denaliMessages.setAlarmStatus(0, 0, 0, 0, 0) + test_values (0, 0, 0, 0, 0) + + utils.tstDone() + Index: tst_AlarmTriggered/test.py =================================================================== diff -u --- tst_AlarmTriggered/test.py (revision 0) +++ tst_AlarmTriggered/test.py (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +## +# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# copyright +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, +# IN PART OR IN WHOLE, +# WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# file tst_AlarmTriggered +# date 2020/08/04 +# author Behrouz NematiPour +# + + +import names +if names.DIALIN_LINK: + from dialin.squish import utils, denaliMessages +else: + import utils + import denaliMessages + +# ALARM_ID = (priority, alarmID, escalates in, silent_espires_in, flags) +def test_values(vAlarmID): + test.compare(True, True, "No component has been implemented yet") + +def main(): + utils.tstStart(__file__) + + startApplication(names.AUT_NAME) + utils.waitForGUI(1) + + for i in range(len(names.AlarmTextMap)): + denaliMessages.setAlarmTriggered(i) + test_values (i) + + denaliMessages.setAlarmTriggered(1) + test_values (1) + + # Coverage + denaliMessages.setAlarmTriggered(1) + test_values (1) + + denaliMessages.setAlarmTriggered(0) + test_values (0) + + utils.tstDone() + Index: tst_Alarm_Colors/test.py =================================================================== diff -u --- tst_Alarm_Colors/test.py (revision 0) +++ tst_Alarm_Colors/test.py (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- + +## +# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# copyright +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, +# IN PART OR IN WHOLE, +# WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# file tst_Alarm +# date 2020/06/26 +# author Peter Lucia +# + +import os +from time import sleep + +import names +if names.DIALIN_LINK: + from dialin.squish import utils, denaliMessages +else: + import utils + import denaliMessages + + +HIGH = 3 +MED = 2 +LOW = 1 +NONE = 0 + +HIGH_PRIORITY_COLOR = "#c53b33" +MED_LOW_PRIORITY_COLOR = "#f5a623" + +class Alarms: + + # ALARM_ID = (priority, alarmID, escalates in, silent_espires_in, flags) + ALARM_ID_NO_ALARM = (NONE, 0, 0, 0, 0) + ALARM_ID_SOFTWARE_FAULT = (HIGH, 1, 0, 0, 0) + ALARM_ID_STUCK_BUTTON_TEST_FAILED = (HIGH, 2, 0, 0, 0) + ALARM_ID_FPGA_POST_TEST_FAILED = (HIGH, 3, 0, 0, 0) + ALARM_ID_WATCHDOG_POST_TEST_FAILED = (HIGH, 4, 0, 0, 0) + ALARM_ID_UI_COMM_POST_FAILED = (HIGH, 5, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK = (MED, 6, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_OFF_CHECK = (MED, 7, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK = (MED, 8, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK = (HIGH, 9, 0, 0, 0) + ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK = (MED, 10, 0, 0, 0) + ALARM_ID_DIAL_IN_PUMP_OFF_CHECK = (MED, 11, 0, 0, 0) + ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK = (MED, 12, 0, 0, 0) + ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK = (HIGH, 13, 0, 0, 0) + ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK = (MED, 14, 0, 0, 0) + ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK = (MED, 15, 0, 0, 0) + ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK = (MED, 16, 0, 0, 0) + ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK = (HIGH, 17, 0, 0, 0) + ALARM_ID_WATCHDOG_EXPIRED = (HIGH, 18, 0, 0, 0) + ALARM_ID_RTC_COMM_ERROR = (HIGH, 19, 0, 0, 0) + ALARM_ID_RTC_CONFIG_ERROR = (HIGH, 20, 0, 0, 0) + ALARM_ID_DG_COMM_TIMEOUT = (HIGH, 21, 0, 0, 0) + ALARM_ID_UI_COMM_TIMEOUT = (HIGH, 22, 0, 0, 0) + ALARM_ID_COMM_TOO_MANY_BAD_CRCS = (HIGH, 23, 0, 0, 0) + ALARM_ID_TREATMENT_STOPPED_BY_USER = (LOW, 24, 0, 0, 0) + ALARM_ID_BLOOD_SITTING_WARNING = (MED, 25, 0, 0, 0) + ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RESUME = (MED, 26, 0, 0, 0) + ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RINSEBACK = (HIGH, 27, 0, 0, 0) + ALARM_ID_CAN_MESSAGE_NOT_ACKED = (HIGH, 28, 0, 0, 0) + ALARM_ID_OCCLUSION_BLOOD_PUMP = (HIGH, 29, 0, 0, 0) + ALARM_ID_OCCLUSION_DIAL_IN_PUMP = (HIGH, 30, 0, 0, 0) + ALARM_ID_OCCLUSION_DIAL_OUT_PUMP = (HIGH, 31, 0, 0, 0) + ALARM_ID_ARTERIAL_PRESSURE_LOW = (HIGH, 32, 0, 0, 0) + ALARM_ID_ARTERIAL_PRESSURE_HIGH = (HIGH, 33, 0, 0, 0) + ALARM_ID_VENOUS_PRESSURE_LOW = (HIGH, 34, 0, 0, 0) + ALARM_ID_VENOUS_PRESSURE_HIGH = (HIGH, 35, 0, 0, 0) + ALARM_ID_UF_RATE_TOO_HIGH_ERROR = (HIGH, 36, 0, 0, 0) + ALARM_ID_UF_VOLUME_ACCURACY_ERROR = (HIGH, 37, 0, 0, 0) + ALARM_ID_RTC_BATTERY_LOW = (HIGH, 38, 0, 0, 0) + ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE = (HIGH, 39, 0, 0, 0) + ALARM_ID_RTC_RAM_OPS_ERROR = (HIGH, 40, 0, 0, 0) + ALARM_ID_NVDATA_EEPROM_OPS_FAILURE = (HIGH, 41, 0, 0, 0) + ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR = (HIGH, 42, 0, 0, 0) + ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR = (HIGH, 43, 0, 0, 0) + ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR = (HIGH, 44, 0, 0, 0) + ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR = (HIGH, 45, 0, 0, 0) + ALARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR = (HIGH, 46, 0, 0, 0) + ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE = (HIGH, 47, 0, 0, 0) + ALARM_ID_TEMPERATURE_SENSORS_OUT_OF_RANGE = (HIGH, 48, 0, 0, 0) + ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT = (HIGH, 49, 0, 0, 0) + ALARM_ID_HD_COMM_TIMEOUT = (HIGH, 50, 0, 0, 0) + ALARM_ID_VALVE_CONTROL_FAILURE = (HIGH, 51, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = (HIGH, 52, 0, 0, 0) + ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = (HIGH, 53, 0, 0, 0) + ALARM_ID_DIAL_OUT_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = (HIGH, 54, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK = (HIGH, 55, 0, 0, 0) + ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK = (HIGH, 56, 0, 0, 0) + ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK = (HIGH, 57, 0, 0, 0) + ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH = (HIGH, 58, 0, 0, 0) + ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE = (HIGH, 59, 0, 0, 0) + ALARM_ID_DOES_NOT_EXIST = (HIGH, 99, 0, 0, 0) + + +def test_alarms(alarms, alarm_list, skip_hd_timeout=True): + """ + Tests a list of alarm tuples. + + @param alarms: Alarm class object + @param alarms_list: list of alarm tuples to test. + @param skip_timeout: whether to skip the hd comm timeout error, default = False + @return: None + """ + + for idx, (priority, alarm_id, escalates_in, silent_expires_in, flags) in enumerate(alarm_list): + if (alarm_list[idx] == alarms.ALARM_ID_NO_ALARM): + continue + if (alarm_list[idx] == alarms.ALARM_ID_HD_COMM_TIMEOUT) and skip_hd_timeout: + continue + #test.log("Testing {0} = {1}".format(alarm_list[idx], alarm_id)) + color = HIGH_PRIORITY_COLOR if priority == HIGH else MED_LOW_PRIORITY_COLOR + denaliMessages.setAlarmStatus(priority, alarm_id, escalates_in, silent_expires_in, flags) + sleep(0.5) + if priority == HIGH: + test.compare(waitForObjectExists(names.o_alarm_dialog).color.name, color) + sleep(0.5) + mouseClick(waitForObjectExists(names.o_dismiss_alarm)) + else: + mouseClick(waitForObjectExists(names.o_alarm_bar)) + sleep(0.5) + test.compare(waitForObjectExists(names.o_alarm_dialog).color.name, color) + sleep(0.5) + mouseClick(waitForObjectExists(names.o_okay_alarm)) + sleep(0.5) + mouseClick(waitForObjectExists(names.o_alarm_bar)) + sleep(0.5) + mouseClick(waitForObjectExists(names.o_dismiss_alarm)) + + + + sleep(0.5) + denaliMessages.clear_all_alarms() + +def test_alarm_acknowledge(alarms): + """ + Exercises the acknowledge alarm functionality + + @return: None + """ + #test.log("Testing alarm acknowledgement") + + denaliMessages.clear_all_alarms() + sleep(0.5) + + + denaliMessages.setAlarmStatus(*alarms.ALARM_ID_SOFTWARE_FAULT) + sleep(0.5) + test.compare(waitForObjectExists(names.o_alarm_dialog).color.name, HIGH_PRIORITY_COLOR) + sleep(0.5) + mouseClick(waitForObjectExists(names.o_okay_alarm)) + sleep(0.5) + denaliMessages.clear_all_alarms() + sleep(0.5) + denaliMessages.setAlarmStatus(*alarms.ALARM_ID_SOFTWARE_FAULT) + sleep(0.5) + + +def get_alarm_list(alarms): + """ + Gets the alarm list + + @return: The alarms (list of tuples) + """ + + alarm_list = [] + for attr in dir(alarms): + if not callable(getattr(alarms, attr)) and attr.startswith("ALARM_ID"): + alarm_list.append(getattr(alarms, attr)) + + return sorted(alarm_list, key = lambda val: val [1]) + + +def main(): + """ + Main function to test the alarms. + + @return: None + """ + utils.tstStart(__file__) + + startApplication(names.AUT_NAME + " -q") + sleep(0.5) + + alarms = Alarms() + alarm_list = get_alarm_list(alarms) + + test_alarms(alarms, alarm_list) + + # test the alarm acknowledgement + test_alarm_acknowledge(alarms) + + os.system("killall " + names.AUT_NAME) + sleep(3) + + startApplication(names.AUT_NAME) + sleep(0.5) + alarm_list = [alarms.ALARM_ID_HD_COMM_TIMEOUT] + + # test hd comm timeout since it was skipped in the last test + test_alarms(alarms, alarm_list, skip_hd_timeout = False) + + utils.tstDone() + Index: tst_HDOutletFlowData/test.py =================================================================== diff -u --- tst_HDOutletFlowData/test.py (revision 0) +++ tst_HDOutletFlowData/test.py (revision f32e3b65bfcf747b049f76b3b5d2384ab37f4c4b) @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +## +# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# copyright +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, +# IN PART OR IN WHOLE, +# WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# file tst_HDOutletFlowData +# date 2020/08/04 +# author Behrouz NematiPour +# + +import names +import utils +import denaliMessages + +def gotoScreenNtest_Contains_OutletFlowData(): + mouseClick(waitForObject(names.o_mainMenu_settings)) + test_values(0, 0, 0, 0, 0, 0, 0) + + +def test_values(vRefUFVol, vMeasUFVol, vRotorSpeed, vMotorSpeed, vMotorCtlSpeed, vMotorCtlCurrent, vPWMDtCycle): + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_RefUFVol ).text), "{:.2f}".format(utils.ml2l(vRefUFVol ))) + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_MeasUFVol ).text), "{:.2f}".format(utils.ml2l(vMeasUFVol ))) + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_RotorSpeed ).text), "{:.2f}".format( vRotorSpeed )) + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_MotorSpeed ).text), "{:.2f}".format( vMotorSpeed )) + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_MotorCtlSpeed ).text), "{:.2f}".format( vMotorCtlSpeed )) + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_MotorCtlCurrent).text), "{:.2f}".format( vMotorCtlCurrent )) + test.compare(str(waitForObjectExists(names.o_settingsHome_OutletFlowData_PWMDtCycle ).text), "%" "{:.2f}".format( vPWMDtCycle )) + + +def main(): + utils.tstStart(__file__) + + startApplication(names.AUT_NAME) + utils.waitForGUI(1) + + gotoScreenNtest_Contains_OutletFlowData() + utils.waitForGUI(1) + + step = 10 + for i in range ( 10, 500, step): + denaliMessages.setTreatmentUltrafiltration(i, i + step * 1, i + step * 2, i + step * 3, i + step * 4, i + step * 5, i + step * 6) + test_values (i, i + step * 1, i + step * 2, i + step * 3, i + step * 4, i + step * 5, i + step * 6) + + denaliMessages.setTreatmentUltrafiltration(100, 200, 300, 400, 500, 600, 700) + test_values (100, 200, 300, 400, 500, 600, 700) + + # Coverage + denaliMessages.setTreatmentUltrafiltration(100, 200, 300, 400, 500, 600, 700) + test_values (100, 200, 300, 400, 500, 600, 700) + + denaliMessages.setTreatmentUltrafiltration(0, 0, 0, 0, 0, 0, 0) + test_values (0, 0, 0, 0, 0, 0, 0) + + utils.tstDone()