def test_data(good_states):
    for data in good_states:
        table_model = DigitalStateTableModel(allow_is_used=True)
        table_model.setHalPins(data[0])
        table_model.setStates(data[1])
        table_model.setIsUsed(data[2])

        for i, itm in enumerate(data[1]):
            assert itm == table_model.data(
                table_model.index(i, table_model.nameColumn(),
                                  QtCore.QModelIndex()), QtCore.Qt.DisplayRole)

        for i, itm in enumerate(data[2]):
            assert itm == table_model.data(
                table_model.index(i, table_model.isUsedColumn(),
                                  QtCore.QModelIndex()), QtCore.Qt.DisplayRole)
def test_headerData(good_states):
    for data in good_states:
        table_model = DigitalStateTableModel(allow_is_used=True)
        table_model.setHalPins(data[0])
        table_model.setStates(data[1])
        table_model.setIsUsed(data[2])

        assert 'GUI Name' == table_model.headerData(table_model.nameColumn(),
                                                    QtCore.Qt.Horizontal,
                                                    QtCore.Qt.DisplayRole)
        assert 'Is Used' == table_model.headerData(table_model.isUsedColumn(),
                                                   QtCore.Qt.Horizontal,
                                                   QtCore.Qt.DisplayRole)
        assert 'Is Used' != table_model.headerData(0, QtCore.Qt.Horizontal,
                                                   QtCore.Qt.DisplayRole)

        #check vertical header
        num_rows = len(data[1])
        for row in range(num_rows):
            assert str(row) == table_model.headerData(row, QtCore.Qt.Vertical,
                                                      QtCore.Qt.DisplayRole)
def test_flags(good_states):
    for data in good_states:
        table_model = DigitalStateTableModel(allow_is_used=True)
        table_model.setHalPins(data[0])
        table_model.setStates(data[1])

        is_used_col = table_model.isUsedColumn()
        name_col = table_model.nameColumn()

        flags = table_model.flags(table_model.index(0, 0,
                                                    QtCore.QModelIndex()))
        assert flags == QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

        flags = table_model.flags(
            table_model.index(0, is_used_col, QtCore.QModelIndex()))
        assert flags == QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

        flags = table_model.flags(
            table_model.index(1, name_col, QtCore.QModelIndex()))
        assert flags == QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable

        flags = table_model.flags(
            table_model.index(1, is_used_col, QtCore.QModelIndex()))
        assert flags == QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
def test_setData(good_states):
    for data in good_states:
        table_model = DigitalStateTableModel(allow_is_used=True)
        table_model.setHalPins(data[0])
        table_model.setStates(data[1])
        table_model.setIsUsed(data[2])

        is_used_col = table_model.isUsedColumn()
        name_col = table_model.nameColumn()
        num_bits = table_model.numberOfBits()
        num_rows = len(data[1])

        #Try setting some of the isUsed column
        table_model.setData(
            table_model.index(0, is_used_col, QtCore.QModelIndex()), False,
            QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(0, is_used_col, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == True

        table_model.setData(
            table_model.index(num_rows - 1, is_used_col, QtCore.QModelIndex()),
            False, QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(num_rows - 1, is_used_col, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == False

        table_model.setData(
            table_model.index(0, is_used_col, QtCore.QModelIndex()), True,
            QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(0, is_used_col, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == True

        table_model.setData(
            table_model.index(num_rows - 1, is_used_col, QtCore.QModelIndex()),
            True, QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(num_rows - 1, is_used_col, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == True

        #Try setting some of the name column
        table_model.setData(
            table_model.index(0, name_col, QtCore.QModelIndex()), "Fast Off",
            QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(0, name_col, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == "Fast Off"

        table_model.setData(
            table_model.index(num_rows - 1, name_col, QtCore.QModelIndex()),
            "Start", QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(num_rows - 1, name_col, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == "Start"

        #Try setting 0,0 to True, this should always be false
        table_model.setData(table_model.index(0, 0, QtCore.QModelIndex()),
                            True, QtCore.Qt.EditRole)
        val = table_model.data(table_model.index(0, 0, QtCore.QModelIndex()),
                               QtCore.Qt.DisplayRole)
        assert val == False

        #Try setting 0,0 to True, this should always be false
        table_model.setData(
            table_model.index(0, num_bits - 1, QtCore.QModelIndex()), False,
            QtCore.Qt.EditRole)
        val = table_model.data(
            table_model.index(0, num_bits - 1, QtCore.QModelIndex()),
            QtCore.Qt.DisplayRole)
        assert val == False