1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
open! Core
open! Import
module Result_spec = struct
include Bonsai_test.Result_spec
let vdom (type result) ?filter_printed_attributes get_vdom =
(module struct
type t = result
include No_incoming
let view result =
result
|> get_vdom
|> Virtual_dom_test_helpers.Node_helpers.unsafe_convert_exn
|> Virtual_dom_test_helpers.Node_helpers.to_string_html ?filter_printed_attributes
;;
end : S
with type t = result
and type incoming = Nothing.t)
;;
end
module Handle = struct
include Bonsai_test.Handle
open Virtual_dom_test_helpers
let get_element handle ~get_vdom ~selector =
let node = handle |> result |> get_vdom |> Node_helpers.unsafe_convert_exn in
Node_helpers.select_first_exn node ~selector
;;
let click_on ?shift_key_down ?alt_key_down ?ctrl_key_down handle ~get_vdom ~selector =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.click_on
element
?shift_key_down
?alt_key_down
?ctrl_key_down
;;
let set_checkbox handle ~get_vdom ~selector ~checked =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.set_checkbox element ~checked
;;
let submit_form handle ~get_vdom ~selector =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.submit_form element
;;
let focus handle ~get_vdom ~selector =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.focus element
;;
let change handle ~get_vdom ~selector ~value =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.change element ~value
;;
let blur handle ~get_vdom ~selector =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.blur element
;;
let mousemove handle ~get_vdom ~selector =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.mousemove element
;;
let input_text handle ~get_vdom ~selector ~text =
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.input_text element ~text
;;
let keydown ?shift_key_down ?alt_key_down ?ctrl_key_down handle ~get_vdom ~selector ~key
=
let element = get_element handle ~get_vdom ~selector in
Node_helpers.User_actions.keydown
?shift_key_down
?alt_key_down
?ctrl_key_down
element
~key
;;
let trigger_hook handle ~get_vdom ~selector ~name type_id arg =
get_element handle ~get_vdom ~selector
|> Node_helpers.trigger_hook ~type_id ~name ~arg
;;
let get_hook_value handle ~get_vdom ~selector ~name type_id =
get_element handle ~get_vdom ~selector |> Node_helpers.get_hook_value ~type_id ~name
;;
module Bulk_size_tracker = struct
open Bonsai_web_ui_element_size_hooks
type change =
{ selector : string
; width : float
; height : float
}
let change_sizes handle ~get_vdom changes =
Bulk_size_tracker.For_testing.change_sizes
(List.map changes ~f:(fun { selector; height; width } ->
( get_hook_value
handle
~get_vdom
~selector
~name:Bulk_size_tracker.For_testing.hook_name
Bulk_size_tracker.For_testing.type_id
, { Bulk_size_tracker.Dimensions.width; height } )))
;;
end
module Drag_and_drop = struct
let run handle ~get_vdom ~name action =
trigger_hook
handle
~get_vdom
~selector:[%string "[data-dnd-name=%{name}]"]
~name:"dnd-test-hook"
Bonsai_web_ui_drag_and_drop.For_testing.type_id
action
;;
end
end