-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmod_hsed_docs_test.hsp
231 lines (170 loc) · 6.18 KB
/
mod_hsed_docs_test.hsp
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
; LICENSE: CC0-1.0
; v0
; 実行して assert で止まらなければ OK。
; ginger run mod_hsed_docs_test.hsp
#include "hsp3utf.as"
#include "mod_hsed_docs.hsp"
#module m_hsed_docs_test
#const true 1
#const false 0
#deffunc hsed_docs_test_init
dim s_tab_count
dim s_footy_ids
sdim s_file_paths
sdim s_texts
dim s_text_lens
dim s_doc_ids
dim s_doc_tab_ids
dim s_doc_count
dim s_event_kinds
sdim s_event_uris
dim s_event_versions
sdim s_event_texts
dim s_event_count
return
#deffunc hsed_docs_test_diffing_setup
hsed_docs_init
hsed_docs_test_init
; 初期状態
s_tab_count = 2
s_footy_ids = 1, 2
s_file_paths = "C:/1.hsp", "C:/2.hsp"
s_texts = "mes 1", "mes 22"
s_text_lens = strlen(s_texts(0)), strlen(s_texts(1))
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
; 2つのファイルはどちらも dirty のはず。
hsed_docs_emit_dirty_docs s_doc_ids, s_doc_tab_ids, s_doc_count
assert s_doc_count == 2
assert s_doc_ids(0) != s_doc_ids(1)
assert s_doc_tab_ids(0) == 0
assert s_doc_tab_ids(1) == 1
; テキストを設定する。
repeat s_doc_count
hsed_docs_set_doc_text s_doc_ids(cnt), s_texts(s_doc_tab_ids(cnt))
loop
; opened イベントが観測されるはず。
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 2
assert s_event_kinds(0) == hsed_docs_k_doc_opened
assert s_event_uris(0) == "file:///C:/1.hsp"
assert s_event_kinds(1) == hsed_docs_k_doc_opened
assert s_event_uris(1) == "file:///C:/2.hsp"
return
#deffunc hsed_docs_test_no_diff
hsed_docs_test_diffing_setup
; 状態が変化しなければイベントが発生しないことを確認する。
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
hsed_docs_emit_dirty_docs s_doc_ids, s_doc_tab_ids, s_doc_count
assert s_doc_count == 0
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 0
return
#deffunc hsed_docs_test_one_opened_doc
hsed_docs_test_diffing_setup
; 新しいタブを開く。
s_footy_ids(s_tab_count) = 3
s_file_paths(s_tab_count) = "C:/3.hsp"
s_texts(s_tab_count) = "mes 333"
s_text_lens(s_tab_count) = strlen(s_texts(s_tab_count))
s_tab_count++
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
; opened イベントが観測されるはず。
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 1
assert s_event_kinds(0) == hsed_docs_k_doc_opened
assert s_event_uris(0) == "file:///C:/3.hsp"
return
#deffunc hsed_docs_test_one_changed_doc
hsed_docs_test_diffing_setup
; テキストの長さを変更する。
s_texts(1) = "print 22"
s_text_lens(1) = strlen(s_texts(1))
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
; dirty になるはず。
hsed_docs_emit_dirty_docs s_doc_ids, s_doc_tab_ids, s_doc_count
assert s_doc_count == 1
assert s_doc_tab_ids(0) == 1
; テキストを設定する。
hsed_docs_set_doc_text s_doc_ids(0), s_texts(s_doc_tab_ids(0))
; changed イベントが観測されるはず。
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 1
assert s_event_kinds(0) == hsed_docs_k_doc_changed
assert s_event_uris(0) == "file:///C:/2.hsp"
return
#deffunc hsed_docs_test_one_closed_doc
hsed_docs_test_diffing_setup
; タブを閉じる。
s_tab_count--
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
; closed イベントが観測されるはず。
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 1
assert s_event_kinds(0) == hsed_docs_k_doc_closed
assert s_event_uris(0) == "file:///C:/2.hsp"
return
#deffunc hsed_docs_test_three_doc_events
hsed_docs_test_diffing_setup
; 1 を変更し、2 を閉じ、3, 4 を開く。
s_tab_count = 3
s_file_paths = "C:/3.hsp", "C:/1.hsp", "C:/4.hsp"
s_texts = "mes 333", "print 1", "mes 4444"
s_footy_ids = 3, 1, 4
repeat s_tab_count
s_text_lens(cnt) = strlen(s_texts(cnt))
loop
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
; 1, 3, 4 が dirty になるはず。
hsed_docs_emit_dirty_docs s_doc_ids, s_doc_tab_ids, s_doc_count
assert s_doc_count == 3
assert s_doc_tab_ids(0) == 1
assert s_doc_tab_ids(1) == 0
assert s_doc_tab_ids(2) == 2
; テキストを設定する。
repeat s_tab_count
hsed_docs_set_doc_text s_doc_ids(cnt), s_texts(s_doc_tab_ids(cnt))
loop
; 複数のイベントが観測されるはず。
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 4
assert s_event_kinds(0) == hsed_docs_k_doc_closed
assert s_event_uris(0) == "file:///C:/2.hsp"
assert s_event_kinds(1) == hsed_docs_k_doc_opened
assert s_event_uris(1) == "file:///C:/3.hsp"
assert s_event_kinds(2) == hsed_docs_k_doc_opened
assert s_event_uris(2) == "file:///C:/4.hsp"
assert s_event_kinds(3) == hsed_docs_k_doc_changed
assert s_event_uris(3) == "file:///C:/1.hsp"
return
#deffunc hsed_docs_test_nonfile_tabs
hsed_docs_init
s_tab_count = 1
s_footy_ids = 1
s_file_paths = ""
s_texts = "mes 1"
s_text_lens = strlen(s_texts(0))
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 1
assert s_event_kinds(0) == hsed_docs_k_doc_opened
assert s_event_uris(0) == "hsed:///footies/1/"
hsed_docs_update_tabs s_tab_count, s_footy_ids, s_file_paths, s_text_lens
hsed_docs_emit_doc_changes s_event_kinds, s_event_uris, s_event_versions, s_event_texts, s_event_count
assert s_event_count == 0
return
#deffunc hsed_docs_test_main
hsed_docs_test_init
hsed_docs_test_no_diff
hsed_docs_test_one_opened_doc
hsed_docs_test_one_changed_doc
hsed_docs_test_one_closed_doc
hsed_docs_test_three_doc_events
hsed_docs_test_nonfile_tabs
; FIXME: hover イベントのテスト
return
#global
hsed_docs_test_main
mes "passed"
await 500
end
end