Skip to content

Commit 1c8e625

Browse files
committed
Speed up compilation with multiple describe
1 parent f9d7adb commit 1c8e625

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

lib/ex_unit/lib/ex_unit/case.ex

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -445,23 +445,14 @@ defmodule ExUnit.Case do
445445
"""
446446
defmacro describe(message, do: block) do
447447
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 ->
451449
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)
460451
end
461452
end
462453

463454
@doc false
464-
def __describe__(module, line, message) do
455+
def __describe__(module, line, message, fun) do
465456
if Module.get_attribute(module, :ex_unit_describe) do
466457
raise "cannot call \"describe\" inside another \"describe\". See the documentation " <>
467458
"for ExUnit.Case.describe/2 on named setups and how to handle hierarchies"
@@ -485,7 +476,17 @@ defmodule ExUnit.Case do
485476

486477
Module.put_attribute(module, :ex_unit_describe, {line, message})
487478
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
489490
end
490491

491492
@doc false

0 commit comments

Comments
 (0)