brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 4a168d3 Raw
268 lines · python
1"""2Test user added container commands3"""4 5 6import sys7import lldb8from lldbsuite.test.decorators import *9from lldbsuite.test.lldbtest import *10 11 12class TestCmdContainer(TestBase):13    NO_DEBUG_INFO_TESTCASE = True14 15    def test_container_add(self):16        self.container_add()17 18    def check_command_tree_exists(self):19        """This makes sure we can still run the command tree we added."""20        self.runCmd("test-multi")21        self.runCmd("test-multi test-multi-sub")22        self.runCmd("test-multi test-multi-sub welcome")23 24    def container_add(self):25        # Make sure we can't overwrite built-in commands:26        self.expect(27            "command container add process",28            "Can't replace builtin container command",29            substrs=["can't replace builtin command"],30            error=True,31        )32        self.expect(33            "command container add process non_such_subcommand",34            "Can't add to built-in subcommand",35            substrs=["Path component: 'process' is not a user command"],36            error=True,37        )38        self.expect(39            "command container add process launch",40            "Can't replace builtin subcommand",41            substrs=["Path component: 'process' is not a user command"],42            error=True,43        )44 45        # Now lets make a container command:46        self.runCmd("command container add -h 'A test container command' test-multi")47        # Make sure the help works:48        self.expect(49            "help test-multi",50            "Help works for top-level multi",51            substrs=["A test container command"],52        )53        # Add a subcommand:54        self.runCmd(55            "command container add -h 'A test container sub-command' test-multi test-multi-sub"56        )57        # Make sure the help works:58        self.expect(59            "help test-multi",60            "Help shows sub-multi",61            substrs=[62                "A test container command",63                "test-multi-sub -- A test container sub-command",64            ],65        )66        self.expect(67            "help test-multi test-multi-sub",68            "Help shows sub-multi",69            substrs=["A test container sub-command"],70        )71 72        # Now add a script based command to the container command:73        self.runCmd("command script import welcome.py")74        self.runCmd(75            "command script add -c welcome.WelcomeCommand test-multi test-multi-sub welcome"76        )77        # Make sure the help still works:78        self.expect(79            "help test-multi test-multi-sub",80            "Listing subcommands works",81            substrs=[82                "A test container sub-command",83                "welcome -- Just a docstring for Welcome",84            ],85        )86        self.expect(87            "help test-multi test-multi-sub welcome",88            "Subcommand help works",89            substrs=["Just a docstring for Welcome"],90        )91        # And make sure it actually works:92        self.expect(93            "test-multi test-multi-sub welcome friend",94            "Test command works",95            substrs=["Hello friend, welcome to LLDB"],96        )97 98        # Make sure we can make an alias to this:99        self.runCmd(100            "command alias my-welcome test-multi test-multi-sub welcome",101            "We can make an alias to multi-word",102        )103        self.expect(104            "my-welcome friend",105            "Test command works",106            substrs=["Hello friend, welcome to LLDB"],107        )108        self.runCmd("command unalias my-welcome")109 110        # Make sure overwriting works on the leaf command.  First using the111        # explicit option so we should not be able to remove extant commands by default:112 113        self.expect(114            "command script add -c welcome.WelcomeCommand2 test-multi test-multi-sub welcome",115            "overwrite command w/o -o",116            substrs=["cannot add command: sub-command already exists"],117            error=True,118        )119        # But we can with the -o option:120        self.runCmd(121            "command script add -c welcome.WelcomeCommand2 -o test-multi test-multi-sub welcome"122        )123        # Make sure we really did overwrite:124        self.expect(125            "test-multi test-multi-sub welcome friend",126            "Used the new command class",127            substrs=["Hello friend, welcome again to LLDB"],128        )129        self.expect(130            "apropos welcome",131            "welcome should show up in apropos",132            substrs=["A docstring for the second Welcome"],133        )134        self.expect(135            "help test-multi test-multi-sub welcome",136            "welcome should show up in help",137            substrs=["A docstring for the second Welcome"],138        )139        self.expect("help", "test-multi should show up in help", substrs=["test-multi"])140 141        # Now switch the default and make sure we can now delete w/o the overwrite option:142        self.runCmd("settings set interpreter.require-overwrite 0")143        self.runCmd(144            "command script add -c welcome.WelcomeCommand test-multi test-multi-sub welcome"145        )146        # Make sure we really did overwrite:147        self.expect(148            "test-multi test-multi-sub welcome friend",149            "Used the new command class",150            substrs=["Hello friend, welcome to LLDB"],151        )152 153        # Make sure we give good errors when the input is wrong:154        self.expect(155            "command script delete test-mult test-multi-sub welcome",156            "Delete script command - wrong first path component",157            substrs=["'test-mult' not found"],158            error=True,159        )160 161        self.expect(162            "command script delete test-multi test-multi-su welcome",163            "Delete script command - wrong second path component",164            substrs=["'test-multi-su' not found"],165            error=True,166        )167        self.check_command_tree_exists()168 169        self.expect(170            "command script delete test-multi test-multi-sub welcom",171            "Delete script command - wrong leaf component",172            substrs=["'welcom' not found"],173            error=True,174        )175        self.check_command_tree_exists()176 177        self.expect(178            "command script delete test-multi test-multi-sub",179            "Delete script command - no leaf component",180            substrs=["subcommand 'test-multi-sub' is not a user command"],181            error=True,182        )183        self.check_command_tree_exists()184 185        # You can't use command script delete to delete container commands:186        self.expect(187            "command script delete test-multi",188            "Delete script - can't delete container",189            substrs=["command 'test-multi' is a multi-word command."],190            error=True,191        )192        self.expect(193            "command script delete test-multi test-multi-sub",194            "Delete script - can't delete container",195            substrs=["subcommand 'test-multi-sub' is not a user command"],196            error=True,197        )198 199        # You can't use command container delete to delete scripted commands:200        self.expect(201            "command container delete test-multi test-multi-sub welcome",202            "command container can't delete user commands",203            substrs=["subcommand 'welcome' is not a container command"],204            error=True,205        )206 207        # Also make sure you can't alias on top of container commands:208        self.expect(209            "command alias test-multi process launch",210            "Tried to alias on top of a container command",211            substrs=[212                "'test-multi' is a user container command and cannot be overwritten."213            ],214            error=True,215        )216        self.check_command_tree_exists()217 218        # Also assert that we can't delete builtin commands:219        self.expect(220            "command script delete process launch",221            "Delete builtin command fails",222            substrs=["command 'process' is not a user command"],223            error=True,224        )225        # Now let's do the version that works226        self.expect(227            "command script delete test-multi test-multi-sub welcome",228            "Delete script command by path",229            substrs=["Deleted command: test-multi test-multi-sub welcome"],230        )231 232        # Now overwrite the sub-command, it should end up empty:233        self.runCmd(234            "command container add -h 'A different help string' -o test-multi test-multi-sub"235        )236        # welcome should be gone:237        self.expect(238            "test-multi test-multi-sub welcome friend",239            "did remove subcommand",240            substrs=["'test-multi-sub' does not have any subcommands."],241            error=True,242        )243        # We should have the new help:244        self.expect(245            "help test-multi test-multi-sub",246            "help changed",247            substrs=["A different help string"],248        )249 250        # Now try deleting commands.251        self.runCmd("command container delete test-multi test-multi-sub")252        self.expect(253            "test-multi test-multi-sub",254            "Command is not active",255            error=True,256            substrs=["'test-multi' does not have any subcommands"],257        )258        self.expect("help test-multi", matching=False, substrs=["test-multi-sub"])259 260        # Next the root command:261        self.runCmd("command container delete test-multi")262        self.expect(263            "test-multi",264            "Root command gone",265            substrs=["'test-multi' is not a valid command."],266            error=True,267        )268