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_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