199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTests imported namespaces in C++. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprechtimport lldb 599451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 699451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 799451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 899451b44SJordan Rupprecht 999451b44SJordan Rupprecht 1099451b44SJordan Rupprechtclass TestCppNsImport(TestBase): 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht def test_with_run_command(self): 1399451b44SJordan Rupprecht """Tests imported namespaces in C++.""" 1499451b44SJordan Rupprecht self.build() 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht # Get main source file 1799451b44SJordan Rupprecht src_file = os.path.join(self.getSourceDir(), "main.cpp") 1899451b44SJordan Rupprecht src_file_spec = lldb.SBFileSpec(src_file) 1999451b44SJordan Rupprecht self.assertTrue(src_file_spec.IsValid(), "Main source file") 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht # Get the path of the executable 2299451b44SJordan Rupprecht exe_path = self.getBuildArtifact("a.out") 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht # Load the executable 2599451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe_path) 2699451b44SJordan Rupprecht self.assertTrue(target.IsValid(), VALID_TARGET) 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht # Break on main function 2999451b44SJordan Rupprecht break_0 = target.BreakpointCreateBySourceRegex( 3099451b44SJordan Rupprecht "// break 0", src_file_spec) 3199451b44SJordan Rupprecht self.assertTrue( 3299451b44SJordan Rupprecht break_0.IsValid() and break_0.GetNumLocations() >= 1, 3399451b44SJordan Rupprecht VALID_BREAKPOINT) 3499451b44SJordan Rupprecht break_1 = target.BreakpointCreateBySourceRegex( 3599451b44SJordan Rupprecht "// break 1", src_file_spec) 3699451b44SJordan Rupprecht self.assertTrue( 3799451b44SJordan Rupprecht break_1.IsValid() and break_1.GetNumLocations() >= 1, 3899451b44SJordan Rupprecht VALID_BREAKPOINT) 3999451b44SJordan Rupprecht 4099451b44SJordan Rupprecht # Launch the process 4199451b44SJordan Rupprecht args = None 4299451b44SJordan Rupprecht env = None 4399451b44SJordan Rupprecht process = target.LaunchSimple( 4499451b44SJordan Rupprecht args, env, self.get_process_working_directory()) 4599451b44SJordan Rupprecht self.assertTrue(process.IsValid(), PROCESS_IS_VALID) 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht # Get the thread of the process 48*0ed758b2SDave Lee self.assertEqual( 49*0ed758b2SDave Lee process.GetState(), lldb.eStateStopped, 5099451b44SJordan Rupprecht PROCESS_STOPPED) 5199451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 5299451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 5399451b44SJordan Rupprecht 5499451b44SJordan Rupprecht # Get current fream of the thread at the breakpoint 5599451b44SJordan Rupprecht frame = thread.GetSelectedFrame() 5699451b44SJordan Rupprecht 5799451b44SJordan Rupprecht # Test imported namespaces 5899451b44SJordan Rupprecht test_result = frame.EvaluateExpression("n") 5999451b44SJordan Rupprecht self.assertTrue( 6099451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 1, 6199451b44SJordan Rupprecht "n = 1") 6299451b44SJordan Rupprecht 6399451b44SJordan Rupprecht test_result = frame.EvaluateExpression("N::n") 6499451b44SJordan Rupprecht self.assertTrue( 6599451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 1, 6699451b44SJordan Rupprecht "N::n = 1") 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht test_result = frame.EvaluateExpression("nested") 6999451b44SJordan Rupprecht self.assertTrue( 7099451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 3, 7199451b44SJordan Rupprecht "nested = 3") 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht test_result = frame.EvaluateExpression("anon") 7499451b44SJordan Rupprecht self.assertTrue( 7599451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 2, 7699451b44SJordan Rupprecht "anon = 2") 7799451b44SJordan Rupprecht 7899451b44SJordan Rupprecht test_result = frame.EvaluateExpression("global") 7999451b44SJordan Rupprecht self.assertTrue( 8099451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 4, 8199451b44SJordan Rupprecht "global = 4") 8299451b44SJordan Rupprecht 8399451b44SJordan Rupprecht test_result = frame.EvaluateExpression("fun_var") 8499451b44SJordan Rupprecht self.assertTrue( 8599451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 9, 8699451b44SJordan Rupprecht "fun_var = 9") 8799451b44SJordan Rupprecht 8899451b44SJordan Rupprecht test_result = frame.EvaluateExpression("Fun::fun_var") 8999451b44SJordan Rupprecht self.assertTrue( 9099451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 0, 9199451b44SJordan Rupprecht "Fun::fun_var = 0") 9299451b44SJordan Rupprecht 9399451b44SJordan Rupprecht test_result = frame.EvaluateExpression("not_imported") 9499451b44SJordan Rupprecht self.assertTrue( 9599451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 35, 9699451b44SJordan Rupprecht "not_imported = 35") 9799451b44SJordan Rupprecht 9899451b44SJordan Rupprecht # Currently there is no way to distinguish between "::imported" and "imported" in ClangExpressionDeclMap so this fails 9999451b44SJordan Rupprecht #test_result = frame.EvaluateExpression("::imported") 10099451b44SJordan Rupprecht #self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 89, "::imported = 89") 10199451b44SJordan Rupprecht 10299451b44SJordan Rupprecht test_result = frame.EvaluateExpression("Imported::imported") 10399451b44SJordan Rupprecht self.assertTrue( 10499451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 99, 10599451b44SJordan Rupprecht "Imported::imported = 99") 10699451b44SJordan Rupprecht 10799451b44SJordan Rupprecht test_result = frame.EvaluateExpression("imported") 10899451b44SJordan Rupprecht self.assertTrue( 10999451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 99, 11099451b44SJordan Rupprecht "imported = 99") 11199451b44SJordan Rupprecht 11299451b44SJordan Rupprecht test_result = frame.EvaluateExpression("single") 11399451b44SJordan Rupprecht self.assertTrue( 11499451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 3, 11599451b44SJordan Rupprecht "single = 3") 11699451b44SJordan Rupprecht 11799451b44SJordan Rupprecht # Continue to second breakpoint 11899451b44SJordan Rupprecht process.Continue() 11999451b44SJordan Rupprecht 12099451b44SJordan Rupprecht # Get the thread of the process 121*0ed758b2SDave Lee self.assertEqual( 122*0ed758b2SDave Lee process.GetState(), lldb.eStateStopped, 12399451b44SJordan Rupprecht PROCESS_STOPPED) 12499451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 12599451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 12699451b44SJordan Rupprecht 12799451b44SJordan Rupprecht # Get current fream of the thread at the breakpoint 12899451b44SJordan Rupprecht frame = thread.GetSelectedFrame() 12999451b44SJordan Rupprecht 13099451b44SJordan Rupprecht # Test function inside namespace 13199451b44SJordan Rupprecht test_result = frame.EvaluateExpression("fun_var") 13299451b44SJordan Rupprecht self.assertTrue( 13399451b44SJordan Rupprecht test_result.IsValid() and test_result.GetValueAsSigned() == 5, 13499451b44SJordan Rupprecht "fun_var = 5") 135