Package elisa :: Package core :: Package tests :: Module test_media_uri
[hide private]
[frames] | no frames]

Source Code for Module elisa.core.tests.test_media_uri

  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 
 20   
21 -class TestMediaURI(ElisaTestCase):
22 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 ] 37
38 - def test_samples(self):
39 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)
59
60 - def test_port(self):
61 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)
69
70 - def test_windows_path(self):
71 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'/')
106
107 - def test_escape(self):
108 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')
119
120 - def test_smb(self):
121 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)
133
134 - def test_unicode(self):
135 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)) 156
157 - def test_no_unicode(self):
158 u = 'file:///Vidéos' 159 uri = media_uri.MediaUri(u) 160 self.assertEqual(unicode(uri), unicode(u, 'utf-8'))
161
162 - def test_parameters(self):
163 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'))
223
224 - def test_quoting(self):
225 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)
240
241 - def test_not_quote(self):
242 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)
249
250 - def test_back_slash(self):
251 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 258
259 - def test_unquoting(self):
260 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)
279
280 - def test_relative(self):
281 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)
288
289 - def test_uri_parts(self):
290 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&param1=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&param1=1#truc' 318 # self.assertEqual(uri.path,u'/test- † -html') 319 self.assertEqual(repr(uri), loc.encode('utf-8'))
320
321 - def test_partial_uri_parts(self):
322 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))
326
327 - def test_label(self):
328 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')
344
345 - def test_parent(self):
346 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 372
373 - def test_filename(self):
374 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')
393
394 - def test_join(self):
395 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)
407
408 - def test_extension(self):
409 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')
420
421 - def test_root_file_scheme(self):
422 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, '/')
438
439 - def test_label(self):
440 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")
453
454 - def test_uri_from_uri(self):
455 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'
467