1# coding=utf8 2""" 3Test that the expression parser returns proper Unicode strings. 4""" 5 6import os, time 7import unittest2 8import lldb 9from lldbtest import * 10import lldbutil 11 12# this test case fails because of rdar://12991846 13# the expression parser does not deal correctly with Unicode expressions 14# e.g. 15#(lldb) expr L"Hello" 16#(const wchar_t [6]) $0 = { 17# [0] = \0\0\0\0 18# [1] = \0\0\0\0 19# [2] = \0\0\0\0 20# [3] = \0\0\0\0 21# [4] = H\0\0\0 22# [5] = e\0\0\0 23#} 24 25class Rdar12991846TestCase(TestBase): 26 27 mydir = os.path.join("lang", "cpp", "rdar12991846") 28 29 @unittest2.expectedFailure 30 @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 31 @dsym_test 32 def test_with_dsym(self): 33 """Test that the expression parser returns proper Unicode strings.""" 34 self.buildDsym() 35 self.rdar12991846() 36 37 @unittest2.expectedFailure 38 @dwarf_test 39 def test_with_dwarf(self): 40 """Test that the expression parser returns proper Unicode strings.""" 41 self.buildDwarf() 42 self.rdar12991846() 43 44 def setUp(self): 45 # Call super's setUp(). 46 TestBase.setUp(self) 47 # Find the line number to break for main.cpp. 48 self.source = 'main.cpp' 49 self.line = line_number(self.source, '// Set break point at this line.') 50 51 def rdar12991846(self): 52 """Test that the expression parser returns proper Unicode strings.""" 53 if self.getArchitecture() in ['i386']: 54 self.skipTest("Skipping because this test is known to crash on i386") 55 56 exe = os.path.join(os.getcwd(), "a.out") 57 58 # Create a target by the debugger. 59 target = self.dbg.CreateTarget(exe) 60 self.assertTrue(target, VALID_TARGET) 61 62 # Break on the struct declration statement in main.cpp. 63 lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line) 64 65 # Now launch the process, and do not stop at entry point. 66 process = target.LaunchSimple(None, None, os.getcwd()) 67 68 if not process: 69 self.fail("SBTarget.Launch() failed") 70 71 self.expect('expression L"hello"', 72 substrs = ['hello']) 73 74 self.expect('expression u"hello"', 75 substrs = ['hello']) 76 77 self.expect('expression U"hello"', 78 substrs = ['hello']) 79 80if __name__ == '__main__': 81 import atexit 82 lldb.SBDebugger.Initialize() 83 atexit.register(lambda: lldb.SBDebugger.Terminate()) 84 unittest2.main() 85