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_mpy("frzmpy")
freeze_mpy("$(MPY_DIR)/tests/frozen")

View File

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

View File

@ -199,3 +199,13 @@ X
'\x1b'
b'\x00\xff'
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)
mpy_files.append(outfile)
else:
assert kind == manifestfile.KIND_FREEZE_MPY
mpy_files.append(full_path)
ts_outfile = timestamp
assert result.kind == manifestfile.KIND_FREEZE_MPY
mpy_files.append(result.full_path)
ts_outfile = result.timestamp
ts_newest = max(ts_newest, ts_outfile)
# 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
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):
"""
Freeze the given `path` and all .py scripts within it as a string,
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):
"""
Freeze the input (see above) by first compiling the .py scripts to
.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):
"""
Freeze the input (see above), which must be .mpy files that are
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__.