Index: lit/Commands/CommandScriptImmediateOutput/CommandScriptImmediateOutputConsole.test =================================================================== --- lit/Commands/CommandScriptImmediateOutput/CommandScriptImmediateOutputConsole.test +++ lit/Commands/CommandScriptImmediateOutput/CommandScriptImmediateOutputConsole.test @@ -0,0 +1,11 @@ +# Test that LLDB correctly allows scripted commands to set immediate output to +# the console. + +# RUN: %lldb -s %s \ +# RUN: -o 'command script import %S/Inputs/custom_command.py' \ +# RUN: -o 'command script add -f custom_command.command_function mycommand' \ +# RUN: -o 'mycommand' \ +# RUN: -o 'command script delete mycommand' \ +# RUN: 2>&1 | FileCheck %s + +# CHECK: this is a test string, just a test string Index: lit/Commands/CommandScriptImmediateOutput/CommandScriptImmediateOutputFile.test =================================================================== --- lit/Commands/CommandScriptImmediateOutput/CommandScriptImmediateOutputFile.test +++ lit/Commands/CommandScriptImmediateOutput/CommandScriptImmediateOutputFile.test @@ -0,0 +1,51 @@ +# Test that LLDB correctly allows scripted commands to set immediate output to +# a file. + +# RUN: echo "READ" > %t.read.txt +# RUN: echo "WRITE" > %t.write.txt +# RUN: echo "APPEND" > %t.append.txt +# RUN: echo "READ PLUS" > %t.read_plus.txt +# RUN: echo "WRITE PLUS" > %t.write_plus.txt +# RUN: echo "APPEND PLUS" > %t.append_plus.txt + +# RUN: %lldb -s %s \ +# RUN: -o 'command script import %S/Inputs/custom_command.py' \ +# RUN: -o 'command script add -f custom_command.write_file mywrite' \ +# RUN: -o 'mywrite %t.read.txt r' \ +# RUN: -o 'mywrite %t.write.txt w' \ +# RUN: -o 'mywrite %t.append.txt a' \ +# RUN: -o 'mywrite %t.write_plus.txt w+' \ +# RUN: -o 'mywrite %t.read_plus.txt r+' \ +# RUN: -o 'mywrite %t.append_plus.txt a+' \ +# RUN: -o 'command script delete mywrite' + +# RUN: cat %t.read.txt | FileCheck %s --check-prefix READ +# READ: READ +# READ-NOT: writing to file with mode + +# RUN: cat %t.write.txt | FileCheck %s --check-prefix WRITE +# WRITE-NOT: WRITE +# WRITE: writing to file with mode: w + +# RUN: cat %t.append.txt | FileCheck %s --check-prefix APPEND +# APPEND: APPEND +# APPEND-NEXT: writing to file with mode: a + +# RUN: cat %t.write_plus.txt | FileCheck %s --check-prefix WRITEPLUS +# WRITEPLUS-NOT: WRITE PLUS +# WRITEPLUS: writing to file with mode: w+ + +# RUN: cat %t.read_plus.txt | FileCheck %s --check-prefix READPLUS +# READPLUS-NOT: READ PLUS +# READPLUS: writing to file with mode: r+ + +# RUN: cat %t.append_plus.txt | FileCheck %s --check-prefix APPENDPLUS +# APPENDPLUS: APPEND PLUS +# APPENDPLUS-NEXT: writing to file with mode: a+ + +# RUN: rm %t.read.txt +# RUN: rm %t.write.txt +# RUN: rm %t.append.txt +# RUN: rm %t.write_plus.txt +# RUN: rm %t.read_plus.txt +# RUN: rm %t.append_plus.txt Index: lit/Commands/CommandScriptImmediateOutput/Inputs/custom_command.py =================================================================== --- lit/Commands/CommandScriptImmediateOutput/Inputs/custom_command.py +++ lit/Commands/CommandScriptImmediateOutput/Inputs/custom_command.py @@ -0,0 +1,19 @@ +from __future__ import print_function + +import sys +import shlex + + +def command_function(debugger, command, exe_ctx, result, internal_dict): + result.SetImmediateOutputFile(sys.__stdout__) + print('this is a test string, just a test string', file=result) + + +def write_file(debugger, command, exe_ctx, result, internal_dict): + args = shlex.split(command) + path = args[0] + mode = args[1] + with open(path, mode) as f: + result.SetImmediateOutputFile(f) + if not mode in ['r']: + print('writing to file with mode: ' + mode, file=result) Index: packages/Python/lldbsuite/test/functionalities/command_script_immediate_output/TestCommandScriptImmediateOutput.py =================================================================== --- packages/Python/lldbsuite/test/functionalities/command_script_immediate_output/TestCommandScriptImmediateOutput.py +++ packages/Python/lldbsuite/test/functionalities/command_script_immediate_output/TestCommandScriptImmediateOutput.py @@ -1,101 +0,0 @@ -""" -Test that LLDB correctly allows scripted commands to set an immediate output file -""" - -from __future__ import print_function - - -import os -import time -import lldb -from lldbsuite.test.decorators import * -from lldbsuite.test.lldbtest import * -from lldbsuite.test.lldbpexpect import * -from lldbsuite.test import lldbutil - - -class CommandScriptImmediateOutputTestCase (PExpectTest): - - mydir = TestBase.compute_mydir(__file__) - NO_DEBUG_INFO_TESTCASE = True - - def setUp(self): - # Call super's setUp(). - PExpectTest.setUp(self) - - @skipIfRemote # test not remote-ready llvm.org/pr24813 - @expectedFailureAll( - oslist=["windows"], - bugnumber="llvm.org/pr22274: need a pexpect replacement for windows") - @expectedFailureAll(oslist=["freebsd"], bugnumber="llvm.org/pr26139") - @skipIfDarwin - def test_command_script_immediate_output_console(self): - """Test that LLDB correctly allows scripted commands to set immediate output to the console.""" - prompt = "\(lldb\) " - self.launch(timeout=10) - self.expect(prompt) - - script = os.path.join(self.getSourceDir(), 'custom_command.py') - prompt = "\(lldb\) " - - self.sendline('command script import %s' % script, patterns=[prompt]) - self.sendline( - 'command script add -f custom_command.command_function mycommand', - patterns=[prompt]) - self.sendline( - 'mycommand', - patterns='this is a test string, just a test string') - self.sendline('command script delete mycommand', patterns=[prompt]) - self.quit() - - @skipIfRemote # test not remote-ready llvm.org/pr24813 - @expectedFailureAll( - oslist=["windows"], - bugnumber="llvm.org/pr22274: need a pexpect replacement for windows") - @expectedFailureAll(oslist=["freebsd"], bugnumber="llvm.org/pr26139") - @skipIfDarwin - def test_command_script_immediate_output_file(self): - """Test that LLDB correctly allows scripted commands to set immediate output to a file.""" - prompt = "\(lldb\) " - self.launch(timeout=10) - self.expect(prompt) - - test_files = {self.getBuildArtifact('read.txt'): 'r', - self.getBuildArtifact('write.txt'): 'w', - self.getBuildArtifact('append.txt'): 'a', - self.getBuildArtifact('write_plus.txt'): 'w+', - self.getBuildArtifact('read_plus.txt'): 'r+', - self.getBuildArtifact('append_plus.txt'): 'a+'} - - starter_string = 'Starter Garbage\n' - write_string = 'writing to file with mode: ' - - for path, mode in test_files.items(): - with open(path, 'w+') as init: - init.write(starter_string) - - script = os.path.join(self.getSourceDir(), 'custom_command.py') - - self.sendline('command script import %s' % script, patterns=[prompt]) - - self.sendline( - 'command script add -f custom_command.write_file mywrite', - patterns=[prompt]) - for path, mode in test_files.items(): - command = 'mywrite "' + path + '" ' + mode - - self.sendline(command, patterns=[prompt]) - - self.sendline('command script delete mywrite', patterns=[prompt]) - - self.quit() - - for path, mode in test_files.items(): - with open(path, 'r') as result: - if mode in ['r', 'a', 'a+']: - self.assertEquals(result.readline(), starter_string) - if mode in ['w', 'w+', 'r+', 'a', 'a+']: - self.assertEquals( - result.readline(), write_string + mode + '\n') - - self.assertTrue(os.path.isfile(path)) Index: packages/Python/lldbsuite/test/functionalities/command_script_immediate_output/custom_command.py =================================================================== --- packages/Python/lldbsuite/test/functionalities/command_script_immediate_output/custom_command.py +++ packages/Python/lldbsuite/test/functionalities/command_script_immediate_output/custom_command.py @@ -1,19 +0,0 @@ -from __future__ import print_function - -import sys -import shlex - - -def command_function(debugger, command, exe_ctx, result, internal_dict): - result.SetImmediateOutputFile(sys.__stdout__) - print('this is a test string, just a test string', file=result) - - -def write_file(debugger, command, exe_ctx, result, internal_dict): - args = shlex.split(command) - path = args[0] - mode = args[1] - with open(path, mode) as f: - result.SetImmediateOutputFile(f) - if not mode in ['r']: - print('writing to file with mode: ' + mode, file=result)