@@ -111,7 +111,7 @@ def test_Resource(self, tempdir):
111
111
self .assertEqual (resource .type_ , None )
112
112
self .assertEqual (
113
113
repr (resource ),
114
- 'Resource name="res", depends="None" '
114
+ '< Resource name="res"> '
115
115
)
116
116
117
117
resource = Resource (name = 'res' , resource = 'res.ext' )
@@ -239,7 +239,7 @@ def test_ScriptResource(self, tempdir):
239
239
self .assertEqual (script .nomodule , None )
240
240
self .assertEqual (
241
241
repr (script ),
242
- ' ScriptResource name="js_res", depends="None"'
242
+ """< ScriptResource name="js_res">"""
243
243
)
244
244
self .assertEqual (
245
245
script .render ('https://tld.org' ),
@@ -301,7 +301,7 @@ def test_LinkMixin(self):
301
301
self .assertEqual (link .title , None )
302
302
self .assertEqual (
303
303
repr (link ),
304
- 'LinkMixin name="link_res", depends="None" '
304
+ '< LinkMixin name="link_res"> '
305
305
)
306
306
link .hreflang = 'en'
307
307
link .media = 'screen'
@@ -327,7 +327,7 @@ def test_LinkResource(self):
327
327
self .assertIsInstance (link , LinkMixin )
328
328
self .assertEqual (
329
329
repr (link ),
330
- 'LinkResource name="icon_res", depends="None" '
330
+ '< LinkResource name="icon_res"> '
331
331
)
332
332
link .rel = 'icon'
333
333
link .type_ = 'image/png'
@@ -355,7 +355,7 @@ def test_StyleResource(self):
355
355
self .assertEqual (style .rel , 'stylesheet' )
356
356
self .assertEqual (
357
357
repr (style ),
358
- ' StyleResource name="css_res", depends="None"'
358
+ """< StyleResource name="css_res">"""
359
359
)
360
360
self .assertEqual (style .render ('https://tld.org' ), (
361
361
'<link href="https://tld.org/res.css" media="all" '
@@ -377,7 +377,7 @@ def test_ResourceGroup(self):
377
377
self .assertIsInstance (group , ResourceMixin )
378
378
self .assertEqual (group .name , 'groupname' )
379
379
self .assertEqual (group .members , [])
380
- self .assertEqual (repr (group ), 'ResourceGroup name="groupname"' )
380
+ self .assertEqual (repr (group ), '< ResourceGroup name="groupname"> ' )
381
381
382
382
res = wr .ScriptResource (name = 'name' , resource = 'name.js' )
383
383
group .add (res )
@@ -442,6 +442,115 @@ def test_ResourceGroup(self):
442
442
self .assertEqual (group .members , [])
443
443
self .assertEqual (resource .parent , None )
444
444
445
+ def test_resource_repr (self ):
446
+ res = ResourceMixin (name = 'res' )
447
+ self .assertEqual (
448
+ repr (res ),
449
+ '<ResourceMixin name="res">'
450
+ )
451
+
452
+ # Fallback, if nothing is set.
453
+ res = ResourceMixin ()
454
+ self .assertEqual (
455
+ repr (res ),
456
+ '<ResourceMixin unnamed>'
457
+ )
458
+
459
+ res = ResourceMixin (path = "/a/b/c" )
460
+ self .assertEqual (
461
+ repr (res ),
462
+ '<ResourceMixin path="/a/b/c">'
463
+ )
464
+
465
+ res = Resource (url = "https://example.com" )
466
+ self .assertEqual (
467
+ repr (res ),
468
+ '<Resource url="https://example.com">'
469
+ )
470
+
471
+ # Name takes precendence over all other attributes.
472
+ res = Resource (name = 'res' , path = "/a/b/c" , url = "https://example.com" )
473
+ self .assertEqual (
474
+ repr (res ),
475
+ '<Resource name="res">'
476
+ )
477
+
478
+ # Path takes precendence over url.
479
+ res = Resource (path = "/a/b/c" , url = "https://example.com" )
480
+ self .assertEqual (
481
+ repr (res ),
482
+ '<Resource path="/a/b/c">'
483
+ )
484
+
485
+ # Example with depends
486
+ res = Resource (
487
+ name = 'res' ,
488
+ url = "https://example.com" ,
489
+ depends = "other.ext" ,
490
+ )
491
+ self .assertEqual (
492
+ repr (res ),
493
+ """<Resource name="res", depends="['other.ext']">"""
494
+ )
495
+
496
+ def test_ResourceError (self ):
497
+ with self .assertRaises (wr .ResourceError ) as cm :
498
+ Resource ()
499
+
500
+ self .assertEqual (
501
+ str (cm .exception ),
502
+ 'Either resource or url must be given for resource '
503
+ '<Resource unnamed>'
504
+ )
505
+
506
+ with self .assertRaises (wr .ResourceError ) as cm :
507
+ res = ResourceMixin (name = "res" )
508
+ res .remove ()
509
+
510
+ self .assertEqual (
511
+ str (cm .exception ),
512
+ 'Cannot remove resource or resource group '
513
+ '<ResourceMixin name="res">. It is no member of a resource group.'
514
+ )
515
+
516
+ with self .assertRaises (wr .ResourceError ) as cm :
517
+ res = Resource (url = 'https://example.com' )
518
+ res .file_path
519
+
520
+ self .assertEqual (
521
+ str (cm .exception ),
522
+ 'No directory set on resource <Resource url="https://example.com">'
523
+ )
524
+
525
+ with self .assertRaises (wr .ResourceError ) as cm :
526
+ res = wr .ScriptResource (url = 'https://example.com' )
527
+ res .integrity = True
528
+
529
+ self .assertEqual (
530
+ str (cm .exception ),
531
+ 'Cannot calculate integrity hash from external resource '
532
+ '<ScriptResource url="https://example.com">'
533
+ )
534
+
535
+ with self .assertRaises (wr .ResourceError ) as cm :
536
+ res = wr .ResourceGroup (name = 'okay' )
537
+ res .add (object ())
538
+
539
+ self .assertEqual (
540
+ str (cm .exception ),
541
+ 'Resource group <ResourceGroup name="okay"> can only contain '
542
+ 'instances of ``ResourceGroup`` or ``Resource``'
543
+ )
544
+
545
+ with self .assertRaises (wr .ResourceError ) as cm :
546
+ res = wr .ResourceResolver (None )
547
+
548
+ self .assertEqual (
549
+ str (cm .exception ),
550
+ 'ResourceResolver members can only contain instances of '
551
+ '``ResourceGroup`` or ``Resource``'
552
+ )
553
+
445
554
def test_ResourceConflictError (self ):
446
555
counter = Counter (['a' , 'b' , 'b' , 'c' , 'c' ])
447
556
err = wr .ResourceConflictError (counter )
@@ -452,15 +561,15 @@ def test_ResourceCircularDependencyError(self):
452
561
err = wr .ResourceCircularDependencyError ([resource ])
453
562
self .assertEqual (str (err ), (
454
563
'Resources define circular dependencies: '
455
- '[ Resource name="res1", depends="[\ ' res2\ ' ]"]'
564
+ """[< Resource name="res1", depends="['res2']">]"""
456
565
))
457
566
458
567
def test_ResourceMissingDependencyError (self ):
459
568
resource = Resource (name = 'res' , resource = 'res.ext' , depends = 'missing' )
460
569
err = wr .ResourceMissingDependencyError (resource )
461
570
self .assertEqual (str (err ), (
462
571
'Resource defines missing dependency: '
463
- ' Resource name="res", depends="[\ ' missing\ ' ]"'
572
+ """< Resource name="res", depends="['missing']">"""
464
573
))
465
574
466
575
def test_ResourceResolver__flat_resources (self ):
@@ -687,7 +796,7 @@ def test_GracefulResourceRenderer(self):
687
796
# check if its ours
688
797
self .assertEqual (
689
798
captured .records [0 ].getMessage ().split ('\n ' )[0 ],
690
- 'Failure to render resource "js2"' ,
799
+ """File not found for resource <ScriptResource name= "js2", depends="['js']">"""
691
800
)
692
801
else : # pragma: nocover
693
802
rendered = renderer .render ()
@@ -699,7 +808,7 @@ def test_GracefulResourceRenderer(self):
699
808
'<link href="https://ext.org/styles.css" media="all" '
700
809
'rel="stylesheet" type="text/css" />\n '
701
810
'<script src="https://tld.org/res/script.js"></script>\n '
702
- ' <!-- Failure to render resource "js2" - details in logs -->'
811
+ """ <!-- File not found for resource <ScriptResource name= "js2", depends="['js']"> - details in logs -->"""
703
812
))
704
813
705
814
0 commit comments