199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest some lldb command abbreviations. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprechtimport lldb 799451b44SJordan Rupprechtimport os 8*bbef51ebSLawrence D'Annaimport sys 9*bbef51ebSLawrence D'Annaimport json 1099451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 1199451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1299451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 13004a264fSPavel Labathfrom lldbsuite.test import lldbplatformutil 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprechtclass TestPaths(TestBase): 1799451b44SJordan Rupprecht 1899451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 1999451b44SJordan Rupprecht 2099451b44SJordan Rupprecht @no_debug_info_test 2199451b44SJordan Rupprecht def test_paths(self): 2299451b44SJordan Rupprecht '''Test to make sure no file names are set in the lldb.SBFileSpec objects returned by lldb.SBHostOS.GetLLDBPath() for paths that are directories''' 2399451b44SJordan Rupprecht dir_path_types = [lldb.ePathTypeLLDBShlibDir, 2499451b44SJordan Rupprecht lldb.ePathTypeSupportExecutableDir, 2599451b44SJordan Rupprecht lldb.ePathTypeHeaderDir, 2699451b44SJordan Rupprecht lldb.ePathTypePythonDir, 2799451b44SJordan Rupprecht lldb.ePathTypeLLDBSystemPlugins, 2899451b44SJordan Rupprecht lldb.ePathTypeLLDBUserPlugins, 2999451b44SJordan Rupprecht lldb.ePathTypeLLDBTempSystemDir, 3099451b44SJordan Rupprecht lldb.ePathTypeClangDir] 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht for path_type in dir_path_types: 3399451b44SJordan Rupprecht f = lldb.SBHostOS.GetLLDBPath(path_type) 3499451b44SJordan Rupprecht # No directory path types should have the filename set 35004a264fSPavel Labath self.assertIsNone(f.GetFilename()) 36004a264fSPavel Labath 37004a264fSPavel Labath shlib_dir = lldb.SBHostOS.GetLLDBPath(lldb.ePathTypeLLDBShlibDir).GetDirectory() 38004a264fSPavel Labath if lldbplatformutil.getHostPlatform() == 'windows': 39004a264fSPavel Labath filenames = ['liblldb.dll'] 40004a264fSPavel Labath elif lldbplatformutil.getHostPlatform() == 'darwin': 41004a264fSPavel Labath filenames = ['LLDB', 'liblldb.dylib'] 42004a264fSPavel Labath else: 43004a264fSPavel Labath filenames = ['liblldb.so'] 44004a264fSPavel Labath self.assertTrue(any([os.path.exists(os.path.join(shlib_dir, f)) for f in 45004a264fSPavel Labath filenames]), "shlib_dir = " + shlib_dir) 46004a264fSPavel Labath 47*bbef51ebSLawrence D'Anna @no_debug_info_test 48*bbef51ebSLawrence D'Anna def test_interpreter_info(self): 49*bbef51ebSLawrence D'Anna info_sd = self.dbg.GetScriptInterpreterInfo(self.dbg.GetScriptingLanguage("python")) 50*bbef51ebSLawrence D'Anna self.assertTrue(info_sd.IsValid()) 51*bbef51ebSLawrence D'Anna stream = lldb.SBStream() 52*bbef51ebSLawrence D'Anna self.assertTrue(info_sd.GetAsJSON(stream).Success()) 53*bbef51ebSLawrence D'Anna info = json.loads(stream.GetData()) 54*bbef51ebSLawrence D'Anna prefix = info['prefix'] 55*bbef51ebSLawrence D'Anna self.assertEqual(os.path.realpath(sys.prefix), os.path.realpath(prefix)) 56*bbef51ebSLawrence D'Anna self.assertEqual( 57*bbef51ebSLawrence D'Anna os.path.realpath(os.path.join(info['lldb-pythonpath'], 'lldb')), 58*bbef51ebSLawrence D'Anna os.path.realpath(os.path.dirname(lldb.__file__))) 59*bbef51ebSLawrence D'Anna self.assertTrue(os.path.exists(info['executable'])) 60*bbef51ebSLawrence D'Anna self.assertEqual(info['language'], 'python') 61*bbef51ebSLawrence D'Anna 6299451b44SJordan Rupprecht 6399451b44SJordan Rupprecht @no_debug_info_test 6499451b44SJordan Rupprecht def test_directory_doesnt_end_with_slash(self): 6599451b44SJordan Rupprecht current_directory_spec = lldb.SBFileSpec(os.path.curdir) 6699451b44SJordan Rupprecht current_directory_string = current_directory_spec.GetDirectory() 6799451b44SJordan Rupprecht self.assertNotEqual(current_directory_string[-1:], '/') 6899451b44SJordan Rupprecht 6999451b44SJordan Rupprecht @skipUnlessPlatform(["windows"]) 7099451b44SJordan Rupprecht @no_debug_info_test 7199451b44SJordan Rupprecht def test_windows_double_slash(self): 7299451b44SJordan Rupprecht '''Test to check the path with double slash is handled correctly ''' 7399451b44SJordan Rupprecht # Create a path and see if lldb gets the directory and file right 7499451b44SJordan Rupprecht fspec = lldb.SBFileSpec("C:\\dummy1\\dummy2//unknown_file", True) 7599451b44SJordan Rupprecht self.assertEqual( 7699451b44SJordan Rupprecht os.path.normpath( 7799451b44SJordan Rupprecht fspec.GetDirectory()), 7899451b44SJordan Rupprecht os.path.normpath("C:/dummy1/dummy2")) 7999451b44SJordan Rupprecht self.assertEqual(fspec.GetFilename(), "unknown_file") 80