Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,6 @@ jobs:
fail-fast: false
matrix:
include:
- elixir: 1.8.2
otp: 21.3.8.17
- elixir: 1.9.4
otp: 21.3.8.17
warnings_as_errors: true # not 1.10 as its --warnigs-as-errors has bugs https://github.com/elixir-lang/elixir/issues/10073
- elixir: 1.10.4
otp: 21.3.8.17
- elixir: 1.10.4
otp: 23.1.1
- elixir: 1.11.1
otp: 21.3.8.17
- elixir: 1.11.4
Expand Down
6 changes: 4 additions & 2 deletions lib/surface/api.ex
Original file line number Diff line number Diff line change
Expand Up @@ -421,9 +421,11 @@ defmodule Surface.API do
end

defp validate_opt(_func, _name, _type, _opts, :values, value, _caller)
when not is_list(value) do
when not is_list(value) and not is_struct(value, Range) do
{:error,
"invalid value for option :values. Expected a list of values, got: #{inspect(value)}"}
"invalid value for option :values. Expected a list of values or a Range, got: #{
inspect(value)
}"}
end

defp validate_opt(:prop, _name, _type, _opts, :accumulate, value, _caller)
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ defmodule Surface.MixProject do
[
app: :surface,
version: @version,
elixir: "~> 1.8",
elixir: "~> 1.11",
description: "A component based library for Phoenix LiveView",
elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:phoenix] ++ Mix.compilers(),
Expand Down
11 changes: 10 additions & 1 deletion test/api_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,20 @@ defmodule Surface.APITest do

test "validate :values" do
code = "prop label, :string, values: 1"
message = ~r/invalid value for option :values. Expected a list of values, got: 1/
message = ~r/invalid value for option :values. Expected a list of values or a Range, got: 1/

assert_raise(CompileError, message, fn -> eval(code) end)
end

test "validate :values when using a range" do
code = """
prop age, :integer, values: 1..100
data items, :integer, values: 1..3
"""

{:ok, _module} = eval(code)
end

test "validate :as in slot" do
code = "slot label, as: \"default_label\""
message = ~r/invalid value for option :as in slot. Expected an atom, got: \"default_label\"/
Expand Down
14 changes: 4 additions & 10 deletions test/components/form/label_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,13 @@ defmodule Surface.Components.Form.LabelTest do
html = render_surface(do: ~H[<Label form={:search} field={:key} />])
assert html =~ ~r[<label for="search_key">(.*)Key(.*)</label>]s

html =
render_surface(
do: ~H[<Label form={:search} field={:key} opts={for: "test_key"} />]
)
html = render_surface(do: ~H[<Label form={:search} field={:key} opts={for: "test_key"} />])

assert html =~ ~r[<label for="test_key">(.*)Key(.*)</label>]s

html =
render_surface(
do:
~H[<Label form={:search} field={:key} class="foo" opts={for: "test_key"} />]
do: ~H[<Label form={:search} field={:key} class="foo" opts={for: "test_key"} />]
)

assert html =~ ~r[<label class="foo" for="test_key">(.*)Key(.*)</label>]s
Expand All @@ -120,8 +116,7 @@ defmodule Surface.Components.Form.LabelTest do

html =
render_surface(
do:
~H[<Label text="Search" form={:search} field={:key} opts={for: "test_key"} />]
do: ~H[<Label text="Search" form={:search} field={:key} opts={for: "test_key"} />]
)

assert html =~ ~r[<label for="test_key">(.*)Search(.*)</label>]s
Expand Down Expand Up @@ -169,8 +164,7 @@ defmodule Surface.Components.Form.LabelTest do
test "with field and inline safe content" do
html =
render_surface(
do:
~H[<Label text={{:safe, "<em>Search</em>"}} form={:search} field={:key} />]
do: ~H[<Label text={{:safe, "<em>Search</em>"}} form={:search} field={:key} />]
)

assert html =~ ~r[<label for="search_key">(.*)<em>Search</em>(.*)</label>]s
Expand Down
3 changes: 1 addition & 2 deletions test/components/link_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,7 @@ defmodule Surface.Components.LinkTest do
html = render_surface(do: ~H[<Link label="foo" to="/javascript:alert(<1>)" />])
assert html =~ ~s[<a href="/javascript:alert(&lt;1&gt;)">foo</a>]

html =
render_surface(do: ~H[<Link label="foo" to={{:safe, "/javascript:alert(<1>)"}} />])
html = render_surface(do: ~H[<Link label="foo" to={{:safe, "/javascript:alert(<1>)"}} />])

assert html =~ ~s[<a href="/javascript:alert(<1>)">foo</a>]

Expand Down