Packages
membrane_core
0.12.6
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc1
1.1.2
1.1.1
1.1.0
1.1.0-rc1
1.1.0-rc0
1.0.1
1.0.0
1.0.0-rc1
1.0.0-rc0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
retired
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Membrane Multimedia Framework (Core)
Current section
Files
Jump to
Current section
Files
lib/membrane/testing/mock_resource_guard.ex
defmodule Membrane.Testing.MockResourceGuard do
@moduledoc """
Mock for `Membrane.ResourceGuard`.
Informs the test process about registered cleanup functions and tags.
Works with `Membrane.Testing.Assertions`, for example
`Membrane.Testing.Assertions.assert_resource_guard_register/4`:
iex> guard = #{inspect(__MODULE__)}.start_link_supervised!()
...> Membrane.ResourceGuard.register(guard, fn -> :abc end, tag: :some_tag)
...> import Membrane.Testing.Assertions
...> assert_resource_guard_register(guard, function, :some_tag)
...> function.()
:abc
"""
use GenServer
require Membrane.Core.Message, as: Message
@type options :: [test_process: pid]
@spec child_spec(test_process: pid()) :: Supervisor.child_spec()
def child_spec(options) do
super(options) |> Map.merge(%{restart: :transient, id: {__MODULE__, make_ref()}})
end
@spec start_link(options) :: {:ok, pid}
def start_link(options \\ []) do
options = Keyword.put_new(options, :test_process, self())
GenServer.start_link(__MODULE__, options)
end
@spec start_link_supervised!(options) :: pid
def start_link_supervised!(options \\ []) do
options = Keyword.put_new(options, :test_process, self())
{:ok, pid} = ex_unit_start_supervised({__MODULE__, options})
pid
end
@impl true
def init(options) do
{:ok, Map.new(options)}
end
@impl true
def handle_info(Message.new(:register, [function, options]), state) do
tag = Keyword.fetch!(options, :tag)
send_to_test_process(state, :register, {function, tag})
{:noreply, state}
end
@impl true
def handle_info(Message.new(:unregister, tag), state) do
send_to_test_process(state, :unregister, tag)
{:noreply, state}
end
@impl true
def handle_info(Message.new(:cleanup, tag), state) do
send_to_test_process(state, :cleanup, tag)
{:noreply, state}
end
defp ex_unit_start_supervised(child_spec) do
# It's not a 'normal' call to keep dialyzer quiet
apply(ExUnit.Callbacks, :start_supervised, [child_spec])
end
defp send_to_test_process(%{test_process: test_process}, type, args) do
send(test_process, {__MODULE__, self(), {type, args}})
end
end