xref: /llvm-project/lldb/test/API/terminal/TestEditlineCompletions.py (revision 3dfc1d9b0bc41eaf63e551ca357b44a71636b152)
1dd78d7c7SJonas Devlieghereimport lldb
2dd78d7c7SJonas Devliegherefrom lldbsuite.test.decorators import *
3dd78d7c7SJonas Devliegherefrom lldbsuite.test.lldbtest import *
4dd78d7c7SJonas Devliegherefrom lldbsuite.test import lldbutil
5dd78d7c7SJonas Devliegherefrom lldbsuite.test.lldbpexpect import PExpectTest
6dd78d7c7SJonas Devlieghere
7dd78d7c7SJonas Devlieghere
8dd78d7c7SJonas Devlieghereclass EditlineCompletionsTest(PExpectTest):
9dd78d7c7SJonas Devlieghere    @skipIfAsan
10dd78d7c7SJonas Devlieghere    @skipIfEditlineSupportMissing
11dd78d7c7SJonas Devlieghere    def test_completion_truncated(self):
12dd78d7c7SJonas Devlieghere        """Test that the completion is correctly truncated."""
13dd78d7c7SJonas Devlieghere        self.launch(dimensions=(10, 20))
14dd78d7c7SJonas Devlieghere        self.child.send("_regexp-\t")
15dd78d7c7SJonas Devlieghere        self.child.expect("        _regexp-a...")
16dd78d7c7SJonas Devlieghere        self.child.expect("        _regexp-b...")
17dd78d7c7SJonas Devlieghere
18dd78d7c7SJonas Devlieghere    @skipIfAsan
19dd78d7c7SJonas Devlieghere    @skipIfEditlineSupportMissing
20dd78d7c7SJonas Devlieghere    def test_description_truncated(self):
21dd78d7c7SJonas Devlieghere        """Test that the description is correctly truncated."""
22dd78d7c7SJonas Devlieghere        self.launch(dimensions=(10, 70))
23dd78d7c7SJonas Devlieghere        self.child.send("_regexp-\t")
24dd78d7c7SJonas Devlieghere        self.child.expect(
25dd78d7c7SJonas Devlieghere            "        _regexp-attach    -- Attach to process by ID or name."
26dd78d7c7SJonas Devlieghere        )
27dd78d7c7SJonas Devlieghere        self.child.expect(
28dd78d7c7SJonas Devlieghere            "        _regexp-break     -- Set a breakpoint using one of several..."
29dd78d7c7SJonas Devlieghere        )
30dd78d7c7SJonas Devlieghere
31dd78d7c7SJonas Devlieghere    @skipIfAsan
32dd78d7c7SJonas Devlieghere    @skipIfEditlineSupportMissing
33dd78d7c7SJonas Devlieghere    def test_separator_omitted(self):
34dd78d7c7SJonas Devlieghere        """Test that the separated is correctly omitted."""
35dd78d7c7SJonas Devlieghere        self.launch(dimensions=(10, 32))
36dd78d7c7SJonas Devlieghere        self.child.send("_regexp-\t")
37dd78d7c7SJonas Devlieghere        self.child.expect("        _regexp-attach   \r\n")
38dd78d7c7SJonas Devlieghere        self.child.expect("        _regexp-break    \r\n")
39dd78d7c7SJonas Devlieghere
40dd78d7c7SJonas Devlieghere    @skipIfAsan
41dd78d7c7SJonas Devlieghere    @skipIfEditlineSupportMissing
42dd78d7c7SJonas Devlieghere    def test_separator(self):
43dd78d7c7SJonas Devlieghere        """Test that the separated is correctly printed."""
44dd78d7c7SJonas Devlieghere        self.launch(dimensions=(10, 33))
45dd78d7c7SJonas Devlieghere        self.child.send("_regexp-\t")
46dd78d7c7SJonas Devlieghere        self.child.expect("        _regexp-attach    -- A...")
47dd78d7c7SJonas Devlieghere        self.child.expect("        _regexp-break     -- S...")
48dd78d7c7SJonas Devlieghere
49dd78d7c7SJonas Devlieghere    @skipIfAsan
50dd78d7c7SJonas Devlieghere    @skipIfEditlineSupportMissing
51dd78d7c7SJonas Devlieghere    def test_multiline_description(self):
52dd78d7c7SJonas Devlieghere        """Test that multi-line descriptions are correctly padded and truncated."""
53dd78d7c7SJonas Devlieghere        self.launch(dimensions=(10, 72))
54dd78d7c7SJonas Devlieghere        self.child.send("k\t")
55dd78d7c7SJonas Devlieghere        self.child.expect(
56dd78d7c7SJonas Devlieghere            "        kdp-remote -- Connect to a process via remote KDP server."
57dd78d7c7SJonas Devlieghere        )
58dd78d7c7SJonas Devlieghere        self.child.expect(
59dd78d7c7SJonas Devlieghere            "                      If no UDP port is specified, port 41139 is assu..."
60dd78d7c7SJonas Devlieghere        )
61dd78d7c7SJonas Devlieghere        self.child.expect(
62dd78d7c7SJonas Devlieghere            "                      kdp-remote is an abbreviation for 'process conn..."
63dd78d7c7SJonas Devlieghere        )
64dd78d7c7SJonas Devlieghere        self.child.expect("        kill       -- Terminate the current target process.")
65*3dfc1d9bSJonas Devlieghere
66*3dfc1d9bSJonas Devlieghere    @skipIfAsan
67*3dfc1d9bSJonas Devlieghere    @skipIfEditlineSupportMissing
68*3dfc1d9bSJonas Devlieghere    def test_completion_pagination(self):
69*3dfc1d9bSJonas Devlieghere        """Test that we use the terminal height for pagination."""
70*3dfc1d9bSJonas Devlieghere        self.launch(dimensions=(10, 30))
71*3dfc1d9bSJonas Devlieghere        self.child.send("_regexp-\t")
72*3dfc1d9bSJonas Devlieghere        self.child.expect("Available completions:")
73*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-attach")
74*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-break")
75*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-bt")
76*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-display")
77*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-down")
78*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-env")
79*3dfc1d9bSJonas Devlieghere        self.child.expect("        _regexp-jump")
80*3dfc1d9bSJonas Devlieghere        self.child.expect("More")
81*3dfc1d9bSJonas Devlieghere
82*3dfc1d9bSJonas Devlieghere    @skipIfAsan
83*3dfc1d9bSJonas Devlieghere    @skipIfEditlineSupportMissing
84*3dfc1d9bSJonas Devlieghere    def test_completion_multiline_pagination(self):
85*3dfc1d9bSJonas Devlieghere        """Test that we use the terminal height for pagination and account for multi-line descriptions."""
86*3dfc1d9bSJonas Devlieghere        self.launch(dimensions=(6, 72))
87*3dfc1d9bSJonas Devlieghere        self.child.send("k\t")
88*3dfc1d9bSJonas Devlieghere        self.child.expect("Available completions:")
89*3dfc1d9bSJonas Devlieghere        self.child.expect(
90*3dfc1d9bSJonas Devlieghere            "        kdp-remote -- Connect to a process via remote KDP server."
91*3dfc1d9bSJonas Devlieghere        )
92*3dfc1d9bSJonas Devlieghere        self.child.expect(
93*3dfc1d9bSJonas Devlieghere            "                      If no UDP port is specified, port 41139 is assu..."
94*3dfc1d9bSJonas Devlieghere        )
95*3dfc1d9bSJonas Devlieghere        self.child.expect(
96*3dfc1d9bSJonas Devlieghere            "                      kdp-remote is an abbreviation for 'process conn..."
97*3dfc1d9bSJonas Devlieghere        )
98*3dfc1d9bSJonas Devlieghere        self.child.expect("More")
99