00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 import roslib; roslib.load_manifest('test_roslib')
00033
00034 import os
00035 import struct
00036 import sys
00037 import unittest
00038
00039 import roslib.rosenv
00040 import roslib.packages
00041 import rosunit
00042
00043
00044 class RoslibPackagesTest(unittest.TestCase):
00045
00046 def test_list_pkgs_by_path(self):
00047 from roslib.packages import list_pkgs_by_path
00048
00049 d = roslib.packages.get_pkg_dir('test_roslib')
00050
00051 os.chdir(d)
00052
00053 self.assertEquals(['test_roslib'], list_pkgs_by_path('.'))
00054 self.assertEquals(set(['bar', 'foo']), set(list_pkgs_by_path(os.path.join('test', 'package_tests'))))
00055 self.assertEquals(set(['bar', 'foo']), set(list_pkgs_by_path(os.path.join('test', 'package_tests', 'p1'))))
00056 self.assertEquals(['foo'], list_pkgs_by_path(os.path.join('test', 'package_tests', 'p1', 'foo')))
00057
00058 self.assertEquals([], list_pkgs_by_path(os.path.join('bin')))
00059
00060
00061 def test_list_pkgs(self):
00062
00063 import roslib.rospack
00064 import roslib.packages
00065 pkgs = [s.split()[0] for s in roslib.rospack.rospackexec(['list']).split('\n')]
00066 retval = roslib.packages.list_pkgs()
00067 self.assertEquals(set(pkgs), set(retval), set(pkgs) ^ set(retval))
00068
00069
00070 retval = roslib.packages.list_pkgs()
00071 self.assertEquals(set(pkgs), set(retval), set(pkgs) ^ set(retval))
00072
00073
00074 d = roslib.packages.get_pkg_dir('test_roslib')
00075 d = os.path.join(d, 'test', 'package_tests')
00076
00077 def test_find_node(self):
00078 import roslib.packages
00079 d = roslib.packages.get_pkg_dir('test_roslib')
00080 p = os.path.join(d, 'test', 'fake_node.py')
00081 self.assertEquals(p, roslib.packages.find_node('test_roslib', 'fake_node.py'))
00082
00083 self.assertEquals(None, roslib.packages.find_node('test_roslib', 'not_a_node'))
00084
00085 def test_get_pkg_dir(self):
00086 import roslib.packages
00087 import roslib.rospack
00088 path = roslib.rospack.rospackexec(['find', 'test_roslib'])
00089 self.assertEquals(path, roslib.packages.get_pkg_dir('test_roslib'))
00090 try:
00091 self.assertEquals(path, roslib.packages.get_pkg_dir('fake_test_roslib'))
00092 self.fail("should have raised")
00093 except roslib.packages.InvalidROSPkgException: pass
00094
00095 def test_get_dir_pkg(self):
00096 import roslib.packages
00097 import roslib.rospack
00098 path = os.path.realpath(roslib.rospack.rospackexec(['find', 'test_roslib']))
00099
00100 res = roslib.packages.get_dir_pkg(path)
00101 res = (os.path.realpath(res[0]), res[1])
00102 self.assertEquals((path, 'test_roslib'), res)
00103 res = roslib.packages.get_dir_pkg(os.path.join(path, 'test'))
00104 res = (os.path.realpath(res[0]), res[1])
00105 self.assertEquals((path, 'test_roslib'), res)
00106
00107
00108 self.assertEquals((None, None), roslib.packages.get_dir_pkg(os.path.dirname(path)))
00109
00110 def test_ROSPackages(self):
00111 from roslib.packages import ROSPackages
00112 rp = ROSPackages()
00113
00114 try:
00115 rp.load_manifests('test_roslib')
00116 self.fail("should have raised")
00117 except TypeError:
00118 pass
00119
00120
00121 x = rp.depends1(['test_roslib'])
00122 self.assertEquals(['test_roslib'], x.keys())
00123 self.assertEquals(set(['roslib', 'rosunit']), set(x['test_roslib']))
00124 x = rp.depends1(['test_rospack'])
00125 self.assertEquals(['test_rospack'], x.keys())
00126 self.assertEquals(set(['rospack', 'rosunit']), set(x['test_rospack']))
00127
00128 rp = ROSPackages()
00129 x = rp.depends1(['test_roslib', 'test_rospack'])
00130 self.assertEquals(set(['test_rospack', 'test_roslib']), set(x.keys()))
00131 self.assertEquals(set(['rospack', 'rosunit']), set(x['test_rospack']))
00132 self.assertEquals(set(['roslib', 'rosunit']), set(x['test_roslib']))
00133
00134
00135 test_roslib_depends = ['rospack', 'roslib', 'rosunit']
00136 x = rp.depends(['test_roslib'])
00137 self.assertEquals(['test_roslib'], x.keys())
00138 s1 = set(test_roslib_depends)
00139 s2 = set(x['test_roslib'])
00140 self.assertEquals(s1, s2, s1^s2)
00141
00142
00143 no_depends = ['mk', 'rospack', 'rosbuild']
00144 for p in no_depends:
00145 self.assertEquals({p: []}, rp.depends1([p]))
00146 self.assertEquals({p: []}, rp.depends([p]))
00147
00148 rp = ROSPackages()
00149 v = dict((p, []) for p in no_depends)
00150 self.assertEquals(v, rp.depends1(no_depends))
00151
00152 self.assertEquals(v, rp.depends1(no_depends))
00153
00154
00155
00156 roslib_rosdeps0 = ['python', 'python-yaml', 'boost']
00157 roslib_rosdeps = roslib_rosdeps0
00158 rosbuild_rosdeps = ['bzip2']
00159
00160 rp = ROSPackages()
00161
00162 x = rp.rosdeps0(['mk'])
00163 self.assertEquals(['mk'], x.keys())
00164 self.assertEquals(set(), set(x['mk']))
00165
00166 x = rp.rosdeps0(['roslib'])
00167 self.assertEquals(['roslib'], x.keys())
00168 self.assertEquals(set(roslib_rosdeps0), set(x['roslib']))
00169
00170 x = rp.rosdeps0(['rosbuild'])
00171 self.assertEquals(['rosbuild'], x.keys())
00172 self.assertEquals(set(rosbuild_rosdeps), set(x['rosbuild']))
00173
00174
00175 p = 'rosunit'
00176 rosunit_rosdeps = set(roslib_rosdeps + ['gtest'])
00177 x = rp.rosdeps([p])
00178 self.assertEquals([p], x.keys())
00179 self.assertEquals(rosunit_rosdeps, set(x[p]))
00180 x = rp.rosdeps(['rosunit', 'mk'])
00181 self.assertEquals(set(['rosunit', 'mk']), set(x.keys()))
00182 self.assertEquals(rosunit_rosdeps, set(x['rosunit']))
00183 self.assertEquals([], x['mk'])
00184
00185 rp = ROSPackages()
00186 no_rosdeps = ['mk', 'rospack']
00187 no_rosdeps0 = no_rosdeps + ['test_roslib']
00188 for p in no_rosdeps0:
00189 self.assertEquals({p: []}, rp.rosdeps0([p]))
00190 if p in no_rosdeps:
00191 self.assertEquals({p: []}, rp.rosdeps([p]))
00192
00193 rp = ROSPackages()
00194 v = dict((p, []) for p in no_rosdeps)
00195 self.assertEquals(v, rp.rosdeps0(no_rosdeps))
00196 if p in no_rosdeps:
00197 self.assertEquals({p: []}, rp.rosdeps([p]))
00198
00199 self.assertEquals(v, rp.rosdeps0(no_rosdeps))
00200 if p in no_rosdeps:
00201 self.assertEquals({p: []}, rp.rosdeps([p]))
00202
00203
00204 def test_get_package_paths(self):
00205 from roslib.packages import get_package_paths
00206
00207 s = os.pathsep
00208 tests = [
00209 ('', []),
00210 (s, []),
00211 (s+s+s+s+s, []),
00212 (s+s+s+s+'/fake/kwc/ros-pkg'+s+s+s, ['/fake/kwc/ros-pkg']),
00213 (s.join(['/fake/kwc/ros-pkg', '/fake/wg-ros-pkg']), ['/fake/kwc/ros-pkg', '/fake/wg-ros-pkg']),
00214 ]
00215 for rpp, v in tests:
00216 rr = os.getcwd()
00217 for ros_root_required in [True, False]:
00218 env = { 'ROS_PACKAGE_PATH' : rpp}
00219
00220 if ros_root_required:
00221 try:
00222 get_package_paths(ros_root_required, env)
00223 self.fail("should have failed")
00224 except roslib.rosenv.ROSEnvException:
00225 pass
00226 else:
00227 paths = get_package_paths(ros_root_required, env)
00228 self.assertEquals(v, paths)
00229
00230
00231 env['ROS_ROOT'] = rr
00232 paths = get_package_paths(ros_root_required, env)
00233 self.assertEquals(v + [rr], paths)
00234
00235
00236 def test__platform_supported(self):
00237 self.assertTrue(roslib.packages._platform_supported(os.path.join(roslib.packages.get_pkg_dir("test_roslib"), "test", "platform_supported.manifest.xml"), "test_os", "test_version"))
00238 self.assertFalse(roslib.packages._platform_supported(os.path.join(roslib.packages.get_pkg_dir("test_roslib"), "test", "platform_supported.manifest.xml"), "test_os", "not_test_version"))
00239 self.assertFalse(roslib.packages._platform_supported(os.path.join(roslib.packages.get_pkg_dir("test_roslib"), "test", "platform_supported.manifest.xml"), "not_test_os", "test_version"))
00240 self.assertFalse(roslib.packages._platform_supported(os.path.join(roslib.packages.get_pkg_dir("test_roslib"), "test", "platform_supported.manifest.xml"), "not_test_os", "not_test_version"))
00241
00242 def test_platform_supported_tripwire(self):
00243 self.assertFalse(roslib.packages.platform_supported("test_roslib", "nonextant_os", "noextant_version"))
00244
00245 def test_current_platform_supported_tripwire(self):
00246 roslib.packages.current_platform_supported("test_roslib")
00247
00248
00249
00250 if __name__ == '__main__':
00251 rosunit.unitrun('test_roslib', 'test_packages', RoslibPackagesTest, coverage_packages=['roslib.packages'])
00252