132 lines · python
1"""Test the SBEnvironment APIs."""2 3 4from math import fabs5import lldb6from lldbsuite.test.decorators import *7from lldbsuite.test.lldbtest import *8from lldbsuite.test import lldbutil9 10 11class SBEnvironmentAPICase(TestBase):12 NO_DEBUG_INFO_TESTCASE = True13 14 # We use this function to test both kind of accessors:15 # . Get*AtIndex and GetEntries16 def assertEqualEntries(self, env, entries):17 self.assertEqual(env.GetNumValues(), len(entries))18 for i in range(env.GetNumValues()):19 name = env.GetNameAtIndex(i)20 value = env.GetValueAtIndex(i)21 self.assertIn(name + "=" + value, entries)22 23 entries = env.GetEntries()24 self.assertEqual(entries.GetSize(), len(entries))25 for i in range(entries.GetSize()):26 (name, value) = entries.GetStringAtIndex(i).split("=")27 self.assertIn(name + "=" + value, entries)28 29 @skipIfRemote # Remote environment not supported.30 def test_platform_environment(self):31 env = self.dbg.GetSelectedPlatform().GetEnvironment()32 # We assume at least PATH is set33 self.assertNotEqual(env.Get("PATH"), None)34 35 def test_launch_info(self):36 target = self.dbg.CreateTarget("")37 launch_info = target.GetLaunchInfo()38 env = launch_info.GetEnvironment()39 env_count = env.GetNumValues()40 41 env.Set("FOO", "bar", True)42 self.assertEqual(env.GetNumValues(), env_count + 1)43 44 # Make sure we only modify the copy of the launchInfo's environment45 self.assertEqual(launch_info.GetEnvironment().GetNumValues(), env_count)46 47 # Note: swig >= 3.0.3 can use named parameters, omit to support <= 3.0.2.48 # i.e. launch_info.SetEnvironment(env, append=True)49 launch_info.SetEnvironment(env, True)50 self.assertEqual(launch_info.GetEnvironment().GetNumValues(), env_count + 1)51 52 env.Set("FOO", "baz", True)53 launch_info.SetEnvironment(env, True)54 self.assertEqual(launch_info.GetEnvironment().GetNumValues(), env_count + 1)55 self.assertEqual(launch_info.GetEnvironment().Get("FOO"), "baz")56 57 # Make sure we can replace the launchInfo's environment58 env.Clear()59 env.Set("BAR", "foo", True)60 env.PutEntry("X=y")61 launch_info.SetEnvironment(env, False)62 self.assertEqualEntries(launch_info.GetEnvironment(), ["BAR=foo", "X=y"])63 64 @skipIfRemote # Remote environment not supported.65 def test_target_environment(self):66 env = self.dbg.GetSelectedTarget().GetEnvironment()67 # There is no target, so env should be empty68 self.assertEqual(env.GetNumValues(), 0)69 self.assertEqual(env.Get("PATH"), None)70 71 target = self.dbg.CreateTarget("")72 env = target.GetEnvironment()73 path = env.Get("PATH")74 # Now there's a target, so at least PATH should exist75 self.assertNotEqual(path, None)76 77 # Make sure we are getting a copy by modifying the env we just got78 env.PutEntry("PATH=#" + path)79 self.assertEqual(target.GetEnvironment().Get("PATH"), path)80 81 def test_creating_and_modifying_environment(self):82 env = lldb.SBEnvironment()83 84 self.assertEqual(env.Get("FOO"), None)85 self.assertEqual(env.Get("BAR"), None)86 87 # We also test empty values88 # Note: swig >= 3.0.3 can use named parameters, omit to support <= 3.0.2.89 # i.e. env.Set("FOO", "", overwrite=False)90 self.assertTrue(env.Set("FOO", "", False))91 env.Set("BAR", "foo", False)92 93 self.assertEqual(env.Get("FOO"), "")94 self.assertEqual(env.Get("BAR"), "foo")95 96 self.assertEqual(env.GetNumValues(), 2)97 98 self.assertEqualEntries(env, ["FOO=", "BAR=foo"])99 100 # Make sure modifications work101 self.assertFalse(env.Set("FOO", "bar", False))102 self.assertEqual(env.Get("FOO"), "")103 104 env.PutEntry("FOO=bar")105 self.assertEqual(env.Get("FOO"), "bar")106 107 self.assertEqualEntries(env, ["FOO=bar", "BAR=foo"])108 109 # Make sure we can unset110 self.assertTrue(env.Unset("FOO"))111 self.assertFalse(env.Unset("FOO"))112 self.assertEqual(env.Get("FOO"), None)113 114 # Test SetEntries115 entries = lldb.SBStringList()116 entries.AppendList(["X=x", "Y=y"], 2)117 118 env.SetEntries(entries, True)119 self.assertEqualEntries(env, ["BAR=foo", "X=x", "Y=y"])120 121 env.SetEntries(entries, False)122 self.assertEqualEntries(env, ["X=x", "Y=y"])123 124 entries.Clear()125 entries.AppendList(["X=y", "Y=x"], 2)126 env.SetEntries(entries, True)127 self.assertEqualEntries(env, ["X=y", "Y=x"])128 129 # Test clear130 env.Clear()131 self.assertEqualEntries(env, [])132