mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 21:11:12 +02:00
This commit implements a small subset of the CPython `marshal` module. It implements `marshal.dumps()` and `marshal.loads()`, but only supports (un)marshalling code objects at this stage. The semantics match CPython, except that the actual marshalled bytes is not compatible with CPython's marshalled bytes. The module is enabled at the everything level (only on the unix coverage build at this stage). Signed-off-by: Damien George <damien@micropython.org>
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
# Test the marshal module, basic functionality.
|
|
|
|
try:
|
|
import marshal
|
|
|
|
(lambda: 0).__code__
|
|
except (AttributeError, ImportError):
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
ftype = type(lambda: 0)
|
|
|
|
# Test basic dumps and loads.
|
|
print(ftype(marshal.loads(marshal.dumps((lambda: a).__code__)), {"a": 4})())
|
|
|
|
# Test dumps of a result from compile().
|
|
ftype(marshal.loads(marshal.dumps(compile("print(a)", "", "exec"))), {"print": print, "a": 5})()
|
|
|
|
# Test marshalling a function with arguments.
|
|
print(ftype(marshal.loads(marshal.dumps((lambda x, y: x + y).__code__)), {})(1, 2))
|
|
|
|
# Test marshalling a function with default arguments.
|
|
print(ftype(marshal.loads(marshal.dumps((lambda x=0: x).__code__)), {})("arg"))
|
|
|
|
# Test marshalling a function containing constant objects (a tuple).
|
|
print(ftype(marshal.loads(marshal.dumps((lambda: (None, ...)).__code__)), {})())
|
|
|
|
# Test instantiating multiple code's with different globals dicts.
|
|
code = marshal.loads(marshal.dumps((lambda: a).__code__))
|
|
f1 = ftype(code, {"a": 1})
|
|
f2 = ftype(code, {"a": 2})
|
|
print(f1(), f2())
|
|
|
|
# Test unmarshallable object.
|
|
try:
|
|
marshal.dumps(type)
|
|
except ValueError:
|
|
print("ValueError")
|