Skip to content

Commit 97a0525

Browse files
authored
Fix verify_on_exit!/1 with nimble_ownership (#153)
1 parent c7c41ff commit 97a0525

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

lib/mox.ex

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -780,9 +780,11 @@ defmodule Mox do
780780
@spec verify_on_exit!(term()) :: :ok
781781
def verify_on_exit!(_context \\ %{}) do
782782
pid = self()
783+
NimbleOwnership.set_owner_to_manual_cleanup(@this, pid)
783784

784785
ExUnit.Callbacks.on_exit(Mox, fn ->
785-
verify_mock_or_all!(pid, :all)
786+
__verify_mock_or_all__(pid, :all)
787+
NimbleOwnership.cleanup_owner(@this, pid)
786788
end)
787789
end
788790

@@ -792,7 +794,7 @@ defmodule Mox do
792794
"""
793795
@spec verify!() :: :ok
794796
def verify! do
795-
verify_mock_or_all!(self(), :all)
797+
__verify_mock_or_all__(self(), :all)
796798
end
797799

798800
@doc """
@@ -801,10 +803,12 @@ defmodule Mox do
801803
@spec verify!(t()) :: :ok
802804
def verify!(mock) do
803805
validate_mock!(mock)
804-
verify_mock_or_all!(self(), mock)
806+
__verify_mock_or_all__(self(), mock)
805807
end
806808

807-
defp verify_mock_or_all!(owner_pid, mock_or_all) do
809+
# Made public for testing.
810+
@doc false
811+
def __verify_mock_or_all__(owner_pid, mock_or_all) do
808812
all_expectations = NimbleOwnership.get_owned(@this, owner_pid, _default = %{}, @timeout)
809813

810814
pending =

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ defmodule Mox.MixProject do
3030

3131
defp deps do
3232
[
33-
{:nimble_ownership, "~> 0.2.0"},
33+
{:nimble_ownership, "~> 0.3.0"},
3434
{:ex_doc, "~> 0.16", only: :docs}
3535
]
3636
end

mix.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
55
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
66
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
7-
"nimble_ownership": {:hex, :nimble_ownership, "0.2.0", "5f09a97ce97a873945be4fe52c583f5649954109e7290b11809d7e3271222f96", [:mix], [], "hexpm", "81fa952d95717ca7ee55231f01374078464436aeab49a848121e5602e84cd97e"},
7+
"nimble_ownership": {:hex, :nimble_ownership, "0.3.0", "29514f8779b26f50f9c07109677c98c0cc0b8025e89f82964dafa9cf7d657ec0", [:mix], [], "hexpm", "76c605106bc1e60f5b028b20203a1e0c90b4350b08e4b8a33f68bb50dcb6e837"},
88
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
99
}

test/mox_test.exs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,26 @@ defmodule MoxTest do
638638

639639
Task.await(task)
640640
end
641+
642+
test "raises if the mocks are not called" do
643+
pid = self()
644+
645+
verify_on_exit!()
646+
647+
# This replicates exactly what verify_on_exit/1 does, but it adds an assertion
648+
# in there. There's no easy way to test that something gets raised in an on_exit
649+
# callback.
650+
ExUnit.Callbacks.on_exit(Mox, fn ->
651+
assert_raise Mox.VerificationError, fn ->
652+
Mox.__verify_mock_or_all__(pid, :all)
653+
NimbleOwnership.cleanup_owner({:global, Mox.Server}, pid)
654+
end
655+
end)
656+
657+
set_mox_private()
658+
659+
expect(CalcMock, :add, fn x, y -> x + y end)
660+
end
641661
end
642662

643663
describe "stub/3" do

0 commit comments

Comments
 (0)