File: test_search.py

package info (click to toggle)
python-jedi 0.19.1%2Bds1-1
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,680 kB
  • sloc: python: 28,783; makefile: 172; ansic: 13
file content (89 lines) | stat: -rw-r--r-- 3,506 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import os
import sys

import pytest


class SomeClass:
    class SomeClass:
        def twice(self, a):
            something = os
            return something

    def twice(self, b):
        pass

    def some_function():
        pass


@pytest.mark.parametrize(
    'string, descriptions, kwargs', [
        # No completions
        ('SomeClass', ['class SomeClass'], {}),
        ('SomeClass', ['class SomeClass', 'class SomeClass.SomeClass'], dict(all_scopes=True)),
        ('Some', [], dict(all_scopes=True)),
        ('os', ['module os'], {}),
        ('sys', ['module sys'], {}),
        ('sys.path', ['statement sys.path'], {}),
        ('sys.exit', ['function sys.exit'], {}),
        ('something', [], {}),
        ('something', ['statement SomeClass.SomeClass.twice.something'], dict(all_scopes=True)),

        # Completions
        ('class Some', ['class SomeClass', 'class SomeClass.SomeClass'],
         dict(all_scopes=True, complete=True)),
        ('class Some', ['class SomeClass'], dict(complete=True)),
        ('Some', ['class SomeClass', 'class SomeClass.SomeClass',
                  'statement SomeClass.SomeClass.twice.something',
                  'function SomeClass.some_function'], dict(all_scopes=True, complete=True)),
        ('some', ['class SomeClass', 'class SomeClass.SomeClass',
                  'statement SomeClass.SomeClass.twice.something',
                  'function SomeClass.some_function'], dict(all_scopes=True, complete=True)),

        # Fuzzy
        ('class Smelss', ['class SomeClass'], dict(complete=True, fuzzy=True)),
        ('class Smelss', ['class SomeClass', 'class SomeClass.SomeClass'],
         dict(complete=True, fuzzy=True, all_scopes=True)),

        # Nested
        ('SomeClass.SomeClass', ['class SomeClass.SomeClass'],
         dict(all_scopes=True)),
        ('SomeClass.SomeClass.twice', ['function SomeClass.SomeClass.twice'],
         dict(all_scopes=True)),
        ('SomeClass.SomeClass.twice.__call__', ['function types.FunctionType.__call__'],
         dict(all_scopes=True)),
        ('SomeClass.SomeClass.twice.something', [], dict(all_scopes=True)),
        ('SomeClass.twice', ['function SomeClass.twice', 'function SomeClass.SomeClass.twice'],
         dict(all_scopes=True)),

        # Nested completions
        ('SomeClass.twi', ['function SomeClass.twice', 'function SomeClass.SomeClass.twice'],
         dict(all_scopes=True, complete=True)),

        # Fuzzy unfortunately doesn't work
        ('SomeCl.twice', [], dict(all_scopes=True, complete=True, fuzzy=True)),
    ]
)
def test_simple_search(Script, string, descriptions, kwargs):
    if kwargs.pop('complete', False) is True:
        defs = Script(path=__file__).complete_search(string, **kwargs)
    else:
        defs = Script(path=__file__).search(string, **kwargs)
    this_mod = 'test.test_api.test_search.'
    assert [d.type + ' ' + d.full_name.replace(this_mod, '') for d in defs] == descriptions


@pytest.mark.parametrize(
    'string, completions, fuzzy, all_scopes', [
        ('SomeCl', ['ass'], False, False),
        ('SomeCl', [None], True, False),
        ('twic', [], False, False),
        ('some_f', [], False, False),
        ('twic', ['e', 'e'], False, True),
        ('some_f', ['unction'], False, True),
    ]
)
def test_complete_search(Script, string, completions, fuzzy, all_scopes):
    defs = Script(path=__file__).complete_search(string, fuzzy=fuzzy, all_scopes=all_scopes)
    assert [d.complete for d in defs] == completions