mirror of
https://github.com/novoid/appendfilename.git
synced 2026-06-14 12:21:25 +00:00
Merge pull request #20 from nbehrnd/rebuild_pytest
This commit is contained in:
commit
72a9c1179a
5 changed files with 81 additions and 161 deletions
37
.github/workflows/pytest.yml
vendored
Normal file
37
.github/workflows/pytest.yml
vendored
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
pyreadline3
|
pyreadline3
|
||||||
|
pytest
|
||||||
|
|
@ -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
|
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue