|
3 | 3 | """
|
4 | 4 |
|
5 | 5 | from __future__ import print_function
|
6 |
| - |
| 6 | +import os |
| 7 | +import stat |
| 8 | +import tempfile |
7 | 9 |
|
8 | 10 | import lldb
|
9 | 11 | from lldbsuite.test.decorators import *
|
@@ -293,3 +295,145 @@ def test_target_stop_hook_delete(self):
|
293 | 295 |
|
294 | 296 | self.expect("target stop-hook delete 1", error=True, substrs=['unknown stop hook id: "1"'])
|
295 | 297 | 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