brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · d51ef33 Raw
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