From 33bbe9427d8c419d46fc5844c89eca532419777b Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Fri, 30 Apr 2021 09:43:33 -0400 Subject: [PATCH 1/5] Allow ranges to be passed for :list props --- lib/surface/type_handler/list.ex | 2 +- test/properties_test.exs | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/surface/type_handler/list.ex b/lib/surface/type_handler/list.ex index 9c01cd5d..1a0891c8 100644 --- a/lib/surface/type_handler/list.ex +++ b/lib/surface/type_handler/list.ex @@ -31,7 +31,7 @@ defmodule Surface.TypeHandler.List do defp handle_list_expr(name, expr) do quote generated: true do case unquote(expr) do - value when is_list(value) -> + value when is_list(value) or is_struct(value, Range) -> value value -> diff --git a/test/properties_test.exs b/test/properties_test.exs index 2e067a81..c65c71b2 100644 --- a/test/properties_test.exs +++ b/test/properties_test.exs @@ -45,7 +45,8 @@ defmodule Surface.PropertiesTest do def render(assigns) do ~H""" - List?: {is_list(@prop)} + List?: { is_list(@prop) } + Range?: { is_struct(@prop, Range) } value: {inspect(v)} """ end @@ -338,6 +339,7 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true + Range?: false value: 1\ value: 2 """ @@ -355,6 +357,7 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true + Range?: false value: 1\ value: 2 """ @@ -372,6 +375,7 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true + Range?: false value: 1 """ end @@ -413,10 +417,26 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true + Range?: false value: {:a, 1}value: {:b, 2} """ end + test "passing a range" do + html = + render_surface do + ~H""" + + """ + end + + assert html =~ """ + List?: false + Range?: true + value: 1value: 2value: 3 + """ + end + test "passing a keyword list without brackets" do html = render_surface do @@ -427,6 +447,7 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true + Range?: false value: {:a, 1}value: {:b, 2} """ end From dbbb1601b3063abab1fc22e2537e3be9ae8b36b4 Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Sun, 2 May 2021 08:50:38 -0400 Subject: [PATCH 2/5] fix! --- test/properties_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/properties_test.exs b/test/properties_test.exs index c65c71b2..c1aef083 100644 --- a/test/properties_test.exs +++ b/test/properties_test.exs @@ -426,7 +426,7 @@ defmodule Surface.PropertiesTest do html = render_surface do ~H""" - + """ end From 26654a7116e8824fa08f00c7dcf95dd54358c93a Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Sun, 2 May 2021 09:50:52 -0400 Subject: [PATCH 3/5] cast to list --- lib/surface/type_handler/list.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/surface/type_handler/list.ex b/lib/surface/type_handler/list.ex index 1a0891c8..4b2881a9 100644 --- a/lib/surface/type_handler/list.ex +++ b/lib/surface/type_handler/list.ex @@ -32,7 +32,7 @@ defmodule Surface.TypeHandler.List do quote generated: true do case unquote(expr) do value when is_list(value) or is_struct(value, Range) -> - value + Enum.to_list(value) value -> raise "invalid value for property \"#{unquote(name)}\". Expected a :list, got: #{ From 6d238b36cb4146586d13dab23522231f0ea7dd02 Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Sun, 2 May 2021 09:53:44 -0400 Subject: [PATCH 4/5] cast to list tests --- test/properties_test.exs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/test/properties_test.exs b/test/properties_test.exs index c1aef083..59af121e 100644 --- a/test/properties_test.exs +++ b/test/properties_test.exs @@ -46,7 +46,6 @@ defmodule Surface.PropertiesTest do def render(assigns) do ~H""" List?: { is_list(@prop) } - Range?: { is_struct(@prop, Range) } value: {inspect(v)} """ end @@ -339,7 +338,6 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true - Range?: false value: 1\ value: 2 """ @@ -357,7 +355,6 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true - Range?: false value: 1\ value: 2 """ @@ -375,7 +372,6 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true - Range?: false value: 1 """ end @@ -417,7 +413,6 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true - Range?: false value: {:a, 1}value: {:b, 2} """ end @@ -431,8 +426,7 @@ defmodule Surface.PropertiesTest do end assert html =~ """ - List?: false - Range?: true + List?: true value: 1value: 2value: 3 """ end @@ -447,7 +441,6 @@ defmodule Surface.PropertiesTest do assert html =~ """ List?: true - Range?: false value: {:a, 1}value: {:b, 2} """ end From 253154283760930c56cfa2f18c698acd491df132 Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Sun, 2 May 2021 09:56:54 -0400 Subject: [PATCH 5/5] formatting --- test/properties_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/properties_test.exs b/test/properties_test.exs index 59af121e..effce621 100644 --- a/test/properties_test.exs +++ b/test/properties_test.exs @@ -45,7 +45,7 @@ defmodule Surface.PropertiesTest do def render(assigns) do ~H""" - List?: { is_list(@prop) } + List?: {is_list(@prop)} value: {inspect(v)} """ end @@ -421,7 +421,7 @@ defmodule Surface.PropertiesTest do html = render_surface do ~H""" - + """ end