コード例 #1
0
ファイル: test_models.py プロジェクト: afolmert/mentor
class TestCardModel(unittest.TestCase):

    def setUp(self):

        self.model = CardModel()
        self.model.open(':memory:')
        self.view = DummyView()
        self.view.setModel(self.model)


    def tearDown(self):
        self.model.close()


    def test_filePath(self):
        # test on open model
        self.assertEqual(self.model.filepath(), ':memory:')
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.filepath(), None)


    def test_isActive(self):
        self.assertEqual(self.model.isActive(), True)
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.isActive(), False)

    def test_checkActive(self):
        # open model should not raise any exception
        self.model._checkActive()
        # test if raises correct exception
        self.model.close()
        self.assertRaises(CardModel.ModelNotActiveError, self.model._checkActive)


    def test_columnCount(self):
        # test on empty model
        self.assertEqual(self.model.columnCount(), 5)
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.columnCount(), 0)


    def test_rowCount(self):
        # test on empty database
        self.assertEqual(self.model.rowCount(), 0)
        # add three empty rows
        self.model.addNewCard()
        self.model.addNewCard()
        self.model.addNewCard()
        self.assertEqual(self.model.rowCount(), 3)
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.rowCount(), 0)


    def test_checkIndex(self):
        # test if _checkIndex raises correct exception
        # test on None
        self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex, None)
        # test on empty
        idx = QModelIndex()
        self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex, idx)


    def test_index(self):
        # test index on empty model
        idx1 = self.model.index(0, 0)
        self.assertEqual(idx1, QModelIndex())
        # add two cards and check their ids
        self.model.addNewCard()
        self.model.addNewCard()
        idx1 = self.model.index(0, 0)
        idx2 = self.model.index(1, 0)
        idx3 = self.model.index(2, 0)
        self.assertEqual(idx1.internalId(), 1)
        self.assertEqual(idx2.internalId(), 2)
        self.assertEqual(idx3, QModelIndex())


    def test_data(self):
        # test if generates error with invalid index
        idx = QModelIndex()
        self.assertRaises(CardModel.InvalidIndexError, self.model.data, idx)


    def test_previousNextIndex(self):
        # previous index on empty index
        self.model.addNewCard()
        self.model.addNewCard()
        idx1 = self.model.index(0, 0)
        idx2 = self.model.index(1, 1)
        # test previous
        self.assertEqual(self.model.getPreviousIndex(idx2).internalId(), idx1.internalId())
        # test next
        self.assertEqual(self.model.getNextIndex(idx1).internalId(), idx2.internalId())


    def test_addNewCard(self):
        # test if adding new card generates a proper signal
        self.assertEqual(self.view.got_reset, False)
        self.model.addNewCard()
        self.model.addNewCard()
        self.model.addNewCard()
        self.assertEqual(self.view.got_reset, True)


    def test_deleteCard(self):
        # test if deleting card generates a proper signal
        # add 2 cards
        self.assertEqual(self.view.got_reset, False)
        self.model.addNewCard()
        self.model.addNewCard()
        self.assertEqual(self.view.got_reset, True)
        # reset view
        self.view.got_reset = False
        # delete first
        index = self.model.index(0, 0)
        self.model.deleteCard(index)
        # did it generate signal ?
        self.assertEqual(self.view.got_reset, True)

        # delete again
        self.view.got_reset = False
        index = self.model.index(0, 0)
        self.model.deleteCard(index)
        # did it generate signal?
        self.assertEqual(self.view.got_reset, True)

        # row count should be 0 now
        self.assertEqual(self.model.rowCount(), 0)

        # try to delete on empty model
        index = self.model.index(0, 0)
        self.assertEqual(index, QModelIndex())
        # should generate invalid index
        self.assertRaises(CardModel.InvalidIndexError, self.model.deleteCard, index)



    def test_updateCard(self):
        self.model.addNewCard()
        idx = self.model.index(0, 0)

        self.model.updateCard(idx, 'testquestion', 'testanswer')

        # test if got signal
        self.assertEqual(self.view.got_dataChanged, True)

        # test if data is correct
        data = self.model.data(idx, Qt.UserRole)

        self.assertEqual(data.question, 'testquestion')
        self.assertEqual(data.answer, 'testanswer')


    def test_importQAFile(self):
        #
        # test if clean actually cleans the file
        self.model.addNewCard()
        self.model.addNewCard()

        qa = StringIO(r"""
q: question1
a: answer1

q: question2
a: answer2""")

        self.model.importQAFile(qa, True)
        self.assertEqual(self.model.rowCount(), 2)
        idx = self.model.index(0, 0)
        card1 = self.model.data(self.model.index(0, 0), Qt.UserRole)
        self.assertEqual(card1.question, 'question1\n')
        self.assertEqual(card1.answer, 'answer1\n')

        card2 = self.model.data(self.model.index(1, 0), Qt.UserRole)
        self.assertEqual(card2.question, 'question2\n')
        self.assertEqual(card2.answer, 'answer2')


        # test import on closed model
        self.model.close()
        self.assertRaises(CardModel.ModelNotActiveError, self.model.importQAFile, 'sample')
コード例 #2
0
ファイル: test_models.py プロジェクト: Techo9209/mentor
class TestCardModel(unittest.TestCase):
    def setUp(self):

        self.model = CardModel()
        self.model.open(':memory:')
        self.view = DummyView()
        self.view.setModel(self.model)

    def tearDown(self):
        self.model.close()

    def test_filePath(self):
        # test on open model
        self.assertEqual(self.model.filepath(), ':memory:')
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.filepath(), None)

    def test_isActive(self):
        self.assertEqual(self.model.isActive(), True)
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.isActive(), False)

    def test_checkActive(self):
        # open model should not raise any exception
        self.model._checkActive()
        # test if raises correct exception
        self.model.close()
        self.assertRaises(CardModel.ModelNotActiveError,
                          self.model._checkActive)

    def test_columnCount(self):
        # test on empty model
        self.assertEqual(self.model.columnCount(), 5)
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.columnCount(), 0)

    def test_rowCount(self):
        # test on empty database
        self.assertEqual(self.model.rowCount(), 0)
        # add three empty rows
        self.model.addNewCard()
        self.model.addNewCard()
        self.model.addNewCard()
        self.assertEqual(self.model.rowCount(), 3)
        # test on closed model
        self.model.close()
        self.assertEqual(self.model.rowCount(), 0)

    def test_checkIndex(self):
        # test if _checkIndex raises correct exception
        # test on None
        self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex,
                          None)
        # test on empty
        idx = QModelIndex()
        self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex,
                          idx)

    def test_index(self):
        # test index on empty model
        idx1 = self.model.index(0, 0)
        self.assertEqual(idx1, QModelIndex())
        # add two cards and check their ids
        self.model.addNewCard()
        self.model.addNewCard()
        idx1 = self.model.index(0, 0)
        idx2 = self.model.index(1, 0)
        idx3 = self.model.index(2, 0)
        self.assertEqual(idx1.internalId(), 1)
        self.assertEqual(idx2.internalId(), 2)
        self.assertEqual(idx3, QModelIndex())

    def test_data(self):
        # test if generates error with invalid index
        idx = QModelIndex()
        self.assertRaises(CardModel.InvalidIndexError, self.model.data, idx)

    def test_previousNextIndex(self):
        # previous index on empty index
        self.model.addNewCard()
        self.model.addNewCard()
        idx1 = self.model.index(0, 0)
        idx2 = self.model.index(1, 1)
        # test previous
        self.assertEqual(
            self.model.getPreviousIndex(idx2).internalId(), idx1.internalId())
        # test next
        self.assertEqual(
            self.model.getNextIndex(idx1).internalId(), idx2.internalId())

    def test_addNewCard(self):
        # test if adding new card generates a proper signal
        self.assertEqual(self.view.got_reset, False)
        self.model.addNewCard()
        self.model.addNewCard()
        self.model.addNewCard()
        self.assertEqual(self.view.got_reset, True)

    def test_deleteCard(self):
        # test if deleting card generates a proper signal
        # add 2 cards
        self.assertEqual(self.view.got_reset, False)
        self.model.addNewCard()
        self.model.addNewCard()
        self.assertEqual(self.view.got_reset, True)
        # reset view
        self.view.got_reset = False
        # delete first
        index = self.model.index(0, 0)
        self.model.deleteCard(index)
        # did it generate signal ?
        self.assertEqual(self.view.got_reset, True)

        # delete again
        self.view.got_reset = False
        index = self.model.index(0, 0)
        self.model.deleteCard(index)
        # did it generate signal?
        self.assertEqual(self.view.got_reset, True)

        # row count should be 0 now
        self.assertEqual(self.model.rowCount(), 0)

        # try to delete on empty model
        index = self.model.index(0, 0)
        self.assertEqual(index, QModelIndex())
        # should generate invalid index
        self.assertRaises(CardModel.InvalidIndexError, self.model.deleteCard,
                          index)

    def test_updateCard(self):
        self.model.addNewCard()
        idx = self.model.index(0, 0)

        self.model.updateCard(idx, 'testquestion', 'testanswer')

        # test if got signal
        self.assertEqual(self.view.got_dataChanged, True)

        # test if data is correct
        data = self.model.data(idx, Qt.UserRole)

        self.assertEqual(data.question, 'testquestion')
        self.assertEqual(data.answer, 'testanswer')

    def test_importQAFile(self):
        #
        # test if clean actually cleans the file
        self.model.addNewCard()
        self.model.addNewCard()

        qa = StringIO(r"""
q: question1
a: answer1

q: question2
a: answer2""")

        self.model.importQAFile(qa, True)
        self.assertEqual(self.model.rowCount(), 2)
        idx = self.model.index(0, 0)
        card1 = self.model.data(self.model.index(0, 0), Qt.UserRole)
        self.assertEqual(card1.question, 'question1\n')
        self.assertEqual(card1.answer, 'answer1\n')

        card2 = self.model.data(self.model.index(1, 0), Qt.UserRole)
        self.assertEqual(card2.question, 'question2\n')
        self.assertEqual(card2.answer, 'answer2')

        # test import on closed model
        self.model.close()
        self.assertRaises(CardModel.ModelNotActiveError,
                          self.model.importQAFile, 'sample')