Merge branch 'main' into release_0.12

This commit is contained in:
Veronica K. B. Olsen
2020-08-14 20:20:51 +02:00
14 changed files with 168 additions and 147 deletions
+1 -2
View File
@@ -1,9 +1,8 @@
---
name: Bug Report
about: Create a report to help us improve
title: "[BUG]"
title: ""
labels: bug
assignees: vkbo
---
**Describe the Bug**
+5 -6
View File
@@ -1,19 +1,18 @@
---
name: Feature Request
about: Suggest an idea for this project
title: "[FEATURE]"
title: ""
labels: enhancement
assignees: vkbo
---
**Is your feature request related to a problem? Please describe.**
**Is your feature request related to a problem? Please describe:**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
**Describe the solution you'd like:**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
**Describe alternatives you've considered:**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
**Additional context:**
Add any other context or screenshots about the feature request here.
+3 -3
View File
@@ -19,9 +19,9 @@ jobs:
uses: actions/checkout@v2
- name: Install flake8
run: pip install flake8
- name: Check for Syntax Error on novelWriter
- name: Check for Syntax Error in novelWriter
run: flake8 nw --count --select=E9,F63,F7,F82 --show-source --statistics
- name: Check for Syntax Error on Tests
- name: Check for Syntax Error in Tests
run: flake8 tests --count --select=E9,F63,F7,F82 --show-source --statistics
- name: Check for Code Style on novelWriter
- name: Check for Code Style Violations
run: flake8 nw --count --max-line-length=99 --ignore E203,E221,E226,E241,E251,E261,E266,E302,E305 --show-source --statistics
+8 -12
View File
@@ -1,9 +1,10 @@
os: linux
dist: bionic
dist: focal
services:
- xvfb
language: python
cache: bundler
cache:
- bundler
addons:
apt:
@@ -30,10 +31,8 @@ stages:
jobs:
include:
- stage:
- Main
python:
- 3.8
- stage: Main
python: 3.8
script:
- python -m pytest --cov=nw -v
after_success:
@@ -41,15 +40,12 @@ jobs:
after_failure:
- cat /sys/fs/cgroup/memory/memory.max_usage_in_bytes
- stage:
- Supported
python:
- 3.6
- stage: Supported
python: 3.6
script:
- python -m pytest -v
- python:
- 3.7
- python: 3.7
script:
- python -m pytest -v
+2 -1
View File
@@ -3,8 +3,9 @@
[![Build Status](https://travis-ci.com/vkbo/novelWriter.svg?branch=main)](https://travis-ci.com/vkbo/novelWriter)
[![codecov](https://codecov.io/gh/vkbo/novelWriter/branch/main/graph/badge.svg)](https://codecov.io/gh/vkbo/novelWriter)
[![Documentation Status](https://readthedocs.org/projects/novelwriter/badge/?version=latest)](https://novelwriter.readthedocs.io/en/latest/?badge=latest)
[![Flake8 Checks](https://github.com/vkbo/novelWriter/workflows/Flake8%20Checks/badge.svg)](https://github.com/vkbo/novelWriter/actions)
[![PyPI](https://img.shields.io/pypi/v/novelwriter)](https://pypi.org/project/novelWriter/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/novelwriter)](https://pypi.org/project/novelWriter/)
[![Python Version](https://img.shields.io/pypi/pyversions/novelwriter)](https://pypi.org/project/novelWriter/)
<img align="left" style="margin: 0 16px 4px 0;" src="https://raw.githubusercontent.com/vkbo/novelWriter/main/assets/icons/96x96/novelwriter.png">
+3 -1
View File
@@ -2,7 +2,9 @@
"""novelWriter Test Config
"""
import sys, pytest, shutil
import sys
import pytest
import shutil
from os import path, mkdir
sys.path.insert(1, path.abspath(path.join(path.dirname(__file__), path.pardir)))
-2
View File
@@ -2,8 +2,6 @@
"""novelWriter Test Dummy GUI Classes
"""
from nw.constants import nwAlert
class DummyMain():
def __init__(self):
+1 -1
View File
@@ -5,7 +5,7 @@ import pstats
from os import path
profDir = path.abspath(path.join(path.dirname(__file__),"..","prof"))
profDir = path.abspath(path.join(path.dirname(__file__), path.pardir, "prof"))
print("")
print("Profiles directory: %s" % profDir)
+26 -11
View File
@@ -2,8 +2,8 @@
"""novelWriter Common Class Tester
"""
import nw, pytest
from nw.common import *
import pytest
from nw.common import checkString, checkBool, checkInt, colRange
from nwtools import cmpList
@pytest.mark.core
@@ -29,11 +29,11 @@ def testCheckInt():
def testCheckBool():
assert checkBool(None, 3, True) is None
assert checkBool("None", 3, True) is None
assert checkBool("True", False,False) == True
assert checkBool("False",True, False) == False
assert checkBool("True", False, False)
assert not checkBool("False", True, False)
assert checkBool("Boo", None, False) is None
assert checkBool(0, None, False) == False
assert checkBool(1, None, False) == True
assert not checkBool(0, None, False)
assert checkBool(1, None, False)
assert checkBool(2, None, False) is None
assert checkBool(0.0, None, False) is None
assert checkBool(1.0, None, False) is None
@@ -42,8 +42,23 @@ def testCheckBool():
@pytest.mark.core
def testColRange():
assert colRange([0, 0], [0, 0], 0) is None
assert cmpList(colRange([200,50,0], [50,200,0], 1), [200,50,0])
assert cmpList(colRange([200,50,0], [50,200,0], 2), [[200,50,0],[50,200,0]])
assert cmpList(colRange([200,50,0], [50,200,0], 3), [[200,50,0],[125,125,0],[50,200,0]])
assert cmpList(colRange([200,50,0], [50,200,0], 4), [[200,50,0],[150,100,0],[100,150,0],[50,200,0]])
assert cmpList(colRange([200,50,0], [50,200,0], 5), [[200,50,0],[162,87,0],[124,124,0],[86,161,0],[50,200,0]])
assert cmpList(
colRange([200, 50, 0], [50, 200, 0], 1),
[200, 50, 0]
)
assert cmpList(
colRange([200, 50, 0], [50, 200, 0], 2),
[[200, 50, 0], [50, 200, 0]]
)
assert cmpList(
colRange([200, 50, 0], [50, 200, 0], 3),
[[200, 50, 0], [125, 125, 0], [50, 200, 0]]
)
assert cmpList(
colRange([200, 50, 0], [50, 200, 0], 4),
[[200, 50, 0], [150, 100, 0], [100, 150, 0], [50, 200, 0]]
)
assert cmpList(
colRange([200, 50, 0], [50, 200, 0], 5),
[[200, 50, 0], [162, 87, 0], [124, 124, 0], [86, 161, 0], [50, 200, 0]]
)
+2 -2
View File
@@ -2,8 +2,8 @@
"""novelWriter Config Class Tester
"""
import nw, pytest
from nwtools import *
import pytest
from nwtools import cmpFiles
from os import path
from nw.config import Config
+36 -20
View File
@@ -2,17 +2,19 @@
"""novelWriter Main GUI Class Tester
"""
import nw, pytest, sys, json
from nwtools import *
import nw
import pytest
import json
from nwtools import cmpFiles
from os import path, unlink
from os import path
from PyQt5.QtCore import Qt
from nw.gui import (
GuiProjectSettings, GuiItemEditor, GuiAbout, GuiBuildNovel,
GuiDocMerge, GuiDocSplit, GuiWritingStats, GuiProjectWizard
)
from nw.constants import *
from nw.constants import nwItemType, nwItemLayout, nwItemClass, nwDocAction
keyDelay = 2
stepDelay = 20
@@ -41,7 +43,7 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp):
assert nwGUI.theProject.projName == ""
assert nwGUI.theProject.bookTitle == ""
assert len(nwGUI.theProject.bookAuthors) == 0
assert nwGUI.theProject.spellCheck == False
assert not nwGUI.theProject.spellCheck
# Check the files
projFile = path.join(nwTempGUI, "nwProject.nwx")
@@ -65,7 +67,7 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp):
assert nwGUI.theProject.projName == "New Project"
assert nwGUI.theProject.bookTitle == ""
assert len(nwGUI.theProject.bookAuthors) == 0
assert nwGUI.theProject.spellCheck == False
assert not nwGUI.theProject.spellCheck
# Check that tree items have been created
assert nwGUI.treeView._getTreeItem("73475cb40a568") is not None
@@ -214,7 +216,10 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp):
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "This is another paragraph of much longer dummy text. It is in fact very very dumb dummy text! ":
for c in (
"This is another paragraph of much longer dummy text. "
"It is in fact very very dumb dummy text! "
):
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
for c in "We can also try replacing \"quotes\", even single's quotes are replaced. ":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
@@ -859,12 +864,12 @@ def testNewProjectWizard(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
]
assert projData["numChapters"] == 5
assert projData["numScenes"] == 5
assert projData["chFolders"] == True
assert projData["chFolders"]
else:
assert projData["addRoots"] == []
assert projData["numChapters"] == 0
assert projData["numScenes"] == 0
assert projData["chFolders"] == False
assert not projData["chFolders"]
# qtbot.stopForInteraction()
nwGUI.closeMain()
@@ -890,7 +895,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Bold
assert nwGUI.passDocumentAction(nwDocAction.STRONG)
assert nwGUI.docEditor.getText()[27:78] == "**Pellentesque** nec erat ut nulla posuere commodo."
fmtStr = "**Pellentesque** nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:78] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.STRONG)
assert nwGUI.docEditor.getText()[27:74] == cleanText
@@ -898,7 +904,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Italic
assert nwGUI.passDocumentAction(nwDocAction.EMPH)
assert nwGUI.docEditor.getText()[27:76] == "_Pellentesque_ nec erat ut nulla posuere commodo."
fmtStr = "_Pellentesque_ nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:76] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.EMPH)
assert nwGUI.docEditor.getText()[27:74] == cleanText
@@ -906,7 +913,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Strikethrough
assert nwGUI.passDocumentAction(nwDocAction.STRIKE)
assert nwGUI.docEditor.getText()[27:78] == "~~Pellentesque~~ nec erat ut nulla posuere commodo."
fmtStr = "~~Pellentesque~~ nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:78] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.STRIKE)
assert nwGUI.docEditor.getText()[27:74] == cleanText
@@ -925,7 +933,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Double Quotes
assert nwGUI.passDocumentAction(nwDocAction.D_QUOTE)
assert nwGUI.docEditor.getText()[27:76] == "“Pellentesque” nec erat ut nulla posuere commodo."
fmtStr = "“Pellentesque” nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:76] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.UNDO)
assert nwGUI.docEditor.getText()[27:74] == cleanText
@@ -933,7 +942,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Single Quotes
assert nwGUI.passDocumentAction(nwDocAction.S_QUOTE)
assert nwGUI.docEditor.getText()[27:76] == "Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:76] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.UNDO)
assert nwGUI.docEditor.getText()[27:74] == cleanText
@@ -942,22 +952,27 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Block Formats
assert nwGUI.docEditor.setCursorPosition(30)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H1)
assert nwGUI.docEditor.getText()[27:76] == "# Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "# Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:76] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H2)
assert nwGUI.docEditor.getText()[27:77] == "## Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "## Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:77] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H3)
assert nwGUI.docEditor.getText()[27:78] == "### Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "### Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:78] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H4)
assert nwGUI.docEditor.getText()[27:79] == "#### Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "#### Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:79] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_TXT)
assert nwGUI.docEditor.getText()[27:74] == cleanText
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_COM)
assert nwGUI.docEditor.getText()[27:76] == "% Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "% Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:76] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.BLOCK_TXT)
assert nwGUI.docEditor.getText()[27:74] == cleanText
@@ -965,7 +980,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp):
# Undo/Redo
assert nwGUI.passDocumentAction(nwDocAction.UNDO)
assert nwGUI.docEditor.getText()[27:76] == "% Pellentesque nec erat ut nulla posuere commodo."
fmtStr = "% Pellentesque nec erat ut nulla posuere commodo."
assert nwGUI.docEditor.getText()[27:76] == fmtStr
qtbot.wait(stepDelay)
assert nwGUI.passDocumentAction(nwDocAction.REDO)
assert nwGUI.docEditor.getText()[27:74] == cleanText
-1
View File
@@ -2,7 +2,6 @@
"""novelWriter NWItem Class Tester
"""
import nw
import pytest
from lxml import etree
+1 -5
View File
@@ -2,11 +2,10 @@
"""novelWriter Project Class Tester
"""
import nw
import pytest
from os import path
from nwtools import *
from nwtools import cmpFiles
from nwdummy import DummyMain
from nw.config import Config
@@ -95,7 +94,6 @@ def testIndexScanThis(nwTempProj):
assert theProject.openProject(projFile)
theIndex = NWIndex(theProject, theMain)
tHandle = "31489056e0916"
isValid, theBits, thePos = theIndex.scanThis("tag: this, and this")
assert not isValid
@@ -176,9 +174,7 @@ def testIndexMeta(nwTempProj):
theIndex = NWIndex(theProject, theMain)
nHandle = "0e17daca5f3e1"
nItem = theProject.projTree[nHandle]
cHandle = "02d20bbd7e394"
cItem = theProject.projTree[cHandle]
assert theIndex.scanText(cHandle, (
"# Jane Smith\n"