Merge pull request #20 from nbehrnd/rebuild_pytest

This commit is contained in:
nbehrnd 2024-10-31 11:46:19 +01:00 committed by GitHub
commit 72a9c1179a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 81 additions and 161 deletions

37
.github/workflows/pytest.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: CI_pytest_appendfilename
# name : pytest.yml
# purpose : regularly run pytest on appendfilename
# date : [2024-10-31 Thu]
# edit :
on:
push:
branches:
- master # additions to the principal branch "master"
pull_request:
branches:
- master # PRs to enter the principal branch "master"
workflow_dispatch: # provide a manual trigger
# schedule:
# - cron: "0 0 1 * *" # once each 1st of a month, at 00:00 UTC (cf. https://crontab.guru/)
jobs:
test-ubuntu:
runs-on: ubuntu-24.04
timeout-minutes: 2
steps:
- uses: actions/checkout@v4
# by [2024-10-23 Wed], this version possibly will be considered "old", cf.
# https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies with PyPI
run: pip install -r requirements.txt
- name: run the check by pytest
run: python -m pytest

View file

@ -1,5 +0,0 @@
[pytest]
markers =
default: check the default insertion position of appendfile
prepend: check the prepend insertion position of appendfile
smart: check the smart-prepend insertion position of appendfile

View file

@ -1 +1,2 @@
pyreadline3 pyreadline3
pytest

View file

@ -4,8 +4,8 @@
# author: nbehrnd@yahoo.com # author: nbehrnd@yahoo.com
# license: GPL v3, 2022. # license: GPL v3, 2022.
# date: 2022-01-05 (YYYY-MM-DD) # date: 2022-01-05 (YYYY-MM-DD)
# edit: 2022-01-09 (YYYY-MM-DD) # edit: [2024-10-31 Thu]
#
"""Test pad for functions by appendfilename with pytest. """Test pad for functions by appendfilename with pytest.
Written for Python 3.9.9 and pytest 6.2.4 for Python 3 as provided by Written for Python 3.9.9 and pytest 6.2.4 for Python 3 as provided by
@ -26,20 +26,22 @@ cases, the progress of the ongoing tests is reported to the CLI (flag -v)."""
import re import re
import os import os
import pytest
import sys
import subprocess
from pathlib import Path
from subprocess import getstatusoutput, getoutput from subprocess import getstatusoutput, getoutput
import pytest PROGRAM = str(Path("appendfilename") / "__init__.py") # Cross-platform path
PROGRAM = str("./appendfilename/__init__.py")
@pytest.mark.default @pytest.mark.default
@pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt", @pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt",
"2021-12-31T18.48.22_test.txt", "2021-12-31T18.48.22_test.txt"])
"20211231_test.txt", "2012-12_test.txt", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf"])#,
"211231_test.txt"]) # "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf", #@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
"--text book", "--text book_shelf"]) @pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "_", "+",
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
"=", "-"]) "=", "-"])
def test_pattern_s1(arg1, arg2, arg3): def test_pattern_s1(arg1, arg2, arg3):
"""Check addition just ahead the file extension. """Check addition just ahead the file extension.
@ -55,134 +57,13 @@ def test_pattern_s1(arg1, arg2, arg3):
with open(arg1, mode="w") as newfile: with open(arg1, mode="w") as newfile:
newfile.write("This is a test file for test_appendfilename.") newfile.write("This is a test file for test_appendfilename.")
test = getoutput(f"python3 {PROGRAM} {arg1} {arg2} --separator={arg3}") # Run the command with cross-platform Python executable and file paths
result = subprocess.run(
[sys.executable, PROGRAM, arg1, arg2, f"--separator={arg3}"],
capture_output=True, text=True, check=True)
new_filename = "".join([arg1[:-4], arg3, text, str(".txt")]) new_filename = "".join([arg1[:-4], arg3, " ", text, str(".txt")])
assert os.path.isfile(new_filename) assert os.path.isfile(new_filename)
# space cleaning
os.remove(new_filename) os.remove(new_filename)
assert os.path.isfile(new_filename) is False
@pytest.mark.prepend
@pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt",
"2021-12-31T18.48.22_test.txt",
"20211231_test.txt", "2012-12_test.txt",
"211231_test.txt"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
"=", "-"])
@pytest.mark.parametrize("arg4", ["-p", "--prepend"])
def test_pattern_s2(arg1, arg2, arg3, arg4):
"""Check addition just ahead the file extension.
arg1 the test files to process
arg2 the text string to be added
arg3 the explicitly defined text separator (except [a-zA-Z])
arg4 use either of two forms of the prepend flag."""
# extract the newly added text information:
text_elements = arg2.split(" ")[1:]
text = str(" ".join(text_elements))
with open(arg1, mode="w") as newfile:
newfile.write("This is a test file for test_appendfilename.")
test = getoutput(f"python3 {PROGRAM} {arg1} {arg2} --separator={arg3} {arg4}")
new_filename = "".join([text, arg3, arg1])
assert os.path.isfile(new_filename)
os.remove(new_filename)
assert os.path.isfile(new_filename) is False
@pytest.mark.smart
@pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt",
"2021-12-31T18.48.22_test.txt", "20211231_test.txt",
"2021-12_test.txt", "211231_test.txt"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" " , "#", "!", "@", "#", "$", "%", "*", "_", "+",
"=", "-"])
def test_pattern_s3_02(arg1, arg2, arg3):
"""Check addition retaining time stamp on leading position.
arg1 the test files to process
arg2 the text string to be added
arg3 the explicitly defined text separator (except [a-zA-Z])."""
# extract the newly added text information:
text_elements = arg2.split(" ")[1:]
text = str(" ".join(text_elements))
with open(arg1, mode="w") as newfile:
newfile.write("This is a test file for test_appendfilename.")
test = getoutput(f"python3 {PROGRAM} {arg1} {arg2} --separator={arg3} --smart-prepend")
# analysis section:
old_filename = str(arg1)
# test pattern issued by date2name vs. other pattern
# default (YYYY-MM-DD)
# --withtime (YYYY-MM-DDTHH.MM.SS)
# --compact (YYYYMMDD)
# --month (YYYY-MM)
# --short (YYMMDD)
if (re.search("^\d{4}-[012]\d-[0-3]\d_", old_filename) or
re.search('^\d{4}-[012]\d-[0-3]\dT[012]\d\.[0-5]\d\.[0-5]\d_', old_filename) or
re.search("^\d{4}[012]\d[0-3]\d_", old_filename) or
re.search("^\d{4}-[012]\d_", old_filename) or
re.search("^\d{2}[012]\d[0-3]\d_", old_filename)):
if re.search("^\d{4}-\d{2}-\d{2}_", old_filename):
# if (running date2name in default mode) then .true.
time_stamp = old_filename[:10]
time_stamp_separator = old_filename[10]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[11:]
elif re.search('^\d{4}-\d{2}-\d{2}T\d{2}\.\d{2}\.\d{2}_', old_filename):
# if (running date2name --withtime) then .true.
time_stamp = old_filename[:19]
time_stamp_separator = old_filename[19]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[20:]
elif re.search("^\d{4}\d{2}\d{2}_", old_filename):
# if (running date2name --compact) then .true.
time_stamp = old_filename[:8]
time_stamp_separator = old_filename[8]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[9:]
elif re.search("^\d{4}-\d{2}_", old_filename):
# if (running date2name --month) then .true.
time_stamp = old_filename[:7]
time_stamp_separator = old_filename[7]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[8:]
elif re.search("^\d{4}\d{2}\d{2}_", old_filename):
# if (running date2name --short) then .true.
time_stamp = old_filename[:6]
time_stamp_separator = old_filename[6]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[7:]
stem_elements = old_filename_no_timestamp.split(".")[:-1]
stem = ".".join(stem_elements)
new_filename = "".join([time_stamp, arg3, text, arg3, stem, str("."), file_extension])
assert os.path.isfile(new_filename)
os.remove(new_filename)
assert os.path.isfile(new_filename) is False
else:
# within the scope set, a file which did not pass date2name earlier
new_filename = "".join([text, arg3, old_filename])
assert os.path.isfile(new_filename)
os.remove(new_filename)
assert os.path.isfile(new_filename) is False

View file

@ -1,7 +1,7 @@
# name: test_generator.org # name: test_generator.org
# author: nbehrnd@yahoo.com # author: nbehrnd@yahoo.com
# date: 2022-01-05 (YYYY-MM-DD) # date: 2022-01-05 (YYYY-MM-DD)
# edit: 2022-01-09 (YYYY-MM-DD) # edit: [2024-10-31 Thu]
# license: GPL3, 2022. # license: GPL3, 2022.
# Export the tangled files with C-c C-v t # Export the tangled files with C-c C-v t
@ -156,7 +156,7 @@ pytest-3 test_appendfilename.py -v -m "default"
pytest-3 test_appendfilename.py -m "default and prepend" -v pytest-3 test_appendfilename.py -m "default and prepend" -v
#+end_src #+end_src
#+begin_src python :tangle pytest.ini #+begin_src python :tangle no
[pytest] [pytest]
markers = markers =
default: check the default insertion position of appendfile default: check the default insertion position of appendfile
@ -175,7 +175,7 @@ markers =
# author: nbehrnd@yahoo.com # author: nbehrnd@yahoo.com
# license: GPL v3, 2022. # license: GPL v3, 2022.
# date: 2022-01-05 (YYYY-MM-DD) # date: 2022-01-05 (YYYY-MM-DD)
# edit: 2022-01-09 (YYYY-MM-DD) # edit: [2024-10-31 Thu]
# #
"""Test pad for functions by appendfilename with pytest. """Test pad for functions by appendfilename with pytest.
@ -197,11 +197,14 @@ cases, the progress of the ongoing tests is reported to the CLI (flag -v)."""
import re import re
import os import os
import pytest
import sys
import subprocess
from pathlib import Path
from subprocess import getstatusoutput, getoutput from subprocess import getstatusoutput, getoutput
import pytest PROGRAM = str(Path("appendfilename") / "__init__.py") # Cross-platform path
PROGRAM = str("./appendfilename/__init__.py")
#+end_src #+end_src
*** appendfilename, default position *** appendfilename, default position
@ -213,12 +216,11 @@ PROGRAM = str("./appendfilename/__init__.py")
#+begin_src python :tangle test_appendfilename.py #+begin_src python :tangle test_appendfilename.py
@pytest.mark.default @pytest.mark.default
@pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt", @pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt",
"2021-12-31T18.48.22_test.txt", "2021-12-31T18.48.22_test.txt"])
"20211231_test.txt", "2012-12_test.txt", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf"])#,
"211231_test.txt"]) # "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf", #@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
"--text book", "--text book_shelf"]) @pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "_", "+",
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
"=", "-"]) "=", "-"])
def test_pattern_s1(arg1, arg2, arg3): def test_pattern_s1(arg1, arg2, arg3):
"""Check addition just ahead the file extension. """Check addition just ahead the file extension.
@ -234,13 +236,17 @@ def test_pattern_s1(arg1, arg2, arg3):
with open(arg1, mode="w") as newfile: with open(arg1, mode="w") as newfile:
newfile.write("This is a test file for test_appendfilename.") newfile.write("This is a test file for test_appendfilename.")
test = getoutput(f"python3 {PROGRAM} {arg1} {arg2} --separator={arg3}") # Run the command with cross-platform Python executable and file paths
result = subprocess.run(
[sys.executable, PROGRAM, arg1, arg2, f"--separator={arg3}"],
capture_output=True, text=True, check=True)
new_filename = "".join([arg1[:-4], arg3, text, str(".txt")]) new_filename = "".join([arg1[:-4], arg3, " ", text, str(".txt")])
assert os.path.isfile(new_filename) assert os.path.isfile(new_filename)
# space cleaning
os.remove(new_filename) os.remove(new_filename)
assert os.path.isfile(new_filename) is False
#+end_src #+end_src
*** appendfilename, prepend position *** appendfilename, prepend position
@ -250,7 +256,7 @@ def test_pattern_s1(arg1, arg2, arg3):
addition of string containing spaces, as well as the implicit addition of string containing spaces, as well as the implicit
spacing. spacing.
#+begin_src python :tangle test_appendfilename.py #+begin_src python :tangle no
@pytest.mark.prepend @pytest.mark.prepend
@pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt", @pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt",
"2021-12-31T18.48.22_test.txt", "2021-12-31T18.48.22_test.txt",
@ -292,7 +298,7 @@ def test_pattern_s2(arg1, arg2, arg3, arg4):
file name should follow this. So far, the tests recognize only file name should follow this. So far, the tests recognize only
these two pattern issued by =date2name=, or the absence of such. these two pattern issued by =date2name=, or the absence of such.
#+begin_src python :tangle test_appendfilename.py #+begin_src python :tangle no
@pytest.mark.smart @pytest.mark.smart
@pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt", @pytest.mark.parametrize("arg1", ["test.txt", "2021-12-31_test.txt",
"2021-12-31T18.48.22_test.txt", "20211231_test.txt", "2021-12-31T18.48.22_test.txt", "20211231_test.txt",