Home | Trees | Indices | Help |
---|
|
1 # -*- coding: utf-8 -*- 2 # Elisa - Home multimedia server 3 # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). 4 # All rights reserved. 5 # 6 # This file is available under one of two license agreements. 7 # 8 # This file is licensed under the GPL version 3. 9 # See "LICENSE.GPL" in the root of this distribution including a special 10 # exception to use Elisa with Fluendo's plugins. 11 # 12 # The GPL part of Elisa is also available under a commercial licensing 13 # agreement from Fluendo. 14 # See "LICENSE.Elisa" in the root directory of this distribution package 15 # for details on that license. 16 17 from elisa.core import media_uri 18 from elisa.core.tests.elisa_test_case import ElisaTestCase 19 import os, platform 2022 23 samples = [u'file:///home/phil/media/La maison de mon r\xeave', 24 u'http://google.com', 25 u'smb://philn/phil', 26 u'smb:///', 27 u'smb://phil:foo@philn/phil', 28 u'http://192.168.1.0:10243/foo.mp3', 29 u'scheme://test', 30 u'http://192.168.1.0:10243/û.mp3', 31 u'http://192.168.1.0:10243/é.mp3', 32 u'http://google.com#test', 33 u'file:///truc', 34 35 #u'http://192.168.1.0:10243/\xe9.mp3', 36 ] 3746739 for url in self.samples: 40 #url.encode("utf-8") 41 try: 42 uri = media_uri.MediaUri(url) 43 except Exception, exc: 44 print url 45 self.fail("URI Sample %r failed: %s" % (url, exc)) 46 try: 47 unicode(uri) 48 except Exception, exc: 49 print url 50 #import pdb; pdb.set_trace() 51 self.fail("unicode(%s) failed: %s" % (url, exc)) 52 53 self.assertEquals(unicode(uri), url) 54 55 if not url.endswith(u'/'): 56 url2 = u"%s/" % url 57 uri = media_uri.MediaUri(url2) 58 self.assertEquals(unicode(uri), url2)5961 loc = "daap://192.168.1.73:3689" 62 uri = media_uri.MediaUri(loc) 63 self.assertEquals(uri.port, 3689) 64 65 #Empty port 66 loc = "daap://192.168.1.73:/" 67 uri = media_uri.MediaUri(loc) 68 self.assertEquals(uri.port, -1)6971 uri = media_uri.MediaUri(u'file:///c:/home/phil/foo.mp3') 72 self.assertEqual(str(uri), 'file:///c:/home/phil/foo.mp3') 73 74 if platform.system() == 'Windows': 75 self.assertEqual(uri.path, u'c:/home/phil/foo.mp3') 76 else: 77 self.assertEqual(uri.path, u'/c:/home/phil/foo.mp3') 78 79 uri_parts = {'scheme': 'file', 80 'path': "c:\\home\\phil\\foo.mp3" 81 } 82 uri = media_uri.MediaUri(uri_parts) 83 self.assertEqual(str(uri), 'file:///c:/home/phil/foo.mp3') 84 85 uri = media_uri.MediaUri(u'http:///') 86 self.assertEqual(str(uri), 'http:///') 87 self.assertEqual(uri.path, '/') 88 89 uri = media_uri.MediaUri(u'http://') 90 self.assertEqual(str(uri), 'http://') 91 self.assertEqual(uri.path, '') 92 93 uri = media_uri.MediaUri(u'file:///') 94 self.assertEqual(str(uri), u'file:///') 95 if platform.system() == 'Windows': 96 self.assertEqual(uri.path, u'') 97 else: 98 self.assertEqual(uri.path, u'/') 99 100 uri = media_uri.MediaUri(u'file:////') 101 self.assertEqual(str(uri), u'file:///') 102 if platform.system() == 'Windows': 103 self.assertEqual(uri.path, u'') 104 else: 105 self.assertEqual(uri.path, u'/')106108 uri = media_uri.MediaUri(u'file:///home/phil/foo?.mp3') 109 if platform.system() == 'Windows': 110 self.assertEqual(uri.path, u'home/phil/foo') 111 else: 112 self.assertEqual(uri.path, u'/home/phil/foo') 113 114 uri = media_uri.MediaUri(u'file:///c:/home/phil/foo?.mp3') 115 if platform.system() == 'Windows': 116 self.assertEqual(uri.path, u'c:/home/phil/foo') 117 else: 118 self.assertEqual(uri.path, u'/c:/home/phil/foo')119121 122 if platform.system() == 'Windows': 123 raise unittest.SkipTest("Does not works under windows, need investigation") 124 125 uri = media_uri.MediaUri(u"smb://philn:foo@phil/bare") 126 expected_parts = {u'password': u'foo', u'fragment': u'', 127 u'host': u'phil', u'path':u'/bare', 128 u'user': u'philn', 129 u'scheme': u'smb', u'port': 0} 130 for k, v in expected_parts.iteritems(): 131 fail = "%s value unexpected: %r. got %r" % (k,v, getattr(uri, k)) 132 self.assertEquals(getattr(uri, k), v, fail)133135 u = u'file:///home/phil/\ufffd' 136 uri = media_uri.MediaUri(u) 137 self.assertEqual(unicode(uri), u) 138 u = u'file:///home/phil/héoui.txt' 139 uri = media_uri.MediaUri(u) 140 self.assertEqual(unicode(uri), u) 141 142 u = u'file:///path/to/some_where - †' 143 uri = media_uri.MediaUri(u) 144 self.assertEquals(unicode(uri), u) 145 self.assertEquals(unicode(uri.label), u'some_where - †') 146 if platform.system() == 'Windows': 147 self.assertEquals(uri.path, u'path/to/some_where - †') 148 else: 149 self.assertEquals(uri.path, u'/path/to/some_where - †') 150 151 self.assertEquals(uri.scheme, u'file')152 153 ## u = u'file:///home/phil/\ufffd' 154 ## uri = media_uri.MediaUri(u) 155 ## self.assertEqual(str(uri), misc.fs_encode(u)) 156158 u = 'file:///Vidéos' 159 uri = media_uri.MediaUri(u) 160 self.assertEqual(unicode(uri), unicode(u, 'utf-8'))161163 location = u'http://192.168.2.69:10243/WMCv2/%7b9B3A580F-68E8-4701-B8D8-9708E6E5E4F6%7d/103-1.wma?format=PCM' 164 uri = media_uri.MediaUri(location) 165 self.assertEqual(uri.get_param(u'format'), 'PCM') 166 167 # Windows Media Connect fancy urls 168 location = u'http://192.168.1.87:10243/WMPNSSv4/3560585789/ezA1NDZBRDk5LTU3QkEtNENFOS04QjBFLThCQTUxRDFENUU0Qn0uMC5GRDNGRDY3Ng.jpg?width=684,formatID=24,height=456' 169 uri = media_uri.MediaUri(location) 170 parameters = {u'formatID':u'24', u'width': u'684', 171 u'height':u'456'} 172 173 for key in parameters.keys(): 174 self.assertEqual(uri.get_param(key), parameters[key]) 175 176 #self.assertEqual(unicode(uri), location) 177 178 location = u'file:///test/toto?foo=bar bar dflmkds&' 179 self.assertRaises(media_uri.ParseException, media_uri.MediaUri, 180 location) 181 182 183 quoted = media_uri.quote("bar bar foo") 184 location = u'file:///test/toto?label=%s' % quoted 185 uri = media_uri.MediaUri(location) 186 self.assertEqual(uri.get_param('label'), 'bar bar foo') 187 self.assertEqual(unicode(uri), location) 188 189 uri2 = media_uri.MediaUri(uri) 190 self.assertEqual(uri2.get_param('label'), 'bar bar foo') 191 self.assertEqual(unicode(uri2), location) 192 193 params = {'foo': 'hello world', 'bar': '& oui!'} 194 quoted_params = '&'.join(["%s=%s" % (k, v) 195 for (k,v) in media_uri.quote(params).iteritems()]) 196 197 location = u'file:///test?%s' % quoted_params 198 uri = media_uri.MediaUri(location) 199 self.assertEqual(uri.get_param('foo'), params.get('foo')) 200 self.assertEqual(uri.get_param('bar'), params.get('bar')) 201 self.assertEqual(unicode(uri), location) 202 203 uri = media_uri.MediaUri({'scheme': 'file', 'host': '', 204 'path': '/test', 'params': params}) 205 self.assertEqual(uri.get_param('foo'), params.get('foo')) 206 self.assertEqual(uri.get_param('bar'), params.get('bar')) 207 self.failIfEqual(unicode(uri), location) 208 209 quoted_params = media_uri.quote(params) 210 uri = media_uri.MediaUri({'scheme': 'file', 'host': '', 211 'path': '/test', 'params': quoted_params}) 212 self.assertEqual(uri.get_param('foo'), params.get('foo')) 213 self.assertEqual(uri.get_param('bar'), params.get('bar')) 214 self.assertEqual(unicode(uri), location) 215 216 quoted_params = media_uri.quote(params) 217 uri = media_uri.MediaUri({'scheme': 'file', 'host': '', 218 'path': '/test', 'params': quoted_params}) 219 self.assertEqual(uri.get_param('foo'), params.get('foo')) 220 uri.del_param('foo') 221 self.assertEqual(uri.get_param('foo', None), None) 222 self.assertEqual(uri.get_param('bar'), params.get('bar'))223225 to_quote = '12345 6789' 226 quoted = '12345%206789' 227 self.assertEqual(media_uri.quote(to_quote), quoted) 228 229 to_quote = '1 2 3' 230 quoted = '1%202%203' 231 self.assertEqual(media_uri.quote(to_quote), quoted) 232 233 to_quote = ['1 ', '2 ', '3 '] 234 quoted = ['1%20', '2%20', '3%20'] 235 self.assertEqual(media_uri.quote(to_quote), quoted) 236 237 to_quote = {'1' : 'one', '2' : ' two ', '3': ' three '} 238 quoted = {'1' : 'one', '2': '%20two%20', '3' : '%20three%20'} 239 self.assertEqual(media_uri.quote(to_quote), quoted)240242 to_quote = '12345 6789' 243 quoted = '12345 6789' 244 self.assertEqual(media_uri.quote(to_quote, not_quote=' '), quoted) 245 246 to_quote = '12345 67/89' 247 quoted = '12345%2067/89' 248 self.assertEqual(media_uri.quote(to_quote, not_quote='/'), quoted)249251 uri = media_uri.MediaUri("file:///test/foo\\x") 252 self.assertEqual(str(uri), 'file:///test/foo/x') 253 254 parts = {'scheme': 'file', 'path': "/test/foo\\x"} 255 uri = media_uri.MediaUri(parts) 256 self.assertEqual(str(uri), 'file:///test/foo/x')257 258260 unquoted = '12345 6789' 261 to_unquote = '12345%206789' 262 self.assertEqual(media_uri.unquote(to_unquote), unquoted) 263 264 unquoted = '1 2 3' 265 to_unquote = '1%202%203' 266 self.assertEqual(media_uri.unquote(to_unquote), unquoted) 267 268 unquoted = ['1 ', '2 ', '3 '] 269 to_unquote = ['1%20', '2%20', '3%20'] 270 self.assertEqual(media_uri.unquote(to_unquote), unquoted) 271 272 unquoted = {'1' : 'one', '2' : ' two ', '3': ' three '} 273 to_unquote = {'1' : 'one', '2': '%20two%20', '3' : '%20three%20'} 274 self.assertEqual(media_uri.unquote(to_unquote), unquoted) 275 276 unquoted = u'bj\xf6rk' 277 to_unquote = 'bj%C3%B6rk' 278 self.assertEqual(media_uri.unquote(to_unquote), unquoted)279281 location = u'file://./test/toto' 282 uri = media_uri.MediaUri(location) 283 cwd = os.getcwd() 284 if platform.system() == 'Windows': 285 cwd = '/' + cwd.replace('\\', '/') 286 287 self.assertEqual(repr(uri), u'file://%s/test/toto' % cwd)288290 uri_parts = {} 291 uri_parts['scheme'] = 'scheme' 292 uri_parts['user'] = 'user' 293 uri_parts['password'] = 'password' 294 uri_parts['host'] = 'host.com' 295 uri_parts['port'] = 80 296 uri_parts['path'] = '/test.html' 297 uri_parts['fragment'] = 'truc' 298 uri_parts['params'] = {} 299 uri_parts['params']['param1'] = '1' 300 uri_parts['params']['param2'] = '2' 301 uri = media_uri.MediaUri(uri_parts) 302 loc = u'scheme://user:password@host.com:80/test.html?param2=2¶m1=1#truc' 303 self.assertEqual(repr(uri), loc) 304 305 uri_parts = {} 306 uri_parts['scheme'] = 'scheme' 307 uri_parts['user'] = 'user' 308 uri_parts['password'] = 'password' 309 uri_parts['host'] = 'host.com' 310 uri_parts['port'] = 80 311 uri_parts['path'] = u'/test- † -html' 312 uri_parts['fragment'] = 'truc' 313 uri_parts['params'] = {} 314 uri_parts['params']['param1'] = '1' 315 uri_parts['params']['param2'] = '2' 316 uri = media_uri.MediaUri(uri_parts) 317 loc = u'scheme://user:password@host.com:80/test- † -html?param2=2¶m1=1#truc' 318 # self.assertEqual(uri.path,u'/test- † -html') 319 self.assertEqual(repr(uri), loc.encode('utf-8'))320322 uri = media_uri.MediaUri({'scheme':'file', 'path': u'/tmp'}) 323 loc = u'file:///tmp' 324 self.assertEqual(repr(uri), loc) 325 self.assertEqual(str(uri), str(loc))326328 loc = u'file:///truc/bidule' 329 uri = media_uri.MediaUri(loc) 330 uri.label = 'LABEL' 331 self.assertEqual(uri.label, 'LABEL') 332 loc = u'file:///truc/bidule' 333 uri = media_uri.MediaUri(loc) 334 self.assertEqual(uri.label, 'bidule') 335 loc = u'file:///truc/bidule/' 336 uri = media_uri.MediaUri(loc) 337 self.assertEqual(uri.label, 'bidule') 338 339 location = 'http://mydomainname/foo_3245345.jpg' 340 uri = media_uri.MediaUri(location) 341 self.assertEqual(unicode(uri), location) 342 uri.label = 'Blabla Group & Ro' 343 self.assertEqual(uri.label, 'Blabla Group & Ro')344346 loc = u'file:///truc' 347 uri = media_uri.MediaUri(loc) 348 loc2 = u'file:///' 349 uri2 = media_uri.MediaUri(loc2) 350 self.assertEqual(repr(uri.parent), repr(uri2)) 351 loc = u'file:///truc/bidule' 352 uri = media_uri.MediaUri(loc) 353 loc2 = u'file:///truc/' 354 uri2 = media_uri.MediaUri(loc2) 355 self.assertEqual(repr(uri.parent), repr(uri2)) 356 loc = u'file:///truc/bidule/index.html' 357 uri = media_uri.MediaUri(loc) 358 loc2 = u'file:///truc/bidule/' 359 uri2 = media_uri.MediaUri(loc2) 360 self.assertEqual(repr(uri.parent), repr(uri2)) 361 loc = u'file:///truc/' 362 uri = media_uri.MediaUri(loc) 363 loc2 = u'file:///' 364 uri2 = media_uri.MediaUri(loc2) 365 self.assertEqual(repr(uri.parent), repr(uri2)) 366 loc = u'file:///truc/index.html?label=seemsSo' 367 uri = media_uri.MediaUri(loc) 368 loc2 = u'file:///truc/' 369 uri2 = media_uri.MediaUri(loc2) 370 self.assertEqual(repr(uri.parent), repr(uri2))371 372374 loc = u'file:///truc' 375 uri = media_uri.MediaUri(loc) 376 self.assertEqual(uri.filename, u'truc') 377 378 loc = u'file:///truc/' 379 uri = media_uri.MediaUri(loc) 380 self.assertEqual(uri.filename, u'') 381 382 loc = u'file:///truc/foo.mp3' 383 uri = media_uri.MediaUri(loc) 384 self.assertEqual(uri.filename, u'foo.mp3') 385 386 loc = u'uri://path/to/foo?label=bar' 387 uri = media_uri.MediaUri(loc) 388 self.assertEqual(uri.filename, u'foo') 389 390 loc = u'uri://thefirst' 391 uri = media_uri.MediaUri(loc) 392 self.assertEqual(uri.host, u'thefirst')393395 loc = u'file:///truc' 396 uri = media_uri.MediaUri(loc) 397 joined = media_uri.MediaUri(u'file:///truc/foo.avi') 398 new_uri = uri.join(u'foo.avi') 399 self.assertEqual(new_uri.path, joined.path) 400 self.assertEqual(new_uri, joined) 401 402 uri = media_uri.MediaUri(u'file:///tmp/') 403 joined = media_uri.MediaUri(u'file:///tmp/foo.avi') 404 new_uri = uri.join('foo.avi') 405 self.assertEqual(new_uri.path, joined.path) 406 self.assertEqual(new_uri, joined)407409 loc = u'file:///truc' 410 uri = media_uri.MediaUri(loc) 411 self.assertEqual(uri.extension, '') 412 413 loc = u'file:///truc.foo' 414 uri = media_uri.MediaUri(loc) 415 self.assertEqual(uri.extension, 'foo') 416 417 loc = u'file:///truc.BAR' 418 uri = media_uri.MediaUri(loc) 419 self.assertEqual(uri.extension, 'bar')420422 root_loc1 = 'file:///' 423 root_uri1 = media_uri.MediaUri(root_loc1) 424 self.assertEqual(str(root_uri1), root_loc1) 425 if platform.system() == 'Windows': 426 self.assertEqual(root_uri1.path, '') 427 else: 428 self.assertEqual(root_uri1.path, '/') 429 430 431 root_loc2 = 'file://' 432 root_uri2 = media_uri.MediaUri(root_loc2) 433 self.assertEqual(str(root_uri2), 'file:///') 434 if platform.system() == 'Windows': 435 self.assertEqual(root_uri2.path, '') 436 else: 437 self.assertEqual(root_uri2.path, '/')438440 loc = u'file:///truc.foo/bidule' 441 uri = media_uri.MediaUri(loc) 442 443 self.failUnless(isinstance(uri.label, unicode)) 444 self.assertEqual(uri.label, u"bidule") 445 446 uri.label = "test" 447 self.failUnless(isinstance(uri.label, unicode)) 448 self.assertEqual(uri.label, u"test") 449 450 uri.label = u"truc" 451 self.failUnless(isinstance(uri.label, unicode)) 452 self.assertEqual(uri.label, u"truc")453455 loc = u'http://example.net/?ciao=miao' 456 uri1 = media_uri.MediaUri(loc) 457 uri2 = media_uri.MediaUri(uri1) 458 self.assertEqual(repr(uri1), repr(uri2)) 459 460 # change a parameter in uri2, should not change uri1 461 uri2.set_param('ciao', 'bao') 462 self.assertEqual(uri2.get_param('ciao'), 'bao') 463 self.assertEqual(uri1.get_param('ciao'), 'miao')464 465 if platform.system() == 'Windows': 466 test_smb.skip = 'not implemented for windows'
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0beta1 on Wed Jan 16 19:11:09 2008 | http://epydoc.sourceforge.net |