unix/variants/coverage: Add test for manifest freeze_mpy().

This uses the frozentest.mpy that is also used by ports/minimal.

Also fixes two bugs that these new tests picked up:
 - File extension matching in manifestfile.py.
 - Handling of freeze_mpy results in makemanifest.

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
pull/8970/head
Jim Mussared 2022-09-19 12:05:39 +10:00 zatwierdzone przez Damien George
rodzic 6ecdf1a240
commit 920da9c5e3
5 zmienionych plików z 32 dodań i 7 usunięć

Wyświetl plik

@ -1,2 +1,3 @@
freeze_as_str("frzstr") freeze_as_str("frzstr")
freeze_as_mpy("frzmpy") freeze_as_mpy("frzmpy")
freeze_mpy("$(MPY_DIR)/tests/frozen")

Wyświetl plik

@ -96,3 +96,8 @@ import frzmpy3
from frzqstr import returns_NULL from frzqstr import returns_NULL
print(returns_NULL()) print(returns_NULL())
# test for freeze_mpy
import frozentest
print(frozentest.__file__)

Wyświetl plik

@ -199,3 +199,13 @@ X
'\x1b' '\x1b'
b'\x00\xff' b'\x00\xff'
NULL NULL
uPy
a long string that is not interned
a string that has unicode αβγ chars
b'bytes 1234\x01'
123456789
0
1
2
3
frozentest.py

Wyświetl plik

@ -210,9 +210,9 @@ def main():
ts_outfile = get_timestamp(outfile) ts_outfile = get_timestamp(outfile)
mpy_files.append(outfile) mpy_files.append(outfile)
else: else:
assert kind == manifestfile.KIND_FREEZE_MPY assert result.kind == manifestfile.KIND_FREEZE_MPY
mpy_files.append(full_path) mpy_files.append(result.full_path)
ts_outfile = timestamp ts_outfile = result.timestamp
ts_newest = max(ts_newest, ts_outfile) ts_newest = max(ts_newest, ts_outfile)
# Check if output file needs generating # Check if output file needs generating

Wyświetl plik

@ -394,28 +394,37 @@ class ManifestFile:
`opt` is the optimisation level to pass to mpy-cross when compiling .py `opt` is the optimisation level to pass to mpy-cross when compiling .py
to .mpy. to .mpy.
""" """
self._freeze_internal(path, script, exts=(".py", ".mpy"), kind=KIND_FREEZE_AUTO, opt=opt) self._freeze_internal(
path,
script,
exts=(
".py",
".mpy",
),
kind=KIND_FREEZE_AUTO,
opt=opt,
)
def freeze_as_str(self, path): def freeze_as_str(self, path):
""" """
Freeze the given `path` and all .py scripts within it as a string, Freeze the given `path` and all .py scripts within it as a string,
which will be compiled upon import. which will be compiled upon import.
""" """
self._search(path, None, None, exts=(".py"), kind=KIND_FREEZE_AS_STR) self._search(path, None, None, exts=(".py",), kind=KIND_FREEZE_AS_STR)
def freeze_as_mpy(self, path, script=None, opt=None): def freeze_as_mpy(self, path, script=None, opt=None):
""" """
Freeze the input (see above) by first compiling the .py scripts to Freeze the input (see above) by first compiling the .py scripts to
.mpy files, then freezing the resulting .mpy files. .mpy files, then freezing the resulting .mpy files.
""" """
self._freeze_internal(path, script, exts=(".py"), kind=KIND_FREEZE_AS_MPY, opt=opt) self._freeze_internal(path, script, exts=(".py",), kind=KIND_FREEZE_AS_MPY, opt=opt)
def freeze_mpy(self, path, script=None, opt=None): def freeze_mpy(self, path, script=None, opt=None):
""" """
Freeze the input (see above), which must be .mpy files that are Freeze the input (see above), which must be .mpy files that are
frozen directly. frozen directly.
""" """
self._freeze_internal(path, script, exts=(".mpy"), kind=KIND_FREEZE_MPY, opt=opt) self._freeze_internal(path, script, exts=(".mpy",), kind=KIND_FREEZE_MPY, opt=opt)
# Generate a temporary file with a line appended to the end that adds __version__. # Generate a temporary file with a line appended to the end that adds __version__.