Skip to content

Commit 4d6b831

Browse files
committed
add tests for component Slider
1 parent f87d6d8 commit 4d6b831

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
#
2+
# Created by Boyd Multerer on September 18, 2018
3+
# Copyright © 2018 Kry10 Industries. All rights reserved.
4+
#
5+
6+
defmodule Scenic.Component.Input.SliderTest do
7+
use ExUnit.Case, async: true
8+
doctest Scenic
9+
10+
# alias Scenic.Component
11+
alias Scenic.Graph
12+
# alias Scenic.Primitive
13+
alias Scenic.ViewPort
14+
alias Scenic.Component.Input.Slider
15+
16+
@extents {0, 100}
17+
@initial_value 2
18+
@data {@extents, @initial_value}
19+
20+
@state %{
21+
graph: Graph.build(),
22+
value: @initial_value,
23+
extents: @extents,
24+
width: 300,
25+
id: :test_id,
26+
tracking: false
27+
}
28+
29+
30+
# ============================================================================
31+
# info
32+
33+
test "info works" do
34+
assert is_bitstring(Slider.info(:bad_data))
35+
assert Slider.info(:bad_data) =~ ":bad_data"
36+
end
37+
38+
# ============================================================================
39+
# verify
40+
41+
test "verify passes valid data" do
42+
assert Slider.verify({{0,100}, 10}) == {:ok, {{0,100}, 10} }
43+
assert Slider.verify({{0.1,100.3}, 10.4}) == {:ok, {{0.1,100.3}, 10.4} }
44+
assert Slider.verify({[:red, :green, :blue], :green}) == {:ok, {[:red, :green, :blue], :green} }
45+
end
46+
47+
test "verify fails invalid data" do
48+
assert Slider.verify(:banana) == :invalid_data
49+
assert Slider.verify({{0,100}, 101}) == :invalid_data
50+
assert Slider.verify({{0,100}, -1}) == :invalid_data
51+
assert Slider.verify({{100,0}, 10}) == :invalid_data
52+
53+
assert Slider.verify({{0.1,100.2}, 101.0}) == :invalid_data
54+
assert Slider.verify({{0.4,100.2}, 0.1}) == :invalid_data
55+
assert Slider.verify({{100.2,0.4}, 10.1}) == :invalid_data
56+
57+
# mixed integer and float
58+
assert Slider.verify({{0,100.1}, 10}) == :invalid_data
59+
assert Slider.verify({{0.1,100}, 10}) == :invalid_data
60+
assert Slider.verify({{0,100}, 10.3}) == :invalid_data
61+
62+
# list where initial is not in list
63+
assert Slider.verify({[:red, :green, :blue], :yellow}) == :invalid_data
64+
end
65+
66+
# ============================================================================
67+
# init
68+
69+
test "init works with simple data" do
70+
{:ok, state} = Slider.init(@data, styles: %{}, id: :test_id)
71+
%Graph{} = state.graph
72+
assert state.value == @initial_value
73+
assert state.extents == @extents
74+
assert state.id == :test_id
75+
assert state.tracking == :false
76+
end
77+
78+
# ============================================================================
79+
# handle_input
80+
81+
test "handle_input {:cursor_button, :press" do
82+
self = self()
83+
context = %ViewPort.Context{viewport: self}
84+
Process.put(:parent_pid, self)
85+
86+
{:noreply, state} =
87+
Slider.handle_input({:cursor_button, {:left, :press, nil, {103, 0}}}, context, %{
88+
@state
89+
| tracking: false
90+
})
91+
assert state.tracking
92+
assert state.value != @state.value
93+
94+
# confirm the input was captured
95+
assert_receive({:"$gen_cast", {:capture_input, ^context, [:cursor_button, :cursor_pos]}})
96+
# confirm the graph was pushed
97+
assert_receive({:"$gen_cast", {:push_graph, _, _, _}})
98+
99+
# confirm the value change was sent
100+
assert_receive({:"$gen_cast", {:event, {:value_changed, :test_id, 34}, ^self}})
101+
end
102+
103+
test "handle_input {:cursor_button, :release" do
104+
self = self()
105+
context = %ViewPort.Context{viewport: self}
106+
Process.put(:parent_pid, self)
107+
108+
{:noreply, state} =
109+
Slider.handle_input({:cursor_button, {:left, :release, nil, {13, 0}}}, context, %{
110+
@state
111+
| tracking: true
112+
})
113+
refute state.tracking
114+
115+
# confirm the input was released
116+
assert_receive({:"$gen_cast", {:release_input, [:cursor_button, :cursor_pos]}})
117+
118+
# confirm the value change was not sent
119+
refute_receive({:"$gen_cast", {:event, {:value_changed, _, _}, _}})
120+
end
121+
122+
test "handle_input {:cursor_pos," do
123+
self = self()
124+
context = %ViewPort.Context{viewport: self}
125+
Process.put(:parent_pid, self)
126+
127+
{:noreply, state} =
128+
Slider.handle_input({:cursor_pos, {103, 0}}, context, %{
129+
@state
130+
| tracking: true
131+
})
132+
assert state.tracking
133+
assert state.value != @state.value
134+
135+
# confirm the graph was pushed
136+
assert_receive({:"$gen_cast", {:push_graph, _, _, _}})
137+
138+
# confirm the value change was sent
139+
assert_receive({:"$gen_cast", {:event, {:value_changed, :test_id, 34}, ^self}})
140+
end
141+
142+
end

0 commit comments

Comments
 (0)