| 2756 | |
| 2757 | @run_in_pyodide |
| 2758 | def test_pyproxy_dict(selenium): |
| 2759 | from pyodide.code import run_js |
| 2760 | |
| 2761 | get = run_js("(d, key) => d[key]") |
| 2762 | d = { |
| 2763 | 1: "int", |
| 2764 | "1": "string", |
| 2765 | 2: "int", |
| 2766 | "3": "string", |
| 2767 | "items": "some value", |
| 2768 | "$dollar": 8, |
| 2769 | "$$dollar": 9, |
| 2770 | (1, 2, 3): 12, |
| 2771 | } |
| 2772 | assert get(d, 1) == "string" |
| 2773 | assert get(d, 2) == "int" |
| 2774 | assert len(list(get(d, "items")())) == 8 |
| 2775 | assert get(d, "$dollar") == 8 |
| 2776 | assert get(d, "$$dollar") == 9 |
| 2777 | run_js("(d) => console.log(Reflect.ownKeys(d))")(d) |
| 2778 | keys = set( |
| 2779 | run_js("(d) => Reflect.ownKeys(d).filter(x => typeof x !== 'symbol')")(d) |
| 2780 | ) |
| 2781 | assert keys >= {"1", "2", "keys", "values", "items", "$dollar", "$$dollar"} |
| 2782 | set_ = run_js("(d, key, value) => d[key] = value") |
| 2783 | assert set_(d, 1, 7) |
| 2784 | assert d["1"] == 7 |
| 2785 | assert d[1] == "int" |
| 2786 | assert set_(d, 2, 99) |
| 2787 | assert d[2] == 99 |
| 2788 | assert "2" not in d |
| 2789 | assert set_(d, 3, 27) |
| 2790 | assert d["3"] == 27 |
| 2791 | assert 3 not in d |
| 2792 | delete = run_js("(d, key, value) => delete d[key]") |
| 2793 | assert delete(d, 1) |
| 2794 | assert 1 in d |
| 2795 | assert "1" not in d |
| 2796 | assert delete(d, 1) |
| 2797 | assert 1 not in d |
| 2798 | assert "1" not in d |
| 2799 | delete(d, 1) |
| 2800 | delete(d, 2) |
| 2801 | assert 2 not in d |
| 2802 | delete(d, 3) |
| 2803 | assert "3" not in d |
| 2804 | |
| 2805 | |
| 2806 | @pytest.mark.xfail_browsers(safari="No support for Symbol.dispose yet") |