Packages
wallaby
0.19.1
0.31.0
0.30.12
0.30.11
0.30.10
0.30.9
0.30.8
0.30.7
0.30.6
0.30.5
0.30.4
0.30.3
0.30.2
0.30.1
0.30.0
0.29.1
0.29.0
0.28.1
0.28.0
0.27.0
0.26.2
0.26.1
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.0
0.0.1
Concurrent feature tests for elixir
Current section
Files
Jump to
Current section
Files
lib/wallaby/metadata.ex
defmodule Wallaby.Metadata do
@moduledoc false
# Metadata is used to encode information about the browser and test. This
# information is then stored in a User Agent string. The information from the
# test can then be extracted in the application.
@prefix "BeamMetadata"
@regex ~r{#{@prefix} \((.*?)\)}
def append(user_agent, nil), do: user_agent
def append(user_agent, metadata) when is_map(metadata) or is_list(metadata) do
append(user_agent, format(metadata))
end
def append(user_agent, metadata) when is_binary(metadata) do
"#{user_agent}/#{metadata}"
end
@doc """
Formats a string to a valid UserAgent string.
"""
def format(metadata) do
encoded =
{:v1, metadata}
|> :erlang.term_to_binary
|> Base.url_encode64
"#{@prefix} (#{encoded})"
end
def extract(str) do
ua =
str
|> String.split("/")
|> List.last
case Regex.run(@regex, ua) do
[_, metadata] -> parse(metadata)
_ -> %{}
end
end
def parse(encoded_metadata) do
encoded_metadata
|> Base.url_decode64!
|> :erlang.binary_to_term
|> case do
{:v1, metadata} -> metadata
_ -> raise Wallaby.BadMetadata, message: "#{encoded_metadata} is not valid"
end
end
end