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