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>
This commit is contained in:
Jim Mussared 2022-09-19 12:05:39 +10:00 committed by Damien George
parent 6ecdf1a240
commit 920da9c5e3
5 changed files with 32 additions and 7 deletions

View File

@ -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")

View File

@ -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__)

View File

@ -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

View File

@ -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

View File

@ -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__.