Packages
vtc
0.9.0
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.9
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.2
0.16.1
0.16.0
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.15
0.13.14
0.13.13
0.13.12
0.13.11
0.13.10
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.10
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
A SMPTE timecode library for Elixir
Current section
Files
Jump to
Current section
Files
lib/utils/test_setups.ex
defmodule Vtc.TestSetups do
@moduledoc false
alias Vtc.Framerate
alias Vtc.Rates
alias Vtc.Source.Frames
alias Vtc.Timecode
# Common utilities for ExUnit tests.
@spec test_id(String.t()) :: String.t()
def test_id(test_name), do: :md5 |> :crypto.hash(test_name) |> Base.encode16()
@doc """
Extracts a map in `:test_case` and merges it into the top-level context.
"""
@spec setup_test_case(%{optional(:test_case) => map()}) :: map()
def setup_test_case(%{test_case: test_case} = context), do: Map.merge(context, test_case)
def setup_test_case(context), do: context
@doc """
Sets up timecodes found in any context fields listed in the `:timecodes` context
field.
"""
@spec setup_timecodes(map()) :: Keyword.t()
def setup_timecodes(context) do
timecode_fields = Map.get(context, :timecodes, [])
timecodes = Map.take(context, timecode_fields)
Enum.map(timecodes, fn {field_name, value} -> {field_name, setup_timecode(value)} end)
end
@spec setup_timecode(Frames.t() | {Frames.t(), Framerate.t()}) :: Timecode.t()
defp setup_timecode({frames, rate}), do: Timecode.with_frames!(frames, rate)
defp setup_timecode(frames), do: setup_timecode({frames, Rates.f23_98()})
end