Skip to content

Commit 2bdbb6a

Browse files
committed
[lldb][NFC] Add some tests for the target subcommands
llvm-svn: 370050
1 parent 024bf27 commit 2bdbb6a

File tree

1 file changed

+145
-1
lines changed

1 file changed

+145
-1
lines changed

lldb/packages/Python/lldbsuite/test/functionalities/target_command/TestTargetCommand.py

Lines changed: 145 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
"""
44

55
from __future__ import print_function
6-
6+
import os
7+
import stat
8+
import tempfile
79

810
import lldb
911
from lldbsuite.test.decorators import *
@@ -293,3 +295,145 @@ def test_target_stop_hook_delete(self):
293295

294296
self.expect("target stop-hook delete 1", error=True, substrs=['unknown stop hook id: "1"'])
295297
self.expect("target stop-hook delete blub", error=True, substrs=['invalid stop hook id: "blub"'])
298+
299+
@no_debug_info_test
300+
def test_target_list_args(self):
301+
self.expect("target list blub", error=True,
302+
substrs=["the 'target list' command takes no arguments"])
303+
304+
@no_debug_info_test
305+
def test_target_select_no_index(self):
306+
self.expect("target select", error=True,
307+
substrs=["'target select' takes a single argument: a target index"])
308+
309+
@no_debug_info_test
310+
def test_target_select_invalid_index(self):
311+
self.runCmd("target delete --all")
312+
self.expect("target select 0", error=True,
313+
substrs=["index 0 is out of range since there are no active targets"])
314+
self.buildB()
315+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
316+
self.expect("target select 1", error=True,
317+
substrs=["index 1 is out of range, valid target indexes are 0 - 0"])
318+
319+
320+
@no_debug_info_test
321+
def test_target_create_multiple_args(self):
322+
self.expect("target create a b", error=True,
323+
substrs=["'target create' takes exactly one executable path"])
324+
325+
@no_debug_info_test
326+
def test_target_create_nonexistent_core_file(self):
327+
self.expect("target create -c doesntexist", error=True,
328+
substrs=["core file 'doesntexist' doesn't exist"])
329+
330+
# Write only files don't seem to be supported on Windows.
331+
@skipIfWindows
332+
@no_debug_info_test
333+
def test_target_create_unreadable_core_file(self):
334+
tf = tempfile.NamedTemporaryFile()
335+
os.chmod(tf.name, stat.S_IWRITE)
336+
self.expect("target create -c '" + tf.name + "'", error=True,
337+
substrs=["core file '", "' is not readable"])
338+
339+
@no_debug_info_test
340+
def test_target_create_nonexistent_sym_file(self):
341+
self.expect("target create -s doesntexist doesntexisteither", error=True,
342+
substrs=["invalid symbol file path 'doesntexist'"])
343+
344+
@no_debug_info_test
345+
def test_target_create_invalid_core_file(self):
346+
invalid_core_path = os.path.join(self.getSourceDir(), "invalid_core_file")
347+
self.expect("target create -c '" + invalid_core_path + "'", error=True,
348+
substrs=["Unable to find process plug-in for core file '"])
349+
350+
351+
# Write only files don't seem to be supported on Windows.
352+
@skipIfWindows
353+
@no_debug_info_test
354+
def test_target_create_unreadable_sym_file(self):
355+
tf = tempfile.NamedTemporaryFile()
356+
os.chmod(tf.name, stat.S_IWRITE)
357+
self.expect("target create -s '" + tf.name + "' no_exe", error=True,
358+
substrs=["symbol file '", "' is not readable"])
359+
360+
@no_debug_info_test
361+
def test_target_delete_all(self):
362+
self.buildAll()
363+
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
364+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
365+
self.expect("target delete --all")
366+
self.expect("target list", substrs=["No targets."])
367+
368+
@no_debug_info_test
369+
def test_target_delete_by_index(self):
370+
self.buildAll()
371+
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
372+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
373+
self.runCmd("file " + self.getBuildArtifact("c.out"), CURRENT_EXECUTABLE_SET)
374+
self.expect("target delete 3", error=True,
375+
substrs=["target index 3 is out of range, valid target indexes are 0 - 2"])
376+
377+
self.runCmd("target delete 1")
378+
self.expect("target list", matching=False, substrs=["b.out"])
379+
self.runCmd("target delete 1")
380+
self.expect("target list", matching=False, substrs=["c.out"])
381+
382+
self.expect("target delete 1", error=True,
383+
substrs=["target index 1 is out of range, the only valid index is 0"])
384+
385+
self.runCmd("target delete 0")
386+
self.expect("target list", matching=False, substrs=["a.out"])
387+
388+
self.expect("target delete 0", error=True, substrs=["no targets to delete"])
389+
self.expect("target delete 1", error=True, substrs=["no targets to delete"])
390+
391+
@no_debug_info_test
392+
def test_target_delete_by_index_multiple(self):
393+
self.buildAll()
394+
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
395+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
396+
self.runCmd("file " + self.getBuildArtifact("c.out"), CURRENT_EXECUTABLE_SET)
397+
398+
self.expect("target delete 0 1 2 3", error=True,
399+
substrs=["target index 3 is out of range, valid target indexes are 0 - 2"])
400+
self.expect("target list", substrs=["a.out", "b.out", "c.out"])
401+
402+
self.runCmd("target delete 0 1 2")
403+
self.expect("target list", matching=False, substrs=["a.out", "c.out"])
404+
405+
@no_debug_info_test
406+
def test_target_delete_selected(self):
407+
self.buildAll()
408+
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
409+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
410+
self.runCmd("file " + self.getBuildArtifact("c.out"), CURRENT_EXECUTABLE_SET)
411+
self.runCmd("target select 1")
412+
self.runCmd("target delete")
413+
self.expect("target list", matching=False, substrs=["b.out"])
414+
self.runCmd("target delete")
415+
self.runCmd("target delete")
416+
self.expect("target list", substrs=["No targets."])
417+
self.expect("target delete", error=True, substrs=["no target is currently selected"])
418+
419+
@no_debug_info_test
420+
def test_target_modules_search_paths_clear(self):
421+
self.buildB()
422+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
423+
self.runCmd("target modules search-paths add foo bar")
424+
self.runCmd("target modules search-paths add foz baz")
425+
self.runCmd("target modules search-paths clear")
426+
self.expect("target list", matching=False, substrs=["bar", "baz"])
427+
428+
@no_debug_info_test
429+
def test_target_modules_search_paths_query(self):
430+
self.buildB()
431+
self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)
432+
self.runCmd("target modules search-paths add foo bar")
433+
self.expect("target modules search-paths query foo", substrs=["bar"])
434+
# Query something that doesn't exist.
435+
self.expect("target modules search-paths query faz", substrs=["faz"])
436+
437+
# Invalid arguments.
438+
self.expect("target modules search-paths query faz baz", error=True,
439+
substrs=["query requires one argument"])

0 commit comments

Comments
 (0)