manuskript/manuskript/tests/models/test_outlineItem.py

149 lines
4.5 KiB
Python
Raw Normal View History

2017-11-19 10:07:10 +13:00
#!/usr/bin/env python
# --!-- coding: utf8 --!--
"""Tests for outlineItem"""
2017-11-19 12:20:49 +13:00
import pytest
2017-11-19 10:07:10 +13:00
2017-11-19 12:20:49 +13:00
@pytest.fixture
def outlineItemFolder():
'''Returns a folder outlineItem title "Folder".'''
2017-11-21 03:42:30 +13:00
from manuskript.models import outlineItem
2017-11-19 12:20:49 +13:00
return outlineItem(title="Folder")
@pytest.fixture
def outlineItemText():
'''Returns a text outlineItem title "Text".'''
2017-11-21 03:42:30 +13:00
from manuskript.models import outlineItem
2017-11-19 12:20:49 +13:00
return outlineItem(title="Text", _type="md")
def test_outlineItemsProperties(outlineItemFolder, outlineItemText):
2017-11-20 03:29:38 +13:00
"""
Tests with simple items, without parent or models.
"""
2017-11-19 12:20:49 +13:00
from PyQt5.QtCore import Qt
2017-11-19 12:20:49 +13:00
# Simplification
folder = outlineItemFolder
text = outlineItemText
2017-11-20 03:29:38 +13:00
# getters
2017-11-19 12:20:49 +13:00
assert folder.isFolder() == True
assert text.isFolder() == False
assert text.isText() == True
2017-11-19 13:36:58 +13:00
assert text.isMD() == text.isMMD() == True
assert text.title() == "Text"
assert text.compile() == True
assert folder.POV() == ""
assert folder.status() == ""
2017-11-20 03:29:38 +13:00
assert folder.label() == ""
2017-11-19 13:36:58 +13:00
assert folder.customIcon() == ""
assert folder.data(42) == ""
assert folder.data(folder.enum.title, role=Qt.CheckStateRole) == None
2017-11-20 03:29:38 +13:00
# setData and other setters
assert text.data(text.enum.compile, role=Qt.CheckStateRole) == Qt.Checked
text.setData(text.enum.compile, 0)
assert text.compile() == False
assert text.data(text.enum.compile, role=Qt.CheckStateRole) == Qt.Unchecked
2017-11-19 13:36:58 +13:00
folder.setCustomIcon("custom")
assert folder.customIcon() == "custom"
2017-11-20 03:29:38 +13:00
folder.setData(folder.enum.text, "Some text")
assert folder.text() == "" # folders have no text
2017-11-19 13:36:58 +13:00
2017-11-20 03:29:38 +13:00
# wordCount
2017-11-19 13:36:58 +13:00
text.setData(text.enum.text, "Sample **text**.")
assert text.wordCount() == 2
2017-11-20 03:29:38 +13:00
text.setData(text.enum.goal, 4)
2017-11-19 13:36:58 +13:00
assert text.data(text.enum.goalPercentage) == .5
def test_modelStuff(outlineModelBasic):
2017-11-20 03:29:38 +13:00
"""
Tests with children items.
"""
2017-11-19 13:36:58 +13:00
# Simplification
model = outlineModelBasic
2017-11-20 03:29:38 +13:00
# Child count
2017-11-19 13:36:58 +13:00
root = model.rootItem
assert len(root.children()) == 2
folder = root.child(0)
text1 = folder.child(0)
text2 = root.child(1)
2017-11-20 03:29:38 +13:00
# Compile
2017-11-19 13:36:58 +13:00
assert text1.compile() == True
folder.setData(folder.enum.compile, 0)
assert text1.compile() == False
2017-11-20 03:29:38 +13:00
# Word count
2017-11-19 13:36:58 +13:00
text1.setData(text1.enum.text, "Sample text.")
assert text1.wordCount() == 2
assert folder.wordCount() == 2
2017-11-20 03:29:38 +13:00
statsWithGoal = folder.stats()
assert statsWithGoal != ""
text1.setData(text1.enum.setGoal, 4)
assert folder.data(folder.enum.goal) == 4
folder.setData(folder.enum.setGoal, 3)
assert folder.data(folder.enum.goal) == 3
assert folder.stats() != statsWithGoal
2017-11-19 13:36:58 +13:00
2017-11-20 03:29:38 +13:00
# Split and merge
2017-11-19 13:36:58 +13:00
text1.setData(text1.enum.text, "Sample\n---\ntext.")
folder.split("invalid mark")
assert folder.childCount() == 1
folder.split("\n---\n")
assert folder.childCount() == 2
text1.mergeWith([folder.child(1)])
assert text1.text() == "Sample\n\ntext."
text1.setData(text1.enum.text, "Sample\nNewTitle\ntext.")
text1.splitAt(7, 8)
assert folder.child(1).title() == "NewTitle"
2017-11-20 03:29:38 +13:00
folder.child(1).splitAt(3)
assert folder.child(2).title() == "NewTitle_2"
folder.removeChild(2)
2017-11-19 13:36:58 +13:00
folder.removeChild(1)
folder.removeChild(0)
assert folder.childCount() == 0
2017-11-20 03:29:38 +13:00
# Search
folder.appendChild(text2)
text2.setData(text2.enum.POV, 1)
folder.setData(folder.enum.POV, 1)
assert len(folder.findItemsByPOV(1)) == 2
folder.setData(folder.enum.label, 1) # Idea
folder.setData(folder.enum.status, 4) # Final
text2.setData(text2.enum.text, "Some final value.")
from manuskript.functions import MW
cols = [folder.enum.text, folder.enum.POV,
folder.enum.label, folder.enum.status]
assert folder.findItemsContaining("VALUE", cols, MW, True) == []
assert folder.findItemsContaining("VALUE", cols, MW, False) == [text2.ID()]
2021-04-10 11:19:03 +12:00
# Model, count and copy
k = folder._model
2021-04-10 11:19:03 +12:00
folder.setModel(None)
assert text2._model is None
folder.setModel(k)
assert folder.columnCount() == len(folder.enum)
text1 = text2.copy()
2021-02-22 11:45:34 +13:00
assert text1.ID() == None
folder.appendChild(text1)
2021-02-22 11:45:34 +13:00
assert text1.ID() != None
assert folder.childCountRecursive() == 2
assert text1.path() == "Folder > Text"
assert len(text1.pathID()) == 2
# IDs
folder2 = folder.copy()
text3 = text1.copy()
text3.setData(text3.enum.ID, "0")
folder2.appendChild(text3)
folder.appendChild(folder2)
assert text3.ID() == "0"
root.checkIDs()
assert text3.ID() != "0"