Пример #1
0
class EntryModelTest(unittest2.TestCase):
    def setUp(self):
        import time
        self.feed = Feed()
        entry = Mock("Entry")
        entry.title = "Title1"
        entry.author = "Author1"
        entry.read = False
        entry.important = False
        entry.updated = time.gmtime(time.time())
        self.feed.entries.append(entry)
        entry = Mock("Entry")
        entry.title = "Title2"
        entry.author = "Author2"
        entry.read = True
        entry.important = True
        entry.updated = time.gmtime(time.time())
        self.feed.entries.append(entry)
        self.entryModel = EntryModel(self.feed)
        self.modeltest = ModelTest(self.entryModel, self.entryModel)

    def testUpdateImportantStatus(self):
        model = self.entryModel
        spyEntriesChanged = SignalSpy(model.entriesChanged)
        spyDataChanged = SignalSpy(model.dataChanged)
        idx = model.index(0, 0, QModelIndex())
        self.assertEqual(model.data(idx, Qt.DisplayRole), "")
        model.markImportant(idx)
        self.assertEqual(spyEntriesChanged.slotTriggered, 1)
        self.assertEqual(spyEntriesChanged.arguments[0][0], self.feed)
        self.assertEqual(spyDataChanged.slotTriggered, 1)
        self.assertEqual(spyDataChanged.arguments[0][0].row(), model.index(0, 0, QModelIndex()).row())
        self.assertEqual(spyDataChanged.arguments[0][1].row(), model.index(0, 2, QModelIndex()).row())
        self.assertEqual(model.data(idx, Qt.DisplayRole), "!")
        spyEntriesChanged = SignalSpy(model.entriesChanged)
        spyDataChanged = SignalSpy(model.dataChanged)
        idx = model.index(0, 0, QModelIndex())
        model.markImportant(idx)
        self.assertEqual(spyEntriesChanged.slotTriggered, 1)
        self.assertEqual(spyEntriesChanged.arguments[0][0], self.feed)
        self.assertEqual(spyDataChanged.slotTriggered, 1)
        self.assertEqual(spyDataChanged.arguments[0][0].row(), model.index(0, 0, QModelIndex()).row())
        self.assertEqual(spyDataChanged.arguments[0][1].row(), model.index(0, 2, QModelIndex()).row())
        self.assertEqual(model.data(idx, Qt.DisplayRole), "")


    def testUpdateReadStatus(self):
        model = self.entryModel
        spyEntriesChanged = SignalSpy(model.entriesChanged)
        spyDataChanged = SignalSpy(model.dataChanged)
        idx = model.index(0, 0, QModelIndex())
        model.markRead(idx)
        self.assertEqual(spyEntriesChanged.slotTriggered, 1)
        self.assertEqual(spyEntriesChanged.arguments[0][0], self.feed)
        self.assertEqual(spyDataChanged.slotTriggered, 1)
        self.assertEqual(spyDataChanged.arguments[0][0].row(), model.index(0, 0, QModelIndex()).row())
        self.assertEqual(spyDataChanged.arguments[0][1].row(), model.index(0, 2, QModelIndex()).row())
        spyEntriesChanged = SignalSpy(model.entriesChanged)
        spyDataChanged = SignalSpy(model.dataChanged)
        idx = model.index(0, 0, QModelIndex())
        model.markUnread(idx)
        self.assertEqual(spyEntriesChanged.slotTriggered, 1)
        self.assertEqual(spyEntriesChanged.arguments[0][0], self.feed)
        self.assertEqual(spyDataChanged.slotTriggered, 1)
        self.assertEqual(spyDataChanged.arguments[0][0].row(), model.index(0, 0, QModelIndex()).row())
        self.assertEqual(spyDataChanged.arguments[0][1].row(), model.index(0, 2, QModelIndex()).row())

    def testHeader(self):
        self.assertEqual(self.entryModel.headerData(0, Qt.Horizontal, Qt.DisplayRole), "")
        self.assertEqual(self.entryModel.headerData(1, Qt.Horizontal, Qt.DisplayRole), "Title")
        self.assertEqual(self.entryModel.headerData(2, Qt.Horizontal, Qt.DisplayRole), "Author")
        self.assertEqual(self.entryModel.headerData(3, Qt.Horizontal, Qt.DisplayRole), "Updated")

    def testData(self):
        self.assertEqual(self.entryModel.rowCount(), 2)
        self.assertEqual(self.entryModel.columnCount(), 4)
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(0, 0, QModelIndex()), 
                    Qt.DisplayRole), "")
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(0, 0, QModelIndex()),
                    Qt.FontRole).italic(), False)
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(0, 1, QModelIndex()),
                    Qt.DisplayRole), "Title1")
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(0, 2, QModelIndex()),
                    Qt.DisplayRole), "Author1")
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(0, 3, QModelIndex()),
                    Qt.DisplayRole), qDateTimeFromTimeStruct(
                        list(self.feed.entries)[0].updated))
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(0, 1, QModelIndex()),
                    Qt.FontRole).bold(), True)
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(1, 1, QModelIndex()),
                    Qt.DisplayRole), "Title2")
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(1, 0, QModelIndex()), 
                    Qt.DisplayRole), "!")
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(1, 0, QModelIndex()),
                    Qt.FontRole).italic(), True)
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(1, 2, QModelIndex()),
                    Qt.DisplayRole), "Author2")
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(1, 3, QModelIndex()),
                    Qt.DisplayRole), qDateTimeFromTimeStruct(
                        list(self.feed.entries)[1].updated))
        self.assertEqual(self.entryModel.data(
                self.entryModel.index(1, 1, QModelIndex()),
                    Qt.FontRole).bold(), False)

    def testIndexFromEntry(self):
        self.assertEqual(self.entryModel.indexForEntry(self.feed.entries[0]), self.entryModel.index(0, 0, QModelIndex()))
        self.assertEqual(self.entryModel.indexForEntry(self.feed.entries[1]), self.entryModel.index(1, 0, QModelIndex()))