Packages
wallaby
0.19.2
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/phantom/server/server_state.ex
defmodule Wallaby.Phantom.Server.ServerState do
@moduledoc false
alias Wallaby.Driver.ExternalCommand
alias Wallaby.Driver.Utils
@type port_number :: 0..65_535
@type os_pid :: non_neg_integer
@type t :: %__MODULE__{
workspace_path: String.t,
port_number: port_number,
phantom_path: String.t,
phantom_args: [String.t],
wrapper_script_port: port | nil,
wrapper_script_os_pid: os_pid | nil,
phantom_os_pid: os_pid | nil,
}
defstruct [
:workspace_path,
:port_number,
:phantom_path,
:phantom_args,
:wrapper_script_port,
:wrapper_script_os_pid,
:phantom_os_pid]
@type workspace_path :: String.t
@type new_opt ::
{:port_number, port_number} |
{:phantom_path, String.t} |
{:phantom_args, [String.t] | String.t}
@spec new(workspace_path, [new_opt]) :: t
def new(workspace_path, params \\ []) do
%__MODULE__{
workspace_path: workspace_path,
port_number: Keyword.get_lazy(params, :port_number,
&Utils.find_available_port/0),
phantom_path: Keyword.get_lazy(params, :phantom_path,
&Wallaby.phantomjs_path/0),
phantom_args: params
|> Keyword.get_lazy(:phantom_args, &phantom_args_from_env/0)
|> normalize_phantomjs_args,
}
end
@spec base_url(t) :: String.t
def base_url(%__MODULE__{port_number: port_number}) do
"http://localhost:#{port_number}/"
end
@spec external_command(t) :: ExternalCommand.t
def external_command(%__MODULE__{} = state) do
%ExternalCommand{
executable: state.phantom_path,
args: [
"--webdriver=#{state.port_number}",
"--local-storage-path=#{local_storage_path(state)}",
] ++ state.phantom_args
}
end
@spec local_storage_path(t) :: String.t
def local_storage_path(%__MODULE__{workspace_path: workspace_path}) do
Path.join(workspace_path, "local_storage")
end
@spec wrapper_script_path(t) :: charlist
def wrapper_script_path(%__MODULE__{workspace_path: workspace_path}) do
workspace_path |> Path.join("wrapper") |> to_charlist
end
@spec phantom_args_from_env :: [String.t] | String.t
defp phantom_args_from_env do
Application.get_env(:wallaby, :phantomjs_args, "")
end
@spec normalize_phantomjs_args(String.t | [String.t]) :: [String.t]
defp normalize_phantomjs_args(args) when is_binary(args) do
String.split(args)
end
defp normalize_phantomjs_args(args) when is_list(args), do: args
end