Skip to content

Commit f9d7adb

Browse files
committed
Introduce register_test/6 to speed up test definition
1 parent f1721c8 commit f9d7adb

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

lib/ex_unit/lib/ex_unit/case.ex

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,17 @@ defmodule ExUnit.Case do
345345

346346
var = Macro.escape(var)
347347
contents = Macro.escape(contents, unquote: true)
348-
349-
quote bind_quoted: [var: var, contents: contents, message: message] do
350-
name = ExUnit.Case.register_test(__ENV__, :test, message, [])
348+
%{module: mod, file: file, line: line} = __CALLER__
349+
350+
quote bind_quoted: [
351+
var: var,
352+
contents: contents,
353+
message: message,
354+
mod: mod,
355+
file: file,
356+
line: line
357+
] do
358+
name = ExUnit.Case.register_test(mod, file, line, :test, message, [])
351359
def unquote(name)(unquote(var)), do: unquote(contents)
352360
end
353361
end
@@ -366,8 +374,10 @@ defmodule ExUnit.Case do
366374
367375
"""
368376
defmacro test(message) do
377+
%{module: mod, file: file, line: line} = __CALLER__
378+
369379
quote bind_quoted: binding() do
370-
name = ExUnit.Case.register_test(__ENV__, :test, message, [:not_implemented])
380+
name = ExUnit.Case.register_test(mod, file, line, :test, message, [:not_implemented])
371381
def unquote(name)(_), do: flunk("Not implemented")
372382
end
373383
end
@@ -508,7 +518,7 @@ defmodule ExUnit.Case do
508518
display. You can use `ExUnit.plural_rule/2` to set a custom
509519
pluralization.
510520
"""
511-
def register_test(%{module: mod, file: file, line: line}, test_type, name, tags) do
521+
def register_test(mod, file, line, test_type, name, tags) do
512522
unless Module.has_attribute?(mod, :ex_unit_tests) do
513523
raise "cannot define #{test_type}. Please make sure you have invoked " <>
514524
"\"use ExUnit.Case\" in the current module"
@@ -569,6 +579,17 @@ defmodule ExUnit.Case do
569579
name
570580
end
571581

582+
@doc """
583+
Reigsters a test with the given environment.
584+
585+
This function is deprecated in favor of register_test/6 which performs
586+
better under tight loops by avoiding `__ENV__`.
587+
"""
588+
@doc deprecated: "Use register_test/6 instead"
589+
def register_test(%{module: mod, file: file, line: line}, test_type, name, tags) do
590+
register_test(mod, file, line, test_type, name, tags)
591+
end
592+
572593
@doc """
573594
Registers a new attribute to be used during `ExUnit.Case` tests.
574595

0 commit comments

Comments
 (0)