diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ports/webassembly/py_proxy_dict_undefined.mjs | 34 | ||||
-rw-r--r-- | tests/ports/webassembly/py_proxy_dict_undefined.mjs.exp | 11 |
2 files changed, 45 insertions, 0 deletions
diff --git a/tests/ports/webassembly/py_proxy_dict_undefined.mjs b/tests/ports/webassembly/py_proxy_dict_undefined.mjs new file mode 100644 index 000000000..d47a6a028 --- /dev/null +++ b/tests/ports/webassembly/py_proxy_dict_undefined.mjs @@ -0,0 +1,34 @@ +// Test passing a Python dict into JavaScript, how it behaves with undefined keys. +// If JavaScript accesses a key that does not exist, `undefined` should be returned. +// This is different to Python-side behaviour, where `KeyError` is raised. + +const mp = await (await import(process.argv[2])).loadMicroPython(); + +// Create a JavaScript function with default arguments. +// When `value` is `undefined` it will receive its default. +function withDefault({ value = "OK" } = {}) { + console.log(value); +} + +globalThis.withDefault = withDefault; + +// Call the function from JavaScript with various arguments. +withDefault(); +withDefault({}); +withDefault({ value: null }); +withDefault({ value: undefined }); +withDefault({ value: () => {} }); + +console.log("===="); + +// Call the function from Python with the same arguments as above. +// The results should be the same. +mp.runPython(` +import js + +js.withDefault() +js.withDefault({}) +js.withDefault({"value": None}) +js.withDefault({"value": js.undefined}) +js.withDefault({"value": (lambda: {})}) +`); diff --git a/tests/ports/webassembly/py_proxy_dict_undefined.mjs.exp b/tests/ports/webassembly/py_proxy_dict_undefined.mjs.exp new file mode 100644 index 000000000..6cf5b9fa1 --- /dev/null +++ b/tests/ports/webassembly/py_proxy_dict_undefined.mjs.exp @@ -0,0 +1,11 @@ +OK +OK +null +OK +[Function: value] +==== +OK +OK +null +OK +[Function: obj] { _ref: 7 } |