Merge pull request #14 from nbehrnd/tester

extend tester's pattern to all five provided by date2name
This commit is contained in:
Karl Voit 2022-01-12 11:16:37 +01:00 committed by GitHub
commit c04aee6c5e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 160 additions and 102 deletions

View file

@ -1,11 +1,11 @@
# GNU Make file for the automation of pytest for appendfilename. # GNU Make file for the automation of pytest for appendfilename
# #
# While the test script is written for Python 3.9.2, you might need to # While the test script is written for Python 3.9.2, it depends on
# adjust the following instruction once in case your OS includes # your installation of pytest (and in case of Linux, the authors of
# pytest for legacy Python 2 side by side to Python 3, or only hosts # your distribution) if pytest for Python 3 is invoked either by
# pytest for Python 3. The tests in script test_appendfilename.py are # pytest, or pytest-3. In some distributions, pytest actually may
# set up to work with pytest for Python 3; dependent on your # invoke pyest for legacy Python 2; the tests in test_date2name.py
# installation, which may be named pytest-3, or (again) pytest. # however are incompatible to this.
# #
# Put this file like test_appendfilename.py in the root folder of # Put this file like test_appendfilename.py in the root folder of
# appendfilename fetched from PyPi or GitHub. Then run # appendfilename fetched from PyPi or GitHub. Then run
@ -17,5 +17,5 @@
# right after the first test failing, use the -x flag to the # right after the first test failing, use the -x flag to the
# instructions on the CLI in addition to the verbosity flag to (-v). # instructions on the CLI in addition to the verbosity flag to (-v).
# pytest -v test_appendfilename.py # only pytest for Python 3 is present # pytest -v test_appendfilename.py # the pattern by pytest's manual
pytest-3 -v test_appendfilename.py # pytest if Python 2 and Python 3 coexist pytest-3 -v test_appendfilename.py # the alternative pattern (e.g., Debian 12)

View file

@ -4,7 +4,7 @@
# 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-07 (YYYY-MM-DD) # edit: 2022-01-09 (YYYY-MM-DD)
# #
"""Test pad for functions by appendfilename with pytest. """Test pad for functions by appendfilename with pytest.
@ -34,7 +34,9 @@ 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",
"211231_test.txt"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"]) "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+", @pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
@ -63,7 +65,9 @@ def test_pattern_s1(arg1, arg2, arg3):
@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",
"20211231_test.txt", "2012-12_test.txt",
"211231_test.txt"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"]) "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+", @pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
@ -94,7 +98,8 @@ def test_pattern_s2(arg1, arg2, arg3, arg4):
@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"]) "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", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"]) "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" " , "#", "!", "@", "#", "$", "%", "*", "_", "+", @pytest.mark.parametrize("arg3", [" " , "#", "!", "@", "#", "$", "%", "*", "_", "+",
@ -114,33 +119,57 @@ def test_pattern_s3_02(arg1, arg2, arg3):
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} --smart-prepend") test = getoutput(f"python3 {PROGRAM} {arg1} {arg2} --separator={arg3} --smart-prepend")
# analysis section: # analysis section:
old_filename = str(arg1) old_filename = str(arg1)
if re.search("^\d{4}-\d{2}-\d{2}_", old_filename): # test pattern issued by date2name vs. other pattern
# if (running date2name in default mode) then .true. # default (YYYY-MM-DD)
time_stamp = old_filename[:10] # --withtime (YYYY-MM-DDTHH.MM.SS)
time_stamp_separator = old_filename[10] # --compact (YYYYMMDD)
file_extension = old_filename.split(".")[-1] # --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)):
old_filename_no_timestamp = old_filename[11:] if re.search("^\d{4}-\d{2}-\d{2}_", old_filename):
stem_elements = old_filename_no_timestamp.split(".")[:-1] # if (running date2name in default mode) then .true.
stem = ".".join(stem_elements) time_stamp = old_filename[:10]
time_stamp_separator = old_filename[10]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[11:]
new_filename = "".join([time_stamp, arg3, text, arg3, stem, str("."), file_extension]) elif re.search('^\d{4}-\d{2}-\d{2}T\d{2}\.\d{2}\.\d{2}_', old_filename):
assert os.path.isfile(new_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:]
os.remove(new_filename) elif re.search("^\d{4}\d{2}\d{2}_", old_filename):
assert os.path.isfile(new_filename) is False # 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}-\d{2}T\d{2}\.\d{2}\.\d{2}_', old_filename): elif re.search("^\d{4}-\d{2}_", old_filename):
# if (running date2name --withtime) then .true. # if (running date2name --month) then .true.
time_stamp = old_filename[:19] time_stamp = old_filename[:7]
time_stamp_separator = old_filename[19] time_stamp_separator = old_filename[7]
file_extension = old_filename.split(".")[-1] 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:]
old_filename_no_timestamp = old_filename[20:]
stem_elements = old_filename_no_timestamp.split(".")[:-1] stem_elements = old_filename_no_timestamp.split(".")[:-1]
stem = ".".join(stem_elements) stem = ".".join(stem_elements)

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-06 (YYYY-MM-DD) # edit: 2022-01-09 (YYYY-MM-DD)
# 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
@ -22,24 +22,24 @@
* Deployment * Deployment
On a computer with Python 3 only, the recommended call on the CLI to The programmatic tests are set up for pytest for Python 3. It
run the tests is either one of the following instructions (you might however depends on your installation (and in case of Linux, the
need to add the executable bit): authors of your Linux distribution ([[https://github.com/pytest-dev/pytest/discussions/9481][reference]])) if this utility may
be started by =pytest= (e.g., the pattern in pytest's manual), or by
=pytest-3= by either one of the pattern below:
#+begin_src bash :tangle no #+begin_src bash :tangle no
python pytest -v test_appendfilename.py pytest -v test_appendfilename.py
./Makefile pytest-3 -v test_appendfilename.py
#+end_src #+end_src
In case the computer you use equally includes an installation of As of writing, the later pattern is the to be used e.g., in Linux
legacy Python 2 side-by-side to Python 3, you must explicitly call Debian 12/bookworm (branch testing) to discern pytest (for
for the later branch of the two. Depending on your OS, this contemporary Python 3) from pytest (for legacy Python 2).
requires an adjustment of the command issued. In Linux Debian
12/bookworm, branch testing, for example,
#+begin_src bash :tangle no The =Makefile= this =org= file provides for convenience running
python3 pytest-3 -v test_appendfilename.py these tests assumes the later syntax pattern. (It might be
#+end_src necessary to provide the executable bit to activate the Makefile.)
* Setup of Emacs * Setup of Emacs
@ -56,38 +56,38 @@
permission. permission.
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp :tangle no
;; support these languages at all: ;; support these languages at all:
(org-babel-do-load-languages (org-babel-do-load-languages
'org-babel-load-languages 'org-babel-load-languages
'((emacs-lisp . t) '((emacs-lisp . t)
(org . t) (org . t)
(shell . t) (shell . t)
(python . t))) (python . t)))
;; enable syntax highlighting: ;; enable syntax highlighting:
(setq org-src-fontify-natively t) (setq org-src-fontify-natively t)
;; adjust indentations, set tabs as explicit 4 spaces: ;; adjust indentations, set tabs as explicit 4 spaces:
(setq-default indent-tabs-mode nil) (setq-default indent-tabs-mode nil)
(setq default-tab-width 4) (setq default-tab-width 4)
(setq custom-tab-width 4) (setq custom-tab-width 4)
(setq-default python-indent-offset custom-tab-width) (setq-default python-indent-offset custom-tab-width)
(setq org-edit-src-content-indentation 0) (setq org-edit-src-content-indentation 0)
(setq org-src-tab-acts-natively t) (setq org-src-tab-acts-natively t)
(setq org-src-preserve-indentation t) (setq org-src-preserve-indentation t)
;; some comfort functions Suenkler mentions: ;; some comfort functions Suenkler mentions:
(delete-selection-mode 1) (delete-selection-mode 1)
(defalias 'yes-or-no-p 'y-or-n-p) (defalias 'yes-or-no-p 'y-or-n-p)
(show-paren-mode 1) (show-paren-mode 1)
(setq show-paren-style 'parenthesis) (setq show-paren-style 'parenthesis)
(column-number-mode nil) (column-number-mode nil)
(setq org-src-fontify-natively t) (setq org-src-fontify-natively t)
#+end_src #+end_src
#+RESULTS: #+RESULTS:
@ -108,14 +108,14 @@
Makefile. Makefile.
#+BEGIN_SRC makefile :tangle Makefile #+BEGIN_SRC makefile :tangle Makefile
# GNU Make file for the automation of pytest for appendfilename. # GNU Make file for the automation of pytest for appendfilename
# #
# While the test script is written for Python 3.9.2, you might need to # While the test script is written for Python 3.9.2, it depends on
# adjust the following instruction once in case your OS includes # your installation of pytest (and in case of Linux, the authors of
# pytest for legacy Python 2 side by side to Python 3, or only hosts # your distribution) if pytest for Python 3 is invoked either by
# pytest for Python 3. The tests in script test_appendfilename.py are # pytest, or pytest-3. In some distributions, pytest actually may
# set up to work with pytest for Python 3; dependent on your # invoke pyest for legacy Python 2; the tests in test_date2name.py
# installation, which may be named pytest-3, or (again) pytest. # however are incompatible to this.
# #
# Put this file like test_appendfilename.py in the root folder of # Put this file like test_appendfilename.py in the root folder of
# appendfilename fetched from PyPi or GitHub. Then run # appendfilename fetched from PyPi or GitHub. Then run
@ -127,8 +127,8 @@
# right after the first test failing, use the -x flag to the # right after the first test failing, use the -x flag to the
# instructions on the CLI in addition to the verbosity flag to (-v). # instructions on the CLI in addition to the verbosity flag to (-v).
# pytest -v test_appendfilename.py # only pytest for Python 3 is present # pytest -v test_appendfilename.py # the pattern by pytest's manual
pytest-3 -v test_appendfilename.py # pytest if Python 2 and Python 3 coexist pytest-3 -v test_appendfilename.py # the alternative pattern (e.g., Debian 12)
#+end_src #+end_src
** Building a pytest.ini ** Building a pytest.ini
@ -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-07 (YYYY-MM-DD) # edit: 2022-01-09 (YYYY-MM-DD)
# #
"""Test pad for functions by appendfilename with pytest. """Test pad for functions by appendfilename with pytest.
@ -213,7 +213,9 @@ 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",
"211231_test.txt"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"]) "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+", @pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
@ -251,7 +253,9 @@ def test_pattern_s1(arg1, arg2, arg3):
#+begin_src python :tangle test_appendfilename.py #+begin_src python :tangle test_appendfilename.py
@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",
"20211231_test.txt", "2012-12_test.txt",
"211231_test.txt"])
@pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"]) "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+", @pytest.mark.parametrize("arg3", [" ", "!", "@", "#", "$", "%", "*", "_", "+",
@ -291,7 +295,8 @@ def test_pattern_s2(arg1, arg2, arg3, arg4):
#+begin_src python :tangle test_appendfilename.py #+begin_src python :tangle test_appendfilename.py
@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"]) "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", @pytest.mark.parametrize("arg2", ["-t book", "-t book_shelf",
"--text book", "--text book_shelf"]) "--text book", "--text book_shelf"])
@pytest.mark.parametrize("arg3", [" " , "#", "!", "@", "#", "$", "%", "*", "_", "+", @pytest.mark.parametrize("arg3", [" " , "#", "!", "@", "#", "$", "%", "*", "_", "+",
@ -311,33 +316,57 @@ def test_pattern_s3_02(arg1, arg2, arg3):
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} --smart-prepend") test = getoutput(f"python3 {PROGRAM} {arg1} {arg2} --separator={arg3} --smart-prepend")
# analysis section: # analysis section:
old_filename = str(arg1) old_filename = str(arg1)
if re.search("^\d{4}-\d{2}-\d{2}_", old_filename): # test pattern issued by date2name vs. other pattern
# if (running date2name in default mode) then .true. # default (YYYY-MM-DD)
time_stamp = old_filename[:10] # --withtime (YYYY-MM-DDTHH.MM.SS)
time_stamp_separator = old_filename[10] # --compact (YYYYMMDD)
file_extension = old_filename.split(".")[-1] # --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)):
old_filename_no_timestamp = old_filename[11:] if re.search("^\d{4}-\d{2}-\d{2}_", old_filename):
stem_elements = old_filename_no_timestamp.split(".")[:-1] # if (running date2name in default mode) then .true.
stem = ".".join(stem_elements) time_stamp = old_filename[:10]
time_stamp_separator = old_filename[10]
file_extension = old_filename.split(".")[-1]
old_filename_no_timestamp = old_filename[11:]
new_filename = "".join([time_stamp, arg3, text, arg3, stem, str("."), file_extension]) elif re.search('^\d{4}-\d{2}-\d{2}T\d{2}\.\d{2}\.\d{2}_', old_filename):
assert os.path.isfile(new_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:]
os.remove(new_filename) elif re.search("^\d{4}\d{2}\d{2}_", old_filename):
assert os.path.isfile(new_filename) is False # 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}-\d{2}T\d{2}\.\d{2}\.\d{2}_', old_filename): elif re.search("^\d{4}-\d{2}_", old_filename):
# if (running date2name --withtime) then .true. # if (running date2name --month) then .true.
time_stamp = old_filename[:19] time_stamp = old_filename[:7]
time_stamp_separator = old_filename[19] time_stamp_separator = old_filename[7]
file_extension = old_filename.split(".")[-1] 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:]
old_filename_no_timestamp = old_filename[20:]
stem_elements = old_filename_no_timestamp.split(".")[:-1] stem_elements = old_filename_no_timestamp.split(".")[:-1]
stem = ".".join(stem_elements) stem = ".".join(stem_elements)