@@ -445,23 +445,14 @@ defmodule ExUnit.Case do
445
445
"""
446
446
defmacro describe ( message , do: block ) do
447
447
quote do
448
- ExUnit.Case . __describe__ ( __MODULE__ , __ENV__ . line , unquote ( message ) )
449
-
450
- try do
448
+ ExUnit.Case . __describe__ ( __MODULE__ , __ENV__ . line , unquote ( message ) , fn ->
451
449
unquote ( block )
452
- after
453
- @ ex_unit_describe nil
454
- Module . delete_attribute ( __MODULE__ , :describetag )
455
-
456
- for attribute <- Module . get_attribute ( __MODULE__ , :ex_unit_registered_describe_attributes ) do
457
- Module . delete_attribute ( __MODULE__ , attribute )
458
- end
459
- end
450
+ end )
460
451
end
461
452
end
462
453
463
454
@ doc false
464
- def __describe__ ( module , line , message ) do
455
+ def __describe__ ( module , line , message , fun ) do
465
456
if Module . get_attribute ( module , :ex_unit_describe ) do
466
457
raise "cannot call \" describe\" inside another \" describe\" . See the documentation " <>
467
458
"for ExUnit.Case.describe/2 on named setups and how to handle hierarchies"
@@ -485,7 +476,17 @@ defmodule ExUnit.Case do
485
476
486
477
Module . put_attribute ( module , :ex_unit_describe , { line , message } )
487
478
Module . put_attribute ( module , :ex_unit_used_describes , message )
488
- :ok
479
+
480
+ try do
481
+ fun . ( )
482
+ after
483
+ Module . put_attribute ( module , :ex_unit_describe , nil )
484
+ Module . delete_attribute ( module , :describetag )
485
+
486
+ for attribute <- Module . get_attribute ( module , :ex_unit_registered_describe_attributes ) do
487
+ Module . delete_attribute ( module , attribute )
488
+ end
489
+ end
489
490
end
490
491
491
492
@ doc false
0 commit comments