From e179b3e526f2b2a100ab6cb80768872afee7b5f7 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 7 Sep 2019 02:58:21 +0200 Subject: [PATCH] Add a test for dict key completions --- test/test_api/test_completion.py | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/test/test_api/test_completion.py b/test/test_api/test_completion.py index 1e5d681d..cd55cb32 100644 --- a/test/test_api/test_completion.py +++ b/test/test_api/test_completion.py @@ -265,3 +265,64 @@ def test_file_path_completions(Script, file, code, column, expected): assert len(comps) > 100 # This is basically global completions. else: assert [c.complete for c in comps] == expected + + +@pytest.mark.parametrize( + 'added_code, column, expected', [ + ('ints[', 5, ['1', '50']), + ('ints[]', 5, ['1', '50']), + ('ints[1]', 5, ['1']), + ('ints[1]', 6, ['']), + ('ints[1', 5, ['1']), + ('ints[1', 6, ['']), + + ('ints[5]', 5, ['1']), + ('ints[5]', 6, ['0']), + ('ints[50', 5, ['50']), + ('ints[5', 6, ['0']), + ('ints[50', 6, ['0']), + ('ints[50', 7, ['']), + + ('strs[', 5, ["'asdf'", "'foo'", "'fbar'"]), + ('strs[]', 5, ["'asdf'", "'foo'", "'fbar'"]), + ("strs[']", 6, ["asdf'", "foo'", "fbar'"]), + ('strs["]', 6, ['asdf"', 'foo"', 'fbar"']), + ('strs["""]', 6, ['asdf', 'foo', 'fbar']), + ('strs["""]', 8, ['asdf"""', 'foo"""', 'fbar"""']), + ('strs[b"]', 8, []), + ('strs[r"asd', 11, ['f"']), + ('strs[R"asd', 11, ['f"']), + ('strs[f"asd', 11, ['f"']), + + ('strs["f', 7, ['oo"]']), + ('strs["f"', 7, ['oo']), + ('strs["f]', 7, ['oo"]']), + ('strs["f"]', 7, ['oo']), + + ('mixed[', 6, ['1', '1.1', 'None', "'a\sdf'", "b'foo'"]), + ('mixed[1', 6, ['', '.1']), + + ('casted["f', 9, ['3"', 'bar"', 'oo"']), + ('casted_mod["f', 13, ['3"', 'bar"', 'oo"', 'uuu"', 'ull"']), + ] +) +def test_dict_keys_completions(Script, added_code, column, expected, skip_pre_python35): + code = dedent(r''' + ints = {1: ''} + ints[50] = 3.0 + strs = {'asdf': 1, u"""foo""": 2, r'fbar': 3} + mixed = {1: 2, 1.10: 4, None: 6, r'a\sdf': 8, b'foo': 9} + casted = dict(strs, f3=4, r'\\xyz') + casted_mod = dict(casted) + casted_mod["fuuu"] = 8 + casted_mod["full"] = 8 + ''') + line = None + if isinstance(column, tuple): + raise NotImplementedError + line, column = column + comps = Script(code + added_code, line=line, column=column).completions() + if expected == "A LOT": + assert len(comps) > 100 # This is basically global completions. + else: + assert [c.complete for c in comps] == expected